Merge "Make XType extend XAnnotated to support type annotations" into androidx-main
diff --git a/activity/activity-compose/api/current.ignore b/activity/activity-compose/api/current.ignore
deleted file mode 100644
index a0610ef..0000000
--- a/activity/activity-compose/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.activity.compose.ActivityComposeUtilsKt:
- Removed class androidx.activity.compose.ActivityComposeUtilsKt
diff --git a/activity/activity-compose/api/restricted_current.ignore b/activity/activity-compose/api/restricted_current.ignore
deleted file mode 100644
index a0610ef..0000000
--- a/activity/activity-compose/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.activity.compose.ActivityComposeUtilsKt:
- Removed class androidx.activity.compose.ActivityComposeUtilsKt
diff --git a/activity/activity-ktx/api/current.ignore b/activity/activity-ktx/api/current.ignore
index f970b04..1c56f4f 100644
--- a/activity/activity-ktx/api/current.ignore
+++ b/activity/activity-ktx/api/current.ignore
@@ -1,9 +1,3 @@
// Baseline format: 1.0
-RemovedClass: androidx.activity.OnBackPressedDispatcherKt:
- Removed class androidx.activity.OnBackPressedDispatcherKt
RemovedClass: androidx.activity.PipHintTrackerKt:
Removed class androidx.activity.PipHintTrackerKt
-
-
-RemovedPackage: androidx.activity.contextaware:
- Removed package androidx.activity.contextaware
diff --git a/activity/activity-ktx/api/restricted_current.ignore b/activity/activity-ktx/api/restricted_current.ignore
index f970b04..1c56f4f 100644
--- a/activity/activity-ktx/api/restricted_current.ignore
+++ b/activity/activity-ktx/api/restricted_current.ignore
@@ -1,9 +1,3 @@
// Baseline format: 1.0
-RemovedClass: androidx.activity.OnBackPressedDispatcherKt:
- Removed class androidx.activity.OnBackPressedDispatcherKt
RemovedClass: androidx.activity.PipHintTrackerKt:
Removed class androidx.activity.PipHintTrackerKt
-
-
-RemovedPackage: androidx.activity.contextaware:
- Removed package androidx.activity.contextaware
diff --git a/activity/activity/api/current.ignore b/activity/activity/api/current.ignore
deleted file mode 100644
index 149cb0c..0000000
--- a/activity/activity/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.activity.result.IntentSenderRequest#CREATOR:
- Field androidx.activity.result.IntentSenderRequest.CREATOR has changed type from android.os.Parcelable.Creator<androidx.activity.result.IntentSenderRequest!> to android.os.Parcelable.Creator<androidx.activity.result.IntentSenderRequest>
diff --git a/activity/activity/api/restricted_current.ignore b/activity/activity/api/restricted_current.ignore
deleted file mode 100644
index 149cb0c..0000000
--- a/activity/activity/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.activity.result.IntentSenderRequest#CREATOR:
- Field androidx.activity.result.IntentSenderRequest.CREATOR has changed type from android.os.Parcelable.Creator<androidx.activity.result.IntentSenderRequest!> to android.os.Parcelable.Creator<androidx.activity.result.IntentSenderRequest>
diff --git a/activity/activity/build.gradle b/activity/activity/build.gradle
index 821f0d8..520cb87 100644
--- a/activity/activity/build.gradle
+++ b/activity/activity/build.gradle
@@ -26,6 +26,7 @@
api(project(":lifecycle:lifecycle-viewmodel"))
api("androidx.savedstate:savedstate:1.2.0")
api(project(":lifecycle:lifecycle-viewmodel-savedstate"))
+ implementation("androidx.profileinstaller:profileinstaller:1.2.1")
implementation("androidx.tracing:tracing:1.0.0")
api(libs.kotlinStdlib)
diff --git a/activity/activity/src/androidTest/java/androidx/activity/FullyDrawnReporterTest.kt b/activity/activity/src/androidTest/java/androidx/activity/FullyDrawnReporterTest.kt
index 1562394..3d303a23 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/FullyDrawnReporterTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/FullyDrawnReporterTest.kt
@@ -92,12 +92,12 @@
}
}
delay(1L)
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(fullyDrawnReported).isFalse()
}
mutex.unlock()
delay(1L)
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(fullyDrawnReported).isTrue()
}
}
@@ -112,11 +112,11 @@
fullyDrawnReporter.addReporter()
fullyDrawnReporter.removeReporter()
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(fullyDrawnReported).isFalse()
}
fullyDrawnReporter.removeReporter()
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(fullyDrawnReported).isTrue()
}
}
@@ -138,12 +138,12 @@
delay(1L) // wait for launch
fullyDrawnReporter.removeReporter()
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(fullyDrawnReported).isFalse()
}
mutex.unlock()
delay(1L) // allow launch to continue
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(fullyDrawnReported).isTrue()
}
}
@@ -166,12 +166,12 @@
delay(1L) // wait for launch
mutex.unlock()
delay(1L) // allow launch to continue
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(fullyDrawnReported).isFalse()
}
fullyDrawnReporter.removeReporter()
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(fullyDrawnReported).isTrue()
}
}
@@ -197,7 +197,7 @@
fullyDrawnReporter.addOnReportDrawnListener(reportListener2)
fullyDrawnReporter.removeOnReportDrawnListener(reportListener2)
fullyDrawnReporter.removeReporter()
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(report1).isTrue()
assertThat(report2).isFalse()
}
@@ -223,13 +223,13 @@
fullyDrawnReporter.removeReporter()
fullyDrawnReporter.addReporter()
}
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(fullyDrawnReporter.isFullyDrawnReported).isFalse()
}
onActivity {
fullyDrawnReporter.removeReporter()
}
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(fullyDrawnReporter.isFullyDrawnReported).isTrue()
}
}
@@ -254,35 +254,41 @@
OneShotPreDrawListener.add(activity.window.decorView) {
fullyDrawnInOnPreDraw = fullyDrawnReporter.isFullyDrawnReported
}
- val onDrawListener = OnDrawListener {
- fullyDrawnInOnDraw = fullyDrawnReporter.isFullyDrawnReported
+ val onDrawListener = object : OnDrawListener {
+ override fun onDraw() {
+ fullyDrawnInOnDraw = fullyDrawnReporter.isFullyDrawnReported
+ activity.window.decorView.post {
+ activity.window.decorView.viewTreeObserver.removeOnDrawListener(this)
+ }
+ }
}
activity.window.decorView.viewTreeObserver.addOnDrawListener(onDrawListener)
- activity.window.decorView.post {
- activity.window.decorView.viewTreeObserver.removeOnDrawListener(onDrawListener)
- }
}
- waitForPostAnimation {
+ waitForOnDrawComplete {
assertThat(fullyDrawnInOnPreDraw).isFalse()
assertThat(fullyDrawnInOnDraw).isTrue()
}
}
}
- private fun ActivityScenario<FullyDrawnActivity>.waitForPostAnimation(
+ private fun ActivityScenario<FullyDrawnActivity>.waitForOnDrawComplete(
block: FullyDrawnActivity.() -> Unit = {}
) {
val countDownLatch = CountDownLatch(1)
+ val observer = OnDrawListener {
+ countDownLatch.countDown()
+ }
withActivity {
runOnUiThread {
- window.decorView.postOnAnimation {
- countDownLatch.countDown()
- }
+ window.decorView.viewTreeObserver.addOnDrawListener(observer)
window.decorView.invalidate()
}
}
assertThat(countDownLatch.await(10, TimeUnit.SECONDS)).isTrue()
withActivity {
+ runOnUiThread {
+ window.decorView.viewTreeObserver.removeOnDrawListener(observer)
+ }
block()
}
}
diff --git a/appactions/interaction/interaction-capabilities-core/build.gradle b/appactions/interaction/interaction-capabilities-core/build.gradle
index fdb938f..2fccf45 100644
--- a/appactions/interaction/interaction-capabilities-core/build.gradle
+++ b/appactions/interaction/interaction-capabilities-core/build.gradle
@@ -24,11 +24,13 @@
}
dependencies {
+ api(libs.kotlinStdlib)
api(libs.autoValueAnnotations)
api(libs.kotlinStdlib)
annotationProcessor(libs.autoValue)
implementation(libs.protobufLite)
implementation(libs.guavaListenableFuture)
+ implementation(libs.kotlinCoroutinesGuava)
implementation("androidx.concurrent:concurrent-futures:1.1.0")
implementation(project(":appactions:interaction:interaction-proto"))
@@ -37,6 +39,7 @@
testImplementation(libs.truth)
testImplementation(libs.testCore)
testImplementation(libs.mockitoCore)
+ testImplementation(libs.mockitoKotlin4)
testImplementation(libs.kotlinStdlib)
testImplementation(libs.androidLint)
testImplementation(libs.androidLintTests)
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/AbstractCapabilityBuilder.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/AbstractCapabilityBuilder.java
index a7c0999..44762184 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/AbstractCapabilityBuilder.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/AbstractCapabilityBuilder.java
@@ -18,13 +18,14 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appactions.interaction.capabilities.core.impl.spec.ActionCapabilityImpl;
+import androidx.appactions.interaction.capabilities.core.impl.SingleTurnCapabilityImpl;
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpec;
import androidx.appactions.interaction.capabilities.core.task.impl.AbstractTaskUpdater;
import androidx.appactions.interaction.capabilities.core.task.impl.TaskCapabilityImpl;
+import com.google.common.util.concurrent.ListenableFuture;
+
import java.util.Objects;
-import java.util.Optional;
/**
* An abstract Builder class for ActionCapability.
@@ -39,7 +40,12 @@
public abstract class AbstractCapabilityBuilder<
BuilderT extends
AbstractCapabilityBuilder<
- BuilderT, PropertyT, ArgumentT, OutputT, ConfirmationT, TaskUpdaterT>,
+ BuilderT,
+ PropertyT,
+ ArgumentT,
+ OutputT,
+ ConfirmationT,
+ TaskUpdaterT>,
PropertyT,
ArgumentT,
OutputT,
@@ -47,14 +53,10 @@
TaskUpdaterT extends AbstractTaskUpdater> {
private final ActionSpec<PropertyT, ArgumentT, OutputT> mActionSpec;
- @Nullable
- private String mId;
- @Nullable
- private PropertyT mProperty;
- @Nullable
- private ActionExecutor<ArgumentT, OutputT> mActionExecutor;
- @Nullable
- private TaskHandler<ArgumentT, OutputT, ConfirmationT, TaskUpdaterT> mTaskHandler;
+ @Nullable private String mId;
+ @Nullable private PropertyT mProperty;
+ @Nullable private ActionExecutor<ArgumentT, OutputT> mActionExecutor;
+ @Nullable private TaskHandler<ArgumentT, OutputT, ConfirmationT, TaskUpdaterT> mTaskHandler;
/**
* @param actionSpec
@@ -90,10 +92,9 @@
/**
* Sets the TaskHandler for this capability. The individual capability factory classes can
- * decide
- * to expose their own public {@code setTaskHandler} method and invoke this parent method.
- * Setting
- * the TaskHandler should build a capability instance that supports multi-turn tasks.
+ * decide to expose their own public {@code setTaskHandler} method and invoke this parent
+ * method. Setting the TaskHandler should build a capability instance that supports multi-turn
+ * tasks.
*/
protected final BuilderT setTaskHandler(
@NonNull TaskHandler<ArgumentT, OutputT, ConfirmationT, TaskUpdaterT> taskHandler) {
@@ -115,22 +116,31 @@
Objects.requireNonNull(mProperty, "property must not be null.");
if (mTaskHandler == null) {
Objects.requireNonNull(mActionExecutor, "actionExecutor must not be null.");
- return new ActionCapabilityImpl<>(
- mActionSpec, Optional.ofNullable(mId), mProperty, mActionExecutor);
+ return new SingleTurnCapabilityImpl<PropertyT, ArgumentT, OutputT>(
+ mId,
+ mActionSpec,
+ mProperty,
+ (hostProperties)->new BaseSession<ArgumentT, OutputT>() {
+ @Override
+ public ListenableFuture<ExecutionResult<OutputT>> onFinishAsync(
+ ArgumentT argument) {
+ return mActionExecutor.execute(argument);
+ }
+ });
}
TaskCapabilityImpl<PropertyT, ArgumentT, OutputT, ConfirmationT, TaskUpdaterT>
taskCapability =
- new TaskCapabilityImpl<>(
- Objects.requireNonNull(mId, "id field must not be null."),
- mActionSpec,
- mProperty,
- mTaskHandler.getParamsRegistry(),
- mTaskHandler.getOnInitListener(),
- mTaskHandler.getOnReadyToConfirmListener(),
- mTaskHandler.getOnFinishListener(),
- mTaskHandler.getConfirmationDataBindings(),
- mTaskHandler.getExecutionOutputBindings(),
- Runnable::run);
+ new TaskCapabilityImpl<>(
+ Objects.requireNonNull(mId, "id field must not be null."),
+ mActionSpec,
+ mProperty,
+ mTaskHandler.getParamsRegistry(),
+ mTaskHandler.getOnInitListener(),
+ mTaskHandler.getOnReadyToConfirmListener(),
+ mTaskHandler.getOnFinishListener(),
+ mTaskHandler.getConfirmationDataBindings(),
+ mTaskHandler.getExecutionOutputBindings(),
+ Runnable::run);
taskCapability.setTaskUpdaterSupplier(mTaskHandler.getTaskUpdaterSupplier());
return taskCapability;
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ActionCapability.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ActionCapability.kt
similarity index 64%
rename from appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ActionCapability.java
rename to appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ActionCapability.kt
index 6e1f4c3..2325c2a 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ActionCapability.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ActionCapability.kt
@@ -14,16 +14,14 @@
* limitations under the License.
*/
-package androidx.appactions.interaction.capabilities.core;
+package androidx.appactions.interaction.capabilities.core
-import androidx.annotation.NonNull;
-import androidx.annotation.RestrictTo;
-import androidx.appactions.interaction.capabilities.core.impl.ArgumentsWrapper;
-import androidx.appactions.interaction.capabilities.core.impl.CallbackInternal;
-import androidx.appactions.interaction.capabilities.core.impl.TouchEventCallback;
-import androidx.appactions.interaction.proto.AppActionsContext.AppAction;
-
-import java.util.Optional;
+import androidx.annotation.RestrictTo
+import androidx.appactions.interaction.capabilities.core.impl.ActionCapabilitySession
+import androidx.appactions.interaction.capabilities.core.impl.ArgumentsWrapper
+import androidx.appactions.interaction.capabilities.core.impl.CallbackInternal
+import androidx.appactions.interaction.capabilities.core.impl.TouchEventCallback
+import androidx.appactions.interaction.proto.AppActionsContext.AppAction
/**
* <b>Do not implement this interface yourself.</b>
@@ -32,11 +30,15 @@
*
* <p>Use helper classes provided by the capability library to get instances of this interface.
*/
-public interface ActionCapability {
+interface ActionCapability {
/** Returns the unique Id of this capability declaration. */
- @NonNull
- Optional<String> getId();
+ val id: String?
+
+ /**
+ * Returns whether or not this capability supports multi-turn task.
+ */
+ val supportsMultiTurnTask: Boolean
/**
* Returns an app action proto describing how to fulfill this capability.
@@ -44,18 +46,23 @@
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
- @NonNull
- AppAction getAppAction();
+ fun getAppAction(): AppAction
/**
* Executes the action and returns the result of execution.
*
* @param argumentsWrapper The arguments send from assistant to the activity.
* @param callback The callback to receive app action result.
+ *
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
- void execute(@NonNull ArgumentsWrapper argumentsWrapper, @NonNull CallbackInternal callback);
+ fun execute(
+ argumentsWrapper: ArgumentsWrapper,
+ callback: CallbackInternal,
+ ) {
+ throw UnsupportedOperationException()
+ }
/**
* Support for manual input. This method should be invoked by AppInteraction SDKs
@@ -65,5 +72,16 @@
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
- default void setTouchEventCallback(@NonNull TouchEventCallback callback) {}
+ fun setTouchEventCallback(callback: TouchEventCallback) {}
+
+ /**
+ * Create a new capability session. The capability library doesn't maintain registry of
+ * capabilities, so it's not going to assign any session id.
+ *
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ fun createSession(hostProperties: HostProperties): ActionCapabilitySession {
+ throw UnsupportedOperationException()
+ }
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/BaseSession.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/BaseSession.kt
new file mode 100644
index 0000000..e4b20fe
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/BaseSession.kt
@@ -0,0 +1,58 @@
+/*
+ * 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.appactions.interaction.capabilities.core
+
+import com.google.common.util.concurrent.ListenableFuture
+import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.guava.future
+/**
+ * Base interface for Session of all verticals.
+ */
+interface BaseSession<ArgumentT, OutputT> {
+ /**
+ * Implement any initialization logic.
+ *
+ * This method is called once, before any other listeners are invoked.
+ */
+ fun onInit(initArg: InitArg) {}
+
+ /**
+ * Called when all arguments are finalized.
+ * @param argument the Argument instance containing data for fulfillment.
+ * @return an ExecutionResult instance.
+ */
+ suspend fun onFinish(argument: ArgumentT): ExecutionResult<OutputT> {
+ throw NotImplementedError()
+ }
+
+ /**
+ * Called when all arguments are finalized.
+ * @param argument the Argument instance containing data for fulfillment.
+ * @return a ListenableFuture containing an ExecutionResult instance.
+ */
+ @kotlin.OptIn(DelicateCoroutinesApi::class)
+ fun onFinishAsync(argument: ArgumentT): ListenableFuture<ExecutionResult<OutputT>> {
+ return GlobalScope.future { onFinish(argument) }
+ }
+
+ /**
+ * Implement any cleanup logic.
+ * This method is called some time after the session finishes.
+ */
+ fun onDestroy() {}
+}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ConfirmationOutput.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ConfirmationOutput.java
deleted file mode 100644
index 7a9c9c6..0000000
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ConfirmationOutput.java
+++ /dev/null
@@ -1,81 +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.appactions.interaction.capabilities.core;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.google.auto.value.AutoValue;
-
-/**
- * Class that represents the response after all slots are filled and accepted and the task is ready
- * to enter the confirmation turn.
- *
- * @param <ConfirmationT>
- */
-@AutoValue
-public abstract class ConfirmationOutput<ConfirmationT> {
-
- /**
- * Create a Builder instance for building a ConfirmationOutput instance without confirmation
- * output.
- */
- @NonNull
- public static Builder<Void> newBuilder() {
- return new AutoValue_ConfirmationOutput.Builder<>();
- }
-
- /** Returns a default ConfirmationOutput instance. */
- @NonNull
- public static ConfirmationOutput<Void> getDefaultInstance() {
- return ConfirmationOutput.newBuilder().build();
- }
-
- /** Create a Builder instance for building a ConfirmationOutput instance. */
- @NonNull
- public static <ConfirmationT> Builder<ConfirmationT> newBuilderWithConfirmation() {
- return new AutoValue_ConfirmationOutput.Builder<>();
- }
-
- /** Returns a default ConfirmationOutput instance with a confirmation output type. */
- @NonNull
- public static <ConfirmationT>
- ConfirmationOutput<ConfirmationT> getDefaultInstanceWithConfirmation() {
- return ConfirmationOutput.<ConfirmationT>newBuilderWithConfirmation().build();
- }
-
- /** The confirmation output. */
- @Nullable
- public abstract ConfirmationT getConfirmation();
-
- /**
- * Builder for ConfirmationOutput.
- *
- * @param <ConfirmationT>
- */
- @AutoValue.Builder
- public abstract static class Builder<ConfirmationT> {
-
- /** Sets the confirmation output. */
- @NonNull
- public abstract Builder<ConfirmationT> setConfirmation(ConfirmationT confirmation);
-
- /** Builds and returns the ConfirmationOutput instance. */
- @NonNull
- public abstract ConfirmationOutput<ConfirmationT> build();
- }
-}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ConfirmationOutput.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ConfirmationOutput.kt
new file mode 100644
index 0000000..acbdcc1
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ConfirmationOutput.kt
@@ -0,0 +1,60 @@
+/*
+ * 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.appactions.interaction.capabilities.core
+
+import java.util.Objects
+
+/**
+ * Class that represents the response after all slots are filled and accepted and the task is ready
+ * to enter the confirmation turn.
+ *
+ * @param <ConfirmationT>
+ */
+class ConfirmationOutput<ConfirmationT> internal constructor(val confirmation: ConfirmationT?) {
+ override fun toString() =
+ "ConfirmationOutput(confirmation=$confirmation)"
+
+ override fun equals(other: Any?): Boolean {
+ return other is ConfirmationOutput<*> && confirmation == other.confirmation
+ }
+
+ override fun hashCode() = Objects.hash(confirmation)
+
+ /**
+ * Builder for ConfirmationOutput.
+ *
+ * @param <ConfirmationT>
+ */
+ class Builder<ConfirmationT> {
+ private var confirmation: ConfirmationT? = null
+
+ /** Sets the confirmation output. */
+ fun setConfirmation(confirmation: ConfirmationT) = apply {
+ this.confirmation = confirmation
+ }
+
+ /** Builds and returns the ConfirmationOutput instance. */
+ fun build() = ConfirmationOutput(confirmation)
+ }
+
+ companion object {
+ /** Returns a default ExecutionResult instance. */
+ @JvmStatic
+ fun <ConfirmationT> getDefaultInstance() = ConfirmationOutput.Builder<ConfirmationT>()
+ .build()
+ }
+}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ExecutionResult.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ExecutionResult.java
deleted file mode 100644
index b42f20b..0000000
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ExecutionResult.java
+++ /dev/null
@@ -1,82 +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.appactions.interaction.capabilities.core;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.google.auto.value.AutoValue;
-
-/**
- * Class that represents the response after an ActionCapability fulfills an action.
- *
- * @param <OutputT>
- */
-@AutoValue
-public abstract class ExecutionResult<OutputT> {
-
- /** Create a Builder instance for building a ExecutionResult instance without output. */
- @NonNull
- public static Builder<Void> newBuilder() {
- return new AutoValue_ExecutionResult.Builder<Void>().setStartDictation(false);
- }
-
- /** Returns a default ExecutionResult instance. */
- @NonNull
- public static ExecutionResult<Void> getDefaultInstance() {
- return ExecutionResult.newBuilder().build();
- }
-
- /** Create a Builder instance for building a ExecutionResult instance. */
- @NonNull
- public static <OutputT> Builder<OutputT> newBuilderWithOutput() {
- return new AutoValue_ExecutionResult.Builder<OutputT>().setStartDictation(false);
- }
-
- /** Returns a default ExecutionResult instance with an output type. */
- @NonNull
- public static <OutputT> ExecutionResult<OutputT> getDefaultInstanceWithOutput() {
- return ExecutionResult.<OutputT>newBuilderWithOutput().build();
- }
-
- /** Whether to start dictation mode after the fulfillment. */
- public abstract boolean getStartDictation();
-
- /** The execution output. */
- @Nullable
- public abstract OutputT getOutput();
-
- /**
- * Builder for ExecutionResult.
- *
- * @param <OutputT>
- */
- @AutoValue.Builder
- public abstract static class Builder<OutputT> {
- /** Sets whether or not this fulfillment should start dictation. */
- @NonNull
- public abstract Builder<OutputT> setStartDictation(boolean startDictation);
-
- /** Sets the execution output. */
- @NonNull
- public abstract Builder<OutputT> setOutput(OutputT output);
-
- /** Builds and returns the ExecutionResult instance. */
- @NonNull
- public abstract ExecutionResult<OutputT> build();
- }
-}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ExecutionResult.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ExecutionResult.kt
new file mode 100644
index 0000000..1234fe0
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/ExecutionResult.kt
@@ -0,0 +1,67 @@
+/*
+ * 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.appactions.interaction.capabilities.core
+
+import java.util.Objects
+/**
+ * Class that represents the response after an ActionCapability fulfills an action.
+ *
+ * @param <OutputT>
+ */
+class ExecutionResult<OutputT> internal constructor(
+ val startDictation: Boolean,
+ val output: OutputT?,
+) {
+ override fun toString() =
+ "ExecutionResult(startDictation=$startDictation,output=$output)"
+
+ override fun equals(other: Any?): Boolean {
+ return other is ExecutionResult<*> && output == other.output
+ }
+
+ override fun hashCode() = Objects.hash(startDictation, output)
+
+ /**
+ * Builder for ExecutionResult.
+ *
+ * @param <OutputT>
+ */
+ class Builder<OutputT> {
+ private var startDictation: Boolean = false
+
+ private var output: OutputT? = null
+
+ /** Sets whether or not this fulfillment should start dictation. */
+ fun setStartDictation(startDictation: Boolean) = apply {
+ this.startDictation = startDictation
+ }
+
+ /** Sets the execution output. */
+ fun setOutput(output: OutputT) = apply {
+ this.output = output
+ }
+
+ /** Builds and returns the ExecutionResult instance. */
+ fun build() = ExecutionResult(startDictation, output)
+ }
+
+ companion object {
+ /** Returns a default ExecutionResult instance. */
+ @JvmStatic
+ fun <OutputT> getDefaultInstance() = ExecutionResult.Builder<OutputT>().build()
+ }
+}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/HostProperties.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/HostProperties.kt
new file mode 100644
index 0000000..c0ceb39
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/HostProperties.kt
@@ -0,0 +1,54 @@
+/*
+ * 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.appactions.interaction.capabilities.core
+
+import android.util.SizeF
+import java.util.Objects
+
+/**
+ * HostProperties contains information about the host that can be used to customize behaviour for
+ * different environments.
+ */
+class HostProperties internal constructor(val maxHostSizeDp: SizeF) {
+ override fun toString() =
+ "HostProperties(maxHostSizeDp=$maxHostSizeDp)"
+
+ override fun equals(other: Any?): Boolean {
+ return other is HostProperties && maxHostSizeDp == other.maxHostSizeDp
+ }
+
+ override fun hashCode() = Objects.hash(maxHostSizeDp)
+
+ /**
+ * Builder class for HostProperties.
+ */
+ class Builder {
+ private var maxHostSizeDp: SizeF? = null
+
+ /** Sets the dimensions of the host area where the app content will be displayed in dp. */
+ fun setMaxHostSizeDp(maxHostSizeDp: SizeF) = apply {
+ this.maxHostSizeDp = maxHostSizeDp
+ }
+
+ /**
+ * Builds and returns the HostProperties instance.
+ */
+ fun build() = HostProperties(
+ requireNotNull(maxHostSizeDp, { "maxHostSizeDp must be set." }),
+ )
+ }
+}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/InitArg.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/InitArg.kt
new file mode 100644
index 0000000..f01729c
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/InitArg.kt
@@ -0,0 +1,29 @@
+/*
+ * 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.appactions.interaction.capabilities.core
+
+/**
+ * InitArg contains data passed to {@code BaseSession#onInit}.
+ */
+class InitArg internal constructor() {
+ override fun toString() =
+ "InitArg()"
+
+ override fun equals(other: Any?): Boolean {
+ return other is InitArg
+ }
+}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/SessionBuilder.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/SessionBuilder.kt
new file mode 100644
index 0000000..7aa2a29
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/SessionBuilder.kt
@@ -0,0 +1,29 @@
+/*
+ * 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.appactions.interaction.capabilities.core
+
+/**
+ * Interface to be implemented for creating SessionT instances.
+ */
+fun interface SessionBuilder<SessionT> {
+ /**
+ * @return A new SessionT instance for handling a task.
+ */
+ fun createSession(
+ hostProperties: HostProperties,
+ ): SessionT
+}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/ActionCapabilitySession.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/ActionCapabilitySession.kt
new file mode 100644
index 0000000..0a9fb0e
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/ActionCapabilitySession.kt
@@ -0,0 +1,38 @@
+/*
+ * 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.appactions.interaction.capabilities.core.impl
+
+import androidx.annotation.RestrictTo
+
+/**
+ * Internal interface for a session, contains developer's Session instance
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+interface ActionCapabilitySession {
+ /**
+ * Executes the action and returns the result of execution.
+ *
+ * @param argumentsWrapper The arguments send from assistant to the activity.
+ * @param callback The callback to receive app action result.
+ */
+ fun execute(
+ argumentsWrapper: ArgumentsWrapper,
+ callback: CallbackInternal,
+ )
+}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityImpl.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityImpl.kt
new file mode 100644
index 0000000..76ed7b5
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityImpl.kt
@@ -0,0 +1,59 @@
+/*
+ * 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.appactions.interaction.capabilities.core.impl
+
+import androidx.annotation.NonNull
+import androidx.appactions.interaction.capabilities.core.ActionCapability
+import androidx.appactions.interaction.capabilities.core.BaseSession
+import androidx.appactions.interaction.capabilities.core.HostProperties
+import androidx.appactions.interaction.capabilities.core.SessionBuilder
+import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpec
+import androidx.appactions.interaction.proto.AppActionsContext.AppAction
+import androidx.appactions.interaction.proto.TaskInfo
+
+import androidx.annotation.RestrictTo
+
+/** @hide */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+internal class SingleTurnCapabilityImpl<
+ PropertyT,
+ ArgumentT,
+ OutputT,
+ > constructor(
+ override val id: String?,
+ val actionSpec: ActionSpec<PropertyT, ArgumentT, OutputT>,
+ val property: PropertyT,
+ val sessionBuilder: SessionBuilder<BaseSession<ArgumentT, OutputT>>,
+) : ActionCapability {
+ override val supportsMultiTurnTask = false
+
+ @NonNull
+ override fun getAppAction(): AppAction {
+ val appActionBuilder = actionSpec.convertPropertyToProto(property).toBuilder()
+ .setTaskInfo(TaskInfo.newBuilder().setSupportsPartialFulfillment(false))
+ id?.let(appActionBuilder::setIdentifier)
+ return appActionBuilder.build()
+ }
+
+ @NonNull
+ override fun createSession(hostProperties: HostProperties): ActionCapabilitySession {
+ return SingleTurnCapabilitySession(
+ actionSpec,
+ sessionBuilder.createSession(hostProperties),
+ )
+ }
+}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt
new file mode 100644
index 0000000..1b8bcf5
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt
@@ -0,0 +1,90 @@
+
+/*
+ * 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.appactions.interaction.capabilities.core.impl
+
+import androidx.annotation.NonNull
+import androidx.appactions.interaction.capabilities.core.ExecutionResult
+import androidx.appactions.interaction.capabilities.core.BaseSession
+import androidx.appactions.interaction.capabilities.core.impl.concurrent.FutureCallback
+import androidx.appactions.interaction.capabilities.core.impl.concurrent.Futures
+import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpec
+import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.FulfillmentValue
+import androidx.appactions.interaction.proto.FulfillmentResponse
+import androidx.appactions.interaction.proto.ParamValue
+
+import androidx.annotation.RestrictTo
+
+/**
+ * ActionCapabilitySession implementation for executing single-turn fulfillment requests.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+internal class SingleTurnCapabilitySession<
+ ArgumentT,
+ OutputT,
+>(
+ val actionSpec: ActionSpec<*, ArgumentT, OutputT>,
+ val externalSession: BaseSession<ArgumentT, OutputT>,
+) : ActionCapabilitySession {
+ override fun execute(
+ @NonNull argumentsWrapper: ArgumentsWrapper,
+ @NonNull callback: CallbackInternal,
+ ) {
+ val paramValuesMap: Map<String, List<ParamValue>> = argumentsWrapper.paramValues().entries
+ .associate {
+ entry: Map.Entry<String, List<FulfillmentValue>> ->
+ Pair(
+ entry.key,
+ entry.value.mapNotNull {
+ fulfillmentValue: FulfillmentValue ->
+ fulfillmentValue.getValue()
+ },
+ )
+ }
+ val argument = actionSpec.buildArgument(paramValuesMap)
+ Futures.addCallback(
+ externalSession.onFinishAsync(argument),
+ object : FutureCallback<ExecutionResult<OutputT>> {
+ override fun onSuccess(executionResult: ExecutionResult<OutputT>) {
+ callback.onSuccess(convertToFulfillmentResponse(executionResult))
+ }
+
+ override fun onFailure(t: Throwable) {
+ callback.onError(ErrorStatusInternal.CANCELLED)
+ }
+ },
+ Runnable::run,
+ )
+ }
+
+ /** Converts typed {@link ExecutionResult} to {@link FulfillmentResponse} proto. */
+ private fun convertToFulfillmentResponse(
+ executionResult: ExecutionResult<OutputT>,
+ ): FulfillmentResponse {
+ val fulfillmentResponseBuilder =
+ FulfillmentResponse.newBuilder()
+ .setStartDictation(executionResult.startDictation)
+ executionResult.output?.let { it ->
+ fulfillmentResponseBuilder.setExecutionOutput(
+ actionSpec.convertOutputToProto(it),
+ )
+ }
+ return fulfillmentResponseBuilder.build()
+ }
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionCapabilityImpl.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionCapabilityImpl.java
deleted file mode 100644
index a6bfaad..0000000
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionCapabilityImpl.java
+++ /dev/null
@@ -1,134 +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.appactions.interaction.capabilities.core.impl.spec;
-
-import static androidx.appactions.interaction.capabilities.core.impl.utils.ImmutableCollectors.toImmutableList;
-import static androidx.appactions.interaction.capabilities.core.impl.utils.ImmutableCollectors.toImmutableMap;
-
-import androidx.annotation.NonNull;
-import androidx.appactions.interaction.capabilities.core.ActionCapability;
-import androidx.appactions.interaction.capabilities.core.ActionExecutor;
-import androidx.appactions.interaction.capabilities.core.ExecutionResult;
-import androidx.appactions.interaction.capabilities.core.impl.ArgumentsWrapper;
-import androidx.appactions.interaction.capabilities.core.impl.CallbackInternal;
-import androidx.appactions.interaction.capabilities.core.impl.ErrorStatusInternal;
-import androidx.appactions.interaction.capabilities.core.impl.concurrent.FutureCallback;
-import androidx.appactions.interaction.capabilities.core.impl.concurrent.Futures;
-import androidx.appactions.interaction.capabilities.core.impl.exceptions.StructConversionException;
-import androidx.appactions.interaction.capabilities.core.impl.utils.CapabilityLogger;
-import androidx.appactions.interaction.capabilities.core.impl.utils.LoggerInternal;
-import androidx.appactions.interaction.proto.AppActionsContext.AppAction;
-import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.FulfillmentValue;
-import androidx.appactions.interaction.proto.FulfillmentResponse;
-import androidx.appactions.interaction.proto.ParamValue;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-/**
- * The implementation of the {@link ActionCapability} interface.
- *
- * @param <PropertyT>
- * @param <ArgumentT>
- * @param <OutputT>
- */
-public final class ActionCapabilityImpl<PropertyT, ArgumentT, OutputT> implements ActionCapability {
-
- private static final String LOG_TAG = "ActionCapability";
- private final ActionSpec<PropertyT, ArgumentT, OutputT> mActionSpec;
- private final Optional<String> mIdentifier;
- private final PropertyT mProperty;
- private final ActionExecutor<ArgumentT, OutputT> mActionExecutor;
-
- public ActionCapabilityImpl(
- @NonNull ActionSpec<PropertyT, ArgumentT, OutputT> actionSpec,
- @NonNull Optional<String> identifier,
- @NonNull PropertyT property,
- @NonNull ActionExecutor<ArgumentT, OutputT> actionExecutor) {
- this.mActionSpec = actionSpec;
- this.mIdentifier = identifier;
- this.mProperty = property;
- this.mActionExecutor = actionExecutor;
- }
-
- @NonNull
- @Override
- public Optional<String> getId() {
- return mIdentifier;
- }
-
- @NonNull
- @Override
- public AppAction getAppAction() {
- AppAction appAction = mActionSpec.convertPropertyToProto(mProperty);
- if (mIdentifier.isPresent()) {
- appAction = appAction.toBuilder().setIdentifier(mIdentifier.get()).build();
- }
- return appAction;
- }
-
- @Override
- public void execute(
- @NonNull ArgumentsWrapper argumentsWrapper, @NonNull CallbackInternal callback) {
- // Filter out the task parts of ArgumentsWrapper. Send the raw arguments for one-shot
- // capabilities.
- Map<String, List<ParamValue>> args =
- argumentsWrapper.paramValues().entrySet().stream()
- .collect(
- toImmutableMap(
- Map.Entry::getKey,
- e ->
- e.getValue().stream()
- .filter(FulfillmentValue::hasValue)
- .map(FulfillmentValue::getValue)
- .collect(toImmutableList())));
- try {
- Futures.addCallback(
- mActionExecutor.execute(mActionSpec.buildArgument(args)),
- new FutureCallback<ExecutionResult<OutputT>>() {
- @Override
- public void onSuccess(ExecutionResult<OutputT> executionResult) {
- callback.onSuccess(convertToFulfillmentResponse(executionResult));
- }
-
- @Override
- public void onFailure(Throwable t) {
- callback.onError(ErrorStatusInternal.CANCELLED);
- }
- },
- Runnable::run);
- } catch (StructConversionException e) {
- if (e.getMessage() != null) {
- LoggerInternal.log(CapabilityLogger.LogLevel.ERROR, LOG_TAG, e.getMessage());
- }
- callback.onError(ErrorStatusInternal.STRUCT_CONVERSION_FAILURE);
- }
- }
-
- /** Converts typed {@link ExecutionResult} to {@link FulfillmentResponse} proto. */
- FulfillmentResponse convertToFulfillmentResponse(ExecutionResult<OutputT> executionResult) {
- FulfillmentResponse.Builder fulfillmentResponseBuilder =
- FulfillmentResponse.newBuilder()
- .setStartDictation(executionResult.getStartDictation());
- OutputT output = executionResult.getOutput();
- if (output != null && !(output instanceof Void)) {
- fulfillmentResponseBuilder.setExecutionOutput(mActionSpec.convertOutputToProto(output));
- }
- return fulfillmentResponseBuilder.build();
- }
-}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.java
index de3aa6a..1c427d1 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.java
@@ -33,7 +33,7 @@
/** The implementation of {@code ActionSpec} interface. */
final class ActionSpecImpl<
- PropertyT, ArgumentT, ArgumentBuilderT extends BuilderOf<ArgumentT>, OutputT>
+ PropertyT, ArgumentT, ArgumentBuilderT extends BuilderOf<ArgumentT>, OutputT>
implements ActionSpec<PropertyT, ArgumentT, OutputT> {
private final String mCapabilityName;
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImpl.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImpl.java
index 2655700..c3e46f2 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImpl.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImpl.java
@@ -19,6 +19,7 @@
import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
import androidx.appactions.interaction.capabilities.core.ActionCapability;
import androidx.appactions.interaction.capabilities.core.impl.ArgumentsWrapper;
import androidx.appactions.interaction.capabilities.core.impl.CallbackInternal;
@@ -47,7 +48,9 @@
* @param <OutputT>
* @param <ConfirmationT>
* @param <TaskUpdaterT>
+ * @hide
*/
+@RestrictTo(RestrictTo.Scope.LIBRARY)
public final class TaskCapabilityImpl<
PropertyT,
ArgumentT,
@@ -104,8 +107,13 @@
@NonNull
@Override
- public Optional<String> getId() {
- return Optional.of(mIdentifier);
+ public String getId() {
+ return mIdentifier;
+ }
+
+ @Override
+ public boolean getSupportsMultiTurnTask() {
+ return true;
}
public void setTaskUpdaterSupplier(@NonNull Supplier<TaskUpdaterT> taskUpdaterSupplier) {
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityTest.kt b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityTest.kt
new file mode 100644
index 0000000..2082eb6
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityTest.kt
@@ -0,0 +1,128 @@
+/*
+ * 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.appactions.interaction.capabilities.core.impl
+
+import android.util.SizeF
+import androidx.appactions.interaction.capabilities.core.ActionCapability
+import androidx.appactions.interaction.capabilities.core.ExecutionResult
+import androidx.appactions.interaction.capabilities.core.HostProperties
+import androidx.appactions.interaction.capabilities.core.impl.concurrent.Futures
+import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
+import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpec
+import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
+import androidx.appactions.interaction.capabilities.core.properties.EntityProperty
+import androidx.appactions.interaction.capabilities.core.properties.StringProperty
+import androidx.appactions.interaction.capabilities.core.testing.ArgumentUtils
+import androidx.appactions.interaction.capabilities.core.testing.spec.Argument
+import androidx.appactions.interaction.capabilities.core.testing.spec.Output
+import androidx.appactions.interaction.capabilities.core.testing.spec.Property
+import androidx.appactions.interaction.capabilities.core.testing.spec.Session
+import androidx.appactions.interaction.proto.FulfillmentResponse
+import androidx.appactions.interaction.proto.FulfillmentResponse.StructuredOutput
+import androidx.appactions.interaction.proto.FulfillmentResponse.StructuredOutput.OutputValue
+import androidx.appactions.interaction.proto.ParamValue
+import com.google.common.util.concurrent.ListenableFuture
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.Mockito.verify
+import org.mockito.kotlin.mock
+
+@RunWith(JUnit4::class)
+class SingleTurnCapabilityTest {
+
+ val mockCalback: CallbackInternal = mock()
+
+ @Test
+ fun oneShotCapability_successWithOutput() {
+ val capability: ActionCapability =
+ SingleTurnCapabilityImpl<Property, Argument, Output>(
+ "capabilityId",
+ ACTION_SPEC,
+ Property.newBuilder().setRequiredEntityField(
+ EntityProperty.EMPTY,
+ ).setOptionalStringField(
+ StringProperty.PROHIBITED,
+ ).build(),
+ {
+ object : Session {
+ override fun onFinishAsync(
+ argument: Argument,
+ ): ListenableFuture<ExecutionResult<Output>> {
+ return Futures.immediateFuture(
+ ExecutionResult.Builder<Output>().setOutput(
+ Output.builder().setOptionalStringField("stringOutput")
+ .build(),
+ ).build(),
+ )
+ }
+ }
+ },
+ )
+ val expectedFulfillmentResponse: FulfillmentResponse =
+ FulfillmentResponse.newBuilder().setExecutionOutput(
+ StructuredOutput.newBuilder()
+ .addOutputValues(
+ OutputValue.newBuilder()
+ .setName("optionalStringOutput")
+ .addValues(
+ ParamValue.newBuilder()
+ .setStringValue("stringOutput")
+ .build(),
+ )
+ .build(),
+ )
+ .build(),
+ ).build()
+
+ val capabilitySession = capability.createSession(
+ HostProperties.Builder().setMaxHostSizeDp(SizeF(300f, 500f)).build(),
+ )
+ capabilitySession.execute(
+ ArgumentUtils.buildArgs(
+ mapOf(
+ "optionalString" to ParamValue.newBuilder().setIdentifier(
+ "string argument value",
+ ).build(),
+ ),
+ ),
+ mockCalback,
+ )
+
+ verify(mockCalback).onSuccess(expectedFulfillmentResponse)
+ }
+
+ companion object {
+ val ACTION_SPEC: ActionSpec<Property, Argument, Output> =
+ ActionSpecBuilder.ofCapabilityNamed(
+ "actions.intent.TEST",
+ )
+ .setDescriptor(Property::class.java)
+ .setArgument(Argument::class.java, Argument::newBuilder)
+ .setOutput(Output::class.java)
+ .bindOptionalStringParameter(
+ "optionalString",
+ Property::optionalStringField,
+ Argument.Builder::setOptionalStringField,
+ )
+ .bindOptionalOutput(
+ "optionalStringOutput",
+ Output::optionalStringField,
+ TypeConverters::toParamValue,
+ ).build()
+ }
+}
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionCapabilityImplTest.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionCapabilityImplTest.java
deleted file mode 100644
index 47d20b5..0000000
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionCapabilityImplTest.java
+++ /dev/null
@@ -1,129 +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.appactions.interaction.capabilities.core.impl.spec;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.verify;
-
-import androidx.appactions.interaction.capabilities.core.ExecutionResult;
-import androidx.appactions.interaction.capabilities.core.impl.ArgumentsWrapper;
-import androidx.appactions.interaction.capabilities.core.impl.CallbackInternal;
-import androidx.appactions.interaction.capabilities.core.impl.concurrent.Futures;
-import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters;
-import androidx.appactions.interaction.capabilities.core.properties.EntityProperty;
-import androidx.appactions.interaction.capabilities.core.testing.spec.Argument;
-import androidx.appactions.interaction.capabilities.core.testing.spec.Output;
-import androidx.appactions.interaction.capabilities.core.testing.spec.Property;
-import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment;
-import androidx.appactions.interaction.proto.FulfillmentResponse;
-import androidx.appactions.interaction.proto.FulfillmentResponse.StructuredOutput;
-import androidx.appactions.interaction.proto.FulfillmentResponse.StructuredOutput.OutputValue;
-import androidx.appactions.interaction.proto.ParamValue;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-import java.util.List;
-import java.util.Optional;
-
-@RunWith(JUnit4.class)
-public final class ActionCapabilityImplTest {
-
- private static final ActionSpec<Property, Argument, Output> ACTION_SPEC =
- ActionSpecBuilder.ofCapabilityNamed("actions.intent.TEST")
- .setDescriptor(Property.class)
- .setArgument(Argument.class, Argument::newBuilder)
- .setOutput(Output.class)
- .bindRequiredEntityParameter(
- "requiredEntity",
- Property::requiredEntityField,
- Argument.Builder::setRequiredEntityField)
- .bindOptionalOutput(
- "optionalStringOutput",
- Output::optionalStringField,
- TypeConverters::toParamValue)
- .bindRepeatedOutput(
- "repeatedStringOutput",
- Output::repeatedStringField,
- TypeConverters::toParamValue)
- .build();
- @Rule public final MockitoRule mockito = MockitoJUnit.rule();
- @Captor ArgumentCaptor<FulfillmentResponse> mCaptor;
- @Mock private CallbackInternal mCallbackInternal;
-
- @Test
- @SuppressWarnings("JdkImmutableCollections")
- public void execute_convertExecutionResult() {
- Property property =
- Property.newBuilder()
- .setRequiredEntityField(EntityProperty.newBuilder().build())
- .build();
-
- ExecutionResult<Output> executionResult =
- ExecutionResult.<Output>newBuilderWithOutput()
- .setOutput(
- Output.builder()
- .setOptionalStringField("test2")
- .setRepeatedStringField(List.of("test3", "test4"))
- .build())
- .build();
- ActionCapabilityImpl<Property, Argument, Output> capability =
- new ActionCapabilityImpl<>(
- ACTION_SPEC,
- Optional.of("id"),
- property,
- (argument) -> Futures.immediateFuture(executionResult));
- StructuredOutput expectedExecutionOutput =
- StructuredOutput.newBuilder()
- .addOutputValues(
- OutputValue.newBuilder()
- .setName("optionalStringOutput")
- .addValues(
- ParamValue.newBuilder()
- .setStringValue("test2")
- .build())
- .build())
- .addOutputValues(
- OutputValue.newBuilder()
- .setName("repeatedStringOutput")
- .addValues(
- ParamValue.newBuilder()
- .setStringValue("test3")
- .build())
- .addValues(
- ParamValue.newBuilder()
- .setStringValue("test4")
- .build())
- .build())
- .build();
-
- capability.execute(
- ArgumentsWrapper.create(Fulfillment.getDefaultInstance()), mCallbackInternal);
-
- verify(mCallbackInternal).onSuccess(mCaptor.capture());
- assertThat(mCaptor.getValue().getExecutionOutput().getOutputValuesList())
- .containsExactlyElementsIn(expectedExecutionOutput.getOutputValuesList());
- }
-}
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecTest.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecTest.java
index 341351f..9e8b6bd 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecTest.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecTest.java
@@ -19,15 +19,12 @@
import static com.google.common.truth.Truth.assertThat;
import androidx.annotation.NonNull;
-import androidx.appactions.interaction.capabilities.core.ActionCapability;
-import androidx.appactions.interaction.capabilities.core.ActionExecutor;
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf;
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters;
import androidx.appactions.interaction.capabilities.core.properties.Entity;
import androidx.appactions.interaction.capabilities.core.properties.EntityProperty;
import androidx.appactions.interaction.capabilities.core.properties.EnumProperty;
import androidx.appactions.interaction.capabilities.core.properties.StringProperty;
-import androidx.appactions.interaction.capabilities.core.testing.TestingUtils;
import androidx.appactions.interaction.capabilities.core.testing.spec.Output;
import androidx.appactions.interaction.capabilities.core.values.EntityValue;
import androidx.appactions.interaction.proto.AppActionsContext.AppAction;
@@ -92,11 +89,6 @@
TypeConverters::toParamValue)
.build();
- private static ActionCapability createCapability(
- String id, Property property, ActionExecutor<Argument, Output> executor) {
- return new ActionCapabilityImpl<>(ACTION_SPEC, Optional.of(id), property, executor);
- }
-
@Test
public void getAppAction_onlyRequiredProperty() {
Property property =
@@ -112,13 +104,9 @@
.build(),
StringProperty.EMPTY);
- ActionCapability capability =
- createCapability("id", property, TestingUtils.createFakeActionExecutor());
-
- assertThat(capability.getAppAction())
+ assertThat(ACTION_SPEC.convertPropertyToProto(property))
.isEqualTo(
AppAction.newBuilder()
- .setIdentifier("id")
.setName("actions.intent.TEST")
.addParams(
IntentParameter.newBuilder()
@@ -185,13 +173,9 @@
.build()),
Optional.of(StringProperty.PROHIBITED));
- ActionCapability capability =
- createCapability("id", property, TestingUtils.createFakeActionExecutor());
-
- assertThat(capability.getAppAction())
+ assertThat(ACTION_SPEC.convertPropertyToProto(property))
.isEqualTo(
AppAction.newBuilder()
- .setIdentifier("id")
.setName("actions.intent.TEST")
.addParams(
IntentParameter.newBuilder()
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.java
index b73adf6..1c5e9e7 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.java
@@ -179,7 +179,7 @@
EMPTY_CONFIRM_LISTENER = Optional.empty();
private static final OnDialogFinishListener<Argument, Output> EMPTY_FINISH_LISTENER =
(finalArgs) ->
- Futures.immediateFuture(ExecutionResult.<Output>getDefaultInstanceWithOutput());
+ Futures.immediateFuture(ExecutionResult.<Output>getDefaultInstance());
private static boolean groundingPredicate(ParamValue paramValue) {
return !paramValue.hasIdentifier();
@@ -845,7 +845,7 @@
OnDialogFinishListener<Argument, Output> finishListener =
(argument) ->
Futures.immediateFuture(
- ExecutionResult.<Output>newBuilderWithOutput()
+ new ExecutionResult.Builder<Output>()
.setOutput(
Output.builder()
.setOptionalStringField("bar")
@@ -1094,7 +1094,7 @@
OnReadyToConfirmListenerInternal<Confirmation> onReadyToConfirmListener =
(args) ->
Futures.immediateFuture(
- ConfirmationOutput.<Confirmation>newBuilderWithConfirmation()
+ new ConfirmationOutput.Builder<Confirmation>()
.setConfirmation(
Confirmation.builder()
.setOptionalStringField("bar")
@@ -1123,7 +1123,7 @@
OnReadyToConfirmListenerInternal<Confirmation> onReadyToConfirmListener =
(args) ->
Futures.immediateFuture(
- ConfirmationOutput.<Confirmation>newBuilderWithConfirmation()
+ new ConfirmationOutput.Builder<Confirmation>()
.setConfirmation(
Confirmation.builder()
.setOptionalStringField("bar")
@@ -1132,7 +1132,7 @@
OnDialogFinishListener<Argument, Output> finishListener =
(argument) ->
Futures.immediateFuture(
- ExecutionResult.<Output>newBuilderWithOutput()
+ new ExecutionResult.Builder<Output>()
.setOutput(
Output.builder()
.setOptionalStringField("baz")
@@ -1184,7 +1184,7 @@
OnReadyToConfirmListenerInternal<Confirmation> onReadyToConfirmListener =
(args) ->
Futures.immediateFuture(
- ConfirmationOutput.<Confirmation>newBuilderWithConfirmation()
+ new ConfirmationOutput.Builder<Confirmation>()
.setConfirmation(
Confirmation.builder()
.setOptionalStringField("bar")
@@ -1193,7 +1193,7 @@
OnDialogFinishListener<Argument, Output> finishListener =
(argument) ->
Futures.immediateFuture(
- ExecutionResult.<Output>newBuilderWithOutput()
+ new ExecutionResult.Builder<Output>()
.setOutput(
Output.builder()
.setOptionalStringField("baz")
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/TestingUtils.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/TestingUtils.java
index 77a56b6..d66e0ee 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/TestingUtils.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/TestingUtils.java
@@ -115,7 +115,7 @@
(finalArgs) -> {
future.set(finalArgs);
return Futures.immediateFuture(
- ConfirmationOutput.<ConfirmationT>getDefaultInstanceWithConfirmation());
+ ConfirmationOutput.getDefaultInstance());
});
}
@@ -124,7 +124,7 @@
SettableFutureWrapper<ArgumentT> future) {
return (finalArgs) -> {
future.set(finalArgs);
- return Futures.immediateFuture(ExecutionResult.<OutputT>getDefaultInstanceWithOutput());
+ return Futures.immediateFuture(ExecutionResult.<OutputT>getDefaultInstance());
};
}
@@ -205,6 +205,6 @@
public static <ArgumentT, OutputT>
ActionExecutor<ArgumentT, OutputT> createFakeActionExecutor() {
return (args) ->
- Futures.immediateFuture(ExecutionResult.<OutputT>getDefaultInstanceWithOutput());
+ Futures.immediateFuture(ExecutionResult.<OutputT>getDefaultInstance());
}
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/Output.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/Output.java
index c18a61a..5464ff6 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/Output.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/Output.java
@@ -18,6 +18,7 @@
import com.google.auto.value.AutoValue;
+import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -26,12 +27,11 @@
public abstract class Output {
public static Builder builder() {
- return new AutoValue_Output.Builder();
+ return new AutoValue_Output.Builder().setRepeatedStringField(Collections.emptyList());
}
public abstract Optional<String> optionalStringField();
- @SuppressWarnings("AutoValueImmutableFields")
public abstract List<String> repeatedStringField();
@AutoValue.Builder
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/Session.kt b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/Session.kt
new file mode 100644
index 0000000..60de640
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/Session.kt
@@ -0,0 +1,21 @@
+/*
+ * 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.appactions.interaction.capabilities.core.testing.spec
+
+import androidx.appactions.interaction.capabilities.core.BaseSession
+
+interface Session : BaseSession<Argument, Output>
\ No newline at end of file
diff --git a/appactions/interaction/interaction-proto/src/main/proto/app_actions_data.proto b/appactions/interaction/interaction-proto/src/main/proto/app_actions_data.proto
index 6a4d67d..3548f99 100644
--- a/appactions/interaction/interaction-proto/src/main/proto/app_actions_data.proto
+++ b/appactions/interaction/interaction-proto/src/main/proto/app_actions_data.proto
@@ -23,7 +23,6 @@
option java_outer_classname = "AppActionsDataProto";
option java_multiple_files = true;
-
message ParamValue {
// If this parameter matched an Entity, `identifier` of that Entity.
optional string identifier = 1;
@@ -86,16 +85,16 @@
}
// Represents the data to describe app actions.
-// Next ID: 3
+// Next ID: 5
message AppActionsContext {
- repeated AppAction actions = 1;
message AppAction {
// Name of the intent. For example: actions.intent.UPDATE_FORM_FIELD
string name = 1;
// One intent can be registered multiple times. Use this field to identify
- // the intents.
+ // the intents. Developers can set this field via `fulfillmentId` in both shortcuts.xml and the
+ // Capability library of the AppInteractionSDK.
string identifier = 2;
repeated IntentParameter params = 4;
@@ -114,6 +113,11 @@
// has optional confirmation and the developer has provided a confirmation
// callback.
bool needs_confirmation = 7;
+
+ // Describes the restrictions needed to execute this action.
+ // It would be set by the app and checked by the assistant to ensure the
+ // restrictions can be supported.
+ repeated Restriction restrictions = 8;
}
// Next ID: 9
@@ -122,7 +126,7 @@
string name = 1;
// Current values of the associated parameter.
- repeated CurrentValue current_value = 7;
+ repeated CurrentValue current_value = 7 [deprecated = true];
// List of possible values for this parameter.
repeated Entity possible_entities = 3;
@@ -150,11 +154,49 @@
// Whether or not this parameter field is focused right now.
// If yes, it usually suggests that Assistant will prompt the value for this
// argument.
- bool is_focused = 8;
+ bool is_focused = 8 [deprecated = true];
reserved 2;
}
+ message AppDialogState {
+ // Each App capability can be associated with multiple dialogs. Use this
+ // field to identify the dialog instance.
+ string dialog_identifier = 1;
+
+ // Identifier of the corresponding capability that this dialog state maps
+ // to. This field maps to AppActionsContext.AppAction.identifier.
+ string fulfillment_identifier = 2;
+
+ // List of BII intent parameters of this dialog.
+ repeated DialogParameter params = 3;
+ }
+
+ message DialogParameter {
+ // The built-in-intent parameter name. For example: "textField.name".
+ string name = 1;
+
+ // Current values of the associated parameter.
+ repeated CurrentValue current_value = 2;
+
+ bool is_focused = 3;
+ }
+
+ // Current version of the protocol. Populated with values from the artifact version of the
+ // interaction-proto Jetpack library.
+ optional Version version = 4;
+
+ // Represents the dynamic capabilities declared by an App. Capabilities
+ // declare the types of actions a developer can take to launch an app and jump
+ // directly to performing a specific task. Dynamic capabilities are not
+ // declared in shortcuts.xml, but are added during runtime.
+ repeated AppAction actions = 1;
+
+ // Represents the current dialog state, which is a list of built-in-intent
+ // parameters and corresponding values from users. App
+ // Dialog is a transaction session of intent and intent parameters.
+ repeated AppDialogState dialog_states = 3;
+
// This field contains the info for current focused text input.
TextInputState text_input_state = 2;
}
@@ -204,18 +246,44 @@
enum Type {
UNKNOWN_TYPE = 0;
- // Assistant is asking to sync the current state with the app.
+ // Assistant is asking to sync the current state with the app. The intent
+ // will be executed if:
+ // - App-side checks have passed:
+ // - no validation failures
+ // - no intent (value) suggestions
+ // - no confirmation suggestions or user has confirmed intent
+ // - Assistant-side checks have passed
SYNC = 1;
// Assistant confirms an ongoing task with the app.
- CONFIRM = 2;
+ // Deprecated: set SyncStatus = INTENT_CONFIRMED instead.
+ CONFIRM = 2 [deprecated = true];
// Assistant cancels an ongoing task of the app.
CANCEL = 3;
// Assistant terminates an ongoing task of the app.
TERMINATE = 4;
}
+ enum SyncStatus {
+ UNKNOWN_SYNC_STATUS = 0;
+ // Assistant-side checks have not passed and the App should not execute
+ // yet even if App-side checks pass.
+ SLOTS_INCOMPLETE = 1;
+ // Assistant-side checks have passed. The App may execute or suggest
+ // confirmation if App-side validation succeeds.
+ SLOTS_COMPLETE = 2;
+ // User confirmed the intent and the App should execute. This indicates
+ // that the App has requested confirmation so it should not request
+ // confirmation again.
+ INTENT_CONFIRMED = 3;
+ }
+
// The current progress of handling the dialog.
- optional Type type = 4;
+ optional Type type = 5;
+
+ // The status of the SYNC request. Only set when fulfillment type == SYNC.
+ optional SyncStatus sync_status = 6;
+
+ reserved 4;
}
// This field should be treated as an optional field. Only the first
@@ -292,3 +360,27 @@
HAS_CONTENT = 2;
}
}
+
+// Versioning to maintain compatibility
+message Version {
+ // The major version.
+ optional uint64 major = 1;
+
+ // The minor version.
+ optional uint64 minor = 2;
+
+ // The patch version.
+ optional uint64 patch = 3;
+
+ // The prerelease version: a series of dot-separated identifiers.
+ optional string prerelease_id = 4;
+}
+
+// Restrictions to run a specific AppAction.
+message Restriction {
+ oneof requirement {
+ // If true, the corresponding AppAction requires assistant to
+ // start dictation.
+ bool text_input = 1;
+ }
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-service/build.gradle b/appactions/interaction/interaction-service/build.gradle
index 7392079..226a274 100644
--- a/appactions/interaction/interaction-service/build.gradle
+++ b/appactions/interaction/interaction-service/build.gradle
@@ -24,9 +24,17 @@
}
dependencies {
+ implementation(libs.grpcAndroid)
+ implementation(libs.grpcBinder)
+ implementation(libs.grpcStub)
implementation(libs.protobufLite)
implementation("androidx.annotation:annotation:1.1.0")
+ implementation("androidx.concurrent:concurrent-futures:1.1.0")
implementation("androidx.wear.tiles:tiles:1.1.0")
+ implementation("javax.annotation:javax.annotation-api:1.3.2")
+ // TODO(b/268709908): Bump this to version 1.52.0 and make available from libs.grpcProtobufLite
+ implementation("io.grpc:grpc-protobuf-lite:1.45.1")
+ implementation(project(":appactions:interaction:interaction-capabilities-core"))
implementation(project(":appactions:interaction:interaction-proto"))
implementation(libs.kotlinStdlib)
@@ -44,6 +52,13 @@
protoc {
artifact = libs.protobufCompiler.get()
}
+ // Configure the codegen plugins
+ plugins {
+ grpc {
+ artifact = 'io.grpc:protoc-gen-grpc-java:1.52.0'
+ }
+ }
+
// Generates the java proto-lite code for the protos in this project. See
// https://github.com/google/protobuf-gradle-plugin#customizing-protobuf-compilation
// for more information.
@@ -54,6 +69,11 @@
option "lite"
}
}
+ task.plugins {
+ grpc {
+ option 'lite'
+ }
+ }
}
}
}
@@ -61,7 +81,9 @@
android {
namespace "androidx.appactions.interaction.service"
defaultConfig {
- minSdkVersion 25
+ // TODO(b/266649259): Temporary bump to 33 to support capabilities-core. Lower back to 25 to
+ // support wear:tiles
+ minSdkVersion 33
}
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/ActionCapabilityCallback.java b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/ActionCapabilityCallback.java
new file mode 100644
index 0000000..0c72af4
--- /dev/null
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/ActionCapabilityCallback.java
@@ -0,0 +1,44 @@
+/*
+ * 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.appactions.interaction.service;
+
+import androidx.annotation.NonNull;
+import androidx.appactions.interaction.capabilities.core.impl.CallbackInternal;
+import androidx.appactions.interaction.capabilities.core.impl.ErrorStatusInternal;
+import androidx.appactions.interaction.proto.FulfillmentResponse;
+import androidx.concurrent.futures.CallbackToFutureAdapter.Completer;
+
+/** Service implementation of the capability library execution callback. */
+final class ActionCapabilityCallback implements CallbackInternal {
+
+ private final Completer<FulfillmentResponse> mCompleter;
+
+ ActionCapabilityCallback(@NonNull Completer<FulfillmentResponse> mCompleter) {
+ this.mCompleter = mCompleter;
+ }
+
+ @Override
+ public void onSuccess(@NonNull FulfillmentResponse fulfillmentResponse) {
+ mCompleter.set(fulfillmentResponse);
+ }
+
+ @Override
+ public void onError(@NonNull ErrorStatusInternal errorStatus) {
+ mCompleter.setException(
+ new CapabilityExecutionException(errorStatus, "Error executing action capability"));
+ }
+}
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionService.java b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionService.java
new file mode 100644
index 0000000..41df1b9
--- /dev/null
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionService.java
@@ -0,0 +1,183 @@
+/*
+ * 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.appactions.interaction.service;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+import android.util.Log;
+
+import androidx.annotation.CallSuper;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appactions.interaction.capabilities.core.ActionCapability;
+import androidx.appactions.interaction.service.proto.AppActionsServiceGrpc;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import io.grpc.Server;
+import io.grpc.binder.AndroidComponentAddress;
+import io.grpc.binder.BinderServerBuilder;
+import io.grpc.binder.IBinderReceiver;
+import io.grpc.binder.SecurityPolicies;
+import io.grpc.binder.SecurityPolicy;
+import io.grpc.binder.ServerSecurityPolicy;
+
+/**
+ * Base service class for the AppInteractionService SDK. This sets up the GRPC on-device server for
+ * communication with Assistant.
+ */
+// TODO(b/267772921): Rewrite public facing class to Kotlin
+public abstract class AppInteractionService extends Service {
+
+ private static final String TAG = "AppInteractionService";
+ private ServerLifecycle mBinderSupplier;
+
+ public AppInteractionService() {}
+
+ /**
+ * Called by the system once after the Assistant binds to the service.
+ *
+ * @return the list of capabilities that this service supports.
+ */
+ @NonNull
+ protected abstract List<ActionCapability> registerCapabilities();
+
+ /**
+ * Sets a custom {@link SecurityPolicy} for the gRPC service. This gives control over which
+ * clients are allowed to bind to your service.
+ *
+ * <p>Overriding this method is <b>not</b> the preferred method for security enforcement. We
+ * recommend developers override {@link #getAllowedApps()} for security needs. Implementing your
+ * own security policy requires significant care, and an understanding of the details and
+ * pitfalls of Android security. If you choose to do so, we <b>strongly</b> recommend you get
+ * such a change reviewed by Android security experts.
+ */
+ @NonNull
+ protected SecurityPolicy getSecurityPolicy() {
+ return SecurityPolicies.anyOf(
+ getSecurityPolicyFromAllowedList(getAllowedApps()).toArray(new SecurityPolicy[0]));
+ }
+
+ /**
+ * Returns a list of the apps {@link AppVerificationInfo} that are allowed to interact with the
+ * app's bound service. This gives control over which clients are allowed to communicate with
+ * the service.
+ *
+ * <p>This is the default method for enforcing security and must be overridden. Developers
+ * should return an empty list should they choose to define their own security by way of
+ * overriding {@link #getSecurityPolicyFromAllowedList}.
+ */
+ @NonNull
+ protected abstract List<AppVerificationInfo> getAllowedApps();
+
+ /**
+ * Sets a custom {@link SecurityPolicy} for the gRPC service given the client's allowed pairs of
+ * package names with corresponding Sha256 signatures. This gives control over which clients are
+ * allowed to bind to your service.
+ *
+ * <p>A SecurityPolicy is returned per supported Assistant. Such as "Google Assistant", "Bixby",
+ * etc.
+ */
+ @NonNull
+ private List<SecurityPolicy> getSecurityPolicyFromAllowedList(
+ List<AppVerificationInfo> verificationInfoList) {
+
+ List<SecurityPolicy> policies = new ArrayList<>();
+ if (verificationInfoList == null || verificationInfoList.isEmpty()) {
+ policies.add(SecurityPolicies.internalOnly());
+ return policies;
+ }
+ for (AppVerificationInfo verificationInfo : verificationInfoList) {
+ policies.add(
+ SecurityPolicies.oneOfSignatureSha256Hash(
+ this.getPackageManager(),
+ verificationInfo.getPackageName(),
+ verificationInfo.getSignatures()));
+ }
+ return policies;
+ }
+
+ @Override
+ @CallSuper
+ public void onCreate() {
+ super.onCreate();
+ IBinderReceiver binderReceiver = new IBinderReceiver();
+ ServerSecurityPolicy serverSecurityPolicy =
+ ServerSecurityPolicy.newBuilder()
+ .servicePolicy(AppActionsServiceGrpc.SERVICE_NAME, getSecurityPolicy())
+ .build();
+ Server server =
+ BinderServerBuilder.forAddress(
+ AndroidComponentAddress.forContext(this), binderReceiver)
+ .securityPolicy(serverSecurityPolicy)
+ .intercept(new RemoteViewsOverMetadataInterceptor())
+ .addService(AppInteractionServiceFactory.create(this))
+ .build();
+
+ mBinderSupplier = new ServerLifecycle(server, binderReceiver);
+ }
+
+ @Override
+ @NonNull
+ public IBinder onBind(@Nullable Intent intent) {
+ return mBinderSupplier.get();
+ }
+
+ @Override
+ @CallSuper
+ public void onDestroy() {
+ if (mBinderSupplier != null) {
+ mBinderSupplier.shutdown();
+ }
+ super.onDestroy();
+ }
+
+ static final class ServerLifecycle {
+ private final Server mServer;
+ private final IBinderReceiver mReceiver;
+ private boolean mStarted;
+
+ ServerLifecycle(Server server, IBinderReceiver receiver) {
+ this.mServer = server;
+ this.mReceiver = receiver;
+ }
+
+ public IBinder get() {
+ synchronized (this) {
+ if (!mStarted) {
+ try {
+ mStarted = true;
+ mServer.start();
+ } catch (IOException ioe) {
+ Log.e(TAG, "Unable to start server " + mServer, ioe);
+ }
+ }
+ return mReceiver.get();
+ }
+ }
+
+ public void shutdown() {
+ if (mStarted) {
+ mServer.shutdownNow();
+ mStarted = false;
+ }
+ }
+ }
+}
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceFactory.java b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceFactory.java
new file mode 100644
index 0000000..59a15f6
--- /dev/null
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceFactory.java
@@ -0,0 +1,44 @@
+/*
+ * 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.appactions.interaction.service;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+import io.grpc.BindableService;
+
+/**
+ * Factory for returning a BindableService from AppInteractionService.
+ *
+ * <p>This class is public because it's used in the testing library.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public final class AppInteractionServiceFactory {
+
+ /**
+ * Creates a new instance of the gRPC service from the developer's AppInteractionService
+ * (android service)
+ */
+ @NonNull
+ public static BindableService create(@NonNull AppInteractionService appInteractionService) {
+ return new AppInteractionServiceGrpcImpl(appInteractionService);
+ }
+
+ private AppInteractionServiceFactory() {}
+}
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.java b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.java
new file mode 100644
index 0000000..8c3a858
--- /dev/null
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.java
@@ -0,0 +1,34 @@
+/*
+ * 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.appactions.interaction.service;
+
+import androidx.appactions.interaction.service.proto.AppActionsServiceGrpc.AppActionsServiceImplBase;
+
+/**
+ * Implementation of {@link AppActionsServiceImplBase} generated from the GRPC proto file. This
+ * class delegates the requests to the appropriate capability session.
+ */
+final class AppInteractionServiceGrpcImpl extends AppActionsServiceImplBase {
+
+ // TODO(b/268069897): Migrate ActionsServiceGrpcImpl.
+ @SuppressWarnings("unused")
+ private final AppInteractionService mAppInteractionService;
+
+ AppInteractionServiceGrpcImpl(AppInteractionService mAppInteractionService) {
+ this.mAppInteractionService = mAppInteractionService;
+ }
+}
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppVerificationInfo.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppVerificationInfo.kt
new file mode 100644
index 0000000..90af3ce
--- /dev/null
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppVerificationInfo.kt
@@ -0,0 +1,65 @@
+/*
+ * 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.appactions.interaction.service
+
+import java.util.Objects
+
+/**
+ * Representation of a client's verified package with a corresponding list of Sha256 signatures.
+ * Used as part of the {@link SecurityPolicy} creation for the grpc service.
+ */
+class AppVerificationInfo
+internal constructor(val packageName: String, val signatures: List<ByteArray>) {
+
+ override fun toString() =
+ "AppVerificationInfo(packageName=$packageName, signaturesSize=$signatures.size)"
+
+ override fun equals(other: Any?): Boolean {
+ return other is AppVerificationInfo &&
+ packageName == other.packageName &&
+ signatures == other.signatures
+ }
+
+ override fun hashCode() = Objects.hash(packageName, signatures)
+
+ /** Builder for constructing an AppVerificationInfo instance. */
+ class Builder {
+ private var packageName: String? = null
+ private var signatures: List<ByteArray> = emptyList()
+
+ /** Set the packageName that will be part of the [AppVerificationInfo] */
+ fun setPackageName(packageName: String) = apply { this.packageName = packageName }
+
+ /** Set the packageName that will be part of the [AppVerificationInfo] */
+ fun addSignature(signatures: List<ByteArray>) = apply { this.signatures = signatures }
+
+ /**
+ * Creates a new instance of [AppVerificationInfo]
+ *
+ * @Throws IllegalArgumentException if packageName is null or signatures are empty.
+ */
+ fun build(): AppVerificationInfo {
+ if (packageName == null) {
+ throw IllegalArgumentException("App verification info packageName is missing.")
+ }
+ if (signatures.isEmpty()) {
+ throw IllegalArgumentException("App verification info signatures are missing.")
+ }
+ return AppVerificationInfo(packageName!!, signatures)
+ }
+ }
+}
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/CapabilityExecutionException.java b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/CapabilityExecutionException.java
new file mode 100644
index 0000000..ffc4686
--- /dev/null
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/CapabilityExecutionException.java
@@ -0,0 +1,34 @@
+/*
+ * 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.appactions.interaction.service;
+
+import androidx.appactions.interaction.capabilities.core.impl.ErrorStatusInternal;
+
+/** Exception that occurs from failure to execute capability when sending fulfillment request. */
+final class CapabilityExecutionException extends RuntimeException {
+
+ private final ErrorStatusInternal mErrorStatus;
+
+ CapabilityExecutionException(ErrorStatusInternal mErrorStatus, String message) {
+ super(message);
+ this.mErrorStatus = mErrorStatus;
+ }
+
+ ErrorStatusInternal getErrorStatus() {
+ return this.mErrorStatus;
+ }
+}
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/RemoteViewsInternal.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/RemoteViewsInternal.kt
index 20bc7a9..5dd03ec 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/RemoteViewsInternal.kt
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/RemoteViewsInternal.kt
@@ -20,20 +20,17 @@
import android.widget.RemoteViews
import android.widget.RemoteViewsService.RemoteViewsFactory
import androidx.annotation.RestrictTo
-import java.util.HashMap
-import java.util.HashSet
-/** Holder for RemoteViews UI response. */
+/** Holder for RemoteViews UI response. */
@RestrictTo(RestrictTo.Scope.LIBRARY)
internal data class RemoteViewsInternal(
val remoteViews: RemoteViews,
val size: SizeF,
val changedViewIds: HashSet<Int> = HashSet<Int>(),
- val remoteViewsFactories: HashMap<Int, RemoteViewsFactory> =
- HashMap<Int, RemoteViewsFactory>()
+ val remoteViewsFactories: HashMap<Int, RemoteViewsFactory> = HashMap<Int, RemoteViewsFactory>()
) {
init {
this.changedViewIds.addAll(changedViewIds)
this.remoteViewsFactories.putAll(remoteViewsFactories)
}
-}
\ No newline at end of file
+}
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/RemoteViewsOverMetadataInterceptor.java b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/RemoteViewsOverMetadataInterceptor.java
new file mode 100644
index 0000000..68866c4
--- /dev/null
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/RemoteViewsOverMetadataInterceptor.java
@@ -0,0 +1,75 @@
+/*
+ * 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.appactions.interaction.service;
+
+import static io.grpc.binder.ParcelableUtils.metadataKey;
+
+import android.widget.RemoteViews;
+
+import androidx.annotation.NonNull;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+import io.grpc.Context;
+import io.grpc.Contexts;
+import io.grpc.ForwardingServerCall.SimpleForwardingServerCall;
+import io.grpc.Metadata;
+import io.grpc.ServerCall;
+import io.grpc.ServerCall.Listener;
+import io.grpc.ServerCallHandler;
+import io.grpc.ServerInterceptor;
+import io.grpc.Status;
+
+/**
+ * Server interceptor that copies the RemoteViews provided in context to metadata.
+ *
+ * @hide
+ */
+final class RemoteViewsOverMetadataInterceptor implements ServerInterceptor {
+
+ private static final String KEY = "RemoteViews-bin";
+ static final Metadata.Key<RemoteViews> METADATA_KEY = metadataKey(KEY, RemoteViews.CREATOR);
+ static final Context.Key<AtomicReference<RemoteViews>> RESPONSE = Context.key("RES-" + KEY);
+
+ static void setRemoteViews(@NonNull RemoteViews remoteViews) {
+ RESPONSE.get().set(remoteViews);
+ }
+
+ @Override
+ @NonNull
+ public <ReqT, RespT> Listener<ReqT> interceptCall(
+ @NonNull ServerCall<ReqT, RespT> call,
+ @NonNull Metadata headers,
+ @NonNull ServerCallHandler<ReqT, RespT> next) {
+ Context context = Context.current().withValue(RESPONSE, new AtomicReference<>());
+
+ return Contexts.interceptCall(
+ context,
+ new SimpleForwardingServerCall<ReqT, RespT>(call) {
+ @Override
+ public void close(Status status, Metadata trailers) {
+ RemoteViews value = RESPONSE.get(context).get();
+ if (value != null) {
+ trailers.put(METADATA_KEY, value);
+ }
+ super.close(status, trailers);
+ }
+ },
+ headers,
+ next);
+ }
+}
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt
index 696f6c2..26bf46d8 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt
@@ -22,7 +22,7 @@
import androidx.wear.tiles.ResourceBuilders
import com.google.protobuf.ByteString
-/** Holder for TileLayout response. */
+/** Holder for TileLayout response. */
@RestrictTo(RestrictTo.Scope.LIBRARY)
internal data class TileLayoutInternal(
val layout: LayoutElementBuilders.Layout,
@@ -35,4 +35,4 @@
.setResources(ByteString.copyFrom(resources.toByteArray()))
.build()
}
-}
\ No newline at end of file
+}
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt
index 2ad53e5..c118e72 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt
@@ -16,18 +16,17 @@
package androidx.appactions.interaction.service
+import android.annotation.SuppressLint
import android.util.SizeF
import android.widget.RemoteViews
import android.widget.RemoteViewsService.RemoteViewsFactory
import androidx.annotation.IdRes
import androidx.wear.tiles.LayoutElementBuilders
import androidx.wear.tiles.ResourceBuilders
-import java.util.HashMap
-import java.util.HashSet
/**
- * A class representing the UI response being returned to the host. A `UiResponse` cannot be
- * built directly, it must be built from a [UiResponse] Builder.
+ * A class representing the UI response being returned to the host. A `UiResponse` cannot be built
+ * directly, it must be built from a [UiResponse] Builder.
*/
class UiResponse {
internal val remoteViewsInternal: RemoteViewsInternal?
@@ -43,7 +42,7 @@
this.tileLayoutInternal = tileLayout
}
- /** Builder for TileLayouts, used in Wear OS. */
+ /** Builder for TileLayouts, used in Wear OS. */
class TileLayoutBuilder {
private var layout: LayoutElementBuilders.Layout? = null
private var resources: ResourceBuilders.Resources? = null
@@ -56,6 +55,7 @@
* @param layout the wear-tile [LayoutElementBuilders.Layout] to be displayed.
* @param resources the resources associated with the layout.
*/
+ @SuppressLint("MissingGetterMatchingBuilder")
fun setTileLayout(
layout: LayoutElementBuilders.Layout,
resources: ResourceBuilders.Resources
@@ -65,13 +65,11 @@
return this
}
- /** Builds the UiResponse. */
- fun build(): UiResponse {
- return UiResponse(TileLayoutInternal(layout!!, resources!!))
- }
+ /** Builds the UiResponse. */
+ fun build() = UiResponse(TileLayoutInternal(layout!!, resources!!))
}
- /** Builder for RemoteViews UI response. */
+ /** Builder for RemoteViews UI response. */
class RemoteViewsUiBuilder {
private var remoteViews: RemoteViews? = null
private var size: SizeF? = null
@@ -84,10 +82,8 @@
* @param remoteViews the `RemoteViews` to be displayed
* @param size the size, in dp, of the RemoteViews being displayed
*/
- fun setRemoteViews(
- remoteViews: RemoteViews,
- size: SizeF?
- ): RemoteViewsUiBuilder {
+ @SuppressLint("MissingGetterMatchingBuilder")
+ fun setRemoteViews(remoteViews: RemoteViews, size: SizeF?): RemoteViewsUiBuilder {
this.remoteViews = remoteViews
this.size = size
return this
@@ -96,9 +92,10 @@
/**
* Add the specified view ID to the list of changed views for RemoteViews collection update.
*
- * Any errors resulting from the provided view IDs will contain
- * "RemoteViewsCollection error: " errors with some message from the host.
+ * Any errors resulting from the provided view IDs will contain "RemoteViewsCollection
+ * error: " errors with some message from the host.
*/
+ @SuppressLint("MissingGetterMatchingBuilder")
fun addViewIdForCollectionUpdate(@IdRes viewId: Int): RemoteViewsUiBuilder {
changedViewIds.add(viewId)
return this
@@ -112,6 +109,7 @@
* @param viewId the id of the collection view
* @param factory a RemoteViewsFactory associated with the collection view
*/
+ @SuppressLint("MissingGetterMatchingBuilder")
fun addRemoteViewsFactory(
@IdRes viewId: Int,
factory: RemoteViewsFactory
@@ -120,16 +118,10 @@
return this
}
- /** Builds the UiResponse. */
- fun build(): UiResponse {
- return UiResponse(
- RemoteViewsInternal(
- remoteViews!!,
- size!!,
- changedViewIds,
- remoteViewsFactories
- )
+ /** Builds the UiResponse. */
+ fun build() =
+ UiResponse(
+ RemoteViewsInternal(remoteViews!!, size!!, changedViewIds, remoteViewsFactories)
)
- }
}
-}
\ No newline at end of file
+}
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/ActionCapabilityCallbackTest.java b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/ActionCapabilityCallbackTest.java
new file mode 100644
index 0000000..9fcf205
--- /dev/null
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/ActionCapabilityCallbackTest.java
@@ -0,0 +1,82 @@
+/*
+ * 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.appactions.interaction.service;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertThrows;
+
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
+import androidx.appactions.interaction.capabilities.core.impl.ErrorStatusInternal;
+import androidx.appactions.interaction.proto.FulfillmentResponse;
+import androidx.appactions.interaction.proto.FulfillmentResponse.StructuredOutput;
+import androidx.appactions.interaction.proto.ParamValue;
+import androidx.concurrent.futures.CallbackToFutureAdapter;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.ExecutionException;
+
+@RunWith(AndroidJUnit4.class)
+public class ActionCapabilityCallbackTest {
+
+ private static final long CB_TIMEOUT = 1000L;
+ private static final FulfillmentResponse RESPONSE =
+ FulfillmentResponse.newBuilder()
+ .setExecutionOutput(
+ FulfillmentResponse.StructuredOutput.newBuilder()
+ .addOutputValues(
+ StructuredOutput.OutputValue.newBuilder()
+ .addValues(
+ ParamValue.newBuilder()
+ .setStringValue("abcd"))))
+ .build();
+
+ @Test
+ public void callbackImpl_callbackSuccess_forwardsToCompleter() throws Exception {
+ ListenableFuture<FulfillmentResponse> future =
+ CallbackToFutureAdapter.getFuture(
+ completer -> {
+ ActionCapabilityCallback cb = new ActionCapabilityCallback(completer);
+ cb.onSuccess(RESPONSE);
+ return "test future";
+ });
+
+ assertThat(future.get(CB_TIMEOUT, MILLISECONDS)).isEqualTo(RESPONSE);
+ }
+
+ @Test
+ public void callbackImpl_callbackError_failsCompleter() throws Exception {
+ ListenableFuture<FulfillmentResponse> future =
+ CallbackToFutureAdapter.getFuture(
+ completer -> {
+ ActionCapabilityCallback cb = new ActionCapabilityCallback(completer);
+ cb.onError(ErrorStatusInternal.CANCELLED);
+ return "test future";
+ });
+
+ assertThat(future.isDone()).isTrue();
+ ExecutionException e =
+ assertThrows(ExecutionException.class, () -> future.get(CB_TIMEOUT, MILLISECONDS));
+ assertThat(e.getCause().getMessage()).isEqualTo("Error executing action capability");
+ }
+}
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppVerificationInfoTest.kt b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppVerificationInfoTest.kt
new file mode 100644
index 0000000..6b0cfee
--- /dev/null
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppVerificationInfoTest.kt
@@ -0,0 +1,38 @@
+/*
+ * 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.appactions.interaction.service
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class AppVerificationInfoTest {
+
+ @Test
+ fun builderPattern() {
+ var verificationInfo: AppVerificationInfo =
+ AppVerificationInfo.Builder()
+ .setPackageName("packageName")
+ .addSignature(listOf(ByteArray(5)))
+ .build()
+
+ assertThat(verificationInfo.packageName).isEqualTo("packageName")
+ assertThat(verificationInfo.signatures).hasSize(1)
+ }
+}
\ No newline at end of file
diff --git a/appcompat/appcompat/build.gradle b/appcompat/appcompat/build.gradle
index a2d862c..44bd7a4 100644
--- a/appcompat/appcompat/build.gradle
+++ b/appcompat/appcompat/build.gradle
@@ -30,6 +30,7 @@
api("androidx.drawerlayout:drawerlayout:1.0.0")
implementation(projectOrArtifact(":lifecycle:lifecycle-runtime"))
implementation("androidx.lifecycle:lifecycle-viewmodel:2.5.1")
+ implementation("androidx.profileinstaller:profileinstaller:1.2.1")
implementation("androidx.resourceinspection:resourceinspection-annotation:1.0.1")
api("androidx.savedstate:savedstate:1.2.0")
@@ -50,12 +51,12 @@
androidTestImplementation(libs.dexmakerMockito, excludes.bytebuddy) // DexMaker has it's own MockMaker
androidTestImplementation(projectOrArtifact(":lifecycle:lifecycle-viewmodel"))
androidTestImplementation("androidx.lifecycle:lifecycle-runtime-testing:2.5.1", {
- // Needed to ensure that the same version of lifecycle-runtime-ktx
- // is pulled into main and androidTest configurations. Otherwise,
- // potentially leads to confusing errors about resolution
- // ambiguity, especially from playground build which replaces
- // project dependency with snapshot artifacts.
- exclude group: "androidx.lifecycle", module: "lifecycle-runtime-ktx"
+ // Needed to ensure that the same version of lifecycle-runtime-ktx
+ // is pulled into main and androidTest configurations. Otherwise,
+ // potentially leads to confusing errors about resolution
+ // ambiguity, especially from playground build which replaces
+ // project dependency with snapshot artifacts.
+ exclude group: "androidx.lifecycle", module: "lifecycle-runtime-ktx"
})
androidTestImplementation(project(":internal-testutils-runtime"))
androidTestImplementation(project(":internal-testutils-appcompat"), {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseKeyEventsTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseKeyEventsTestCase.kt
index 1648e09..673e781 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseKeyEventsTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseKeyEventsTestCase.kt
@@ -98,6 +98,50 @@
}
@Test
+ @MediumTest
+ fun testBackDismissesActionModeTwice() {
+ with(ActivityScenario.launch(activityClass)) {
+ val destroyed = AtomicBoolean()
+ val scenario = (this as? ActivityScenario<BaseTestActivity>)!!
+ val callback = object : ActionMode.Callback {
+ override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
+ mode.menuInflater.inflate(R.menu.sample_actions, menu)
+ return true
+ }
+
+ override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
+ return false
+ }
+
+ override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
+ return false
+ }
+
+ override fun onDestroyActionMode(mode: ActionMode) {
+ destroyed.set(true)
+ }
+ }
+
+ scenario.withActivity {
+ startSupportActionMode(callback)!!
+ }
+
+ pressBack()
+ PollingCheck.waitFor { destroyed.get() }
+
+ // Now try to dismiss the ActionMode a second time
+ destroyed.set(false)
+
+ scenario.withActivity {
+ startSupportActionMode(callback)!!
+ }
+
+ pressBack()
+ PollingCheck.waitFor { destroyed.get() }
+ }
+ }
+
+ @Test
@LargeTest
@Throws(InterruptedException::class)
fun testBackCollapsesActionView() {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesForegroundDialogTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesForegroundDialogTestCase.kt
index 87fed25..97e74d5 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesForegroundDialogTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesForegroundDialogTestCase.kt
@@ -28,6 +28,7 @@
import androidx.testutils.LifecycleOwnerUtils.waitUntilState
import junit.framework.TestCase.assertNotSame
import org.junit.Before
+import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -46,6 +47,7 @@
baseLocales = LocalesUpdateActivity.getConfigLocales(rule.activity.resources.configuration)
}
+ @Ignore // b/266748759
@Test
fun testLocalesChangeWithForegroundDialog() {
val firstActivity = rule.activity
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
index daba672..dca328a 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
@@ -378,6 +378,7 @@
mBackCallback = Api33Impl.registerOnBackPressedCallback(mDispatcher, this);
} else if (!shouldRegister && mBackCallback != null) {
Api33Impl.unregisterOnBackInvokedCallback(mDispatcher, mBackCallback);
+ mBackCallback = null;
}
}
}
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 acb2ed1..bf470fd 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
@@ -1518,6 +1518,128 @@
}
@Test
+ public void testQueryIndexableLongProperty_numericSearchEnabledSucceeds() throws Exception {
+ assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.NUMERIC_SEARCH));
+
+ // Schema registration
+ AppSearchSchema transactionSchema = new AppSearchSchema.Builder("transaction")
+ .addProperty(new LongPropertyConfig.Builder("price")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(LongPropertyConfig.INDEXING_TYPE_RANGE)
+ .build()
+ ).addProperty(new LongPropertyConfig.Builder("cost")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(LongPropertyConfig.INDEXING_TYPE_RANGE)
+ .build()
+ ).build();
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder().addSchemas(transactionSchema).build()).get();
+
+ // Index some documents
+ GenericDocument doc1 =
+ new GenericDocument.Builder<>("namespace", "id1", "transaction")
+ .setPropertyLong("price", 10)
+ .setCreationTimestampMillis(1000)
+ .build();
+ GenericDocument doc2 =
+ new GenericDocument.Builder<>("namespace", "id2", "transaction")
+ .setPropertyLong("price", 25)
+ .setCreationTimestampMillis(1000)
+ .build();
+ GenericDocument doc3 =
+ new GenericDocument.Builder<>("namespace", "id3", "transaction")
+ .setPropertyLong("cost", 2)
+ .setCreationTimestampMillis(1000)
+ .build();
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(doc1, doc2, doc3).build()));
+
+ // Query for the document
+ SearchResults searchResults = mDb1.search("price < 20",
+ new SearchSpec.Builder()
+ .setNumericSearchEnabled(true)
+ .build());
+ List<GenericDocument> documents = convertSearchResultsToDocuments(searchResults);
+ assertThat(documents).hasSize(1);
+ assertThat(documents.get(0)).isEqualTo(doc1);
+
+ searchResults = mDb1.search("price == 25",
+ new SearchSpec.Builder()
+ .setNumericSearchEnabled(true)
+ .build());
+ documents = convertSearchResultsToDocuments(searchResults);
+ assertThat(documents).hasSize(1);
+ assertThat(documents.get(0)).isEqualTo(doc2);
+
+ searchResults = mDb1.search("cost > 2",
+ new SearchSpec.Builder()
+ .setNumericSearchEnabled(true)
+ .build());
+ documents = convertSearchResultsToDocuments(searchResults);
+ assertThat(documents).isEmpty();
+
+ searchResults = mDb1.search("cost >= 2",
+ new SearchSpec.Builder()
+ .setNumericSearchEnabled(true)
+ .build());
+ documents = convertSearchResultsToDocuments(searchResults);
+ assertThat(documents).hasSize(1);
+ assertThat(documents.get(0)).isEqualTo(doc3);
+
+ searchResults = mDb1.search("price <= 25",
+ new SearchSpec.Builder()
+ .setNumericSearchEnabled(true)
+ .build());
+ documents = convertSearchResultsToDocuments(searchResults);
+ assertThat(documents).hasSize(2);
+ assertThat(documents.get(0)).isEqualTo(doc2);
+ assertThat(documents.get(1)).isEqualTo(doc1);
+ }
+
+ @Test
+ public void testQueryIndexableLongProperty_numericSearchNotEnabled() throws Exception {
+ assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.NUMERIC_SEARCH));
+
+ // Schema registration
+ AppSearchSchema transactionSchema = new AppSearchSchema.Builder("transaction")
+ .addProperty(new LongPropertyConfig.Builder("price")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(LongPropertyConfig.INDEXING_TYPE_RANGE)
+ .build()
+ ).build();
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder().addSchemas(transactionSchema).build()).get();
+
+ // Index some documents
+ GenericDocument doc =
+ new GenericDocument.Builder<>("namespace", "id1", "transaction")
+ .setPropertyLong("price", 10)
+ .setCreationTimestampMillis(1000)
+ .build();
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
+
+ // TODO(b/208654892); Remove setListFilterQueryLanguageEnabled once advanced query is fully
+ // supported.
+ // Query for the document
+ // Use advanced query but disable NUMERIC_SEARCH in the SearchSpec.
+ SearchResults searchResults = mDb1.search("price < 20",
+ new SearchSpec.Builder()
+ .setListFilterQueryLanguageEnabled(true)
+ .setNumericSearchEnabled(false)
+ .build());
+
+ Throwable failResult = assertThrows(
+ ExecutionException.class,
+ () -> searchResults.getNextPageAsync().get()).getCause();
+ assertThat(failResult).isInstanceOf(AppSearchException.class);
+ AppSearchException exception = (AppSearchException) failResult;
+ assertThat(exception.getResultCode()).isEqualTo(RESULT_INVALID_ARGUMENT);
+ assertThat(exception).hasMessageThat().contains("Attempted use of unenabled feature");
+ assertThat(exception).hasMessageThat().contains(Features.NUMERIC_SEARCH);
+ }
+
+ @Test
public void testQuery_relevanceScoring() throws Exception {
// Schema registration
mDb1.setSchemaAsync(
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
index 21c1ce4..4a4af6c 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
@@ -26,7 +26,6 @@
* the feature will be available forever on that AppSearch storage implementation, at that
* Android API level, on that device.
*/
-// @exportToFramework:copyToPath(testing/testutils/src/android/app/appsearch/testutil/external/Features.java)
public interface Features {
/**
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java
index bfb9609..9f951fd 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java
@@ -452,9 +452,6 @@
/**
* Returns whether the {@link Features#NUMERIC_SEARCH} feature is enabled.
- *
- * TODO(b/259744228): add more documentation about the numeric search feature and when it
- * needs to be enabled.
*/
public boolean isNumericSearchEnabled() {
return getEnabledFeatures().contains(Features.NUMERIC_SEARCH);
@@ -462,9 +459,6 @@
/**
* Returns whether the {@link Features#VERBATIM_SEARCH} feature is enabled.
- *
- * TODO(b/204333391): add more documentation about the verbatim search feature and when it
- * needs to be enabled.
*/
public boolean isVerbatimSearchEnabled() {
return getEnabledFeatures().contains(Features.VERBATIM_SEARCH);
@@ -472,9 +466,6 @@
/**
* Returns whether the {@link Features#LIST_FILTER_QUERY_LANGUAGE} feature is enabled.
- *
- * TODO(b/208654892): add more documentation about the list filter query language feature and
- * when it needs to be enabled.
*/
public boolean isListFilterQueryLanguageEnabled() {
return getEnabledFeatures().contains(Features.LIST_FILTER_QUERY_LANGUAGE);
@@ -1283,12 +1274,15 @@
*
* @param enabled Enables the feature if true, otherwise disables it.
*
- * TODO(b/259744228): add more documentation about the numeric search feature and when it
- * needs to be enabled.
+ * <p>If disabled, disallows use of
+ * {@link AppSearchSchema.LongPropertyConfig#INDEXING_TYPE_RANGE} and all other numeric
+ * querying features.
*/
+ // @exportToFramework:startStrip()
@RequiresFeature(
enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
name = Features.NUMERIC_SEARCH)
+ // @exportToFramework:endStrip()
@NonNull
public Builder setNumericSearchEnabled(boolean enabled) {
modifyEnabledFeature(Features.NUMERIC_SEARCH, enabled);
@@ -1301,12 +1295,19 @@
*
* @param enabled Enables the feature if true, otherwise disables it
*
- * TODO(b/204333391): add more documentation about the verbatim search feature and when
- * it needs to be enabled.
+ * <p>If disabled, disallows use of
+ * {@link AppSearchSchema.StringPropertyConfig#TOKENIZER_TYPE_VERBATIM} and all other
+ * verbatim search features within the query language that allows clients to search
+ * using the verbatim string operator.
+ *
+ * <p>Ex. The verbatim string operator '"foo/bar" OR baz' will ensure that 'foo/bar' is
+ * treated as a single 'verbatim' token.
*/
+ // @exportToFramework:startStrip()
@RequiresFeature(
enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
name = Features.VERBATIM_SEARCH)
+ // @exportToFramework:endStrip()
@NonNull
public Builder setVerbatimSearchEnabled(boolean enabled) {
modifyEnabledFeature(Features.VERBATIM_SEARCH, enabled);
@@ -1319,12 +1320,34 @@
*
* @param enabled Enables the feature if true, otherwise disables it.
*
- * TODO(b/208654892): add more documentation about the list filter query language feature
- * and when it needs to be enabled.
+ * This feature covers the expansion of the query language to conform to the definition
+ * of the list filters language (https://aip.dev/160). This includes:
+ * <ul>
+ * <li>addition of explicit 'AND' and 'NOT' operators</li>
+ * <li>property restricts are allowed with grouping (ex. "prop:(a OR b)")</li>
+ * <li>addition of custom functions to control matching</li>
+ * </ul>
+ *
+ * <p>The newly added custom functions covered by this feature are:
+ * <ul>
+ * <li>createList(String...)</li>
+ * <li>termSearch(String, List<String>)</li>
+ * </ul>
+ *
+ * <p>createList takes a variable number of strings and returns a list of strings.
+ * It is for use with termSearch.
+ *
+ * <p>termSearch takes a query string that will be parsed according to the supported
+ * query language and an optional list of strings that specify the properties to be
+ * restricted to. This exists as a convenience for multiple property restricts. So,
+ * for example, the query "(subject:foo OR body:foo) (subject:bar OR body:bar)"
+ * could be rewritten as "termSearch(\"foo bar\", createList(\"subject\", \"bar\"))"
*/
+ // @exportToFramework:startStrip()
@RequiresFeature(
enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
name = Features.LIST_FILTER_QUERY_LANGUAGE)
+ // @exportToFramework:endStrip()
@NonNull
public Builder setListFilterQueryLanguageEnabled(boolean enabled) {
modifyEnabledFeature(Features.LIST_FILTER_QUERY_LANGUAGE, enabled);
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 65ac589..c2348b5 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
@@ -47,7 +47,7 @@
import org.junit.runners.Parameterized
import org.junit.runners.Parameterized.Parameters
-private const val tracingPerfettoVersion = "1.0.0-alpha10" // TODO(224510255): get by 'reflection'
+private const val tracingPerfettoVersion = "1.0.0-alpha11" // TODO(224510255): get by 'reflection'
private const val minSupportedSdk = Build.VERSION_CODES.R // TODO(234351579): Support API < 30
@RunWith(Parameterized::class)
diff --git a/benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/CompilationModeTest.kt b/benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/CompilationModeTest.kt
index f35b192..a1eda85 100644
--- a/benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/CompilationModeTest.kt
+++ b/benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/CompilationModeTest.kt
@@ -17,6 +17,7 @@
package androidx.benchmark.integration.macrobenchmark
import android.content.Intent
+import android.os.Build
import androidx.benchmark.Shell
import androidx.benchmark.macro.CompilationMode
import androidx.benchmark.macro.ExperimentalMacrobenchmarkApi
@@ -28,6 +29,7 @@
import androidx.test.uiautomator.Until
import androidx.testutils.getStartupMetrics
import com.google.common.truth.Truth.assertThat
+import org.junit.Assume.assumeTrue
import org.junit.Rule
import org.junit.Test
@@ -51,8 +53,29 @@
assertThat(getCompilationMode()).isEqualTo("speed")
}
+ /**
+ * Validate that compilation can be reset.
+ *
+ * Note, this test is skipped on rooted API 29/30, since "cmd package dump" result fails to
+ * update compilation state correctly. Repro:
+ * ```
+ * adb shell cmd package compile -m speed androidx.benchmark.integration.macrobenchmark.target
+ * adb shell cmd package compile --reset androidx.benchmark.integration.macrobenchmark.target
+ * adb shell cmd package dump androidx.benchmark.integration.macrobenchmark.target | grep -A3 Dexopt
+ * ```
+ *
+ * Which prints speed, though it should be 'verify':
+ * ```
+ * Dexopt state:
+ * [androidx.benchmark.integration.macrobenchmark.target]
+ * path: /data/app/~~Jn8HSPcIEU6RRXJknWt2ZA==/androidx.benchmark.integration.macrobenchmark.target-CM7MqDZo6wGLb-7Auxqv8g==/base.apk
+ * arm64: [status=speed] [reason=unknown]
+ * ```
+ */
@Test
fun compilationModeNone_shouldSetProfileVerified() {
+ assumeTrue(Build.VERSION.SDK_INT >= 31 || !Shell.isSessionRooted())
+
// Perform a compilation profile reset and then compile to `speed`.
runWithCompilationMode(CompilationMode.Full())
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/experimental/BluetoothLe.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/experimental/BluetoothLe.kt
index c6555f4..9513284 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/experimental/BluetoothLe.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/experimental/BluetoothLe.kt
@@ -26,6 +26,9 @@
import android.bluetooth.le.AdvertiseCallback
import android.bluetooth.le.AdvertiseData
import android.bluetooth.le.AdvertiseSettings
+import android.bluetooth.le.ScanCallback
+import android.bluetooth.le.ScanResult
+import android.bluetooth.le.ScanSettings
import android.content.Context
import android.util.Log
import kotlinx.coroutines.channels.awaitClose
@@ -46,6 +49,33 @@
// Permissions are handled by MainActivity requestBluetoothPermissions
@SuppressLint("MissingPermission")
+ fun scan(
+ settings: ScanSettings
+ ): Flow<ScanResult> =
+ callbackFlow {
+ val callback = object : ScanCallback() {
+ override fun onScanResult(callbackType: Int, result: ScanResult) {
+ trySend(result)
+ }
+
+ override fun onScanFailed(errorCode: Int) {
+ Log.d(TAG, "onScanFailed() called with: errorCode = $errorCode")
+ }
+ }
+
+ val bluetoothAdapter = bluetoothManager?.adapter
+ val bleScanner = bluetoothAdapter?.bluetoothLeScanner
+
+ bleScanner?.startScan(null, settings, callback)
+
+ awaitClose {
+ Log.d(TAG, "awaitClose() called")
+ bleScanner?.stopScan(callback)
+ }
+ }
+
+ // Permissions are handled by MainActivity requestBluetoothPermissions
+ @SuppressLint("MissingPermission")
fun advertise(
settings: AdvertiseSettings,
data: AdvertiseData
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxFragment.kt
index 6a9e7ed..bc1e69a 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxFragment.kt
@@ -17,13 +17,10 @@
package androidx.bluetooth.integration.testapp.ui.bluetoothx
import android.annotation.SuppressLint
-import android.bluetooth.BluetoothManager
import android.bluetooth.le.AdvertiseData
import android.bluetooth.le.AdvertiseSettings
-import android.bluetooth.le.ScanCallback
import android.bluetooth.le.ScanResult
import android.bluetooth.le.ScanSettings
-import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
@@ -36,6 +33,7 @@
import androidx.bluetooth.integration.testapp.experimental.AdvertiseResult
import androidx.bluetooth.integration.testapp.experimental.BluetoothLe
import androidx.bluetooth.integration.testapp.experimental.GattServerCallback
+import androidx.bluetooth.integration.testapp.ui.common.ScanResultAdapter
import androidx.bluetooth.integration.testapp.ui.framework.FwkFragment
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
@@ -43,9 +41,6 @@
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
-import kotlinx.coroutines.channels.awaitClose
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.launch
class BtxFragment : Fragment() {
@@ -54,6 +49,8 @@
const val TAG = "BtxFragment"
}
+ private var scanResultAdapter: ScanResultAdapter? = null
+
private lateinit var bluetoothLe: BluetoothLe
private lateinit var btxViewModel: BtxViewModel
@@ -83,6 +80,9 @@
bluetoothLe = BluetoothLe(requireContext())
+ scanResultAdapter = ScanResultAdapter { scanResult -> scanResultOnClick(scanResult) }
+ binding.recyclerView.adapter = scanResultAdapter
+
binding.buttonScan.setOnClickListener {
if (scanJob?.isActive == true) {
scanJob?.cancel()
@@ -114,32 +114,6 @@
private val scanScope = CoroutineScope(Dispatchers.Main + Job())
private var scanJob: Job? = null
- // Permissions are handled by MainActivity requestBluetoothPermissions
- @SuppressLint("MissingPermission")
- fun scan(settings: ScanSettings): Flow<ScanResult> = callbackFlow {
- val callback = object : ScanCallback() {
- override fun onScanResult(callbackType: Int, result: ScanResult) {
- trySend(result)
- }
-
- override fun onScanFailed(errorCode: Int) {
- Log.d(TAG, "onScanFailed() called with: errorCode = $errorCode")
- }
- }
-
- val bluetoothManager =
- context?.getSystemService(Context.BLUETOOTH_SERVICE) as? BluetoothManager
- val bluetoothAdapter = bluetoothManager?.adapter
- val bleScanner = bluetoothAdapter?.bluetoothLeScanner
-
- bleScanner?.startScan(null, settings, callback)
-
- awaitClose {
- Log.d(TAG, "awaitClose() called")
- bleScanner?.stopScan(callback)
- }
- }
-
private fun startScan() {
Log.d(TAG, "startScan() called")
@@ -153,12 +127,21 @@
binding.buttonScan.text = getString(R.string.stop_scanning)
- scan(scanSettings).collect {
- Log.d(TAG, "ScanResult collected: $it")
- }
+ bluetoothLe.scan(scanSettings)
+ .collect {
+ Log.d(TAG, "ScanResult collected: $it")
+
+ btxViewModel.scanResults[it.device.address] = it
+ scanResultAdapter?.submitList(btxViewModel.scanResults.values.toMutableList())
+ scanResultAdapter?.notifyItemInserted(btxViewModel.scanResults.size)
+ }
}
}
+ private fun scanResultOnClick(scanResult: ScanResult) {
+ Log.d(TAG, "scanResultOnClick() called with: scanResult = $scanResult")
+ }
+
private val advertiseScope = CoroutineScope(Dispatchers.Main + Job())
private var advertiseJob: Job? = null
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxViewModel.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxViewModel.kt
index 587047c..8e89270 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxViewModel.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxViewModel.kt
@@ -16,6 +16,7 @@
package androidx.bluetooth.integration.testapp.ui.bluetoothx
+import android.bluetooth.le.ScanResult
import android.util.Log
import androidx.lifecycle.ViewModel
@@ -25,6 +26,8 @@
const val TAG = "BtxViewModel"
}
+ val scanResults = mutableMapOf<String, ScanResult>()
+
init {
Log.d(TAG, "init called")
}
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ScanResultAdapter.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ScanResultAdapter.kt
new file mode 100644
index 0000000..ed937a5
--- /dev/null
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ScanResultAdapter.kt
@@ -0,0 +1,74 @@
+/*
+ * 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.integration.testapp.ui.common
+
+import android.bluetooth.le.ScanResult
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+
+import androidx.bluetooth.integration.testapp.R
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+
+class ScanResultAdapter(private val onClick: (ScanResult) -> Unit) :
+ ListAdapter<ScanResult, ScanResultAdapter.ScanResultViewHolder>(ScanResultDiffCallback) {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ScanResultViewHolder {
+ val view = LayoutInflater.from(parent.context)
+ .inflate(R.layout.scan_result_item, parent, false)
+ return ScanResultViewHolder(view, onClick)
+ }
+
+ override fun onBindViewHolder(holder: ScanResultViewHolder, position: Int) {
+ val scanResult = getItem(position)
+ holder.bind(scanResult)
+ }
+
+ class ScanResultViewHolder(itemView: View, val onClick: (ScanResult) -> Unit) :
+ RecyclerView.ViewHolder(itemView) {
+
+ private val scanResultTextView: TextView = itemView.findViewById(R.id.text_scan_result)
+ private var currentScanResult: ScanResult? = null
+
+ init {
+ itemView.setOnClickListener {
+ currentScanResult?.let {
+ onClick(it)
+ }
+ }
+ }
+
+ fun bind(scanResult: ScanResult) {
+ currentScanResult = scanResult
+
+ scanResultTextView.text = scanResult.toString()
+ }
+ }
+}
+
+object ScanResultDiffCallback : DiffUtil.ItemCallback<ScanResult>() {
+ override fun areItemsTheSame(oldItem: ScanResult, newItem: ScanResult): Boolean {
+ return oldItem == newItem
+ }
+
+ override fun areContentsTheSame(oldItem: ScanResult, newItem: ScanResult): Boolean {
+ return oldItem.device == newItem.device
+ }
+}
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkFragment.kt
index 8e68b13..42431d7 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkFragment.kt
@@ -40,6 +40,7 @@
import android.widget.Toast
import androidx.bluetooth.integration.testapp.R
import androidx.bluetooth.integration.testapp.databinding.FragmentFwkBinding
+import androidx.bluetooth.integration.testapp.ui.common.ScanResultAdapter
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
@@ -50,12 +51,18 @@
val ServiceUUID: ParcelUuid = ParcelUuid.fromString("0000b81d-0000-1000-8000-00805f9b34fb")
}
+ private var scanResultAdapter: ScanResultAdapter? = null
+
private val scanCallback = object : ScanCallback() {
- override fun onScanResult(callbackType: Int, result: ScanResult?) {
+ override fun onScanResult(callbackType: Int, result: ScanResult) {
Log.d(TAG, "onScanResult() called with: callbackType = $callbackType, result = $result")
+
+ fwkViewModel.scanResults[result.device.address] = result
+ scanResultAdapter?.submitList(fwkViewModel.scanResults.values.toMutableList())
+ scanResultAdapter?.notifyItemInserted(fwkViewModel.scanResults.size)
}
- override fun onBatchScanResults(results: MutableList<ScanResult>?) {
+ override fun onBatchScanResults(results: MutableList<ScanResult>) {
Log.d(TAG, "onBatchScanResults() called with: results = $results")
}
@@ -101,6 +108,9 @@
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ scanResultAdapter = ScanResultAdapter { scanResult -> scanResultOnClick(scanResult) }
+ binding.recyclerView.adapter = scanResultAdapter
+
binding.buttonScan.setOnClickListener {
if (isScanning) stopScan()
else startScan()
@@ -169,6 +179,10 @@
_binding?.buttonScan?.text = getString(R.string.scan_using_fwk)
}
+ private fun scanResultOnClick(scanResult: ScanResult) {
+ Log.d(TAG, "scanResultOnClick() called with: scanResult = $scanResult")
+ }
+
// Permissions are handled by MainActivity requestBluetoothPermissions
@SuppressLint("MissingPermission")
private fun startAdvertise() {
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkViewModel.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkViewModel.kt
index d72fa738..855f208 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkViewModel.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkViewModel.kt
@@ -16,6 +16,7 @@
package androidx.bluetooth.integration.testapp.ui.framework
+import android.bluetooth.le.ScanResult
import android.util.Log
import androidx.lifecycle.ViewModel
import kotlinx.coroutines.CoroutineScope
@@ -32,6 +33,8 @@
const val TAG = "FwkViewModel"
}
+ val scanResults = mutableMapOf<String, ScanResult>()
+
init {
Log.d(TAG, "init called")
}
diff --git a/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_btx.xml b/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_btx.xml
index 1a750d7..ef892a9 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_btx.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_btx.xml
@@ -52,4 +52,14 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/switch_advertise" />
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/recycler_view"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ app:layoutManager="LinearLayoutManager"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/switch_gatt_server"
+ tools:itemCount="3"
+ tools:listitem="@layout/scan_result_item" />
+
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_fwk.xml b/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_fwk.xml
index 48c20bf..46c919e 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_fwk.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_fwk.xml
@@ -52,4 +52,14 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/switch_advertise" />
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/recycler_view"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ app:layoutManager="LinearLayoutManager"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/switch_gatt_server"
+ tools:itemCount="3"
+ tools:listitem="@layout/scan_result_item" />
+
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/bluetooth/integration-tests/testapp/src/main/res/layout/scan_result_item.xml b/bluetooth/integration-tests/testapp/src/main/res/layout/scan_result_item.xml
new file mode 100644
index 0000000..5dc2df1
--- /dev/null
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/scan_result_item.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/text_scan_result"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="16dp"
+ tools:text="canResult{device=1A:52:12:2A:1C:3C, scanRecord=ScanRecord [mAdvertiseFlags=26,
+ mServiceUuids=null, mServiceSolicitationUuids=[], mManufacturerSpecificData={76=[9, 6, 3,
+ -56, 100, 64, 99, -17]}, mServiceData={}, mTxPowerLevel=-2147483648, mDeviceName=null]" />
+
+</FrameLayout>
diff --git a/buildSrc-tests/src/test/kotlin/androidx/build/metalava/UpdateApiTaskTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/metalava/UpdateApiTaskTest.kt
new file mode 100644
index 0000000..a502b62d
--- /dev/null
+++ b/buildSrc-tests/src/test/kotlin/androidx/build/metalava/UpdateApiTaskTest.kt
@@ -0,0 +1,69 @@
+/*
+ * 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.build.metalava
+
+import org.gradle.api.GradleException
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertThrows
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TemporaryFolder
+
+class UpdateApiTaskTest {
+ @Rule
+ @JvmField
+ val tmpFolder = TemporaryFolder()
+
+ @Test
+ fun testCompareLineCount() {
+ val testCases = mapOf(
+ "No lines" to 0,
+ "Has one\nline" to 1,
+ "Has\ntwo\nlines" to 2,
+ "" to 0,
+ "\n" to 1,
+ "\n\n" to 2
+ )
+
+ for ((text, count) in testCases) {
+ assertEquals(compareLineCount(text, count), 0)
+ }
+ }
+
+ @Test
+ fun testCopyThrowsExceptionOnDiff() {
+ val source = tmpFolder.newFile().apply {
+ writeText("""
+// Signature format: 4.0
+ """.trimIndent())
+ }
+ val dest = tmpFolder.newFile().apply {
+ writeText("""
+// Signature format: 4.0
+package androidx.core.accessibilityservice {
+ public final class AccessibilityServiceInfoCompat {
+ method public static String capabilityToString(int);
+ }
+}
+ """.trimIndent())
+ }
+
+ assertThrows(GradleException::class.java) {
+ copy(source, dest, false)
+ }
+ }
+}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
index 1accf72..1d529cd 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
@@ -157,6 +157,7 @@
error.add("MissingColorAlphaChannel")
error.add("ModifierFactoryReturnType")
error.add("ModifierFactoryExtensionFunction")
+ error.add("ModifierNodeInspectableProperties")
error.add("ModifierParameter")
error.add("MutableCollectionMutableState")
error.add("UnnecessaryComposedModifier")
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
index b5e2ada..cd96eac 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
@@ -134,6 +134,15 @@
return projectPathsInSameGroup
}
+ /**
+ * Returns a string explaining the value of mavenGroup
+ */
+ fun explainMavenGroup(): List<String> {
+ val explanationBuilder = mutableListOf<String>()
+ chooseLibraryGroup(explanationBuilder)
+ return explanationBuilder
+ }
+
private fun lazyReadFile(fileName: String): Provider<String> {
val fileProperty = project.objects.fileProperty().fileValue(
File(project.getSupportRootFolder(), fileName)
@@ -141,8 +150,8 @@
return project.providers.fileContents(fileProperty).asText
}
- private fun chooseLibraryGroup(): LibraryGroup? {
- return getLibraryGroupFromProjectPath(project.path)
+ private fun chooseLibraryGroup(explanationBuilder: MutableList<String>? = null): LibraryGroup? {
+ return getLibraryGroupFromProjectPath(project.path, explanationBuilder)
}
private fun substringBeforeLastColon(projectPath: String): String {
@@ -151,30 +160,45 @@
}
// gets the library group from the project path, including special cases
- private fun getLibraryGroupFromProjectPath(projectPath: String): LibraryGroup? {
+ private fun getLibraryGroupFromProjectPath(
+ projectPath: String,
+ explanationBuilder: MutableList<String>? = null
+ ): LibraryGroup? {
val overridden = overrideLibraryGroupsByProjectPath.get(projectPath)
+ if (explanationBuilder != null) {
+ explanationBuilder.add(
+ "Library group (in libraryversions.toml) having" +
+ " overrideInclude=[\"$projectPath\"] is $overridden"
+ )
+ }
if (overridden != null)
return overridden
- val result = getStandardLibraryGroupFromProjectPath(projectPath)
+ val result = getStandardLibraryGroupFromProjectPath(projectPath, explanationBuilder)
if (result != null)
return result
// samples are allowed to be nested deeper
if (projectPath.contains("samples")) {
val parentPath = substringBeforeLastColon(projectPath)
- return getLibraryGroupFromProjectPath(parentPath)
+ return getLibraryGroupFromProjectPath(parentPath, explanationBuilder)
}
return null
}
// simple function to get the library group from the project path, without special cases
- private fun getStandardLibraryGroupFromProjectPath(projectPath: String): LibraryGroup? {
+ private fun getStandardLibraryGroupFromProjectPath(
+ projectPath: String,
+ explanationBuilder: MutableList<String>?
+ ): LibraryGroup? {
// Get the text of the library group, something like "androidx.core"
val parentPath = substringBeforeLastColon(projectPath)
- if (parentPath == "")
+ if (parentPath == "") {
+ if (explanationBuilder != null)
+ explanationBuilder.add("Parent path for $projectPath is empty")
return null
+ }
// convert parent project path to groupId
val groupIdText = if (projectPath.startsWith(":external")) {
projectPath.replace(":external:", "")
@@ -183,7 +207,13 @@
}
// get the library group having that text
- return libraryGroupsByGroupId.get(groupIdText)
+ val result = libraryGroupsByGroupId.get(groupIdText)
+ if (explanationBuilder != null) {
+ explanationBuilder.add(
+ "Library group (in libraryversions.toml) having group=\"$groupIdText\" is $result"
+ )
+ }
+ return result
}
private fun chooseProjectVersion() {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index 6d46882..b672a80 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -1043,20 +1043,8 @@
* Guarantees unique names for the APKs, and modifies some of the suffixes. The APK name is used
* to determine what gets run by our test runner
*/
-fun String.renameApkForTesting(projectPath: String, hasBenchmarkPlugin: Boolean): String {
- val name =
- if (projectPath.contains("media") && projectPath.contains("version-compat-tests")) {
- // Exclude media*:version-compat-tests modules from
- // existing support library presubmit tests.
- this.replace("-debug-androidTest", "")
- } else if (hasBenchmarkPlugin) {
- this.replace("-androidTest", "-androidBenchmark")
- } else if (projectPath.endsWith("macrobenchmark")) {
- this.replace("-androidTest", "-androidMacrobenchmark")
- } else {
- this
- }
- return "${projectPath.asFilenamePrefix()}_$name"
+fun String.renameApkForTesting(projectPath: String): String {
+ return "${projectPath.asFilenamePrefix()}_$this"
}
fun Project.hasBenchmarkPlugin(): Boolean {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
index 6fd8e08..d9ff238 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
@@ -137,7 +137,6 @@
buildOnServerTask.dependsOn("${project.path}:jar")
}
}
- project.configureRootProjectForLint()
tasks.register(AndroidXImplPlugin.BUILD_TEST_APKS_TASK)
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
index 6334db6..6cbb153 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
@@ -17,7 +17,6 @@
package androidx.build
import com.android.build.api.dsl.Lint
-import com.android.build.gradle.internal.lint.AndroidLintAnalysisTask
import com.android.build.gradle.internal.lint.AndroidLintTask
import java.io.File
import java.util.Locale
@@ -25,32 +24,8 @@
import org.gradle.api.Project
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.plugins.JavaPluginExtension
-import org.gradle.api.services.BuildService
-import org.gradle.api.services.BuildServiceParameters
import org.gradle.kotlin.dsl.getByType
-/**
- * Name of the service we use to limit the number of concurrent executions of lint
- */
-public const val LINT_SERVICE_NAME = "androidxLintService"
-
-// service for limiting the number of concurrent lint tasks
-interface AndroidXLintService : BuildService<BuildServiceParameters.None>
-
-fun Project.configureRootProjectForLint() {
- // determine many lint tasks to run in parallel
- val memoryPerTask = 512 * 1024 * 1024
- val maxLintMemory = Runtime.getRuntime().maxMemory() * 0.75 // save memory for other things too
- val maxNumParallelUsages = Math.max(1, (maxLintMemory / memoryPerTask).toInt())
-
- project.gradle.sharedServices.registerIfAbsent(
- LINT_SERVICE_NAME,
- AndroidXLintService::class.java
- ) { spec ->
- spec.maxParallelUsages.set(maxNumParallelUsages)
- }
-}
-
fun Project.configureNonAndroidProjectForLint(extension: AndroidXExtension) {
apply(mapOf("plugin" to "com.android.lint"))
@@ -132,13 +107,6 @@
checkReleaseBuilds = false
}
- tasks.withType(AndroidLintAnalysisTask::class.java).configureEach { task ->
- // don't run too many copies of lint at once due to memory limitations
- task.usesService(
- task.project.gradle.sharedServices.registrations.getByName(LINT_SERVICE_NAME).service
- )
- }
-
tasks.withType(AndroidLintTask::class.java).configureEach { task ->
// Remove the lint and column attributes from generated lint baseline XML.
if (task.name.startsWith("updateLintBaseline")) {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
index b7664e3..1531411 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
@@ -439,7 +439,10 @@
private fun Project.validateCoordinatesAndGetGroup(extension: AndroidXExtension): LibraryGroup {
val mavenGroup = extension.mavenGroup
- ?: throw Exception("You must specify mavenGroup for $name project")
+ if (mavenGroup == null) {
+ val groupExplanation = extension.explainMavenGroup().joinToString("\n")
+ throw Exception("You must specify mavenGroup for $path :\n$groupExplanation")
+ }
val strippedGroupId = mavenGroup.group.substringAfterLast(".")
if (
!extension.bypassCoordinateValidation &&
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/PrintProjectCoordinatesTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/PrintProjectCoordinatesTask.kt
index 04faf70..91ea675 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/PrintProjectCoordinatesTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/PrintProjectCoordinatesTask.kt
@@ -28,6 +28,7 @@
fun configureWithAndroidXExtension(androidXExtension: AndroidXExtension) {
projectGroup = androidXExtension.mavenGroup
+ groupExplanation = androidXExtension.explainMavenGroup()
projectName = project.name
version = project.version.toString()
projectDir = project.projectDir.relativeTo(project.rootDir)
@@ -38,6 +39,9 @@
var projectGroup: LibraryGroup? = null
@Internal // Task is always out-of-date: no need to track inputs
+ var groupExplanation: List<String>? = null
+
+ @Internal // Task is always out-of-date: no need to track inputs
var projectName: String? = null
@Internal // Task is always out-of-date: no need to track inputs
@@ -59,14 +63,19 @@
"group.atomicGroupVersion"
}
- /* ktlint-disable no-multi-spaces */ // easier to read in table format
- val lines = listOf(
- listOf("filepath: $projectDir/build.gradle ", "(from settings.gradle)"),
- listOf("group : ${projectGroup?.group} ", "(from AndroidXExtension.kt)"),
- listOf("artifact: $projectName ", "(from project name)"),
- listOf("version : $version ", "(from $versionFrom)"),
+ val groupExplanation = groupExplanation!!
+ val lines = mutableListOf(
+ listOf("filepath: $projectDir/build.gradle ", "(from settings.gradle)")
)
- /* ktlint-enable no-multi-spaces */
+ // put each component of the explanation on its own line
+ groupExplanation.forEachIndexed { i, component ->
+ if (i == 0)
+ lines.add(listOf("group : ${projectGroup?.group} ", "$component"))
+ else
+ lines.add(listOf("", "$component"))
+ }
+ lines.add(listOf("artifact: $projectName ", "(from project name)"))
+ lines.add(listOf("version : $version ", "(from $versionFrom)"))
printTable(lines)
}
@@ -82,7 +91,11 @@
for (i in 0..(line.size - 1)) {
val word = line.get(i)
val columnSize = columnSizes.get(i)
- result += word.padEnd(columnSize)
+ // only have to pad columns before the last column
+ if (i != line.size - 1)
+ result += word.padEnd(columnSize)
+ else
+ result += word
}
return result
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt
index f3a8727..d827a8d 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt
@@ -81,7 +81,11 @@
}
}
-private fun summarizeDiff(a: File, b: File): String {
+/**
+ * Returns the output of running the `diff` command-line tool on files [a] and [b], truncated to
+ * [maxSummaryLines] lines.
+ */
+fun summarizeDiff(a: File, b: File, maxSummaryLines: Int = 50): String {
if (!a.exists()) {
return "$a does not exist"
}
@@ -93,7 +97,6 @@
.start()
process.waitFor(5, TimeUnit.SECONDS)
var diffLines = process.inputStream.bufferedReader().readLines().toMutableList()
- val maxSummaryLines = 50
if (diffLines.size > maxSummaryLines) {
diffLines = diffLines.subList(0, maxSummaryLines)
diffLines.plusAssign("[long diff was truncated]")
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt
index 80a4c17..0286efc 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt
@@ -150,7 +150,7 @@
source: File,
dest: File,
permitOverwriting: Boolean,
- logger: Logger
+ logger: Logger? = null
) {
val sourceText = if (source.exists()) {
source.readText()
@@ -161,11 +161,18 @@
val changing = overwriting || (dest.exists() != source.exists())
if (changing) {
if (overwriting && !permitOverwriting) {
+ val diff = summarizeDiff(source, dest, maxDiffLines + 1)
+ val diffMsg = if (compareLineCount(diff, maxDiffLines) > 0) {
+ "Diff is greater than $maxDiffLines lines, use diff tool to compare.\n\n"
+ } else {
+ "Diff:\n$diff\n\n"
+ }
val message = "Modifying the API definition for a previously released artifact " +
"having a final API version (version not ending in '-alpha') is not " +
"allowed.\n\n" +
"Previously declared definition is $dest\n" +
"Current generated definition is $source\n\n" +
+ diffMsg +
"Did you mean to increment the library version first?\n\n" +
"If you have a valid reason to override Semantic Versioning policy, see " +
"go/androidx/versioning#beta-api-change for information on obtaining approval."
@@ -174,10 +181,37 @@
if (source.exists()) {
@Suppress("UnstableApiUsage")
Files.copy(source, dest)
- logger.lifecycle("Copied $source to $dest")
+ logger?.lifecycle("Copied $source to $dest")
} else {
dest.delete()
- logger.lifecycle("Deleted $dest because $source does not exist")
+ logger?.lifecycle("Deleted $dest because $source does not exist")
}
}
}
+
+/**
+ * Returns -1 if [text] has fewer than [count] newline characters, 0 if equal, and 1 if greater
+ * than.
+ */
+fun compareLineCount(text: String, count: Int): Int {
+ var found = 0
+ var index = 0
+ while (found < count) {
+ index = text.indexOf('\n', index)
+ if (index < 0) {
+ break
+ }
+ found++
+ index++
+ }
+ return if (found < count) {
+ -1
+ } else if (found == count) {
+ 0
+ } else {
+ 1
+ }
+}
+
+/** Maximum number of diff lines to include in output. */
+internal const val maxDiffLines = 8
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 f9ce277..2630586 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt
@@ -98,7 +98,6 @@
.append(APK_INSTALL_OPTION.replace("APK_NAME", testApkName))
if (!appApkName.isNullOrEmpty())
sb.append(APK_INSTALL_OPTION.replace("APK_NAME", appApkName!!))
-
sb.append(TARGET_PREPARER_CLOSE)
.append(TEST_BLOCK_OPEN)
.append(RUNNER_OPTION.replace("TEST_RUNNER", testRunner))
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/GenerateMediaTestConfigurationTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/GenerateMediaTestConfigurationTask.kt
index dccb090..794ab0f 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/GenerateMediaTestConfigurationTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/GenerateMediaTestConfigurationTask.kt
@@ -224,8 +224,7 @@
}
private fun BuiltArtifact.resolveName(path: String): String {
- return outputFile.substringAfterLast("/")
- .renameApkForTesting(path, false)
+ return outputFile.substringAfterLast("/").renameApkForTesting(path)
}
private fun writeConfigFileContent(
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/GenerateTestConfigurationTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/GenerateTestConfigurationTask.kt
index a1b8cb3..b043b95 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/GenerateTestConfigurationTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/GenerateTestConfigurationTask.kt
@@ -126,8 +126,8 @@
?: throw RuntimeException("Cannot load required APK for task: $name")
// We don't need to check hasBenchmarkPlugin because benchmarks shouldn't have test apps
val appApkBuiltArtifact = appApk.elements.single()
- var appName = appApkBuiltArtifact.outputFile.substringAfterLast("/")
- .renameApkForTesting(appProjectPath.get(), hasBenchmarkPlugin = false)
+ val appName = appApkBuiltArtifact.outputFile.substringAfterLast("/")
+ .renameApkForTesting(appProjectPath.get())
configBuilder.appApkName(appName)
.appApkSha256(sha256(File(appApkBuiltArtifact.outputFile)))
}
@@ -191,7 +191,7 @@
val testApkBuiltArtifact = testApk.elements.single()
val testName = testApkBuiltArtifact.outputFile
.substringAfterLast("/")
- .renameApkForTesting(testProjectPath.get(), hasBenchmarkPlugin.get())
+ .renameApkForTesting(testProjectPath.get())
configBuilder.testApkName(testName)
.applicationId(testApk.applicationId)
.minSdk(minSdk.get().toString())
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
index 3bc7114..5fcfd54 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
@@ -124,27 +124,28 @@
* Further configures the test config generation task for a project. This only gets called when
* there is a test app in addition to the instrumentation app, and the only thing it configures is
* the location of the testapp.
- *
- * @param overrideProject Allows the config task for one project to get registered to an
- * alternative project. Default is for the project to register the new config task to itself
*/
-fun Project.addAppApkToTestConfigGeneration(overrideProject: Project = this) {
- if (project.isMacrobenchmarkTarget()) {
- if (path == ":benchmark:integration-tests:macrobenchmark-target") {
- // Really ugly workaround for b/178776319 and b/181810492 where we hardcode that
- // :benchmark:integration-tests:macrobenchmark-target needs to be installed
- // for :benchmark:benchmark-macro tests to work.
- extensions.getByType<ApplicationAndroidComponentsExtension>().apply {
- onVariants(selector().withBuildType("release")) { appVariant ->
+fun Project.addAppApkToTestConfigGeneration() {
+ if (isMacrobenchmarkTarget()) {
+ extensions.getByType<ApplicationAndroidComponentsExtension>().apply {
+ onVariants(selector().withBuildType("release")) { appVariant ->
+ getOrCreateMacrobenchmarkConfigTask().configure { configTask ->
+ configTask.appFolder.set(appVariant.artifacts.get(SingleArtifact.APK))
+ configTask.appLoader.set(appVariant.artifacts.getBuiltArtifactsLoader())
+ configTask.appProjectPath.set(path)
+ }
+ if (path == ":benchmark:integration-tests:macrobenchmark-target") {
+ // Ugly workaround for b/188699825 where we hardcode that
+ // :benchmark:integration-tests:macrobenchmark-target needs to be installed
+ // for :benchmark:benchmark-macro tests to work.
project(":benchmark:benchmark-macro").tasks.withType(
GenerateTestConfigurationTask::class.java
).named(
"${AndroidXImplPlugin.GENERATE_TEST_CONFIGURATION_TASK}debugAndroidTest"
).configure { configTask ->
- configTask as GenerateTestConfigurationTask
configTask.appFolder.set(appVariant.artifacts.get(SingleArtifact.APK))
configTask.appLoader.set(appVariant.artifacts.getBuiltArtifactsLoader())
- configTask.appProjectPath.set(overrideProject.path)
+ configTask.appProjectPath.set(path)
}
}
}
@@ -154,14 +155,14 @@
extensions.getByType<ApplicationAndroidComponentsExtension>().apply {
onVariants(selector().withBuildType("debug")) { appVariant ->
- overrideProject.tasks.named(
+ tasks.named(
AndroidXImplPlugin.GENERATE_TEST_CONFIGURATION_TASK +
"${appVariant.name}AndroidTest"
) { configTask ->
configTask as GenerateTestConfigurationTask
configTask.appFolder.set(appVariant.artifacts.get(SingleArtifact.APK))
configTask.appLoader.set(appVariant.artifacts.getBuiltArtifactsLoader())
- configTask.appProjectPath.set(overrideProject.path)
+ configTask.appProjectPath.set(path)
}
}
}
@@ -174,12 +175,11 @@
project.rootProject.tasks.named(ZIP_TEST_CONFIGS_WITH_APKS_TASK) { task ->
task as Zip
val projectPath = project.path
- val hasBenchmarkPlugin = project.providers.provider { project.hasBenchmarkPlugin() }
task.from(packageTask.outputDirectory) {
it.include("*.apk")
it.duplicatesStrategy = DuplicatesStrategy.FAIL
it.rename { fileName ->
- fileName.renameApkForTesting(projectPath, hasBenchmarkPlugin.get())
+ fileName.renameApkForTesting(projectPath)
}
}
task.dependsOn(packageTask)
@@ -187,12 +187,11 @@
project.rootProject.tasks.named(ZIP_CONSTRAINED_TEST_CONFIGS_WITH_APKS_TASK) { task ->
task as Zip
val projectPath = project.path
- val hasBenchmarkPlugin = project.providers.provider { project.hasBenchmarkPlugin() }
task.from(packageTask.outputDirectory) {
it.include("*.apk")
it.duplicatesStrategy = DuplicatesStrategy.FAIL
it.rename { fileName ->
- fileName.renameApkForTesting(projectPath, hasBenchmarkPlugin.get())
+ fileName.renameApkForTesting(projectPath)
}
}
task.dependsOn(packageTask)
@@ -352,15 +351,15 @@
}
}
-private fun Project.getOrCreateMacrobenchmarkConfigTask(variantName: String):
+private fun Project.getOrCreateMacrobenchmarkConfigTask():
TaskProvider<GenerateTestConfigurationTask> {
val parentProject = this.parent!!
return try {
parentProject.tasks.withType(GenerateTestConfigurationTask::class.java)
- .named("${AndroidXImplPlugin.GENERATE_TEST_CONFIGURATION_TASK}$variantName")
+ .named(AndroidXImplPlugin.GENERATE_TEST_CONFIGURATION_TASK)
} catch (e: UnknownTaskException) {
parentProject.tasks.register(
- "${AndroidXImplPlugin.GENERATE_TEST_CONFIGURATION_TASK}$variantName",
+ AndroidXImplPlugin.GENERATE_TEST_CONFIGURATION_TASK,
GenerateTestConfigurationTask::class.java
)
}
@@ -372,58 +371,50 @@
minSdk: Int,
testRunner: String
) {
- val configTask = getOrCreateMacrobenchmarkConfigTask(variantName)
- if (path.endsWith("macrobenchmark")) {
- configTask.configure { task ->
- val androidXExtension = extensions.getByType<AndroidXExtension>()
- val fileNamePrefix = "${this.path.asFilenamePrefix()}$variantName"
- task.testFolder.set(artifacts.get(SingleArtifact.APK))
- task.testLoader.set(artifacts.getBuiltArtifactsLoader())
- task.additionalApkKeys.set(androidXExtension.additionalDeviceTestApkKeys)
- task.outputXml.fileValue(
- File(getTestConfigDirectory(), "$fileNamePrefix.xml")
+ val configTask = getOrCreateMacrobenchmarkConfigTask()
+ configTask.configure { task ->
+ val androidXExtension = extensions.getByType<AndroidXExtension>()
+ val fileNamePrefix = path.asFilenamePrefix()
+ task.testFolder.set(artifacts.get(SingleArtifact.APK))
+ task.testLoader.set(artifacts.getBuiltArtifactsLoader())
+ task.additionalApkKeys.set(androidXExtension.additionalDeviceTestApkKeys)
+ task.outputXml.fileValue(
+ File(getTestConfigDirectory(), "$fileNamePrefix$variantName.xml")
+ )
+ task.outputJson.fileValue(
+ File(getTestConfigDirectory(), "$fileNamePrefix$variantName.json")
+ )
+ task.constrainedOutputXml.fileValue(
+ File(
+ getTestConfigDirectory(),
+ "${path.asFilenamePrefix()}$variantName.xml"
)
- task.outputJson.fileValue(
- File(getTestConfigDirectory(), "$fileNamePrefix.json")
- )
- task.constrainedOutputXml.fileValue(
- File(
- this.getTestConfigDirectory(),
- "${this.path.asFilenamePrefix()}$variantName.xml"
- )
- )
- task.minSdk.set(minSdk)
- task.hasBenchmarkPlugin.set(this.hasBenchmarkPlugin())
- task.testRunner.set(testRunner)
- task.testProjectPath.set(this.path)
- task.presubmit.set(isPresubmitBuild())
- val detector = AffectedModuleDetector.getInstance(project)
- task.affectedModuleDetectorSubset.set(
- project.provider {
- detector.getSubset(task)
- }
- )
-
- AffectedModuleDetector.configureTaskGuard(task)
- }
- // Disable xml generation for projects that have no test sources
- afterEvaluate {
- val androidXExtension = extensions.getByType<AndroidXExtension>()
- configTask.configure {
- it.enabled = hasAndroidTestSourceCode() && !androidXExtension.disableDeviceTests
+ )
+ task.minSdk.set(minSdk)
+ task.hasBenchmarkPlugin.set(hasBenchmarkPlugin())
+ task.testRunner.set(testRunner)
+ task.testProjectPath.set(path)
+ task.presubmit.set(isPresubmitBuild())
+ val detector = AffectedModuleDetector.getInstance(project)
+ task.affectedModuleDetectorSubset.set(
+ project.provider {
+ detector.getSubset(task)
}
- }
- this.rootProject.tasks.findByName(ZIP_TEST_CONFIGS_WITH_APKS_TASK)!!
- .dependsOn(configTask)
- this.rootProject.tasks.findByName(ZIP_CONSTRAINED_TEST_CONFIGS_WITH_APKS_TASK)!!
- .dependsOn(configTask)
- } else if (isMacrobenchmarkTarget()) {
- configTask.configure { task ->
- task.appFolder.set(artifacts.get(SingleArtifact.APK))
- task.appLoader.set(artifacts.getBuiltArtifactsLoader())
- task.appProjectPath.set(path)
+ )
+
+ AffectedModuleDetector.configureTaskGuard(task)
+ }
+ // Disable xml generation for projects that have no test sources
+ afterEvaluate {
+ val androidXExtension = extensions.getByType<AndroidXExtension>()
+ configTask.configure {
+ it.enabled = hasAndroidTestSourceCode() && !androidXExtension.disableDeviceTests
}
}
+ rootProject.tasks.findByName(ZIP_TEST_CONFIGS_WITH_APKS_TASK)!!
+ .dependsOn(configTask)
+ rootProject.tasks.findByName(ZIP_CONSTRAINED_TEST_CONFIGS_WITH_APKS_TASK)!!
+ .dependsOn(configTask)
}
/**
@@ -434,6 +425,10 @@
}
fun Project.configureTestConfigGeneration(baseExtension: BaseExtension) {
+ if (isMacrobenchmarkTarget()) {
+ // macrobenchmark target projects use special setup. See addAppApkToTestConfigGeneration
+ return
+ }
extensions.getByType(AndroidComponentsExtension::class.java).apply {
onVariants { variant ->
var name: String? = null
@@ -470,8 +465,7 @@
isMedia2 = false
)
}
- path.endsWith("macrobenchmark") ||
- isMacrobenchmarkTarget() -> {
+ path.endsWith("macrobenchmark") -> {
configureMacrobenchmarkConfigTask(
name,
artifacts,
diff --git a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/CameraControlAdapterDeviceTest.kt b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/CameraControlAdapterDeviceTest.kt
index 10e7fc0..67f3c4f 100644
--- a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/CameraControlAdapterDeviceTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/CameraControlAdapterDeviceTest.kt
@@ -401,6 +401,7 @@
) = get(option_max_regions) ?: 0
private suspend fun arrangeRequestOptions() {
+ cameraControl.setExposureCompensationIndex(1)
cameraControl.setZoomRatio(1.0f)
cameraControl.camera2cameraControl.setCaptureRequestOptions(
CaptureRequestOptions.Builder().setCaptureRequestOption(
@@ -408,7 +409,6 @@
CONTROL_CAPTURE_INTENT_CUSTOM
).build()
).await()
- cameraControl.setExposureCompensationIndex(1)[5, TimeUnit.SECONDS]
// Ensure the requests are already set to the CaptureRequest.
waitForResult().verify(
diff --git a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/EncoderProfilesProviderAdapterDeviceTest.kt b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/EncoderProfilesProviderAdapterDeviceTest.kt
index c61aa16..5d6c9c4 100644
--- a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/EncoderProfilesProviderAdapterDeviceTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/EncoderProfilesProviderAdapterDeviceTest.kt
@@ -21,6 +21,8 @@
import android.media.EncoderProfiles.VideoProfile.YUV_420
import android.os.Build
import androidx.camera.camera2.pipe.integration.adapter.EncoderProfilesProviderAdapter
+import androidx.camera.camera2.pipe.integration.compat.quirk.DeviceQuirks
+import androidx.camera.camera2.pipe.integration.compat.quirk.InvalidVideoProfilesQuirk
import androidx.camera.core.CameraSelector
import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy.BIT_DEPTH_8
import androidx.camera.testing.CameraUtil
@@ -68,7 +70,6 @@
@Before
fun setup() {
- skipTestOnProblematicBuildsOfCuttlefishApi33()
Assume.assumeTrue(CameraUtil.hasCameraWithLensFacing(CameraSelector.LENS_FACING_BACK))
cameraId = CameraUtil.getCameraIdWithLensFacing(CameraSelector.LENS_FACING_BACK)!!
@@ -156,6 +157,7 @@
@Test
fun afterApi33_hasSameContentAsEncoderProfiles() {
Assume.assumeTrue(CamcorderProfile.hasProfile(quality))
+ skipTestOnDevicesWithProblematicBuild()
val profiles = CamcorderProfile.getAll(cameraId, quality)
val video = profiles!!.videoProfiles[0]
@@ -184,13 +186,14 @@
assertThat(audioProxy.profile).isEqualTo(audio.profile)
}
- // TODO: removes after b/265613005 is fixed
- private fun skipTestOnProblematicBuildsOfCuttlefishApi33() {
- // Skip test for b/265613005
+ private fun skipTestOnDevicesWithProblematicBuild() {
+ // Skip test for b/265613005 and b/223439995
+ val hasVideoProfilesQuirk = DeviceQuirks[InvalidVideoProfilesQuirk::class.java] != null
+ val isProblematicCuttlefishBuild =
+ Build.MODEL.contains("Cuttlefish") && Build.ID.startsWith("TP1A")
Assume.assumeFalse(
- "Cuttlefish has null VideoProfile issue. Unable to test.",
- Build.MODEL.contains("Cuttlefish") && Build.VERSION.SDK_INT == 33 &&
- Build.ID.startsWith("TP1A")
+ "Skip test with null VideoProfile issue. Unable to test.",
+ hasVideoProfilesQuirk || isProblematicCuttlefishBuild
)
}
}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/UseCaseSurfaceManagerDeviceTest.kt b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/UseCaseSurfaceManagerDeviceTest.kt
index 65e72dc..b6ba0b18 100644
--- a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/UseCaseSurfaceManagerDeviceTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/UseCaseSurfaceManagerDeviceTest.kt
@@ -41,11 +41,9 @@
import androidx.camera.testing.activity.Camera2TestActivity
import androidx.camera.testing.fakes.FakeUseCase
import androidx.camera.testing.fakes.FakeUseCaseConfig
-import androidx.camera.testing.waitForIdle
import androidx.core.os.HandlerCompat
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
-import androidx.test.espresso.IdlingResource
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
@@ -149,8 +147,15 @@
assertThat(cameraClosedUsageCount).isEqualTo(1)
}
+ /**
+ * This test launches another (test) Activity with the intention of taking away camera from the
+ * test itself. On Android T and above, we listen to onCameraAccessPrioritiesChanged() and
+ * retries opening the camera when the camera is disconnected. That means the test activity will
+ * no longer deterministically get the final camera access on Android T and above. As such, we
+ * set the maximum SDK version to S_V2.
+ */
@Test
- @SdkSuppress(minSdkVersion = Build.VERSION_CODES.M)
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.M, maxSdkVersion = Build.VERSION_CODES.S_V2)
fun disconnectOpenedCameraGraph_deferrableSurfaceUsageCountTest() = runBlocking {
CoreAppTestUtil.prepareDeviceUI(InstrumentationRegistry.getInstrumentation())
@@ -194,9 +199,13 @@
putExtra(Camera2TestActivity.EXTRA_CAMERA_ID, cameraId)
}
).use {
- lateinit var previewReady: IdlingResource
- it.onActivity { activity -> previewReady = activity.mPreviewReady!! }
- previewReady.waitForIdle()
+ // TODO(b/268768235): Under some conditions, it is possible that the camera gets
+ // disconnected for both the foreground and test activity, before the preview has a
+ // chance to be ready. Fix it with follow-up changes to change this test by using a
+ // CameraGraphSimulator rather than a real CameraGraph.
+ // lateinit var previewReady: IdlingResource
+ // it.onActivity { activity -> previewReady = activity.mPreviewReady!! }
+ // previewReady.waitForIdle()
cameraDisconnectedUsageCount = testSessionParameters.deferrableSurface.useCount
}
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CamcorderProfileProviderAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CamcorderProfileProviderAdapter.kt
deleted file mode 100644
index b75b73d..0000000
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CamcorderProfileProviderAdapter.kt
+++ /dev/null
@@ -1,93 +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.
- */
-package androidx.camera.camera2.pipe.integration.adapter
-
-import android.media.CamcorderProfile
-import android.os.Build
-import androidx.annotation.Nullable
-import androidx.annotation.RequiresApi
-import androidx.camera.core.Logger
-import androidx.camera.core.impl.CamcorderProfileProvider
-import androidx.camera.core.impl.CamcorderProfileProxy
-
-/**
- * Adapt the [CamcorderProfileProvider] interface to [CameraPipe].
- */
-@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
-class CamcorderProfileProviderAdapter(cameraIdString: String) : CamcorderProfileProvider {
- private val hasValidCameraId: Boolean
- private val cameraId: Int
-
- init {
- var hasValidCameraId = false
- var intCameraId = -1
- try {
- intCameraId = cameraIdString.toInt()
- hasValidCameraId = true
- } catch (e: NumberFormatException) {
- Logger.w(
- TAG,
- "Camera id is not an integer: " +
- "$cameraIdString, unable to create CamcorderProfileProvider"
- )
- }
- this.hasValidCameraId = hasValidCameraId
- cameraId = intCameraId
-
- // TODO(b/241296464): CamcorderProfileResolutionQuirk and CamcorderProfileResolutionValidator
- }
-
- override fun hasProfile(quality: Int): Boolean {
- if (!hasValidCameraId) {
- return false
- }
- return CamcorderProfile.hasProfile(cameraId, quality)
- // TODO: b241296464 CamcorderProfileResolutionQuirk and
- // CamcorderProfileResolutionValidator. If has quick, check if the proxy profile has
- // valid video resolution
- }
-
- override fun get(quality: Int): CamcorderProfileProxy? {
- if (!hasValidCameraId) {
- return null
- }
- return if (!CamcorderProfile.hasProfile(cameraId, quality)) {
- null
- } else getProfileInternal(quality)
- // TODO: b241296464 CamcorderProfileResolutionQuirk and
- // CamcorderProfileResolutionValidator. If has quick, check if the proxy profile has
- // valid video resolution
- }
-
- @Nullable
- @Suppress("DEPRECATION")
- private fun getProfileInternal(quality: Int): CamcorderProfileProxy? {
- var profile: CamcorderProfile? = null
- try {
- profile = CamcorderProfile.get(cameraId, quality)
- } catch (e: RuntimeException) {
- // CamcorderProfile.get() will throw
- // - RuntimeException if not able to retrieve camcorder profile params.
- // - IllegalArgumentException if quality is not valid.
- Logger.w(TAG, "Unable to get CamcorderProfile by quality: $quality", e)
- }
- return if (profile != null) CamcorderProfileProxy.fromCamcorderProfile(profile) else null
- }
-
- companion object {
- private const val TAG = "CamcorderProfileProviderAdapter"
- }
-}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraControlAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraControlAdapter.kt
index 9f5dbc4..50a01d6 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraControlAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraControlAdapter.kt
@@ -108,21 +108,19 @@
override fun cancelFocusAndMetering(): ListenableFuture<Void> {
return Futures.nonCancellationPropagating(
- FutureChain.from(
- focusMeteringControl.cancelFocusAndMeteringAsync().asListenableFuture()
- ).transform(
- Function { return@Function null }, CameraXExecutors.directExecutor()
- )
+ threads.sequentialScope.async {
+ focusMeteringControl.cancelFocusAndMeteringAsync().join()
+ // Convert to null once the task is done, ignore the results.
+ return@async null
+ }.asListenableFuture()
)
}
override fun setZoomRatio(ratio: Float): ListenableFuture<Void> =
- zoomControl.setZoomRatioAsync(ratio)
+ zoomControl.setZoomRatio(ratio)
- override fun setLinearZoom(linearZoom: Float): ListenableFuture<Void> {
- val ratio = zoomControl.toZoomRatio(linearZoom)
- return setZoomRatio(ratio)
- }
+ override fun setLinearZoom(linearZoom: Float): ListenableFuture<Void> =
+ zoomControl.setLinearZoom(linearZoom)
override fun getFlashMode(): Int {
return flashControl.flashMode
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
index 8e53e5c..1834af5 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
@@ -40,9 +40,9 @@
import androidx.camera.core.ExposureState
import androidx.camera.core.FocusMeteringAction
import androidx.camera.core.ZoomState
-import androidx.camera.core.impl.CamcorderProfileProvider
import androidx.camera.core.impl.CameraCaptureCallback
import androidx.camera.core.impl.CameraInfoInternal
+import androidx.camera.core.impl.EncoderProfilesProvider
import androidx.camera.core.impl.ImageFormatConstants
import androidx.camera.core.impl.Quirks
import androidx.camera.core.impl.Timebase
@@ -68,7 +68,7 @@
private val cameraCallbackMap: CameraCallbackMap,
private val focusMeteringControl: FocusMeteringControl
) : CameraInfoInternal {
- private lateinit var camcorderProfileProviderAdapter: CamcorderProfileProviderAdapter
+ private lateinit var encoderProfilesProviderAdapter: EncoderProfilesProviderAdapter
@OptIn(ExperimentalCamera2Interop::class)
internal val camera2CameraInfo: Camera2CameraInfo by lazy {
Camera2CameraInfo.create(cameraProperties)
@@ -127,11 +127,11 @@
override fun getImplementationType(): String = "CameraPipe"
- override fun getCamcorderProfileProvider(): CamcorderProfileProvider {
- if (!::camcorderProfileProviderAdapter.isInitialized) {
- camcorderProfileProviderAdapter = CamcorderProfileProviderAdapter(cameraId)
+ override fun getEncoderProfilesProvider(): EncoderProfilesProvider {
+ if (!::encoderProfilesProviderAdapter.isInitialized) {
+ encoderProfilesProviderAdapter = EncoderProfilesProviderAdapter(cameraId)
}
- return camcorderProfileProviderAdapter
+ return encoderProfilesProviderAdapter
}
override fun getTimebase(): Timebase {
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
index 4c03b51..9e84e9c 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraSurfaceAdapter.kt
@@ -65,7 +65,7 @@
SupportedSurfaceCombination(
context,
checkNotNull(cameraMetadata),
- CamcorderProfileProviderAdapter(cameraId)
+ EncoderProfilesProviderAdapter(cameraId)
)
}
}
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CoroutineAdapters.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CoroutineAdapters.kt
index 1e31588..491c696 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CoroutineAdapters.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CoroutineAdapters.kt
@@ -21,10 +21,11 @@
import androidx.annotation.RequiresApi
import androidx.concurrent.futures.CallbackToFutureAdapter
import com.google.common.util.concurrent.ListenableFuture
+import java.util.concurrent.CancellationException
+import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
-import java.util.concurrent.CancellationException
/**
* Convert a job into a ListenableFuture<Void>.
@@ -75,4 +76,20 @@
tag
}
return CallbackToFutureAdapter.getFuture(resolver)
+}
+
+@OptIn(ExperimentalCoroutinesApi::class)
+fun <T> Deferred<T>.propagateTo(destination: CompletableDeferred<T>) {
+ invokeOnCompletion {
+ if (it != null) {
+ if (it is CancellationException) {
+ destination.cancel(it)
+ } else {
+ destination.completeExceptionally(it)
+ }
+ } else {
+ // Ignore exceptions - This should never throw in this situation.
+ destination.complete(getCompleted())
+ }
+ }
}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/EncoderProfilesProviderAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/EncoderProfilesProviderAdapter.kt
index 224eeab..73addda 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/EncoderProfilesProviderAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/EncoderProfilesProviderAdapter.kt
@@ -22,6 +22,8 @@
import androidx.annotation.DoNotInline
import androidx.annotation.Nullable
import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.integration.compat.quirk.DeviceQuirks
+import androidx.camera.camera2.pipe.integration.compat.quirk.InvalidVideoProfilesQuirk
import androidx.camera.core.Logger
import androidx.camera.core.impl.EncoderProfilesProvider
import androidx.camera.core.impl.EncoderProfilesProxy
@@ -71,23 +73,44 @@
}
@Nullable
- @Suppress("DEPRECATION")
private fun getProfilesInternal(quality: Int): EncoderProfilesProxy? {
- return if (Build.VERSION.SDK_INT >= 31) {
- val profiles: EncoderProfiles? = Api31Impl.getAll(cameraIdString, quality)
- if (profiles != null) EncoderProfilesProxyCompat.from(profiles) else null
- } else {
- var profile: CamcorderProfile? = null
- try {
- profile = CamcorderProfile.get(cameraId, quality)
- } catch (e: RuntimeException) {
- // CamcorderProfile.get() will throw
- // - RuntimeException if not able to retrieve camcorder profile params.
- // - IllegalArgumentException if quality is not valid.
- Logger.w(TAG, "Unable to get CamcorderProfile by quality: $quality", e)
+ if (Build.VERSION.SDK_INT >= 31) {
+ val profiles: EncoderProfiles = Api31Impl.getAll(cameraIdString, quality) ?: return null
+
+ val isVideoProfilesInvalid = DeviceQuirks[InvalidVideoProfilesQuirk::class.java] != null
+ if (isVideoProfilesInvalid) {
+ Logger.d(
+ TAG, "EncoderProfiles contains invalid video profiles, use " +
+ "CamcorderProfile to create EncoderProfilesProxy."
+ )
+ } else {
+ try {
+ return EncoderProfilesProxyCompat.from(profiles)
+ } catch (e: NullPointerException) {
+ Logger.w(
+ TAG, "Failed to create EncoderProfilesProxy, EncoderProfiles might " +
+ "contain invalid video profiles. Use CamcorderProfile instead.", e
+ )
+ }
}
- if (profile != null) EncoderProfilesProxyCompat.from(profile) else null
}
+
+ return createProfilesFromCamcorderProfile(quality)
+ }
+
+ @Nullable
+ @Suppress("DEPRECATION")
+ private fun createProfilesFromCamcorderProfile(quality: Int): EncoderProfilesProxy? {
+ var profile: CamcorderProfile? = null
+ try {
+ profile = CamcorderProfile.get(cameraId, quality)
+ } catch (e: RuntimeException) {
+ // CamcorderProfile.get() will throw
+ // - RuntimeException if not able to retrieve camcorder profile params.
+ // - IllegalArgumentException if quality is not valid.
+ Logger.w(TAG, "Unable to get CamcorderProfile by quality: $quality", e)
+ }
+ return if (profile != null) EncoderProfilesProxyCompat.from(profile) else null
}
@RequiresApi(31)
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
index 05cb202..527cc63 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
@@ -34,7 +34,7 @@
import androidx.camera.core.AspectRatio
import androidx.camera.core.Logger
import androidx.camera.core.impl.AttachedSurfaceInfo
-import androidx.camera.core.impl.CamcorderProfileProxy
+import androidx.camera.core.impl.EncoderProfilesProxy
import androidx.camera.core.impl.ImageFormatConstants
import androidx.camera.core.impl.ImageOutputConfig
import androidx.camera.core.impl.StreamSpec
@@ -70,7 +70,7 @@
class SupportedSurfaceCombination(
context: Context,
private val cameraMetadata: CameraMetadata,
- private val camcorderProfileProviderAdapter: CamcorderProfileProviderAdapter
+ private val encoderProfilesProviderAdapter: EncoderProfilesProviderAdapter
) {
private val cameraId = cameraMetadata.camera.value
private val hardwareLevel =
@@ -289,12 +289,12 @@
// StreamConfigurationMap to determine the RECORD size.
return getRecordSizeFromStreamConfigurationMap()
}
- var profile: CamcorderProfileProxy? = null
- if (camcorderProfileProviderAdapter.hasProfile(cameraId)) {
- profile = camcorderProfileProviderAdapter.get(cameraId)
+ var profiles: EncoderProfilesProxy? = null
+ if (encoderProfilesProviderAdapter.hasProfile(cameraId)) {
+ profiles = encoderProfilesProviderAdapter.getAll(cameraId)
}
- return if (profile != null) {
- Size(profile.videoFrameWidth, profile.videoFrameHeight)
+ return if (profiles != null && profiles.videoProfiles.isNotEmpty()) {
+ Size(profiles.videoProfiles[0].width, profiles.videoProfiles[0].height)
} else getRecordSizeByHasProfile()
}
@@ -337,25 +337,25 @@
*/
private fun getRecordSizeByHasProfile(): Size {
var recordSize: Size = RESOLUTION_480P
- var profile: CamcorderProfileProxy? = null
+ var profiles: EncoderProfilesProxy? = null
// Check whether 4KDCI, 2160P, 2K, 1080P, 720P, 480P (sorted by size) are supported by
- // CamcorderProfile
- if (camcorderProfileProviderAdapter.hasProfile(CamcorderProfile.QUALITY_4KDCI)) {
- profile = camcorderProfileProviderAdapter.get(CamcorderProfile.QUALITY_4KDCI)
- } else if (camcorderProfileProviderAdapter.hasProfile(CamcorderProfile.QUALITY_2160P)) {
- profile = camcorderProfileProviderAdapter.get(CamcorderProfile.QUALITY_2160P)
- } else if (camcorderProfileProviderAdapter.hasProfile(CamcorderProfile.QUALITY_2K)) {
- profile = camcorderProfileProviderAdapter.get(CamcorderProfile.QUALITY_2K)
- } else if (camcorderProfileProviderAdapter.hasProfile(CamcorderProfile.QUALITY_1080P)) {
- profile = camcorderProfileProviderAdapter.get(CamcorderProfile.QUALITY_1080P)
- } else if (camcorderProfileProviderAdapter.hasProfile(CamcorderProfile.QUALITY_720P)) {
- profile = camcorderProfileProviderAdapter.get(CamcorderProfile.QUALITY_720P)
- } else if (camcorderProfileProviderAdapter.hasProfile(CamcorderProfile.QUALITY_480P)) {
- profile = camcorderProfileProviderAdapter.get(CamcorderProfile.QUALITY_480P)
+ // EncoderProfiles
+ if (encoderProfilesProviderAdapter.hasProfile(CamcorderProfile.QUALITY_4KDCI)) {
+ profiles = encoderProfilesProviderAdapter.getAll(CamcorderProfile.QUALITY_4KDCI)
+ } else if (encoderProfilesProviderAdapter.hasProfile(CamcorderProfile.QUALITY_2160P)) {
+ profiles = encoderProfilesProviderAdapter.getAll(CamcorderProfile.QUALITY_2160P)
+ } else if (encoderProfilesProviderAdapter.hasProfile(CamcorderProfile.QUALITY_2K)) {
+ profiles = encoderProfilesProviderAdapter.getAll(CamcorderProfile.QUALITY_2K)
+ } else if (encoderProfilesProviderAdapter.hasProfile(CamcorderProfile.QUALITY_1080P)) {
+ profiles = encoderProfilesProviderAdapter.getAll(CamcorderProfile.QUALITY_1080P)
+ } else if (encoderProfilesProviderAdapter.hasProfile(CamcorderProfile.QUALITY_720P)) {
+ profiles = encoderProfilesProviderAdapter.getAll(CamcorderProfile.QUALITY_720P)
+ } else if (encoderProfilesProviderAdapter.hasProfile(CamcorderProfile.QUALITY_480P)) {
+ profiles = encoderProfilesProviderAdapter.getAll(CamcorderProfile.QUALITY_480P)
}
- if (profile != null) {
- recordSize = Size(profile.videoFrameWidth, profile.videoFrameHeight)
+ if (profiles != null && profiles.videoProfiles.isNotEmpty()) {
+ recordSize = Size(profiles.videoProfiles[0].width, profiles.videoProfiles[0].height)
}
return recordSize
}
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/ZoomValue.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/ZoomValue.kt
index 5cc5969..8d19d82 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/ZoomValue.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/ZoomValue.kt
@@ -17,6 +17,8 @@
package androidx.camera.camera2.pipe.integration.adapter
import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.integration.internal.ZoomMath.getLinearZoomFromZoomRatio
+import androidx.camera.camera2.pipe.integration.internal.ZoomMath.getZoomRatioFromLinearZoom
import androidx.camera.core.ZoomState
/**
@@ -26,16 +28,39 @@
data class ZoomValue(
private val zoomRatio: Float,
private val minZoomRatio: Float,
- private val maxZoomRatio: Float
+ private val maxZoomRatio: Float,
) : ZoomState {
+ private var linearZoom: Float? = null
+
+ /**
+ * ZoomValue should be created with either zoomRatio or linearZoom and the other value should
+ * be calculated. If both are allowed to be set from outside, it becomes confusing regarding
+ * which value to use if the values don't align with conversion values.
+ * Secondary constructor with a LinearZoom value wrapper class is used for this purpose.
+ */
+ data class LinearZoom(val value: Float)
+ constructor(
+ linearZoom: LinearZoom,
+ minZoomRatio: Float,
+ maxZoomRatio: Float,
+ ) : this(
+ getZoomRatioFromLinearZoom(
+ linearZoom = linearZoom.value,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ ),
+ minZoomRatio,
+ maxZoomRatio
+ ) {
+ this.linearZoom = linearZoom.value
+ }
+
override fun getZoomRatio(): Float = zoomRatio
override fun getMaxZoomRatio(): Float = maxZoomRatio
override fun getMinZoomRatio(): Float = minZoomRatio
- override fun getLinearZoom(): Float {
- val range = maxZoomRatio - minZoomRatio
- if (range > 0) {
- return (zoomRatio - minZoomRatio) / range
- }
- return 1.0f
- }
-}
\ No newline at end of file
+ override fun getLinearZoom() = linearZoom ?: getLinearZoomFromZoomRatio(
+ zoomRatio = zoomRatio,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ )
+}
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/Camera2CameraControlCompat.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/Camera2CameraControlCompat.kt
index b00002b..33adefc 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/Camera2CameraControlCompat.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/Camera2CameraControlCompat.kt
@@ -24,6 +24,7 @@
import androidx.camera.camera2.pipe.FrameNumber
import androidx.camera.camera2.pipe.Request
import androidx.camera.camera2.pipe.RequestMetadata
+import androidx.camera.camera2.pipe.integration.adapter.propagateTo
import androidx.camera.camera2.pipe.integration.config.CameraScope
import androidx.camera.camera2.pipe.integration.impl.Camera2ImplConfig
import androidx.camera.camera2.pipe.integration.impl.UseCaseCamera
@@ -51,7 +52,7 @@
fun clearRequestOption()
fun cancelCurrentTask()
- fun applyAsync(camera: UseCaseCamera?): Deferred<Void?>
+ fun applyAsync(camera: UseCaseCamera?, cancelPreviousTask: Boolean = true): Deferred<Void?>
@Module
abstract class Bindings {
@@ -114,15 +115,23 @@
}
}
- override fun applyAsync(camera: UseCaseCamera?): Deferred<Void?> {
+ override fun applyAsync(camera: UseCaseCamera?, cancelPreviousTask: Boolean): Deferred<Void?> {
val signal: CompletableDeferred<Void?> = CompletableDeferred()
val config = synchronized(lock) {
configBuilder.build()
}
threads.sequentialScope.launch {
if (camera != null) {
- // Cancel the previous request signal if exist.
- updateSignal?.cancelSignal()
+ if (cancelPreviousTask) {
+ // Cancel the previous request signal if exist.
+ updateSignal?.cancelSignal()
+ } else {
+ // propagate the result to the previous updateSignal
+ updateSignal?.let { previousUpdateSignal ->
+ signal.propagateTo(previousUpdateSignal)
+ }
+ }
+
updateSignal = signal
camera.requestControl.setConfigAsync(
type = UseCaseCameraRequestControl.Type.CAMERA2_CAMERA_CONTROL,
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/EvCompCompat.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/EvCompCompat.kt
index 7324125..3dafac7 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/EvCompCompat.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/EvCompCompat.kt
@@ -29,6 +29,7 @@
import androidx.camera.camera2.pipe.FrameNumber
import androidx.camera.camera2.pipe.Request
import androidx.camera.camera2.pipe.RequestMetadata
+import androidx.camera.camera2.pipe.integration.adapter.propagateTo
import androidx.camera.camera2.pipe.integration.config.CameraScope
import androidx.camera.camera2.pipe.integration.impl.CameraProperties
import androidx.camera.camera2.pipe.integration.impl.ComboRequestListener
@@ -37,21 +38,22 @@
import androidx.camera.core.CameraControl
import dagger.Binds
import dagger.Module
+import javax.inject.Inject
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.launch
-import javax.inject.Inject
interface EvCompCompat {
val supported: Boolean
val range: Range<Int>
val step: Rational
- fun stopRunningTask()
+ fun stopRunningTask(throwable: Throwable)
fun applyAsync(
evCompIndex: Int,
- camera: UseCaseCamera
+ camera: UseCaseCamera,
+ cancelPreviousTask: Boolean,
): Deferred<Int>
@Module
@@ -90,18 +92,38 @@
private var updateSignal: CompletableDeferred<Int>? = null
private var updateListener: Request.Listener? = null
- override fun stopRunningTask() {
+ override fun stopRunningTask(throwable: Throwable) {
threads.sequentialScope.launch {
- stopRunningTaskInternal()
+ updateSignal?.completeExceptionally(throwable)
}
}
- override fun applyAsync(evCompIndex: Int, camera: UseCaseCamera): Deferred<Int> {
+ override fun applyAsync(
+ evCompIndex: Int,
+ camera: UseCaseCamera,
+ cancelPreviousTask: Boolean,
+ ): Deferred<Int> {
val signal = CompletableDeferred<Int>()
threads.sequentialScope.launch {
- stopRunningTaskInternal()
+ updateSignal?.let { previousUpdateSignal ->
+ if (cancelPreviousTask) {
+ // Cancel the previous request signal if exist.
+ previousUpdateSignal.completeExceptionally(
+ CameraControl.OperationCanceledException(
+ "Cancelled by another setExposureCompensationIndex()"
+ )
+ )
+ } else {
+ // Propagate the result to the previous updateSignal
+ signal.propagateTo(previousUpdateSignal)
+ }
+ }
updateSignal = signal
+ updateListener?.let {
+ comboRequestListener.removeListener(it)
+ updateListener = null
+ }
camera.setParameterAsync(CONTROL_AE_EXPOSURE_COMPENSATION, evCompIndex)
@@ -110,7 +132,7 @@
override fun onComplete(
requestMetadata: RequestMetadata,
frameNumber: FrameNumber,
- result: FrameInfo
+ result: FrameInfo,
) {
val state = result.metadata[CaptureResult.CONTROL_AE_STATE]
val evResult = result.metadata[CaptureResult.CONTROL_AE_EXPOSURE_COMPENSATION]
@@ -121,7 +143,6 @@
CaptureResult.CONTROL_AE_STATE_LOCKED ->
if (evResult == evCompIndex) {
signal.complete(evCompIndex)
- comboRequestListener.removeListener(this)
}
else -> {
}
@@ -130,32 +151,14 @@
// If AE state is null, only wait for the exposure result to the desired
// value.
signal.complete(evCompIndex)
-
- // Remove the capture result listener. The updateSignal and
- // updateListener will be cleared before the next set exposure task.
- comboRequestListener.removeListener(this)
}
}
+ }.also { requestListener ->
+ comboRequestListener.addListener(requestListener, threads.sequentialExecutor)
+ signal.invokeOnCompletion { comboRequestListener.removeListener(requestListener) }
}
- comboRequestListener.addListener(updateListener!!, threads.sequentialExecutor)
}
return signal
}
-
- private fun stopRunningTaskInternal() {
- updateSignal?.let {
- it.completeExceptionally(
- CameraControl.OperationCanceledException(
- "Cancelled by another setExposureCompensationIndex()"
- )
- )
- updateSignal = null
- }
-
- updateListener?.let {
- comboRequestListener.removeListener(it)
- updateListener = null
- }
- }
}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompat.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompat.kt
index 38d92ef..a9e1348 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompat.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/ZoomCompat.kt
@@ -30,14 +30,21 @@
import dagger.Provides
interface ZoomCompat {
- val minZoom: Float
- val maxZoom: Float
+ val minZoomRatio: Float
+ val maxZoomRatio: Float
fun apply(
zoomRatio: Float,
camera: UseCaseCamera
)
+ /**
+ * Returns the current crop sensor region which should be used for converting
+ * [androidx.camera.core.MeteringPoint] to sensor coordinates. Returns the sensor
+ * rect if there is no crop region being set.
+ */
+ fun getCropSensorRegion(): Rect
+
@Module
abstract class Bindings {
companion object {
@@ -47,7 +54,7 @@
val range =
cameraProperties.metadata[CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE]
if (range != null) {
- AndroidRZoomCompat(range)
+ AndroidRZoomCompat(cameraProperties, range)
} else {
CropRegionZoomCompat(cameraProperties)
}
@@ -60,23 +67,28 @@
}
class CropRegionZoomCompat(private val cameraProperties: CameraProperties) : ZoomCompat {
- override val minZoom: Float
+ override val minZoomRatio: Float
get() = 1.0f
- override val maxZoom: Float
+ override val maxZoomRatio: Float
get() = cameraProperties.metadata.getOrDefault(
- CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM, minZoom
+ CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM, minZoomRatio
)
+ private var currentCropRect: Rect? = null
+
override fun apply(
zoomRatio: Float,
camera: UseCaseCamera
) {
val sensorRect =
cameraProperties.metadata[CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE]!!
- val cropRect = computeCropRect(sensorRect, zoomRatio)
- camera.setParameterAsync(CaptureRequest.SCALER_CROP_REGION, cropRect)
+ currentCropRect = computeCropRect(sensorRect, zoomRatio)
+ camera.setParameterAsync(CaptureRequest.SCALER_CROP_REGION, currentCropRect)
}
+ override fun getCropSensorRegion() = currentCropRect
+ ?: cameraProperties.metadata[CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE]!!
+
private fun computeCropRect(sensorRect: Rect, zoomRatio: Float): Rect {
val cropWidth: Float = sensorRect.width() / zoomRatio
val cropHeight: Float = sensorRect.height() / zoomRatio
@@ -92,17 +104,23 @@
}
@RequiresApi(Build.VERSION_CODES.R)
-class AndroidRZoomCompat(private val range: Range<Float>) : ZoomCompat {
- override val minZoom: Float
+class AndroidRZoomCompat(
+ private val cameraProperties: CameraProperties,
+ private val range: Range<Float>,
+) : ZoomCompat {
+ override val minZoomRatio: Float
get() = range.lower
- override val maxZoom: Float
+ override val maxZoomRatio: Float
get() = range.upper
override fun apply(
zoomRatio: Float,
camera: UseCaseCamera
) {
- require(zoomRatio in minZoom..maxZoom)
+ require(zoomRatio in minZoomRatio..maxZoomRatio)
camera.setParameterAsync(CaptureRequest.CONTROL_ZOOM_RATIO, zoomRatio)
}
-}
\ No newline at end of file
+
+ override fun getCropSensorRegion(): Rect =
+ cameraProperties.metadata[CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE]!!
+}
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/DeviceQuirks.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/DeviceQuirks.kt
new file mode 100644
index 0000000..a46eb22
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/DeviceQuirks.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.
+ */
+
+@file:RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+
+package androidx.camera.camera2.pipe.integration.compat.quirk
+
+import androidx.annotation.RequiresApi
+import androidx.camera.core.impl.Quirk
+import androidx.camera.core.impl.Quirks
+
+/**
+ * Provider of device specific quirks, which are used for device specific workarounds.
+ *
+ * Device specific quirks depend on device properties, including the manufacturer
+ * ([android.os.Build.MANUFACTURER]), model ([android.os.Build.MODEL]) and OS
+ * level ([android.os.Build.VERSION.SDK_INT]).
+ *
+ * Device specific quirks are lazily loaded, i.e. They are loaded the first time they're needed.
+ */
+object DeviceQuirks {
+
+ /** Returns all device specific quirks loaded on the current device. */
+ val all: Quirks by lazy {
+ Quirks(DeviceQuirksLoader.loadQuirks())
+ }
+
+ /**
+ * Retrieves a specific device [Quirk] instance given its type.
+ *
+ * @param quirkClass The type of device quirk to retrieve.
+ * @return A device [Quirk] instance of the provided type, or `null` if it isn't found.
+ */
+ operator fun <T : Quirk?> get(quirkClass: Class<T>): T? {
+ return all.get(quirkClass)
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/DeviceQuirksLoader.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/DeviceQuirksLoader.kt
new file mode 100644
index 0000000..43b87c6
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/DeviceQuirksLoader.kt
@@ -0,0 +1,43 @@
+/*
+ * 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:RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+
+package androidx.camera.camera2.pipe.integration.compat.quirk
+
+import androidx.annotation.RequiresApi
+import androidx.camera.core.impl.Quirk
+
+/**
+ * Loads all device specific quirks required for the current device.
+ */
+object DeviceQuirksLoader {
+
+ /**
+ * Goes through all defined device-specific quirks, and returns those that should be loaded
+ * on the current device.
+ */
+ fun loadQuirks(): List<Quirk> {
+ val quirks: MutableList<Quirk> = mutableListOf()
+
+ // Load all device specific quirks.
+ if (InvalidVideoProfilesQuirk.load()) {
+ quirks.add(InvalidVideoProfilesQuirk())
+ }
+
+ return quirks
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/InvalidVideoProfilesQuirk.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/InvalidVideoProfilesQuirk.kt
new file mode 100644
index 0000000..20abaa1
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/InvalidVideoProfilesQuirk.kt
@@ -0,0 +1,79 @@
+/*
+ * 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:RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+
+package androidx.camera.camera2.pipe.integration.compat.quirk
+
+import android.annotation.SuppressLint
+import android.media.EncoderProfiles
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.camera.core.impl.Quirk
+
+/**
+ * Quirk denoting the video profile list returns by [EncoderProfiles] is invalid.
+ *
+ * QuirkSummary
+ * - Bug Id: 267727595
+ * - Description: When using [EncoderProfiles] on TP1A or TD1A builds of Android API 33,
+ * [EncoderProfiles.getVideoProfiles] returns a list with size one, but the single value in the
+ * list is null. This is not the expected behavior, and makes [EncoderProfiles] lack of video
+ * information.
+ * - Device(s): Pixel 4 and above pixel devices with TP1A or TD1A builds (API 33).
+ *
+ * TODO: enable CameraXQuirksClassDetector lint check when kotlin is supported.
+ */
+@SuppressLint("CameraXQuirksClassDetector")
+class InvalidVideoProfilesQuirk : Quirk {
+
+ companion object {
+ private val AFFECTED_MODELS: List<String> = listOf(
+ "pixel 4",
+ "pixel 4a",
+ "pixel 4 xl",
+ "pixel 5",
+ "pixel 5a",
+ "pixel 6",
+ "pixel 6a",
+ "pixel 6 pro",
+ "pixel 7",
+ "pixel 7 pro"
+ )
+
+ fun load(): Boolean {
+ return isAffectedModel() && isAffectedBuild()
+ }
+
+ private fun isAffectedModel(): Boolean {
+ return AFFECTED_MODELS.contains(
+ Build.MODEL.lowercase()
+ )
+ }
+
+ private fun isAffectedBuild(): Boolean {
+ return isTp1aBuild() || isTd1aBuild()
+ }
+
+ private fun isTp1aBuild(): Boolean {
+ return Build.ID.startsWith("TP1A")
+ }
+
+ private fun isTd1aBuild(): Boolean {
+ return Build.ID.startsWith("TD1A")
+ }
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/package-info.java b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/package-info.java
new file mode 100644
index 0000000..eca73c3
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/package-info.java
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+package androidx.camera.camera2.pipe.integration.compat.quirk;
+
+import androidx.annotation.RestrictTo;
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/EvCompControl.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/EvCompControl.kt
index a4be0a8..2bba010 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/EvCompControl.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/EvCompControl.kt
@@ -63,16 +63,15 @@
get() = _useCaseCamera
set(value) {
_useCaseCamera = value
- updateAsync(evCompIndex)
+ updateAsync(evCompIndex, cancelPreviousTask = false)
}
override fun reset() {
- evCompIndex = 0
- compat.stopRunningTask()
- updateAsync(0)
+ evCompIndex = DEFAULT_EXPOSURE_COMPENSATION
+ updateAsync(DEFAULT_EXPOSURE_COMPENSATION)
}
- fun updateAsync(exposureIndex: Int): Deferred<Int> {
+ fun updateAsync(exposureIndex: Int, cancelPreviousTask: Boolean = true): Deferred<Int> {
if (!compat.supported) {
return createFailureResult(
IllegalArgumentException("ExposureCompensation is not supported")
@@ -88,12 +87,15 @@
)
}
- useCaseCamera?.let {
+ return useCaseCamera?.let { camera ->
evCompIndex = exposureIndex
- return compat.applyAsync(exposureIndex, it)
- } ?: return createFailureResult(
- CameraControl.OperationCanceledException("Camera is not active.")
- )
+ compat.applyAsync(exposureIndex, camera, cancelPreviousTask)
+ } ?: run {
+ CameraControl.OperationCanceledException("Camera is not active.").let { cancelResult ->
+ compat.stopRunningTask(cancelResult)
+ createFailureResult(cancelResult)
+ }
+ }
}
private fun createFailureResult(exception: Exception) = CompletableDeferred<Int>().apply {
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/FlashControl.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/FlashControl.kt
index 21fe187..e053c73 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/FlashControl.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/FlashControl.kt
@@ -17,6 +17,7 @@
package androidx.camera.camera2.pipe.integration.impl
import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.integration.adapter.propagateTo
import androidx.camera.camera2.pipe.integration.config.CameraScope
import androidx.camera.core.CameraControl
import androidx.camera.core.ImageCapture
@@ -45,7 +46,7 @@
get() = _useCaseCamera
set(value) {
_useCaseCamera = value
- setFlashAsync(_flashMode)
+ setFlashAsync(_flashMode, false)
}
override fun reset() {
@@ -71,7 +72,7 @@
}
private set
- fun setFlashAsync(flashMode: Int): Deferred<Unit> {
+ fun setFlashAsync(flashMode: Int, cancelPreviousTask: Boolean = true): Deferred<Unit> {
val signal = CompletableDeferred<Unit>()
useCaseCamera?.let {
@@ -81,13 +82,18 @@
_flashMode = flashMode
threads.sequentialScope.launch {
- stopRunningTask()
+ if (cancelPreviousTask) {
+ stopRunningTask()
+ } else {
+ // Propagate the result to the previous updateSignal
+ _updateSignal?.let { previousUpdateSignal ->
+ signal.propagateTo(previousUpdateSignal)
+ }
+ }
_updateSignal = signal
state3AControl.flashMode = flashMode
- state3AControl.updateSignal?.join()
-
- signal.complete(Unit)
+ state3AControl.updateSignal?.propagateTo(signal) ?: run { signal.complete(Unit) }
}
} ?: run {
signal.completeExceptionally(
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/FocusMeteringControl.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/FocusMeteringControl.kt
index 0b11ba7..90049dd 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/FocusMeteringControl.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/FocusMeteringControl.kt
@@ -27,6 +27,8 @@
import androidx.camera.camera2.pipe.AeMode
import androidx.camera.camera2.pipe.Result3A
import androidx.camera.camera2.pipe.integration.adapter.asListenableFuture
+import androidx.camera.camera2.pipe.integration.adapter.propagateTo
+import androidx.camera.camera2.pipe.integration.compat.ZoomCompat
import androidx.camera.camera2.pipe.integration.config.CameraScope
import androidx.camera.core.CameraControl.OperationCanceledException
import androidx.camera.core.FocusMeteringAction
@@ -53,6 +55,7 @@
private val cameraProperties: CameraProperties,
private val state3AControl: State3AControl,
private val threads: UseCaseThreads,
+ private val zoomCompat: ZoomCompat,
) : UseCaseCameraControl, UseCaseCamera.RunningUseCasesChangeListener {
private var _useCaseCamera: UseCaseCamera? = null
@@ -80,15 +83,12 @@
cancelFocusAndMeteringAsync()
}
- @Volatile
private var previewAspectRatio: Rational? = null
- private val sensorRect by lazy {
- // TODO("b/262225455"): use the actual crop sensor region like in camera-camera2
- cameraProperties.metadata[CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE]!!
- }
+ private val cropSensorRegion
+ get() = zoomCompat.getCropSensorRegion()
private val defaultAspectRatio: Rational
- get() = previewAspectRatio ?: Rational(sensorRect.width(), sensorRect.height())
+ get() = previewAspectRatio ?: Rational(cropSensorRegion.width(), cropSensorRegion.height())
private val maxAfRegionCount =
cameraProperties.metadata.getOrDefault(CameraCharacteristics.CONTROL_MAX_REGIONS_AF, 0)
@@ -114,19 +114,19 @@
val aeRectangles = meteringRegionsFromMeteringPoints(
action.meteringPointsAe,
maxAeRegionCount,
- sensorRect,
+ cropSensorRegion,
defaultAspectRatio
)
val afRectangles = meteringRegionsFromMeteringPoints(
action.meteringPointsAf,
maxAfRegionCount,
- sensorRect,
+ cropSensorRegion,
defaultAspectRatio
)
val awbRectangles = meteringRegionsFromMeteringPoints(
action.meteringPointsAwb,
maxAwbRegionCount,
- sensorRect,
+ cropSensorRegion,
defaultAspectRatio
)
if (aeRectangles.isEmpty() && afRectangles.isEmpty() && awbRectangles.isEmpty()) {
@@ -161,7 +161,7 @@
} else {
if (isCancelEnabled) {
if (signal.isActive) {
- cancelFocusAndMeteringNow(useCaseCamera, signal)
+ cancelFocusAndMeteringNowAsync(useCaseCamera, signal)
}
} else {
signal.complete(FocusMeteringResult.create(false))
@@ -190,19 +190,19 @@
val rectanglesAe = meteringRegionsFromMeteringPoints(
action.meteringPointsAe,
maxAeRegionCount,
- sensorRect,
+ cropSensorRegion,
defaultAspectRatio
)
val rectanglesAf = meteringRegionsFromMeteringPoints(
action.meteringPointsAf,
maxAfRegionCount,
- sensorRect,
+ cropSensorRegion,
defaultAspectRatio
)
val rectanglesAwb = meteringRegionsFromMeteringPoints(
action.meteringPointsAwb,
maxAwbRegionCount,
- sensorRect,
+ cropSensorRegion,
defaultAspectRatio
)
return rectanglesAe.isNotEmpty() || rectanglesAf.isNotEmpty() || rectanglesAwb.isNotEmpty()
@@ -231,7 +231,7 @@
threads.sequentialScope.launch {
cancelSignal?.setCancelException("Cancelled by another cancelFocusAndMetering()")
cancelSignal = signal
- signal.complete(cancelFocusAndMeteringNow(useCaseCamera, updateSignal))
+ cancelFocusAndMeteringNowAsync(useCaseCamera, updateSignal).propagateTo(signal)
}
} ?: run {
signal.completeExceptionally(OperationCanceledException("Camera is not active."))
@@ -240,13 +240,13 @@
return signal
}
- private suspend fun cancelFocusAndMeteringNow(
+ private suspend fun cancelFocusAndMeteringNowAsync(
useCaseCamera: UseCaseCamera,
signalToCancel: CompletableDeferred<FocusMeteringResult>?,
- ): Result3A {
+ ): Deferred<Result3A> {
signalToCancel?.setCancelException("Cancelled by cancelFocusAndMetering()")
state3AControl.preferredFocusMode = null
- return useCaseCamera.requestControl.cancelFocusAndMeteringAsync().await()
+ return useCaseCamera.requestControl.cancelFocusAndMeteringAsync()
}
private fun <T> CompletableDeferred<T>.setCancelException(message: String) {
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/State3AControl.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/State3AControl.kt
index dc8aa7e..4c5f71f 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/State3AControl.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/State3AControl.kt
@@ -19,9 +19,12 @@
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraDevice
import android.hardware.camera2.CaptureRequest
+import androidx.annotation.GuardedBy
import androidx.annotation.RequiresApi
import androidx.camera.camera2.pipe.integration.adapter.SessionConfigAdapter
+import androidx.camera.camera2.pipe.integration.adapter.propagateTo
import androidx.camera.camera2.pipe.integration.config.CameraScope
+import androidx.camera.core.CameraControl
import androidx.camera.core.ImageCapture
import androidx.camera.core.UseCase
import androidx.camera.core.impl.CaptureConfig
@@ -45,7 +48,16 @@
set(value) {
_useCaseCamera = value
value?.let {
+ val previousSignals = synchronized(lock) {
+ updateSignal = null
+ updateSignals.toList()
+ }
+
invalidate() // Always apply the settings to the camera.
+
+ synchronized(lock) { updateSignal }?.let { newUpdateSignal ->
+ previousSignals.forEach { newUpdateSignal.propagateTo(it) }
+ } ?: run { previousSignals.forEach { it.complete(Unit) } }
}
}
@@ -68,6 +80,12 @@
intArrayOf(CaptureRequest.CONTROL_AWB_MODE_OFF)
).asList()
+ private val lock = Any()
+
+ @GuardedBy("lock")
+ private val updateSignals = mutableSetOf<CompletableDeferred<Unit>>()
+
+ @GuardedBy("lock")
var updateSignal: Deferred<Unit>? = null
private set
var flashMode by updateOnPropertyChange(DEFAULT_FLASH_MODE)
@@ -76,6 +94,7 @@
var preferredFocusMode: Int? by updateOnPropertyChange(null)
override fun reset() {
+ synchronized(lock) { updateSignals.toList() }.cancelAll()
preferredAeMode = null
preferredFocusMode = null
flashMode = DEFAULT_FLASH_MODE
@@ -106,7 +125,7 @@
val preferAfMode = preferredFocusMode ?: getDefaultAfMode()
- updateSignal = useCaseCamera?.requestControl?.addParametersAsync(
+ useCaseCamera?.requestControl?.addParametersAsync(
values = mapOf(
CaptureRequest.CONTROL_AE_MODE to getSupportedAeMode(preferAeMode),
CaptureRequest.CONTROL_AF_MODE to getSupportedAfMode(preferAfMode),
@@ -114,7 +133,21 @@
CaptureRequest.CONTROL_AWB_MODE_AUTO
),
)
- ) ?: CompletableDeferred(null)
+ )?.apply {
+ toCompletableDeferred().also { signal ->
+ synchronized(lock) {
+ updateSignals.add(signal)
+ updateSignal = signal
+ signal.invokeOnCompletion {
+ synchronized(lock) {
+ updateSignals.remove(signal)
+ }
+ }
+ }
+ }
+ } ?: run {
+ synchronized(lock) { updateSignal = CompletableDeferred(null) }
+ }
}
private fun getDefaultAfMode(): Int = when (template) {
@@ -189,6 +222,13 @@
}
}
+ private fun <T> Deferred<T>.toCompletableDeferred() =
+ CompletableDeferred<T>().also { propagateTo(it) }
+
+ private fun <T> Collection<CompletableDeferred<T>>.cancelAll() = forEach {
+ it.completeExceptionally(CameraControl.OperationCanceledException("Camera is not active."))
+ }
+
@Module
abstract class Bindings {
@Binds
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/TorchControl.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/TorchControl.kt
index 7981dc9..21e752a 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/TorchControl.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/TorchControl.kt
@@ -19,6 +19,7 @@
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CaptureRequest
import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.integration.adapter.propagateTo
import androidx.camera.camera2.pipe.integration.config.CameraScope
import androidx.camera.core.CameraControl
import androidx.camera.core.TorchState
@@ -51,10 +52,11 @@
set(value) {
_useCaseCamera = value
setTorchAsync(
- when (torchStateLiveData.value) {
+ torch = when (torchStateLiveData.value) {
TorchState.ON -> true
else -> false
- }
+ },
+ cancelPreviousTask = false,
)
}
@@ -77,7 +79,7 @@
private var _updateSignal: CompletableDeferred<Unit>? = null
- fun setTorchAsync(torch: Boolean): Deferred<Unit> {
+ fun setTorchAsync(torch: Boolean, cancelPreviousTask: Boolean = true): Deferred<Unit> {
val signal = CompletableDeferred<Unit>()
if (!hasFlashUnit) {
@@ -89,7 +91,15 @@
_torchState.setLiveDataValue(torch)
threads.sequentialScope.launch {
- stopRunningTaskInternal()
+ if (cancelPreviousTask) {
+ stopRunningTaskInternal()
+ } else {
+ // Propagate the result to the previous updateSignal
+ _updateSignal?.let { previousUpdateSignal ->
+ signal.propagateTo(previousUpdateSignal)
+ }
+ }
+
_updateSignal = signal
// TODO(b/209757083), handle the failed result of the setTorchAsync().
@@ -98,9 +108,7 @@
// Hold the internal AE mode to ON while the torch is turned ON.
state3AControl.preferredAeMode =
if (torch) CaptureRequest.CONTROL_AE_MODE_ON else null
- state3AControl.updateSignal?.join()
-
- signal.complete(Unit)
+ state3AControl.updateSignal?.propagateTo(signal) ?: run { signal.complete(Unit) }
}
} ?: run {
signal.createFailureResult(
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/ZoomControl.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/ZoomControl.kt
index 698da1b..66fbb27 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/ZoomControl.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/ZoomControl.kt
@@ -21,6 +21,8 @@
import androidx.camera.camera2.pipe.integration.adapter.asListenableFuture
import androidx.camera.camera2.pipe.integration.compat.ZoomCompat
import androidx.camera.camera2.pipe.integration.config.CameraScope
+import androidx.camera.camera2.pipe.integration.internal.ZoomMath.getLinearZoomFromZoomRatio
+import androidx.camera.camera2.pipe.integration.internal.ZoomMath.getZoomRatioFromLinearZoom
import androidx.camera.core.CameraControl
import androidx.camera.core.ZoomState
import androidx.camera.core.impl.utils.futures.Futures
@@ -31,7 +33,6 @@
import dagger.Module
import dagger.multibindings.IntoSet
import javax.inject.Inject
-import kotlin.math.abs
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -47,11 +48,11 @@
) : UseCaseCameraControl {
// NOTE: minZoom may be lower than 1.0
// NOTE: Default zoom ratio is 1.0 (DEFAULT_ZOOM_RATIO)
- val minZoom: Float = zoomCompat.minZoom
- val maxZoom: Float = zoomCompat.maxZoom
+ val minZoomRatio: Float = zoomCompat.minZoomRatio
+ val maxZoomRatio: Float = zoomCompat.maxZoomRatio
val defaultZoomState by lazy {
- ZoomValue(DEFAULT_ZOOM_RATIO, minZoom, maxZoom)
+ ZoomValue(DEFAULT_ZOOM_RATIO, minZoomRatio, maxZoomRatio)
}
private val _zoomState by lazy {
@@ -62,28 +63,18 @@
get() = _zoomState
/** Linear zoom is between 0.0f and 1.0f */
- fun toLinearZoom(zoomRatio: Float): Float {
- val range = zoomCompat.maxZoom - zoomCompat.minZoom
- if (range > 0) {
- return (zoomRatio - zoomCompat.minZoom) / range
- }
- return 0.0f
- }
+ fun toLinearZoom(zoomRatio: Float) = getLinearZoomFromZoomRatio(
+ zoomRatio = zoomRatio,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ )
/** Zoom ratio is commonly used as the "1x, 2x, 5x" zoom ratio. Zoom ratio may be less than 1 */
- fun toZoomRatio(linearZoom: Float): Float {
- val range = zoomCompat.maxZoom - zoomCompat.minZoom
- if (range > 0) {
- return linearZoom * range + zoomCompat.minZoom
- }
-
- // if minZoom = maxZoom = 2.0f, 2.0f should be returned instead of default 1.0f
- if (nearZero(range)) {
- return zoomCompat.minZoom
- }
-
- return DEFAULT_ZOOM_RATIO
- }
+ private fun toZoomRatio(linearZoom: Float) = getZoomRatioFromLinearZoom(
+ linearZoom = linearZoom,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ )
private var _useCaseCamera: UseCaseCamera? = null
override var useCaseCamera: UseCaseCamera?
@@ -117,16 +108,46 @@
}
}
- fun setZoomRatioAsync(ratio: Float): ListenableFuture<Void> {
+ fun setLinearZoom(linearZoom: Float): ListenableFuture<Void> {
+ if (linearZoom > 1.0f || linearZoom < 0f) {
+ val outOfRangeDesc =
+ "Requested linearZoom $linearZoom is not within valid range [0, 1]"
+ return Futures.immediateFailedFuture(
+ IllegalArgumentException(outOfRangeDesc)
+ )
+ }
+
+ val zoomValue = ZoomValue(
+ ZoomValue.LinearZoom(linearZoom),
+ minZoomRatio,
+ maxZoomRatio,
+ )
+ return setZoomValue(zoomValue)
+ }
+
+ fun setZoomRatio(zoomRatio: Float): ListenableFuture<Void> {
+ if (zoomRatio > maxZoomRatio || zoomRatio < minZoomRatio) {
+ val outOfRangeDesc =
+ "Requested zoomRatio $zoomRatio is not within valid range" +
+ " [$minZoomRatio, $maxZoomRatio]"
+ return Futures.immediateFailedFuture(
+ IllegalArgumentException(outOfRangeDesc)
+ )
+ }
+
+ val zoomValue = ZoomValue(
+ zoomRatio,
+ minZoomRatio,
+ maxZoomRatio,
+ )
+ return setZoomValue(zoomValue)
+ }
+
+ fun setZoomValue(zoomValue: ZoomValue): ListenableFuture<Void> {
// TODO: report IllegalArgumentException if ratio not in range
return Futures.nonCancellationPropagating(
useCaseCamera?.let {
threads.scope.launch(start = CoroutineStart.UNDISPATCHED) {
- val zoomValue = ZoomValue(
- ratio,
- minZoom,
- maxZoom
- )
setZoomState(zoomValue)
update()
}.asListenableFuture()
@@ -136,10 +157,6 @@
)
}
- private fun nearZero(num: Float): Boolean {
- return abs(num) < 2.0 * Math.ulp(abs(num))
- }
-
@Module
abstract class Bindings {
@Binds
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/internal/ZoomMath.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/internal/ZoomMath.kt
new file mode 100644
index 0000000..0114d24
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/internal/ZoomMath.kt
@@ -0,0 +1,107 @@
+/*
+ * 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.camera2.pipe.integration.internal
+
+import androidx.core.math.MathUtils
+import kotlin.math.abs
+
+/**
+ * This class is used for containing the mathematical calculations for ZoomControl, mainly the
+ * conversions between zoomRatio and linearZoom.
+ *
+ * The linearZoom is the percentage of zoom amount i.e. how much cropWidth is being used,
+ * so linearZoom = 0.5 should represent the middle point of
+ * [minZoomCropWidth, maxZoomCropWidth] range. But that does not mean it should be the same as
+ * (minZoom + maxZoom) / 2. For example, consider the case where
+ * original cropWidth = 10000 for zoomRatio = 1.0f,
+ * minZoomRatio = 1.0f, maxZoomRatio = 10.0f,
+ * zoomRatio = 5.5f may not represent linearZoom = 0.5 i.e. the half zoom amount. Here,
+ * zoomRatio = 1.0f, cropWidth = 10000,
+ * zoomRatio = 5.5f, cropWidth = 1818.18
+ * zoomRatio = 10.0f, cropWidth = 1000
+ * As observed, zoomRatio = 5.5f does not yield cropWidth = 5500 which would be the actual
+ * zooming amount middle point.
+ */
+object ZoomMath {
+ fun getLinearZoomFromZoomRatio(
+ zoomRatio: Float,
+ minZoomRatio: Float,
+ maxZoomRatio: Float
+ ): Float {
+ // if zoom is not supported i.e. minZoomRatio = maxZoomRatio, return 0
+ if (areFloatsEqual(minZoomRatio, maxZoomRatio)) {
+ return 0f
+ }
+
+ if (areFloatsEqual(zoomRatio, maxZoomRatio)) {
+ return 1f
+ } else if (areFloatsEqual(zoomRatio, minZoomRatio)) {
+ return 0f
+ }
+
+ /**
+ * linearZoom should represent the percentage of zoom amount based on how much cropWidth
+ * is visible.
+ *
+ * The original sensor region width is considered as 1.0f here as we only need the
+ * linearZoom ratio, not the actual crop width.
+ */
+ val relativeCropWidth = 1.0f / zoomRatio
+ val relativeCropWidthInMaxZoom = 1.0f / maxZoomRatio
+ val relativeCropWidthInMinZoom = 1.0f / minZoomRatio
+
+ val linearZoom = (relativeCropWidthInMinZoom - relativeCropWidth) /
+ (relativeCropWidthInMinZoom - relativeCropWidthInMaxZoom)
+
+ return MathUtils.clamp(linearZoom, 0f, 1.0f)
+ }
+
+ fun getZoomRatioFromLinearZoom(
+ linearZoom: Float,
+ minZoomRatio: Float,
+ maxZoomRatio: Float
+ ): Float {
+ if (areFloatsEqual(linearZoom, 1.0f)) {
+ return maxZoomRatio
+ } else if (areFloatsEqual(linearZoom, 0f)) {
+ return minZoomRatio
+ }
+
+ /**
+ * This crop width is proportional to the real crop width.
+ * The real crop with = sensorWidth/ zoomRatio, but we need the ratio only so we can
+ * assume sensorWidth as 1.0f.
+ */
+ val relativeCropWidthInMaxZoom = 1.0f / maxZoomRatio
+ val relativeCropWidthInMinZoom = 1.0f / minZoomRatio
+
+ val cropWidth = relativeCropWidthInMinZoom -
+ (relativeCropWidthInMinZoom - relativeCropWidthInMaxZoom) * linearZoom
+
+ val ratio = 1.0f / cropWidth
+
+ return MathUtils.clamp(ratio, minZoomRatio, maxZoomRatio)
+ }
+
+ private fun areFloatsEqual(num1: Float, num2: Float): Boolean {
+ return nearZero(num1 - num2)
+ }
+
+ private fun nearZero(num: Float): Boolean {
+ return abs(num) < 2.0 * Math.ulp(abs(num))
+ }
+}
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraControl.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraControl.kt
index 35d0833..4d669ef 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraControl.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraControl.kt
@@ -69,7 +69,7 @@
_useCaseCamera?.also {
requestListener.removeListener(compat)
requestListener.addListener(compat, threads.sequentialExecutor)
- compat.applyAsync(it)
+ compat.applyAsync(it, false)
}
}
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt
index fe14c55..685eb31 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapterTest.kt
@@ -98,12 +98,12 @@
// if useCaseCamera is null, zoom setting operation will be cancelled
zoomControl.useCaseCamera = FakeUseCaseCamera()
- zoomControl.setZoomRatioAsync(3.0f)[3, TimeUnit.SECONDS]
+ val expectedZoomState = ZoomValue(3.0f, 1.0f, 10.0f)
+ zoomControl.setZoomValue(expectedZoomState)[3, TimeUnit.SECONDS]
- // minZoom and maxZoom will be set as 0 due to FakeZoomCompat using those values
- assertWithMessage("zoomState did not return default zoom ratio successfully")
+ assertWithMessage("zoomState did not return the correct zoom state successfully")
.that(currentZoomState)
- .isEqualTo(ZoomValue(3.0f, zoomControl.minZoom, zoomControl.maxZoom))
+ .isEqualTo(expectedZoomState)
}
@Test
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CoroutineAdapterTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CoroutineAdapterTest.kt
new file mode 100644
index 0000000..87533ee
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CoroutineAdapterTest.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.camera2.pipe.integration.adapter
+
+import android.os.Build
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.CompletableDeferred
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.runBlocking
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.internal.DoNotInstrument
+
+@RunWith(RobolectricCameraPipeTestRunner::class)
+@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
+@DoNotInstrument
+class CoroutineAdapterTest {
+ @Test
+ fun propagateCompleteResult(): Unit = runBlocking {
+ // Arrange.
+ val resultValue = 123
+ val sourceDeferred = CompletableDeferred<Int>()
+ val resultDeferred = CompletableDeferred<Int>()
+ sourceDeferred.propagateTo(resultDeferred)
+
+ // Act.
+ sourceDeferred.complete(resultValue)
+
+ // Assert.
+ assertThat(resultDeferred.await()).isEqualTo(resultValue)
+ }
+
+ @Test
+ fun propagateCancelResult() {
+ // Arrange.
+ val sourceDeferred = CompletableDeferred<Unit>()
+ val resultDeferred = CompletableDeferred<Unit>()
+ sourceDeferred.propagateTo(resultDeferred)
+
+ // Act.
+ sourceDeferred.cancel()
+
+ // Assert.
+ assertThat(resultDeferred.isCancelled).isTrue()
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun propagateExceptionResult() {
+ // Arrange.
+ val sourceDeferred = CompletableDeferred<Unit>()
+ val resultDeferred = CompletableDeferred<Unit>()
+ sourceDeferred.propagateTo(resultDeferred)
+ val testThrowable = Throwable()
+
+ // Act.
+ sourceDeferred.completeExceptionally(testThrowable)
+
+ // Assert.
+ assertThat(resultDeferred.getCompletionExceptionOrNull()).isSameInstanceAs(testThrowable)
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt
index 157d7a7..d1c277d 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt
@@ -29,6 +29,7 @@
import android.util.Size
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.Result3A
+import androidx.camera.camera2.pipe.integration.compat.ZoomCompat
import androidx.camera.camera2.pipe.integration.impl.CameraProperties
import androidx.camera.camera2.pipe.integration.impl.FocusMeteringControl
import androidx.camera.camera2.pipe.integration.impl.State3AControl
@@ -37,6 +38,7 @@
import androidx.camera.camera2.pipe.integration.impl.UseCaseThreads
import androidx.camera.camera2.pipe.integration.testing.FakeCameraProperties
import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCameraRequestControl
+import androidx.camera.camera2.pipe.integration.testing.FakeZoomCompat
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
import androidx.camera.camera2.pipe.testing.FakeFrameMetadata
import androidx.camera.core.CameraControl
@@ -409,6 +411,82 @@
}
@Test
+ fun cropRegionIsSet_resultBasedOnCropRegion() {
+ val cropWidth = 480
+ val cropHeight = 360
+ val cropRect = Rect(
+ SENSOR_WIDTH / 2 - cropWidth / 2,
+ SENSOR_HEIGHT / 2 - cropHeight / 2,
+ SENSOR_WIDTH / 2 + cropWidth / 2, SENSOR_HEIGHT / 2 + cropHeight / 2
+ )
+
+ focusMeteringControl = initFocusMeteringControl(
+ cameraId = CAMERA_ID_0,
+ zoomCompat = FakeZoomCompat(croppedSensorArea = cropRect),
+ )
+
+ val centerPt = pointFactory.createPoint(0.5f, 0.5f)
+ startFocusMeteringAndAwait(
+ FocusMeteringAction.Builder(centerPt).build()
+ )
+
+ val areaWidth = (MeteringPointFactory.getDefaultPointSize() * cropRect.width()).toInt()
+ val areaHeight = (MeteringPointFactory.getDefaultPointSize() * cropRect.height()).toInt()
+ val adjustedRect = Rect(
+ cropRect.centerX() - areaWidth / 2,
+ cropRect.centerY() - areaHeight / 2,
+ cropRect.centerX() + areaWidth / 2,
+ cropRect.centerY() + areaHeight / 2
+ )
+ with(fakeRequestControl.focusMeteringCalls.last()) {
+ assertWithMessage("Wrong number of AF regions").that(afRegions.size).isEqualTo(1)
+ assertWithMessage("Wrong AF region")
+ .that(afRegions[0].rect).isEqualTo(adjustedRect)
+ }
+ }
+
+ @Test
+ fun cropRegionIsSetTwice_resultAlwaysBasedOnCurrentCropRegion() {
+ val cropWidth = 480
+ val cropHeight = 360
+ val cropRect = Rect(
+ SENSOR_WIDTH / 2 - cropWidth / 2,
+ SENSOR_HEIGHT / 2 - cropHeight / 2,
+ SENSOR_WIDTH / 2 + cropWidth / 2, SENSOR_HEIGHT / 2 + cropHeight / 2
+ )
+
+ val zoomCompat = FakeZoomCompat(croppedSensorArea = Rect(0, 0, 640, 480))
+ focusMeteringControl = initFocusMeteringControl(
+ cameraId = CAMERA_ID_0,
+ zoomCompat = zoomCompat,
+ )
+
+ val centerPt = pointFactory.createPoint(0.5f, 0.5f)
+ startFocusMeteringAndAwait(
+ FocusMeteringAction.Builder(centerPt).build()
+ )
+
+ zoomCompat.croppedSensorArea = cropRect
+ startFocusMeteringAndAwait(
+ FocusMeteringAction.Builder(centerPt).build()
+ )
+
+ val areaWidth = (MeteringPointFactory.getDefaultPointSize() * cropRect.width()).toInt()
+ val areaHeight = (MeteringPointFactory.getDefaultPointSize() * cropRect.height()).toInt()
+ val adjustedRect = Rect(
+ cropRect.centerX() - areaWidth / 2,
+ cropRect.centerY() - areaHeight / 2,
+ cropRect.centerX() + areaWidth / 2,
+ cropRect.centerY() + areaHeight / 2
+ )
+ with(fakeRequestControl.focusMeteringCalls.last()) {
+ assertWithMessage("Wrong number of AF regions").that(afRegions.size).isEqualTo(1)
+ assertWithMessage("Wrong AF region")
+ .that(afRegions[0].rect).isEqualTo(adjustedRect)
+ }
+ }
+
+ @Test
fun previewFovAdjusted_16by9_to_4by3() {
// use 16:9 preview aspect ratio with sensor region of 4:3 (camera 0)
focusMeteringControl = initFocusMeteringControl(
@@ -431,8 +509,9 @@
fun previewFovAdjusted_4by3_to_16by9() {
// use 4:3 preview aspect ratio with sensor region of 16:9 (camera 1)
focusMeteringControl = initFocusMeteringControl(
- CAMERA_ID_1,
- setOf(createPreview(Size(640, 480))),
+ cameraId = CAMERA_ID_1,
+ useCases = setOf(createPreview(Size(640, 480))),
+ zoomCompat = FakeZoomCompat(croppedSensorArea = Rect(0, 0, 1920, 1080))
)
startFocusMeteringAndAwait(
@@ -1031,7 +1110,6 @@
// - [b/255679866] triggerAfWithTemplate, triggerAePrecaptureWithTemplate,
// cancelAfAeTriggerWithTemplate
// - startFocusAndMetering_AfRegionCorrectedByQuirk
- // - [b/262225455] cropRegionIsSet_resultBasedOnCropRegion
private fun assertFutureFocusCompleted(
future: ListenableFuture<FocusMeteringResult>,
@@ -1126,10 +1204,12 @@
useCases: Set<UseCase> = emptySet(),
useCaseThreads: UseCaseThreads = fakeUseCaseThreads,
state3AControl: State3AControl = createState3AControl(cameraId),
+ zoomCompat: ZoomCompat = FakeZoomCompat()
) = FocusMeteringControl(
cameraPropertiesMap[cameraId]!!,
state3AControl,
- useCaseThreads
+ useCaseThreads,
+ zoomCompat
).apply {
fakeUseCaseCamera.runningUseCases = useCases
useCaseCamera = fakeUseCaseCamera
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombinationTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombinationTest.kt
index 59295e2..23571ca 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombinationTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombinationTest.kt
@@ -21,7 +21,10 @@
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraManager
import android.hardware.camera2.params.StreamConfigurationMap
-import android.media.CamcorderProfile
+import android.media.CamcorderProfile.QUALITY_1080P
+import android.media.CamcorderProfile.QUALITY_2160P
+import android.media.CamcorderProfile.QUALITY_480P
+import android.media.CamcorderProfile.QUALITY_720P
import android.media.MediaRecorder
import android.os.Build
import android.util.Pair
@@ -50,8 +53,9 @@
import androidx.camera.core.Preview
import androidx.camera.core.SurfaceRequest
import androidx.camera.core.UseCase
-import androidx.camera.core.impl.CamcorderProfileProxy
import androidx.camera.core.impl.CameraThreadConfig
+import androidx.camera.core.impl.EncoderProfilesProxy
+import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy
import androidx.camera.core.impl.MutableStateObservable
import androidx.camera.core.impl.Observable
import androidx.camera.core.impl.StreamSpec
@@ -61,16 +65,15 @@
import androidx.camera.core.impl.UseCaseConfigFactory
import androidx.camera.core.impl.utils.CompareSizesByArea
import androidx.camera.core.impl.utils.executor.CameraXExecutors
-import androidx.camera.testing.CamcorderProfileUtil
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.CameraXUtil
import androidx.camera.testing.Configs
+import androidx.camera.testing.EncoderProfilesUtil
import androidx.camera.testing.SurfaceTextureProvider
-import androidx.camera.testing.SurfaceTextureProvider.SurfaceTextureCallback
-import androidx.camera.testing.fakes.FakeCamcorderProfileProvider
import androidx.camera.testing.fakes.FakeCamera
import androidx.camera.testing.fakes.FakeCameraFactory
import androidx.camera.testing.fakes.FakeCameraInfoInternal
+import androidx.camera.testing.fakes.FakeEncoderProfilesProvider
import androidx.camera.testing.fakes.FakeUseCaseConfig
import androidx.camera.video.FallbackStrategy
import androidx.camera.video.MediaSpec
@@ -125,20 +128,17 @@
private val legacyVideoMaximumVideoSize = Size(1920, 1080)
private val mod16Size = Size(960, 544)
private val mod16SizeStreamSpec = StreamSpec.builder(mod16Size).build()
- private val profileUhd = CamcorderProfileUtil.createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_2160P, recordSize.width, recordSize
- .height
+ private val profileUhd = EncoderProfilesUtil.createFakeEncoderProfilesProxy(
+ recordSize.width, recordSize.height
)
- private val profileFhd = CamcorderProfileUtil.createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_1080P, 1920, 1080
+ private val profileFhd = EncoderProfilesUtil.createFakeEncoderProfilesProxy(
+ 1920, 1080
)
- private val profileHd = CamcorderProfileUtil.createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_720P, previewSize.width, previewSize
- .height
+ private val profileHd = EncoderProfilesUtil.createFakeEncoderProfilesProxy(
+ previewSize.width, previewSize.height
)
- private val profileSd = CamcorderProfileUtil.createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_480P, vgaSize.width,
- vgaSize.height
+ private val profileSd = EncoderProfilesUtil.createFakeEncoderProfilesProxy(
+ vgaSize.width, vgaSize.height
)
private val supportedSizes = arrayOf(
Size(4032, 3024), // 4:3
@@ -161,8 +161,9 @@
private lateinit var fakeCameraMetadata: FakeCameraMetadata
private val mockCameraAppComponent: CameraAppComponent = mock()
- private val mockCamcorderProfileAdapter: CamcorderProfileProviderAdapter = mock()
- private val mockCamcorderProxy: CamcorderProfileProxy = mock()
+ private val mockEncoderProfilesAdapter: EncoderProfilesProviderAdapter = mock()
+ private val mockEncoderProfilesProxy: EncoderProfilesProxy = mock()
+ private val mockVideoProfileProxy: VideoProfileProxy = mock()
@Before
fun setUp() {
@@ -172,12 +173,12 @@
displaySize
.height
)
- whenever(mockCamcorderProfileAdapter.hasProfile(ArgumentMatchers.anyInt()))
- .thenReturn(true)
- whenever(mockCamcorderProxy.videoFrameWidth).thenReturn(3840)
- whenever(mockCamcorderProxy.videoFrameHeight).thenReturn(2160)
- whenever(mockCamcorderProfileAdapter[ArgumentMatchers.anyInt()])
- .thenReturn(mockCamcorderProxy)
+ whenever(mockEncoderProfilesAdapter.hasProfile(ArgumentMatchers.anyInt())).thenReturn(true)
+ whenever(mockVideoProfileProxy.width).thenReturn(3840)
+ whenever(mockVideoProfileProxy.height).thenReturn(2160)
+ whenever(mockEncoderProfilesProxy.videoProfiles).thenReturn(listOf(mockVideoProfileProxy))
+ whenever(mockEncoderProfilesAdapter.getAll(ArgumentMatchers.anyInt()))
+ .thenReturn(mockEncoderProfilesProxy)
}
@After
@@ -190,7 +191,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLegacySupportedCombinationList()
for (combination in combinationList) {
@@ -205,7 +206,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLegacySupportedCombinationList()
val isSupported = isAllSubConfigListSupported(supportedSurfaceCombination, combinationList)
@@ -217,7 +218,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLimitedSupportedCombinationList()
for (combination in combinationList) {
@@ -232,7 +233,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getFullSupportedCombinationList()
for (combination in combinationList) {
@@ -247,7 +248,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLevel3SupportedCombinationList()
for (combination in combinationList) {
@@ -262,7 +263,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLimitedSupportedCombinationList()
for (combination in combinationList) {
@@ -277,7 +278,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLimitedSupportedCombinationList()
val isSupported = isAllSubConfigListSupported(supportedSurfaceCombination, combinationList)
@@ -289,7 +290,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getFullSupportedCombinationList()
for (combination in combinationList) {
@@ -304,7 +305,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLevel3SupportedCombinationList()
for (combination in combinationList) {
@@ -319,7 +320,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getFullSupportedCombinationList()
for (combination in combinationList) {
@@ -334,7 +335,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getFullSupportedCombinationList()
val isSupported = isAllSubConfigListSupported(supportedSurfaceCombination, combinationList)
@@ -346,7 +347,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLevel3SupportedCombinationList()
for (combination in combinationList) {
@@ -365,7 +366,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLimitedSupportedCombinationList()
for (combination in combinationList) {
@@ -384,7 +385,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLegacySupportedCombinationList()
for (combination in combinationList) {
@@ -403,7 +404,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getFullSupportedCombinationList()
for (combination in combinationList) {
@@ -422,7 +423,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getRAWSupportedCombinationList()
for (combination in combinationList) {
@@ -437,7 +438,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_3)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLevel3SupportedCombinationList()
for (combination in combinationList) {
@@ -452,7 +453,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_3)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val combinationList = getLevel3SupportedCombinationList()
val isSupported = isAllSubConfigListSupported(supportedSurfaceCombination, combinationList)
@@ -464,7 +465,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val fakeUseCase = FakeUseCaseConfig.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
@@ -499,7 +500,7 @@
.build()
preview.setSurfaceProvider(
CameraXExecutors.directExecutor(),
- SurfaceTextureProvider.createSurfaceTextureProvider(mock<SurfaceTextureCallback>())
+ SurfaceTextureProvider.createSurfaceTextureProvider(mock())
)
val imageCapture = ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
@@ -540,12 +541,12 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val preview = Preview.Builder().build()
preview.setSurfaceProvider(
CameraXExecutors.directExecutor(),
- SurfaceTextureProvider.createSurfaceTextureProvider(mock<SurfaceTextureCallback>())
+ SurfaceTextureProvider.createSurfaceTextureProvider(mock())
)
val imageCapture = ImageCapture.Builder().build()
val imageAnalysis = ImageAnalysis.Builder().build()
@@ -610,7 +611,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
/* This test case is for b/139018208 that get small resolution 144x256 with below
@@ -658,7 +659,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
// Sets each of mSupportedSizes as target resolution and also sets target rotation as
@@ -685,7 +686,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
// Sets target resolution as 1280x640, all supported resolutions will be put into aspect
@@ -709,7 +710,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val imageCapture = ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
@@ -740,7 +741,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
// Legacy camera only support (PRIV, PREVIEW) + (PRIV, PREVIEW)
@@ -774,7 +775,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val imageCapture = ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
@@ -818,7 +819,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val imageCapture = ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
@@ -869,7 +870,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val imageCapture = ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_4_3) // mMaximumSize(4032x3024) is 4:3
@@ -919,7 +920,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
/* This test case is for b/132603284 that divide by zero issue crash happened in below
@@ -1007,7 +1008,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val formatResolutionsPairList: MutableList<Pair<Int, Array<Size>>> = ArrayList()
formatResolutionsPairList.add(Pair.create(ImageFormat.JPEG, arrayOf(vgaSize)))
@@ -1059,7 +1060,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
ImageFormat.YUV_420_888, vgaSize
@@ -1074,7 +1075,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
ImageFormat.YUV_420_888, previewSize
@@ -1089,7 +1090,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
ImageFormat.YUV_420_888, recordSize
@@ -1104,7 +1105,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
ImageFormat.YUV_420_888, maximumSize
@@ -1119,7 +1120,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
ImageFormat.JPEG, vgaSize
@@ -1134,7 +1135,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
ImageFormat.JPEG, previewSize
@@ -1149,7 +1150,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
ImageFormat.JPEG, recordSize
@@ -1164,7 +1165,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val surfaceConfig = supportedSurfaceCombination.transformSurfaceConfig(
ImageFormat.JPEG, maximumSize
@@ -1179,7 +1180,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val maximumYUVSize =
supportedSurfaceCombination.getMaxOutputSizeByFormat(ImageFormat.YUV_420_888)
@@ -1194,7 +1195,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val preview = Preview.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
@@ -1256,7 +1257,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().build()
@@ -1285,7 +1286,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetAspectRatio(AspectRatio.RATIO_4_3)
.build()
@@ -1319,7 +1320,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetAspectRatio(
AspectRatio.RATIO_16_9
@@ -1354,7 +1355,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetResolution(
Size(1080, 1920)
@@ -1391,7 +1392,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetRotation(
Surface.ROTATION_90
@@ -1427,7 +1428,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetRotation(
Surface.ROTATION_90
@@ -1458,7 +1459,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetRotation(
Surface.ROTATION_90
@@ -1491,7 +1492,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetResolution(
Size(1280, 600)
@@ -1521,7 +1522,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setMaxResolution(Size(1280, 720)).build()
@@ -1545,7 +1546,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val customOrderedResolutions = listOf(
Size(640, 480),
@@ -1583,7 +1584,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setDefaultResolution(
Size(
@@ -1613,7 +1614,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setDefaultResolution(
Size(1280, 720)
@@ -1657,7 +1658,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetResolution(
Size(1920, 1080)
@@ -1685,7 +1686,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setMaxResolution(
Size(320, 240)
@@ -1718,7 +1719,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setMaxResolution(
Size(320, 180)
@@ -1753,7 +1754,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setMaxResolution(
Size(320, 240)
@@ -1782,7 +1783,7 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setMaxResolution(
Size(1920, 1080)
@@ -1826,7 +1827,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setMaxResolution(
Size(320, 200)
@@ -1861,7 +1862,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetResolution(
Size(192, 144)
@@ -1893,7 +1894,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setMaxResolution(
Size(192, 144)
@@ -1919,7 +1920,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetResolution(
Size(185, 90)
@@ -1959,7 +1960,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetResolution(
Size(1080, 2016)
@@ -2000,7 +2001,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetAspectRatio(
AspectRatio.RATIO_16_9
@@ -2050,7 +2051,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetAspectRatio(
AspectRatio.RATIO_16_9
@@ -2087,7 +2088,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetAspectRatio(
AspectRatio.RATIO_16_9
@@ -2135,7 +2136,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val useCase = FakeUseCaseConfig.Builder().setTargetAspectRatio(
AspectRatio.RATIO_16_9
@@ -2172,7 +2173,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
// Checks the determined RECORD size
@@ -2201,7 +2202,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
// Sets the target resolution as 640x480 with target rotation as ROTATION_90 because the
@@ -2229,7 +2230,7 @@
)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
// Sets the max resolution as 720x1280
@@ -2250,13 +2251,13 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val preview = Preview.Builder().build()
preview.setSurfaceProvider(
CameraXExecutors.directExecutor(),
SurfaceTextureProvider.createSurfaceTextureProvider(
- mock<SurfaceTextureCallback>()
+ mock()
)
)
@@ -2299,13 +2300,13 @@
setupCamera(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED)
val supportedSurfaceCombination = SupportedSurfaceCombination(
context, fakeCameraMetadata,
- mockCamcorderProfileAdapter
+ mockEncoderProfilesAdapter
)
val preview = Preview.Builder().build()
preview.setSurfaceProvider(
CameraXExecutors.directExecutor(),
SurfaceTextureProvider.createSurfaceTextureProvider(
- mock<SurfaceTextureCallback>()
+ mock()
)
)
@@ -2428,15 +2429,12 @@
CameraCharacteristics.LENS_FACING_BACK
)
val cameraInfo = FakeCameraInfoInternal(fakeCameraMetadata.camera.value)
- cameraInfo.camcorderProfileProvider = FakeCamcorderProfileProvider.Builder()
- .addProfile(
- CamcorderProfileUtil.asHighQuality(profileUhd),
- profileUhd,
- profileFhd,
- profileHd,
- profileSd,
- CamcorderProfileUtil.asLowQuality(profileSd)
- ).build()
+ cameraInfo.encoderProfilesProvider = FakeEncoderProfilesProvider.Builder()
+ .add(QUALITY_2160P, profileUhd)
+ .add(QUALITY_1080P, profileFhd)
+ .add(QUALITY_720P, profileHd)
+ .add(QUALITY_480P, profileSd)
+ .build()
cameraFactory!!.insertCamera(
lensFacingEnum, fakeCameraMetadata.camera.value
) { FakeCamera(fakeCameraMetadata.camera.value, null, cameraInfo) }
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/EvCompControlTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/EvCompControlTest.kt
index d1c5f1c..59d5f6e 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/EvCompControlTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/EvCompControlTest.kt
@@ -17,17 +17,26 @@
package androidx.camera.camera2.pipe.integration.impl
import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CaptureRequest
+import android.hardware.camera2.CaptureResult
import android.os.Build
import android.util.Range
import android.util.Rational
+import androidx.camera.camera2.pipe.FrameNumber
+import androidx.camera.camera2.pipe.RequestNumber
import androidx.camera.camera2.pipe.integration.adapter.RobolectricCameraPipeTestRunner
import androidx.camera.camera2.pipe.integration.compat.EvCompImpl
import androidx.camera.camera2.pipe.integration.testing.FakeCameraProperties
import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCamera
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
+import androidx.camera.camera2.pipe.testing.FakeFrameInfo
+import androidx.camera.camera2.pipe.testing.FakeFrameMetadata
+import androidx.camera.camera2.pipe.testing.FakeRequestMetadata
import androidx.camera.core.CameraControl
import androidx.testutils.assertThrows
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Job
@@ -39,8 +48,6 @@
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
-import java.util.concurrent.Executors
-import java.util.concurrent.TimeUnit
@RunWith(RobolectricCameraPipeTestRunner::class)
@DoNotInstrument
@@ -146,9 +153,68 @@
}
}
+ @Test
+ fun useCaseCameraUpdated_setExposureResultShouldPropagate(): Unit = runBlocking {
+ val targetEv = 1
+ val deferred = exposureControl.updateAsync(targetEv)
+
+ // Act. Simulate the UseCaseCamera is recreated.
+ exposureControl.useCaseCamera = FakeUseCaseCamera()
+ comboRequestListener.simulateAeConverge(exposureValue = targetEv)
+
+ // Assert. The setEV task should be completed.
+ assertThat(deferred.awaitWithTimeout()).isEqualTo(targetEv)
+ }
+
+ @Test
+ fun useCaseCameraUpdated_onlyCompleteLatestRequest(): Unit = runBlocking {
+ val targetEv = 2
+ val deferred = exposureControl.updateAsync(1)
+
+ // Act. Simulate the UseCaseCamera is recreated,
+ exposureControl.useCaseCamera = FakeUseCaseCamera()
+ // Act. Submits a new EV value.
+ val deferred2 = exposureControl.updateAsync(targetEv)
+ comboRequestListener.simulateAeConverge(exposureValue = targetEv)
+
+ // Assert. The previous setEV task should be cancelled
+ assertThrows<CameraControl.OperationCanceledException> {
+ deferred.awaitWithTimeout()
+ }
+ // Assert. The latest setEV task should be completed.
+ assertThat(deferred2.awaitWithTimeout()).isEqualTo(targetEv)
+ }
+
private suspend fun Deferred<Int>.awaitWithTimeout(
timeMillis: Long = TimeUnit.SECONDS.toMillis(5)
) = withTimeout(timeMillis) {
await()
}
+
+ private fun ComboRequestListener.simulateAeConverge(
+ exposureValue: Int,
+ frameNumber: FrameNumber = FrameNumber(101L),
+ ) {
+ val requestMetadata = FakeRequestMetadata(
+ requestParameters = mapOf(
+ CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION to exposureValue
+ ),
+ requestNumber = RequestNumber(1)
+ )
+ val resultMetaData = FakeFrameMetadata(
+ resultMetadata = mapOf(
+ CaptureResult.CONTROL_AE_EXPOSURE_COMPENSATION to exposureValue,
+ CaptureResult.CONTROL_AE_STATE to CaptureResult.CONTROL_AE_STATE_CONVERGED,
+ ),
+ frameNumber = frameNumber,
+ )
+ fakeUseCaseThreads.sequentialExecutor.execute {
+ onComplete(
+ requestMetadata, frameNumber, FakeFrameInfo(
+ metadata = resultMetaData,
+ requestMetadata = requestMetadata,
+ )
+ )
+ }
+ }
}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/FlashControlTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/FlashControlTest.kt
new file mode 100644
index 0000000..e3559f1
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/FlashControlTest.kt
@@ -0,0 +1,237 @@
+/*
+ * 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.camera2.pipe.integration.impl
+
+import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CaptureRequest
+import android.os.Build
+import androidx.camera.camera2.pipe.integration.adapter.RobolectricCameraPipeTestRunner
+import androidx.camera.camera2.pipe.integration.testing.FakeCameraProperties
+import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCamera
+import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCameraRequestControl
+import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
+import androidx.camera.core.CameraControl
+import androidx.camera.core.ImageCapture
+import androidx.testutils.assertThrows
+import com.google.common.truth.Truth.assertThat
+import com.google.common.util.concurrent.MoreExecutors
+import java.util.concurrent.TimeUnit
+import kotlinx.coroutines.CompletableDeferred
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.asCoroutineDispatcher
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.withTimeout
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.internal.DoNotInstrument
+
+@RunWith(RobolectricCameraPipeTestRunner::class)
+@DoNotInstrument
+@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
+class FlashControlTest {
+ private val fakeUseCaseThreads by lazy {
+ val executor = MoreExecutors.directExecutor()
+ val dispatcher = executor.asCoroutineDispatcher()
+ val cameraScope = CoroutineScope(Job() + dispatcher)
+
+ UseCaseThreads(
+ cameraScope,
+ executor,
+ dispatcher,
+ )
+ }
+ private val metadata = FakeCameraMetadata(
+ mapOf(
+ CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES to intArrayOf(
+ CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH,
+ CaptureRequest.CONTROL_AE_MODE_ON,
+ CaptureRequest.CONTROL_AE_MODE_OFF,
+ CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH
+ ),
+ ),
+ )
+ private val fakeRequestControl = FakeUseCaseCameraRequestControl()
+ private val fakeUseCaseCamera = FakeUseCaseCamera(requestControl = fakeRequestControl)
+ private val state3AControl = State3AControl(FakeCameraProperties(metadata)).apply {
+ useCaseCamera = fakeUseCaseCamera
+ }
+ private lateinit var flashControl: FlashControl
+
+ @Before
+ fun setUp() {
+ flashControl = FlashControl(
+ state3AControl = state3AControl,
+ threads = fakeUseCaseThreads,
+ )
+ flashControl.useCaseCamera = fakeUseCaseCamera
+ }
+
+ @Test
+ fun setFlash_whenInactive(): Unit = runBlocking {
+ val fakeUseCaseCamera = FakeUseCaseCamera()
+ val fakeCameraProperties = FakeCameraProperties()
+
+ val flashControl = FlashControl(
+ State3AControl(fakeCameraProperties).apply {
+ useCaseCamera = fakeUseCaseCamera
+ },
+ fakeUseCaseThreads,
+ )
+
+ assertThrows<CameraControl.OperationCanceledException> {
+ flashControl.setFlashAsync(ImageCapture.FLASH_MODE_ON).awaitWithTimeout()
+ }
+ }
+
+ @Test
+ fun setFlash_flashModeOn(): Unit = runBlocking {
+ // Arrange, clear data of the initial invocations.
+ fakeRequestControl.addParameterCalls.clear()
+
+ // Act.
+ flashControl.setFlashAsync(ImageCapture.FLASH_MODE_ON).awaitWithTimeout()
+
+ // Assert. AE mode should change accordingly.
+ assertThat(fakeRequestControl.addParameterCalls).hasSize(1)
+ assertThat(fakeRequestControl.addParameterCalls[0]).containsAtLeastEntriesIn(
+ mapOf(CaptureRequest.CONTROL_AE_MODE to CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH)
+ )
+ }
+
+ @Test
+ fun setFlash_flashModeAuto(): Unit = runBlocking {
+ // Arrange, clear data of the initial invocations.
+ fakeRequestControl.addParameterCalls.clear()
+
+ // Act.
+ flashControl.setFlashAsync(ImageCapture.FLASH_MODE_AUTO).awaitWithTimeout()
+
+ // Assert. AE mode should change accordingly.
+ assertThat(fakeRequestControl.addParameterCalls).hasSize(1)
+ assertThat(fakeRequestControl.addParameterCalls[0]).containsAtLeastEntriesIn(
+ mapOf(CaptureRequest.CONTROL_AE_MODE to CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH)
+ )
+ }
+
+ @Test
+ fun setFlash_flashModeOnThenOff(): Unit = runBlocking {
+ // Arrange, clear data of the initial invocations.
+ fakeRequestControl.addParameterCalls.clear()
+
+ // Act.
+ flashControl.setFlashAsync(ImageCapture.FLASH_MODE_ON).awaitWithTimeout()
+ flashControl.setFlashAsync(ImageCapture.FLASH_MODE_OFF).awaitWithTimeout()
+
+ // Assert. AE mode should change accordingly.
+ assertThat(fakeRequestControl.addParameterCalls).hasSize(2)
+ assertThat(fakeRequestControl.addParameterCalls[0]).containsAtLeastEntriesIn(
+ mapOf(CaptureRequest.CONTROL_AE_MODE to CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH)
+ )
+ assertThat(fakeRequestControl.addParameterCalls[1]).containsAtLeastEntriesIn(
+ mapOf(CaptureRequest.CONTROL_AE_MODE to CaptureRequest.CONTROL_AE_MODE_ON)
+ )
+ }
+
+ @Test
+ fun setFlashTwice_cancelPreviousFuture(): Unit = runBlocking {
+ // Arrange. Set a never complete deferred.
+ fakeRequestControl.addParameterResult = CompletableDeferred()
+
+ // Act. call setFlashAsync twice.
+ val deferred = flashControl.setFlashAsync(ImageCapture.FLASH_MODE_ON)
+ flashControl.setFlashAsync(ImageCapture.FLASH_MODE_ON)
+
+ assertThrows<CameraControl.OperationCanceledException> {
+ deferred.awaitWithTimeout()
+ }
+ }
+
+ @Test
+ fun setInActive_cancelPreviousFuture(): Unit = runBlocking {
+ // Arrange. Set a never complete deferred.
+ fakeRequestControl.addParameterResult = CompletableDeferred()
+ val deferred = flashControl.setFlashAsync(ImageCapture.FLASH_MODE_ON)
+
+ // Act. call reset & clear the UseCaseCamera.
+ flashControl.setFlashAsync(ImageCapture.FLASH_MODE_ON)
+ flashControl.reset()
+ flashControl.useCaseCamera = null
+
+ assertThrows<CameraControl.OperationCanceledException> {
+ deferred.awaitWithTimeout()
+ }
+ }
+
+ @Test
+ fun useCaseCameraUpdated_setFlashResultShouldPropagate(): Unit = runBlocking {
+ // Arrange.
+ fakeRequestControl.addParameterResult = CompletableDeferred()
+
+ val deferred = flashControl.setFlashAsync(ImageCapture.FLASH_MODE_ON)
+ val fakeRequestControl = FakeUseCaseCameraRequestControl().apply {
+ addParameterResult = CompletableDeferred()
+ }
+ val fakeUseCaseCamera = FakeUseCaseCamera(requestControl = fakeRequestControl)
+
+ // Act. Simulate the UseCaseCamera is recreated.
+ flashControl.useCaseCamera = fakeUseCaseCamera
+ state3AControl.useCaseCamera = fakeUseCaseCamera
+
+ // Simulate setFlash is completed on the recreated UseCaseCamera
+ fakeRequestControl.addParameterResult.complete(Unit)
+
+ // Assert. The setFlash task should be completed.
+ assertThat(deferred.awaitWithTimeout()).isNotNull()
+ }
+
+ @Test
+ fun useCaseCameraUpdated_onlyCompleteLatestRequest(): Unit = runBlocking {
+ // Arrange.
+ fakeRequestControl.addParameterResult = CompletableDeferred()
+
+ val deferred = flashControl.setFlashAsync(ImageCapture.FLASH_MODE_ON)
+ val fakeRequestControl = FakeUseCaseCameraRequestControl().apply {
+ addParameterResult = CompletableDeferred()
+ }
+ val fakeUseCaseCamera = FakeUseCaseCamera(requestControl = fakeRequestControl)
+
+ // Act. Simulate the UseCaseCamera is recreated.
+ flashControl.useCaseCamera = fakeUseCaseCamera
+ state3AControl.useCaseCamera = fakeUseCaseCamera
+ // Act. Submits a new Flash mode.
+ val deferred2 = flashControl.setFlashAsync(ImageCapture.FLASH_MODE_AUTO)
+ // Simulate setFlash is completed on the recreated UseCaseCamera
+ fakeRequestControl.addParameterResult.complete(Unit)
+
+ // Assert. The previous set Flash mode task should be cancelled
+ assertThrows<CameraControl.OperationCanceledException> {
+ deferred.awaitWithTimeout()
+ }
+ // Assert. The latest set Flash mode task should be completed.
+ assertThat(deferred2.awaitWithTimeout()).isNotNull()
+ }
+
+ private suspend fun <T> Deferred<T>.awaitWithTimeout(
+ timeMillis: Long = TimeUnit.SECONDS.toMillis(5)
+ ) = withTimeout(timeMillis) {
+ await()
+ }
+}
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/TorchControlTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/TorchControlTest.kt
index 6b24bc2..8aeaf43 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/TorchControlTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/TorchControlTest.kt
@@ -17,29 +17,23 @@
package androidx.camera.camera2.pipe.integration.impl
import android.hardware.camera2.CameraCharacteristics
-import android.hardware.camera2.CaptureRequest
-import android.hardware.camera2.params.MeteringRectangle
import android.os.Build
-import androidx.camera.camera2.pipe.AeMode
-import androidx.camera.camera2.pipe.Request
-import androidx.camera.camera2.pipe.RequestTemplate
import androidx.camera.camera2.pipe.Result3A
-import androidx.camera.camera2.pipe.StreamId
import androidx.camera.camera2.pipe.integration.adapter.RobolectricCameraPipeTestRunner
import androidx.camera.camera2.pipe.integration.testing.FakeCameraProperties
import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCamera
+import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCameraRequestControl
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
import androidx.camera.core.CameraControl
import androidx.camera.core.TorchState
-import androidx.camera.core.impl.CaptureConfig
-import androidx.camera.core.impl.SessionConfig
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.Observer
import androidx.lifecycle.testing.TestLifecycleOwner
import androidx.testutils.assertThrows
import com.google.common.truth.Truth
+import com.google.common.util.concurrent.MoreExecutors
import java.util.Objects
-import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
@@ -48,7 +42,7 @@
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.UnconfinedTestDispatcher
-import org.junit.AfterClass
+import kotlinx.coroutines.withTimeout
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -62,7 +56,7 @@
class TorchControlTest {
companion object {
- private val executor = Executors.newSingleThreadExecutor()
+ private val executor = MoreExecutors.directExecutor()
private val fakeUseCaseThreads by lazy {
val dispatcher = executor.asCoroutineDispatcher()
val cameraScope = CoroutineScope(Job() + dispatcher)
@@ -73,12 +67,6 @@
dispatcher
)
}
-
- @JvmStatic
- @AfterClass
- fun close() {
- executor.shutdown()
- }
}
private val metadata = FakeCameraMetadata(
@@ -87,60 +75,9 @@
),
)
- private val neverCompleteTorchRequestControl = object : UseCaseCameraRequestControl {
- override fun addParametersAsync(
- type: UseCaseCameraRequestControl.Type,
- values: Map<CaptureRequest.Key<*>, Any>,
- optionPriority: androidx.camera.core.impl.Config.OptionPriority,
- tags: Map<String, Any>,
- streams: Set<StreamId>?,
- template: RequestTemplate?,
- listeners: Set<Request.Listener>
- ): Deferred<Unit> {
- return CompletableDeferred(Unit)
- }
-
- override fun setConfigAsync(
- type: UseCaseCameraRequestControl.Type,
- config: androidx.camera.core.impl.Config?,
- tags: Map<String, Any>,
- streams: Set<StreamId>?,
- template: RequestTemplate?,
- listeners: Set<Request.Listener>
- ): Deferred<Unit> {
- return CompletableDeferred(Unit)
- }
-
- override fun setSessionConfigAsync(sessionConfig: SessionConfig): Deferred<Unit> {
- return CompletableDeferred(Unit)
- }
-
- override suspend fun setTorchAsync(enabled: Boolean): Deferred<Result3A> {
- // Return a CompletableDeferred without set it to completed.
- return CompletableDeferred()
- }
-
- override suspend fun startFocusAndMeteringAsync(
- aeRegions: List<MeteringRectangle>,
- afRegions: List<MeteringRectangle>,
- awbRegions: List<MeteringRectangle>,
- afTriggerStartAeMode: AeMode?
- ): Deferred<Result3A> {
- return CompletableDeferred(Result3A(status = Result3A.Status.OK))
- }
-
- override suspend fun cancelFocusAndMeteringAsync(): Deferred<Result3A> {
- return CompletableDeferred(Result3A(status = Result3A.Status.OK))
- }
-
- override suspend fun issueSingleCaptureAsync(
- captureSequence: List<CaptureConfig>,
- captureMode: Int,
- flashType: Int,
- flashMode: Int,
- ): List<Deferred<Void?>> {
- return listOf(CompletableDeferred(null))
- }
+ private val neverCompleteTorchRequestControl = FakeUseCaseCameraRequestControl().apply {
+ // Set a CompletableDeferred without set it to completed.
+ setTorchResult = CompletableDeferred()
}
private lateinit var torchControl: TorchControl
@@ -309,4 +246,59 @@
Truth.assertThat(receivedTorchState[1]).isEqualTo(TorchState.ON) // by setTorchAsync(true)
Truth.assertThat(receivedTorchState[2]).isEqualTo(TorchState.OFF) // by setTorchAsync(false)
}
+
+ @Test
+ fun useCaseCameraUpdated_setTorchResultShouldPropagate(): Unit = runBlocking {
+ // Arrange.
+ torchControl.useCaseCamera =
+ FakeUseCaseCamera(requestControl = neverCompleteTorchRequestControl)
+
+ val deferred = torchControl.setTorchAsync(true)
+ val fakeRequestControl = FakeUseCaseCameraRequestControl().apply {
+ setTorchResult = CompletableDeferred<Result3A>()
+ }
+ val fakeUseCaseCamera = FakeUseCaseCamera(requestControl = fakeRequestControl)
+
+ // Act. Simulate the UseCaseCamera is recreated.
+ torchControl.useCaseCamera = fakeUseCaseCamera
+
+ // Simulate setTorch is completed in the recreated UseCaseCamera
+ fakeRequestControl.setTorchResult.complete(Result3A(status = Result3A.Status.OK))
+
+ // Assert. The setTorch task should be completed.
+ Truth.assertThat(deferred.awaitWithTimeout()).isNotNull()
+ }
+
+ @Test
+ fun useCaseCameraUpdated_onlyCompleteLatestRequest(): Unit = runBlocking {
+ // Arrange.
+ torchControl.useCaseCamera =
+ FakeUseCaseCamera(requestControl = neverCompleteTorchRequestControl)
+
+ val deferred = torchControl.setTorchAsync(true)
+ val fakeRequestControl = FakeUseCaseCameraRequestControl().apply {
+ setTorchResult = CompletableDeferred()
+ }
+ val fakeUseCaseCamera = FakeUseCaseCamera(requestControl = fakeRequestControl)
+
+ // Act. Simulate the UseCaseCamera is recreated.
+ torchControl.useCaseCamera = fakeUseCaseCamera
+ // Act. Set Torch mode again.
+ val deferred2 = torchControl.setTorchAsync(false)
+ // Simulate setTorch is completed in the recreated UseCaseCamera
+ fakeRequestControl.setTorchResult.complete(Result3A(status = Result3A.Status.OK))
+
+ // Assert. The previous setTorch task should be cancelled
+ assertThrows<CameraControl.OperationCanceledException> {
+ deferred.awaitWithTimeout()
+ }
+ // Assert. The latest setTorch task should be completed.
+ Truth.assertThat(deferred2.awaitWithTimeout()).isNotNull()
+ }
+
+ private suspend fun <T> Deferred<T>.awaitWithTimeout(
+ timeMillis: Long = TimeUnit.SECONDS.toMillis(5)
+ ) = withTimeout(timeMillis) {
+ await()
+ }
}
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/ZoomControlTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/ZoomControlTest.kt
index 600f8ab..1abf1d4 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/ZoomControlTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/ZoomControlTest.kt
@@ -54,7 +54,7 @@
)
}
- private val zoomCompat = FakeZoomCompat()
+ private val zoomCompat = FakeZoomCompat(1.0f, 5.0f)
private lateinit var zoomControl: ZoomControl
@Before
@@ -66,9 +66,9 @@
@Test
fun canUpdateZoomRatioInCompat() {
- zoomControl.setZoomRatioAsync(3.0f)[3, TimeUnit.SECONDS]
+ zoomControl.setZoomRatio(3.0f)[3, TimeUnit.SECONDS]
- Truth.assertWithMessage("zoomState did not return default zoom state successfully")
+ Truth.assertWithMessage("zoomCompat not updated with correct zoom ratio")
.that(zoomCompat.zoomRatio)
.isEqualTo(3.0f)
}
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/internal/ZoomMathTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/internal/ZoomMathTest.kt
new file mode 100644
index 0000000..f2fe667
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/internal/ZoomMathTest.kt
@@ -0,0 +1,185 @@
+/*
+ * 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.camera2.pipe.integration.internal
+
+import androidx.camera.camera2.pipe.integration.internal.ZoomMath.getLinearZoomFromZoomRatio
+import androidx.camera.camera2.pipe.integration.internal.ZoomMath.getZoomRatioFromLinearZoom
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+
+private const val CROP_REGION_TOLERANCE = 5f
+class ZoomMathTest {
+ private val minZoomRatio = 0.6f
+ private val maxZoomRatio = 8f
+
+ @Test
+ fun getLinearZoomFromZoomRatio_zoomRatioIsMin_linearZoomIs0() {
+ val linearZoom = getLinearZoomFromZoomRatio(
+ zoomRatio = minZoomRatio,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ )
+
+ assertThat(linearZoom).isEqualTo(0f)
+ }
+
+ @Test
+ fun getLinearZoomFromZoomRatio_zoomRatioIsMax_linearZoomIs1() {
+ val linearZoom = getLinearZoomFromZoomRatio(
+ zoomRatio = maxZoomRatio,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ )
+
+ assertThat(linearZoom).isEqualTo(1f)
+ }
+
+ @Test
+ fun getLinearZoomFromZoomRatio_zoomUnsupported_linearZoomIs0() {
+ // zoom unsupported means minZoomRatio = maxZoomRatio
+ val linearZoom = getLinearZoomFromZoomRatio(
+ zoomRatio = 1.0f,
+ minZoomRatio = 1.0f,
+ maxZoomRatio = 1.0f
+ )
+
+ assertThat(linearZoom).isEqualTo(0f)
+ }
+
+ @Test
+ fun getZoomRatioFromLinearZoom_linearZoomIs0_zoomRatioIsMin() {
+ val zoomRatio = getZoomRatioFromLinearZoom(
+ linearZoom = 0f,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ )
+
+ assertThat(zoomRatio).isEqualTo(minZoomRatio)
+ }
+
+ @Test
+ fun getZoomRatioFromLinearZoom_linearZoomIs1_zoomRatioIsMax() {
+ val zoomRatio = getZoomRatioFromLinearZoom(
+ linearZoom = 1.0f,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ )
+
+ assertThat(zoomRatio).isEqualTo(maxZoomRatio)
+ }
+
+ @Test
+ fun getZoomRatioFromLinearZoom_zoomUnsupportedAndLinearZoom0_zoomRatioIsTheAllowedValue() {
+ // zoom unsupported means minZoomRatio = maxZoomRatio
+ val zoomRatio = getZoomRatioFromLinearZoom(
+ linearZoom = 0f,
+ minZoomRatio = 1.0f,
+ maxZoomRatio = 1.0f
+ )
+
+ assertThat(zoomRatio).isEqualTo(1.0f)
+ }
+
+ @Test
+ fun getZoomRatioFromLinearZoom_zoomUnsupportedAndLinearZoom0_5f_zoomRatioIsTheAllowedValue() {
+ // zoom unsupported means minZoomRatio = maxZoomRatio
+ val zoomRatio = getZoomRatioFromLinearZoom(
+ linearZoom = 0.5f,
+ minZoomRatio = 1.0f,
+ maxZoomRatio = 1.0f
+ )
+
+ assertThat(zoomRatio).isEqualTo(1.0f)
+ }
+
+ @Test
+ fun getZoomRatioFromLinearZoom_zoomUnsupportedAndLinearZoom1_zoomRatioIsTheAllowedValue() {
+ // zoom unsupported means minZoomRatio = maxZoomRatio
+ val zoomRatio = getZoomRatioFromLinearZoom(
+ linearZoom = 1.0f,
+ minZoomRatio = 1.0f,
+ maxZoomRatio = 1.0f
+ )
+
+ assertThat(zoomRatio).isEqualTo(1.0f)
+ }
+
+ @Test
+ fun getLinearZoomFromZoomRatio_getZoomRatioFromLinearZoomReturnsSameRatio() {
+ val linearZoom = getLinearZoomFromZoomRatio(
+ zoomRatio = 2f,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ )
+
+ val zoomRatio = getZoomRatioFromLinearZoom(
+ linearZoom = linearZoom,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ )
+
+ assertThat(zoomRatio).isEqualTo(2f)
+ }
+
+ @Test
+ fun linearZoomIs0_5f_cropWidthIsHalf() {
+ val sensorRegionWidth = 10000f
+ val minZoomCropWidth = sensorRegionWidth / minZoomRatio
+ val maxZoomCropWidth = sensorRegionWidth / maxZoomRatio
+
+ val zoomRatio = getZoomRatioFromLinearZoom(
+ linearZoom = 0.5f,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ )
+ val cropWidth = sensorRegionWidth / zoomRatio
+
+ assertThat(cropWidth)
+ .isWithin(CROP_REGION_TOLERANCE)
+ .of((minZoomCropWidth + maxZoomCropWidth) / 2)
+ }
+
+ @Test
+ fun linearZoomIsIncreasedProgressively_cropWidthIsChangedLinearly() {
+ val sensorRegionWidth = 10000f
+ var previousCropWidth = sensorRegionWidth / minZoomRatio
+ var previousCropWidthDiff = Float.NaN
+
+ var linearZoom = 0.1f
+
+ while (linearZoom < 1f) {
+ val zoomRatio = getZoomRatioFromLinearZoom(
+ linearZoom = linearZoom,
+ minZoomRatio = minZoomRatio,
+ maxZoomRatio = maxZoomRatio
+ )
+
+ val cropWidth = sensorRegionWidth / zoomRatio
+ val cropWidthDiff = previousCropWidth - cropWidth
+
+ if (!previousCropWidthDiff.isNaN()) {
+ assertThat(cropWidthDiff)
+ .isWithin(CROP_REGION_TOLERANCE)
+ .of(previousCropWidthDiff)
+ }
+
+ previousCropWidthDiff = cropWidthDiff
+ previousCropWidth = cropWidth
+ linearZoom += 0.1f
+ }
+ }
+}
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraControlTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraControlTest.kt
index 5bcde30..efeb07f 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraControlTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraControlTest.kt
@@ -16,9 +16,36 @@
package androidx.camera.camera2.pipe.integration.interop
+import android.hardware.camera2.CaptureRequest
+import android.hardware.camera2.CaptureResult
import android.os.Build
+import androidx.camera.camera2.pipe.FrameNumber
+import androidx.camera.camera2.pipe.RequestNumber
import androidx.camera.camera2.pipe.integration.adapter.RobolectricCameraPipeTestRunner
+import androidx.camera.camera2.pipe.integration.compat.Camera2CameraControlCompatImpl
+import androidx.camera.camera2.pipe.integration.impl.CAMERAX_TAG_BUNDLE
+import androidx.camera.camera2.pipe.integration.impl.ComboRequestListener
+import androidx.camera.camera2.pipe.integration.impl.UseCaseCameraRequestControl
+import androidx.camera.camera2.pipe.integration.impl.UseCaseThreads
+import androidx.camera.camera2.pipe.integration.impl.toParameters
+import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCamera
+import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCameraRequestControl
+import androidx.camera.camera2.pipe.testing.FakeFrameInfo
+import androidx.camera.camera2.pipe.testing.FakeFrameMetadata
+import androidx.camera.camera2.pipe.testing.FakeRequestMetadata
import androidx.camera.core.impl.CameraControlInternal
+import androidx.camera.core.impl.MutableTagBundle
+import androidx.testutils.assertThrows
+import com.google.common.truth.Truth.assertThat
+import com.google.common.util.concurrent.MoreExecutors
+import java.util.concurrent.ExecutionException
+import java.util.concurrent.TimeUnit
+import kotlinx.coroutines.CompletableDeferred
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.asCoroutineDispatcher
+import kotlinx.coroutines.runBlocking
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
@@ -28,10 +55,147 @@
@OptIn(ExperimentalCamera2Interop::class)
class Camera2CameraControlTest {
+ private val fakeUseCaseThreads by lazy {
+ val executor = MoreExecutors.directExecutor()
+ val dispatcher = executor.asCoroutineDispatcher()
+ val cameraScope = CoroutineScope(Job() + dispatcher)
+
+ UseCaseThreads(
+ cameraScope,
+ executor,
+ dispatcher,
+ )
+ }
+ private val comboRequestListener = ComboRequestListener()
+ private val fakeRequestControl = FakeUseCaseCameraRequestControl()
+ private val fakeUseCaseCamera = FakeUseCaseCamera(requestControl = fakeRequestControl)
+ private val camera2CameraControlCompatImpl = Camera2CameraControlCompatImpl(fakeUseCaseThreads)
+ private lateinit var camera2CameraControl: Camera2CameraControl
+
+ @Before
+ fun setUp() {
+ camera2CameraControl = Camera2CameraControl.create(
+ compat = camera2CameraControlCompatImpl,
+ threads = fakeUseCaseThreads,
+ requestListener = comboRequestListener,
+ )
+ camera2CameraControl.useCaseCamera = fakeUseCaseCamera
+ }
+
+ @Test
+ fun useCaseCameraUpdated_setRequestOptionResultShouldPropagate(): Unit = runBlocking {
+ // Arrange.
+ val completeDeferred = CompletableDeferred<Unit>()
+ val fakeRequestControl = FakeUseCaseCameraRequestControl().apply {
+ setConfigResult = completeDeferred
+ }
+ val fakeUseCaseCamera = FakeUseCaseCamera(requestControl = fakeRequestControl)
+
+ val resultFuture = camera2CameraControl.setCaptureRequestOptions(
+ CaptureRequestOptions.Builder().setCaptureRequestOption(
+ CaptureRequest.CONTROL_AE_MODE,
+ CaptureRequest.CONTROL_AE_MODE_OFF
+ ).build()
+ )
+
+ // Act. Simulate the UseCaseCamera is recreated.
+ camera2CameraControl.useCaseCamera = fakeUseCaseCamera
+ // Simulate setRequestOption is completed in the recreated UseCaseCamera
+ completeDeferred.complete(Unit)
+ val requestsToCamera = fakeRequestControl.setConfigCalls.filter {
+ it.type == UseCaseCameraRequestControl.Type.CAMERA2_CAMERA_CONTROL
+ }.onEach { request ->
+ comboRequestListener.simulateRepeatingResult(
+ requests = request.config?.toParameters() ?: emptyMap(),
+ tags = request.tags,
+ )
+ }
+
+ // Assert. The setRequestOption task should be completed.
+ assertThat(requestsToCamera).isNotEmpty()
+ assertThat(resultFuture.get(3, TimeUnit.SECONDS)).isNull()
+ }
+
+ @Test
+ fun useCaseCameraUpdated_onlyCompleteLatestRequest(): Unit = runBlocking {
+ // Arrange.
+ val completeDeferred = CompletableDeferred<Unit>()
+ val fakeRequestControl = FakeUseCaseCameraRequestControl().apply {
+ setConfigResult = completeDeferred
+ }
+ val fakeUseCaseCamera = FakeUseCaseCamera(requestControl = fakeRequestControl)
+
+ val resultFuture = camera2CameraControl.setCaptureRequestOptions(
+ CaptureRequestOptions.Builder().setCaptureRequestOption(
+ CaptureRequest.CONTROL_AE_MODE,
+ CaptureRequest.CONTROL_AE_MODE_OFF
+ ).build()
+ )
+
+ // Act. Simulate the UseCaseCamera is recreated.
+ camera2CameraControl.useCaseCamera = fakeUseCaseCamera
+ // Act. Submit a new request option.
+ val resultFuture2 = camera2CameraControl.setCaptureRequestOptions(
+ CaptureRequestOptions.Builder().setCaptureRequestOption(
+ CaptureRequest.CONTROL_AE_MODE,
+ CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH
+ ).build()
+ )
+ // Simulate setRequestOption is completed in the recreated UseCaseCamera
+ completeDeferred.complete(Unit)
+ val requestsToCamera = fakeRequestControl.setConfigCalls.filter {
+ it.type == UseCaseCameraRequestControl.Type.CAMERA2_CAMERA_CONTROL
+ }.onEach { request ->
+ comboRequestListener.simulateRepeatingResult(
+ requests = request.config?.toParameters() ?: emptyMap(),
+ tags = request.tags,
+ )
+ }
+
+ // Assert. The first request should be cancelled., the latest setRequestOption
+ // task should be completed.
+ assertThat(requestsToCamera).isNotEmpty()
+ assertThrows<ExecutionException> {
+ resultFuture.get(3, TimeUnit.SECONDS)
+ }
+ assertThat(resultFuture2.get(3, TimeUnit.SECONDS)).isNull()
+ }
+
@Test(expected = IllegalArgumentException::class)
fun fromCameraControlThrows_whenNotCamera2Impl() {
val wrongCameraControl =
CameraControlInternal.DEFAULT_EMPTY_INSTANCE
Camera2CameraControl.from(wrongCameraControl)
}
+
+ private fun ComboRequestListener.simulateRepeatingResult(
+ requests: Map<CaptureRequest.Key<*>, Any> = emptyMap(),
+ tags: Map<String, Any> = emptyMap(),
+ results: Map<CaptureResult.Key<*>, Any> = emptyMap(),
+ frameNumber: FrameNumber = FrameNumber(101L),
+ ) {
+ val requestMetadata = FakeRequestMetadata(
+ requestParameters = requests,
+ metadata = mapOf(
+ CAMERAX_TAG_BUNDLE to MutableTagBundle.create().also { tagBundle ->
+ tags.forEach { (tagKey, tagValue) ->
+ tagBundle.putTag(tagKey, tagValue)
+ }
+ }
+ ),
+ requestNumber = RequestNumber(1)
+ )
+ val resultMetaData = FakeFrameMetadata(
+ resultMetadata = results,
+ frameNumber = frameNumber,
+ )
+ fakeUseCaseThreads.sequentialExecutor.execute {
+ onComplete(
+ requestMetadata, frameNumber, FakeFrameInfo(
+ metadata = resultMetaData,
+ requestMetadata = requestMetadata,
+ )
+ )
+ }
+ }
}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfoTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfoTest.kt
index aab5b2d..d2f18b7 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfoTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfoTest.kt
@@ -28,9 +28,9 @@
import androidx.camera.core.CameraState
import androidx.camera.core.ExposureState
import androidx.camera.core.ZoomState
-import androidx.camera.core.impl.CamcorderProfileProvider
import androidx.camera.core.impl.CameraCaptureCallback
import androidx.camera.core.impl.CameraInfoInternal
+import androidx.camera.core.impl.EncoderProfilesProvider
import androidx.camera.core.impl.Quirks
import androidx.camera.core.impl.Timebase
import androidx.lifecycle.LiveData
@@ -153,7 +153,7 @@
throw NotImplementedError("Not used in testing")
}
- override fun getCamcorderProfileProvider(): CamcorderProfileProvider {
+ override fun getEncoderProfilesProvider(): EncoderProfilesProvider {
throw NotImplementedError("Not used in testing")
}
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCamera2CameraControlCompat.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCamera2CameraControlCompat.kt
index 79e9e2c..13cc26d 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCamera2CameraControlCompat.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCamera2CameraControlCompat.kt
@@ -41,7 +41,7 @@
// No-op
}
- override fun applyAsync(camera: UseCaseCamera?): Deferred<Void?> {
+ override fun applyAsync(camera: UseCaseCamera?, cancelPreviousTask: Boolean): Deferred<Void?> {
return CompletableDeferred(null)
}
}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCameraInfoAdapterCreator.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCameraInfoAdapterCreator.kt
index e98ffc8..1a796be 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCameraInfoAdapterCreator.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCameraInfoAdapterCreator.kt
@@ -98,7 +98,8 @@
FocusMeteringControl(
cameraProperties,
state3AControl,
- useCaseThreads
+ useCaseThreads,
+ FakeZoomCompat(),
).apply {
useCaseCamera = fakeUseCaseCamera
}
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeEvCompCompat.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeEvCompCompat.kt
index a8d73d5..afd3de9 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeEvCompCompat.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeEvCompCompat.kt
@@ -25,13 +25,17 @@
class FakeEvCompCompat constructor(
override val supported: Boolean = false,
override val range: Range<Int> = Range(0, 0),
- override val step: Rational = Rational.ZERO
+ override val step: Rational = Rational.ZERO,
) : EvCompCompat {
- override fun stopRunningTask() {
+ override fun stopRunningTask(throwable: Throwable) {
TODO("Not yet implemented")
}
- override fun applyAsync(evCompIndex: Int, camera: UseCaseCamera): Deferred<Int> {
+ override fun applyAsync(
+ evCompIndex: Int,
+ camera: UseCaseCamera,
+ cancelPreviousTask: Boolean,
+ ): Deferred<Int> {
TODO("Not yet implemented")
}
}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeUseCaseCamera.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeUseCaseCamera.kt
index 9ec74a1..d98a07d 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeUseCaseCamera.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeUseCaseCamera.kt
@@ -59,6 +59,13 @@
// TODO: Further implement the methods in this class as needed
open class FakeUseCaseCameraRequestControl : UseCaseCameraRequestControl {
+
+ val addParameterCalls = mutableListOf<Map<CaptureRequest.Key<*>, Any>>()
+ var addParameterResult = CompletableDeferred(Unit)
+ var setConfigCalls = mutableListOf<RequestParameters>()
+ var setConfigResult = CompletableDeferred(Unit)
+ var setTorchResult = CompletableDeferred(Result3A(status = Result3A.Status.OK))
+
override fun addParametersAsync(
type: UseCaseCameraRequestControl.Type,
values: Map<CaptureRequest.Key<*>, Any>,
@@ -68,7 +75,8 @@
template: RequestTemplate?,
listeners: Set<Request.Listener>
): Deferred<Unit> {
- return CompletableDeferred(Unit)
+ addParameterCalls.add(values)
+ return addParameterResult
}
override fun setConfigAsync(
@@ -79,6 +87,7 @@
template: RequestTemplate?,
listeners: Set<Request.Listener>
): Deferred<Unit> {
+ setConfigCalls.add(RequestParameters(type, config, tags))
return CompletableDeferred(Unit)
}
@@ -87,7 +96,7 @@
}
override suspend fun setTorchAsync(enabled: Boolean): Deferred<Result3A> {
- return CompletableDeferred(Result3A(status = Result3A.Status.OK))
+ return setTorchResult
}
val focusMeteringCalls = mutableListOf<FocusMeteringParams>()
@@ -127,6 +136,12 @@
val awbRegions: List<MeteringRectangle> = emptyList(),
val afTriggerStartAeMode: AeMode? = null
)
+
+ data class RequestParameters(
+ val type: UseCaseCameraRequestControl.Type,
+ val config: Config?,
+ val tags: Map<String, Any> = emptyMap(),
+ )
}
// TODO: Further implement the methods in this class as needed
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeZoomCompat.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeZoomCompat.kt
index cabac1a..e48a1d9 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeZoomCompat.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeZoomCompat.kt
@@ -16,16 +16,20 @@
package androidx.camera.camera2.pipe.integration.testing
+import android.graphics.Rect
import androidx.camera.camera2.pipe.integration.compat.ZoomCompat
import androidx.camera.camera2.pipe.integration.impl.UseCaseCamera
class FakeZoomCompat constructor(
- override val minZoom: Float = 0f,
- override val maxZoom: Float = 0f,
+ override val minZoomRatio: Float = 0f,
+ override val maxZoomRatio: Float = 0f,
+ var croppedSensorArea: Rect = Rect(0, 0, 640, 480),
) : ZoomCompat {
var zoomRatio = 0f
override fun apply(zoomRatio: Float, camera: UseCaseCamera) {
this.zoomRatio = zoomRatio
}
+
+ override fun getCropSensorRegion() = croppedSensorArea
}
diff --git a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/CameraControllerSimulator.kt b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/CameraControllerSimulator.kt
index 26cbb85..6f6f637 100644
--- a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/CameraControllerSimulator.kt
+++ b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/CameraControllerSimulator.kt
@@ -21,6 +21,7 @@
import androidx.camera.camera2.pipe.CameraContext
import androidx.camera.camera2.pipe.CameraController
import androidx.camera.camera2.pipe.CameraGraph
+import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.GraphState.GraphStateError
import androidx.camera.camera2.pipe.StreamGraph
import androidx.camera.camera2.pipe.StreamId
@@ -45,6 +46,9 @@
private val graphListener: GraphListener,
private val streamGraph: StreamGraph
) : CameraController {
+ override val cameraId: CameraId
+ get() = graphConfig.camera
+
private val lock = Any()
private var currentSurfaceMap: Map<StreamId, Surface> = emptyMap()
private var currentGraphRequestProcessor: GraphRequestProcessor? = null
@@ -152,10 +156,23 @@
override fun stop() {
synchronized(lock) {
+ check(!closed) {
+ "Attempted to invoke stop after close."
+ }
started = false
}
}
+ override fun tryRestart() {
+ synchronized(lock) {
+ check(!closed) {
+ "Attempted to invoke restart after close."
+ }
+ stop()
+ start()
+ }
+ }
+
override fun close() {
synchronized(lock) {
closed = true
diff --git a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeCameraBackend.kt b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeCameraBackend.kt
index eaaa2eb..1e1f6a3 100644
--- a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeCameraBackend.kt
+++ b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeCameraBackend.kt
@@ -24,10 +24,13 @@
import androidx.camera.camera2.pipe.CameraGraph
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
+import androidx.camera.camera2.pipe.CameraStatusMonitor
import androidx.camera.camera2.pipe.StreamGraph
import androidx.camera.camera2.pipe.graph.GraphListener
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableSharedFlow
/**
* The FakeCameraBackend implements [CameraBackend] and creates [CameraControllerSimulator]s.
@@ -43,6 +46,8 @@
override val id: CameraBackendId
get() = FAKE_CAMERA_BACKEND_ID
+ override val cameraStatus: Flow<CameraStatusMonitor.CameraStatus>
+ get() = MutableSharedFlow()
override fun awaitCameraIds(): List<CameraId> = fakeCameraIds
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraBackend.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraBackend.kt
index 4f9485d..66cbd6f 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraBackend.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraBackend.kt
@@ -17,12 +17,28 @@
import androidx.camera.camera2.pipe.graph.GraphListener
import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.flow.Flow
/** This is used to uniquely identify a specific backend implementation. */
@JvmInline
value class CameraBackendId(val value: String)
/**
+ * A CameraStatusMonitors monitors the status of the cameras, and emits updates when the status of
+ * cameras changes, for instance when the camera access priorities have changed or when a particular
+ * camera has become available.
+ */
+interface CameraStatusMonitor {
+ val cameraStatus: Flow<CameraStatus>
+
+ abstract class CameraStatus internal constructor() {
+ object CameraPrioritiesChanged : CameraStatus()
+
+ class CameraAvailable(val cameraId: CameraId) : CameraStatus()
+ }
+}
+
+/**
* A CameraBackend is used by [CameraPipe] to abstract out the lifecycle, state, and interactions
* with a set of camera devices in a standard way.
*
@@ -38,6 +54,12 @@
val id: CameraBackendId
/**
+ * A flow of camera statuses that provide camera status updates such as when the camera access
+ * priorities have changed, or a certain camera has become available.
+ */
+ val cameraStatus: Flow<CameraStatusMonitor.CameraStatus>
+
+ /**
* Read out a list of _openable_ [CameraId]s for this backend. The backend may be able to report
* Metadata for non-openable cameras. However, these cameras should not appear the list of
* cameras returned by [getCameraIds].
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraController.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraController.kt
index 0eacef9..29dee61 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraController.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraController.kt
@@ -17,6 +17,7 @@
package androidx.camera.camera2.pipe
import android.view.Surface
+import androidx.camera.camera2.pipe.CameraController.ControllerState.CLOSED
import androidx.camera.camera2.pipe.graph.GraphListener
/**
@@ -35,8 +36,10 @@
* Once [close] is invoked, this instance should not respond to any additional events.
*/
interface CameraController {
+ val cameraId: CameraId
+
/**
- * Connect and start the underlying camera.This may be called on the main thread and should not
+ * Connect and start the underlying camera. This may be called on the main thread and should not
* make long blocking calls. This may be called opportunistically (eg, whenever a lifecycle
* indicates the camera should be in a running state)
*/
@@ -49,6 +52,13 @@
fun stop()
/**
+ * Restart the current session. This should basically perform stop() then start(). However, the
+ * implementation should handle its internal states correctly, and only restart when the
+ * conditions are appropriate.
+ */
+ fun tryRestart()
+
+ /**
* Close this instance. [start] and [stop] should not be invoked, and any additional calls will
* be ignored once this method returns. Depending on implementation the underlying camera
* connection may not be terminated immediately, depending on the [CameraBackend]
@@ -61,4 +71,40 @@
* missing from the [StreamGraph] that was used to create this [CameraController].
*/
fun updateSurfaceMap(surfaceMap: Map<StreamId, Surface>)
+
+ /**
+ * ControllerState indicates the internal state of a [CameraController]. These states are needed
+ * to make sure we only invoke [CameraController] methods under the right conditions.
+ *
+ * The following diagram illustrates the state transitions (all states also have a permissible
+ * transition to [CLOSED]).
+ *
+ * ```
+ * [STOPPED] --> [STARTED] --> [STOPPING] ---------.--------.
+ * ^ ^ | | |
+ * | | V V |
+ * | '---------[DISCONNECTED] [ERROR] |
+ * | |
+ * '-----------------------------------------------------'
+ * ```
+ */
+ abstract class ControllerState internal constructor() {
+ /** When the CameraController is started. This is set immediately as start() is called. */
+ object STARTED : ControllerState()
+
+ /** When the CameraController is stopping. This is set immediately as stop() is called. */
+ object STOPPING : ControllerState()
+
+ /** When the camera is stopped normally. */
+ object STOPPED : ControllerState()
+
+ /** When the camera is disconnected and can be later "reconnected". */
+ object DISCONNECTED : ControllerState()
+
+ /** When the camera shuts down with an unrecoverable error. */
+ object ERROR : ControllerState()
+
+ /** When the CameraController is closed, and no further operations can done on it. */
+ object CLOSED : ControllerState()
+ }
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Backend.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Backend.kt
index 343a8cb..f78fd57 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Backend.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2Backend.kt
@@ -24,6 +24,7 @@
import androidx.camera.camera2.pipe.CameraGraph
import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
+import androidx.camera.camera2.pipe.CameraStatusMonitor.CameraStatus
import androidx.camera.camera2.pipe.StreamGraph
import androidx.camera.camera2.pipe.config.Camera2ControllerComponent
import androidx.camera.camera2.pipe.config.Camera2ControllerConfig
@@ -33,6 +34,7 @@
import javax.inject.Inject
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.flow.Flow
/** This is the default [CameraBackend] implementation for CameraPipe based on Camera2. */
@RequiresApi(21)
@@ -44,9 +46,12 @@
private val camera2MetadataCache: Camera2MetadataCache,
private val virtualCameraManager: VirtualCameraManager,
private val camera2CameraControllerComponent: Camera2ControllerComponent.Builder,
+ private val camera2CameraStatusMonitor: Camera2CameraStatusMonitor,
) : CameraBackend {
override val id: CameraBackendId
get() = CameraBackendId("CXCP-Camera2")
+ override val cameraStatus: Flow<CameraStatus>
+ get() = camera2CameraStatusMonitor.cameraStatus
override suspend fun getCameraIds(): List<CameraId>? = camera2DeviceCache.getCameraIds()
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraController.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraController.kt
index 4b48fbc..5ddaf29 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraController.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraController.kt
@@ -17,16 +17,22 @@
package androidx.camera.camera2.pipe.compat
import android.view.Surface
+import androidx.annotation.GuardedBy
import androidx.annotation.RequiresApi
import androidx.camera.camera2.pipe.CameraController
+import androidx.camera.camera2.pipe.CameraController.ControllerState
+import androidx.camera.camera2.pipe.CameraError
import androidx.camera.camera2.pipe.CameraGraph
+import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraSurfaceManager
import androidx.camera.camera2.pipe.StreamId
import androidx.camera.camera2.pipe.config.Camera2ControllerScope
+import androidx.camera.camera2.pipe.core.Log
import androidx.camera.camera2.pipe.core.TimeSource
import androidx.camera.camera2.pipe.graph.GraphListener
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
/**
@@ -52,79 +58,104 @@
private val cameraSurfaceManager: CameraSurfaceManager,
private val timeSource: TimeSource
) : CameraController {
- private var closed = false
+ override val cameraId: CameraId
+ get() = config.camera
+
+ private val lock = Any()
+
+ @GuardedBy("lock")
+ private var controllerState: ControllerState = ControllerState.STOPPED
+
private var currentCamera: VirtualCamera? = null
private var currentSession: CaptureSessionState? = null
private var currentSurfaceMap: Map<StreamId, Surface>? = null
- override fun start() {
- val camera =
- virtualCameraManager.open(
- config.camera, config.flags.allowMultipleActiveCameras, graphListener
- )
- synchronized(this) {
- if (closed) {
- return
- }
+ private var currentCameraStateJob: Job? = null
- check(currentCamera == null)
- check(currentSession == null)
-
- currentCamera = camera
- val session =
- CaptureSessionState(
- graphListener,
- captureSessionFactory,
- captureSequenceProcessorFactory,
- cameraSurfaceManager,
- timeSource,
- scope
- )
- currentSession = session
-
- val surfaces: Map<StreamId, Surface>? = currentSurfaceMap
- if (surfaces != null) {
- session.configureSurfaceMap(surfaces)
- }
+ override fun start(): Unit = synchronized(lock) {
+ if (controllerState == ControllerState.CLOSED) {
+ Log.info { "Ignoring start(): Camera2CameraController is already closed" }
+ return
+ } else if (controllerState == ControllerState.STARTED) {
+ Log.warn { "Ignoring start(): Camera2CameraController is already started" }
+ return
}
- scope.launch { bindSessionToCamera() }
+ val camera = virtualCameraManager.open(
+ config.camera,
+ config.flags.allowMultipleActiveCameras,
+ graphListener
+ )
+
+ check(currentCamera == null)
+ check(currentSession == null)
+
+ currentCamera = camera
+ val session = CaptureSessionState(
+ graphListener,
+ captureSessionFactory,
+ captureSequenceProcessorFactory,
+ cameraSurfaceManager,
+ timeSource,
+ scope
+ )
+ currentSession = session
+
+ val surfaces: Map<StreamId, Surface>? = currentSurfaceMap
+ if (surfaces != null) {
+ session.configureSurfaceMap(surfaces)
+ }
+
+ controllerState = ControllerState.STARTED
+ Log.debug { "Started Camera2CameraController" }
+ currentCameraStateJob = scope.launch { bindSessionToCamera() }
}
- override fun stop() {
- val camera: VirtualCamera?
- val session: CaptureSessionState?
- synchronized(this) {
- if (closed) {
- return
- }
-
- camera = currentCamera
- session = currentSession
-
- currentCamera = null
- currentSession = null
+ override fun stop(): Unit = synchronized(lock) {
+ if (controllerState == ControllerState.CLOSED) {
+ Log.warn { "Ignoring stop(): Camera2CameraController is already closed" }
+ return
+ } else if (controllerState == ControllerState.STOPPING ||
+ controllerState == ControllerState.STOPPED
+ ) {
+ Log.warn { "Ignoring stop(): CameraController already stopping or stopped" }
+ return
}
+ val camera = currentCamera
+ val session = currentSession
+
+ currentCamera = null
+ currentSession = null
+
+ controllerState = ControllerState.STOPPING
+ Log.debug { "Stopping Camera2CameraController" }
scope.launch {
session?.disconnect()
camera?.disconnect()
}
}
- override fun close() {
- val camera: VirtualCamera?
- val session: CaptureSessionState?
- synchronized(this) {
- if (closed) {
- return
- }
- closed = true
- camera = currentCamera
- session = currentSession
-
- currentCamera = null
- currentSession = null
+ override fun tryRestart(): Unit = synchronized(lock) {
+ if (controllerState != ControllerState.DISCONNECTED) {
+ Log.debug { "Ignoring restart(): CameraController is $controllerState" }
+ return
}
+ stop()
+ start()
+ }
+
+ override fun close(): Unit = synchronized(lock) {
+ if (controllerState == ControllerState.CLOSED) {
+ return
+ }
+ controllerState = ControllerState.CLOSED
+ Log.debug { "Closed Camera2CameraController" }
+
+ val camera = currentCamera
+ val session = currentSession
+
+ currentCamera = null
+ currentSession = null
scope.launch {
session?.disconnect()
@@ -134,33 +165,67 @@
override fun updateSurfaceMap(surfaceMap: Map<StreamId, Surface>) {
// TODO: Add logic to decide if / when to re-configure the Camera2 CaptureSession.
- synchronized(this) {
- if (closed) {
+ synchronized(lock) {
+ if (controllerState == ControllerState.CLOSED) {
return
}
currentSurfaceMap = surfaceMap
currentSession
- }
- ?.configureSurfaceMap(surfaceMap)
+ }?.configureSurfaceMap(surfaceMap)
}
private suspend fun bindSessionToCamera() {
val camera: VirtualCamera?
val session: CaptureSessionState?
- synchronized(this) {
+ synchronized(lock) {
camera = currentCamera
session = currentSession
}
if (camera != null && session != null) {
- camera.state.collect {
- if (it is CameraStateOpen) {
- session.cameraDevice = it.cameraDevice
- } else if (it is CameraStateClosing || it is CameraStateClosed) {
- session.disconnect()
+ camera.state.collect { cameraState ->
+ when (cameraState) {
+ is CameraStateOpen -> {
+ session.cameraDevice = cameraState.cameraDevice
+ }
+
+ is CameraStateClosing -> {
+ session.disconnect()
+ }
+
+ is CameraStateClosed -> {
+ session.disconnect()
+ onStateClosed(cameraState)
+ }
+
+ else -> {
+ // Do nothing
+ }
}
}
}
}
+
+ private fun onStateClosed(cameraState: CameraStateClosed) = synchronized(lock) {
+ if (cameraState.cameraErrorCode != null) {
+ if (cameraState.cameraErrorCode == CameraError.ERROR_CAMERA_DISCONNECTED ||
+ cameraState.cameraErrorCode == CameraError.ERROR_CAMERA_IN_USE ||
+ cameraState.cameraErrorCode == CameraError.ERROR_CAMERA_LIMIT_EXCEEDED
+ ) {
+ controllerState = ControllerState.DISCONNECTED
+ Log.debug { "Camera2CameraController is disconnected" }
+ } else {
+ controllerState = ControllerState.ERROR
+ Log.debug {
+ "Camera2CameraController encountered an " +
+ "unrecoverable error: ${cameraState.cameraErrorCode}"
+ }
+ }
+ } else {
+ controllerState = ControllerState.STOPPED
+ }
+ currentCameraStateJob?.cancel()
+ currentCameraStateJob = null
+ }
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraStatusMonitor.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraStatusMonitor.kt
new file mode 100644
index 0000000..0ab7e59
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraStatusMonitor.kt
@@ -0,0 +1,73 @@
+/*
+ * 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.camera.camera2.pipe.compat
+
+import android.hardware.camera2.CameraManager
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.CameraStatusMonitor
+import androidx.camera.camera2.pipe.CameraStatusMonitor.CameraStatus
+import androidx.camera.camera2.pipe.core.Log
+import androidx.camera.camera2.pipe.core.Threads
+import javax.inject.Inject
+import javax.inject.Provider
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.channels.onFailure
+import kotlinx.coroutines.channels.trySendBlocking
+import kotlinx.coroutines.flow.callbackFlow
+
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+internal class Camera2CameraStatusMonitor @Inject constructor(
+ cameraManager: Provider<CameraManager>,
+ threads: Threads
+) : CameraStatusMonitor {
+ override val cameraStatus = callbackFlow {
+ val manager = cameraManager.get()
+ val availabilityCallback = object : CameraManager.AvailabilityCallback() {
+ override fun onCameraAccessPrioritiesChanged() {
+ Log.debug { "Camera access priorities have changed" }
+ trySendBlocking(CameraStatus.CameraPrioritiesChanged)
+ .onFailure {
+ Log.warn { "Failed to emit CameraPrioritiesChanged" }
+ }
+ }
+
+ override fun onCameraAvailable(cameraId: String) {
+ Log.debug { "Camera $cameraId has become available" }
+ trySendBlocking(CameraStatus.CameraAvailable(CameraId.fromCamera2Id(cameraId)))
+ .onFailure {
+ Log.warn { "Failed to emit CameraAvailable($cameraId)" }
+ }
+ }
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ Api28Compat.registerAvailabilityCallback(
+ manager,
+ threads.lightweightExecutor,
+ availabilityCallback
+ )
+ } else {
+ manager.registerAvailabilityCallback(
+ availabilityCallback,
+ threads.camera2Handler
+ )
+ }
+
+ awaitClose { manager.unregisterAvailabilityCallback(availabilityCallback) }
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionWrapper.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionWrapper.kt
index 564a5bc..2698852 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionWrapper.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionWrapper.kt
@@ -18,6 +18,8 @@
package androidx.camera.camera2.pipe.compat
+import android.hardware.camera2.CameraAccessException
+import android.hardware.camera2.CameraAccessException.CAMERA_ERROR
import android.hardware.camera2.CameraCaptureSession
import android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession
import android.hardware.camera2.CaptureRequest
@@ -354,10 +356,23 @@
"succeed."
}
- rethrowCamera2Exceptions {
+ var exceptionToThrow: Throwable? = null
+ try {
Api26Compat.finalizeOutputConfigurations(
- cameraCaptureSession, outputConfigs.map { it.unwrapAs(OutputConfiguration::class) })
+ cameraCaptureSession,
+ outputConfigs.map { it.unwrapAs(OutputConfiguration::class) })
+ } catch (e: CameraAccessException) {
+ // TODO(b/266734799): There is a possibility that we might finalize output
+ // configurations on a camera that's been disconnected. In such cases, we'll receive
+ // CameraAccessException.CAMERA_ERROR. Catch it for now, until we properly report and
+ // handle capture session errors.
+ if (e.reason != CAMERA_ERROR) {
+ exceptionToThrow = e
+ }
+ } catch (e: Throwable) {
+ exceptionToThrow = e
}
+ exceptionToThrow?.let { rethrowCamera2Exceptions { throw it } }
}
@Suppress("UNCHECKED_CAST")
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExternalRequestProcessor.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExternalRequestProcessor.kt
index 8988b2b..151d702 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExternalRequestProcessor.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExternalRequestProcessor.kt
@@ -50,6 +50,9 @@
GraphRequestProcessor.from(sequenceProcessor)
private var started = atomic(false)
+ override val cameraId: CameraId
+ get() = graphConfig.camera
+
override fun start() {
if (started.compareAndSet(expect = false, update = true)) {
graphListener.onGraphStarted(graphProcessor)
@@ -62,6 +65,11 @@
}
}
+ override fun tryRestart() {
+ // This is intentionally made a no-op for now as CameraPipe external doesn't support
+ // camera status monitoring and camera controller restart.
+ }
+
override fun close() {
graphProcessor.close()
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt
index b870809..fe27798 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt
@@ -21,6 +21,7 @@
import androidx.annotation.RequiresApi
import androidx.camera.camera2.pipe.CameraError
import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.core.Log
import androidx.camera.camera2.pipe.core.Permissions
import androidx.camera.camera2.pipe.core.Threads
import androidx.camera.camera2.pipe.core.WakeLock
@@ -206,6 +207,7 @@
// causing the application process to restart.
check(permissions.hasCameraPermission) { "Missing camera permissions!" }
+ Log.debug { "Opening $cameraId with retries..." }
val result = retryingCameraStateOpener.openCameraWithRetry(cameraId, graphListener)
if (result.cameraState == null) {
return OpenVirtualCameraResult(lastCameraError = result.errorCode)
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/Camera2Component.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/Camera2Component.kt
index c7b6b1e..57d38e5 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/Camera2Component.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/Camera2Component.kt
@@ -20,11 +20,13 @@
import androidx.camera.camera2.pipe.CameraBackend
import androidx.camera.camera2.pipe.CameraController
import androidx.camera.camera2.pipe.CameraGraph
+import androidx.camera.camera2.pipe.CameraStatusMonitor
import androidx.camera.camera2.pipe.StreamGraph
import androidx.camera.camera2.pipe.compat.Camera2Backend
import androidx.camera.camera2.pipe.compat.Camera2CameraAvailabilityMonitor
import androidx.camera.camera2.pipe.compat.Camera2CameraController
import androidx.camera.camera2.pipe.compat.Camera2CameraOpener
+import androidx.camera.camera2.pipe.compat.Camera2CameraStatusMonitor
import androidx.camera.camera2.pipe.compat.Camera2CaptureSequenceProcessorFactory
import androidx.camera.camera2.pipe.compat.Camera2CaptureSessionsModule
import androidx.camera.camera2.pipe.compat.Camera2MetadataCache
@@ -62,6 +64,11 @@
abstract fun bindCameraAvailabilityMonitor(
camera2CameraAvailabilityMonitor: Camera2CameraAvailabilityMonitor
): CameraAvailabilityMonitor
+
+ @Binds
+ abstract fun bindCameraStatusMonitor(
+ camera2CameraStatusMonitor: Camera2CameraStatusMonitor
+ ): CameraStatusMonitor
}
@Scope
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/CameraPipeComponent.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/CameraPipeComponent.kt
index ce3a3ad..28bd09a 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/CameraPipeComponent.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/CameraPipeComponent.kt
@@ -55,6 +55,9 @@
@Qualifier
internal annotation class CameraPipeContext
+@Qualifier
+internal annotation class ForGraphLifecycleManager
+
@Singleton
@Component(
modules =
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/ExternalCameraGraphComponent.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/ExternalCameraGraphComponent.kt
index b93b659..6ca0561 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/ExternalCameraGraphComponent.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/ExternalCameraGraphComponent.kt
@@ -21,15 +21,24 @@
package androidx.camera.camera2.pipe.config
import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraBackend
+import androidx.camera.camera2.pipe.CameraBackendId
+import androidx.camera.camera2.pipe.CameraContext
import androidx.camera.camera2.pipe.CameraController
import androidx.camera.camera2.pipe.CameraGraph
+import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.CameraMetadata
+import androidx.camera.camera2.pipe.CameraStatusMonitor
import androidx.camera.camera2.pipe.RequestProcessor
+import androidx.camera.camera2.pipe.StreamGraph
import androidx.camera.camera2.pipe.compat.ExternalCameraController
import androidx.camera.camera2.pipe.graph.GraphListener
import dagger.Module
import dagger.Provides
import dagger.Subcomponent
+import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableSharedFlow
@CameraGraphScope
@Subcomponent(modules = [SharedCameraGraphModules::class, ExternalCameraGraphConfigModule::class])
@@ -49,6 +58,45 @@
private val cameraMetadata: CameraMetadata,
private val requestProcessor: RequestProcessor
) {
+ private val externalCameraBackend = object : CameraBackend {
+ override val id: CameraBackendId
+ get() = CameraBackendId("External")
+ override val cameraStatus: Flow<CameraStatusMonitor.CameraStatus>
+ get() = MutableSharedFlow()
+
+ override suspend fun getCameraIds(): List<CameraId>? {
+ throwUnsupportedOperationException()
+ }
+
+ override fun awaitCameraIds(): List<CameraId>? {
+ throwUnsupportedOperationException()
+ }
+
+ override fun awaitCameraMetadata(cameraId: CameraId): CameraMetadata? {
+ throwUnsupportedOperationException()
+ }
+
+ override fun disconnectAllAsync(): Deferred<Unit> {
+ throwUnsupportedOperationException()
+ }
+
+ override fun shutdownAsync(): Deferred<Unit> {
+ throwUnsupportedOperationException()
+ }
+
+ override fun createCameraController(
+ cameraContext: CameraContext,
+ graphConfig: CameraGraph.Config,
+ graphListener: GraphListener,
+ streamGraph: StreamGraph
+ ): CameraController {
+ throwUnsupportedOperationException()
+ }
+
+ private fun throwUnsupportedOperationException(): Nothing =
+ throw UnsupportedOperationException("External CameraPipe should not use backends")
+ }
+
@Provides
fun provideCameraGraphConfig(): CameraGraph.Config = config
@@ -59,4 +107,8 @@
@Provides
fun provideGraphController(graphListener: GraphListener): CameraController =
ExternalCameraController(config, graphListener, requestProcessor)
+
+ @CameraGraphScope
+ @Provides
+ fun provideCameraBackend(): CameraBackend = externalCameraBackend
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/ExternalCameraPipeComponent.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/ExternalCameraPipeComponent.kt
index 233200c..6068c13 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/ExternalCameraPipeComponent.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/config/ExternalCameraPipeComponent.kt
@@ -25,4 +25,4 @@
@Component(modules = [ThreadConfigModule::class])
internal interface ExternalCameraPipeComponent {
fun cameraGraphBuilder(): ExternalCameraGraphComponent.Builder
-}
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/CameraGraphImpl.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/CameraGraphImpl.kt
index 366f78c..586f399 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/CameraGraphImpl.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/CameraGraphImpl.kt
@@ -18,6 +18,7 @@
import android.view.Surface
import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraBackend
import androidx.camera.camera2.pipe.CameraController
import androidx.camera.camera2.pipe.CameraGraph
import androidx.camera.camera2.pipe.CameraMetadata
@@ -31,6 +32,7 @@
import androidx.camera.camera2.pipe.core.TokenLockImpl
import androidx.camera.camera2.pipe.core.acquire
import androidx.camera.camera2.pipe.core.acquireOrNull
+import androidx.camera.camera2.pipe.internal.GraphLifecycleManager
import javax.inject.Inject
import kotlinx.atomicfu.atomic
import kotlinx.coroutines.flow.StateFlow
@@ -44,10 +46,12 @@
constructor(
graphConfig: CameraGraph.Config,
metadata: CameraMetadata,
+ private val graphLifecycleManager: GraphLifecycleManager,
private val graphProcessor: GraphProcessor,
private val graphListener: GraphListener,
private val streamGraph: StreamGraphImpl,
private val surfaceGraph: SurfaceGraph,
+ private val cameraBackend: CameraBackend,
private val cameraController: CameraController,
private val graphState3A: GraphState3A,
private val listener3A: Listener3A
@@ -104,7 +108,7 @@
Debug.traceStart { "$this#start" }
Log.info { "Starting $this" }
graphListener.onGraphStarting()
- cameraController.start()
+ graphLifecycleManager.monitorAndStart(cameraBackend, cameraController)
Debug.traceStop()
}
@@ -112,7 +116,7 @@
Debug.traceStart { "$this#stop" }
Log.info { "Stopping $this" }
graphListener.onGraphStopping()
- cameraController.stop()
+ graphLifecycleManager.monitorAndStop(cameraBackend, cameraController)
Debug.traceStop()
}
@@ -146,7 +150,7 @@
Log.info { "Closing $this" }
sessionLock.close()
graphProcessor.close()
- cameraController.close()
+ graphLifecycleManager.monitorAndClose(cameraBackend, cameraController)
surfaceGraph.close()
Debug.traceStop()
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/internal/GraphLifecycleManager.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/internal/GraphLifecycleManager.kt
new file mode 100644
index 0000000..1429f76
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/internal/GraphLifecycleManager.kt
@@ -0,0 +1,127 @@
+/*
+ * 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.camera2.pipe.internal
+
+import androidx.annotation.GuardedBy
+import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraBackend
+import androidx.camera.camera2.pipe.CameraBackendId
+import androidx.camera.camera2.pipe.CameraController
+import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.CameraStatusMonitor
+import androidx.camera.camera2.pipe.CameraStatusMonitor.CameraStatus
+import androidx.camera.camera2.pipe.core.Threads
+import javax.inject.Inject
+import javax.inject.Singleton
+import kotlinx.coroutines.CoroutineName
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.launch
+
+/**
+ * GraphLifecycleManager is a CameraPipe-level lifecycle manager that does the following:
+ * - Oversees and executes the operations of [CameraController]`s. This means it will make sure the
+ * operations are atomic, and executed based on permissible state transitions.
+ * - Subscribe to [CameraStatusMonitor]s for camera status changes, basically “can attempt to
+ * restart signals”, from the respective camera backends, and then only restart
+ * [CameraController]s when the conditions are right.
+ * - Once we've determined that we can restart [CameraController]s, select the “suitable”
+ * [CameraController] to restart.
+ */
+@Singleton
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+internal class GraphLifecycleManager @Inject constructor(val threads: Threads) {
+ private val lock = Any()
+
+ private val scope = CoroutineScope(
+ threads.lightweightDispatcher.plus(CoroutineName("CXCP-GraphLifecycleManager"))
+ )
+
+ @GuardedBy("lock")
+ private val backendControllerMap =
+ mutableMapOf<CameraBackendId, LinkedHashSet<CameraController>>()
+
+ @GuardedBy("lock")
+ private val backendStatusCollectJobMap = mutableMapOf<CameraBackendId, Job>()
+
+ internal fun monitorAndStart(cameraBackend: CameraBackend, cameraController: CameraController) =
+ synchronized(lock) {
+ startMonitoring(cameraBackend, cameraController)
+ cameraController.start()
+ }
+
+ internal fun monitorAndStop(cameraBackend: CameraBackend, cameraController: CameraController) =
+ synchronized(lock) {
+ cameraController.stop()
+ stopMonitoring(cameraBackend, cameraController)
+ }
+
+ internal fun monitorAndClose(cameraBackend: CameraBackend, cameraController: CameraController) =
+ synchronized(lock) {
+ cameraController.close()
+ stopMonitoring(cameraBackend, cameraController)
+ }
+
+ @GuardedBy("lock")
+ private fun startMonitoring(cameraBackend: CameraBackend, cameraController: CameraController) {
+ if (backendControllerMap.containsKey(cameraBackend.id)) {
+ backendControllerMap[cameraBackend.id]?.add(cameraController)
+ return
+ }
+ backendControllerMap[cameraBackend.id] = linkedSetOf(cameraController)
+ backendStatusCollectJobMap[cameraBackend.id] = scope.launch {
+ cameraBackend.cameraStatus.collect { cameraStatus ->
+ when (cameraStatus) {
+ is CameraStatus.CameraPrioritiesChanged ->
+ tryRestartCameraController(cameraBackend)
+
+ is CameraStatus.CameraAvailable ->
+ tryRestartCameraController(cameraBackend, cameraStatus.cameraId)
+ }
+ }
+ }
+ }
+
+ @GuardedBy("lock")
+ private fun stopMonitoring(cameraBackend: CameraBackend, cameraController: CameraController) {
+ if (backendControllerMap.containsKey(cameraBackend.id)) {
+ val controllerSet = backendControllerMap[cameraBackend.id]
+ controllerSet?.remove(cameraController)
+ if (controllerSet?.size == 0) {
+ backendControllerMap.remove(cameraBackend.id)
+ backendStatusCollectJobMap[cameraBackend.id]?.cancel()
+ backendStatusCollectJobMap.remove(cameraBackend.id)
+ }
+ }
+ }
+
+ private fun tryRestartCameraController(
+ cameraBackend: CameraBackend,
+ cameraId: CameraId? = null,
+ ) = synchronized(lock) {
+ // Restart the last CameraController being tracked in each backend. The last
+ // CameraController would be the latest one being tracked, and should thus take priority
+ // over previous CameraControllers.
+ backendControllerMap[cameraBackend.id]?.findLast {
+ if (cameraId != null) {
+ it.cameraId == cameraId
+ } else {
+ true
+ }
+ }?.tryRestart()
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/CameraGraphImplTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/CameraGraphImplTest.kt
index e377214..05af92f 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/CameraGraphImplTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/CameraGraphImplTest.kt
@@ -30,6 +30,7 @@
import androidx.camera.camera2.pipe.Request
import androidx.camera.camera2.pipe.StreamFormat
import androidx.camera.camera2.pipe.internal.CameraBackendsImpl
+import androidx.camera.camera2.pipe.internal.GraphLifecycleManager
import androidx.camera.camera2.pipe.testing.CameraControllerSimulator
import androidx.camera.camera2.pipe.testing.FakeCameraBackend
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
@@ -92,6 +93,7 @@
threads
)
val cameraContext = CameraBackendsImpl.CameraBackendContext(context, threads, backends)
+ val graphLifecycleManager = GraphLifecycleManager(threads)
val streamGraph = StreamGraphImpl(metadata, graphConfig)
cameraController =
CameraControllerSimulator(cameraContext, graphConfig, fakeGraphProcessor, streamGraph)
@@ -101,10 +103,12 @@
CameraGraphImpl(
graphConfig,
metadata,
+ graphLifecycleManager,
fakeGraphProcessor,
fakeGraphProcessor,
streamGraph,
surfaceGraph,
+ backend,
cameraController,
GraphState3A(),
Listener3A()
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraController.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraController.kt
index b637133..c49f98a 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraController.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraController.kt
@@ -18,12 +18,15 @@
import android.view.Surface
import androidx.camera.camera2.pipe.CameraController
+import androidx.camera.camera2.pipe.CameraId
import androidx.camera.camera2.pipe.StreamId
internal class FakeCameraController : CameraController {
var started = false
var closed = false
var surfaceMap: Map<StreamId, Surface>? = null
+ override val cameraId: CameraId
+ get() = CameraId.fromCamera2Id("0")
override fun start() {
started = true
@@ -33,6 +36,11 @@
started = false
}
+ override fun tryRestart() {
+ stop()
+ start()
+ }
+
override fun close() {
closed = true
started = false
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CamcorderProfileProviderTest.kt b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CamcorderProfileProviderTest.kt
deleted file mode 100644
index 6d48e3e7..0000000
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CamcorderProfileProviderTest.kt
+++ /dev/null
@@ -1,165 +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.camera.camera2.internal
-
-import android.hardware.camera2.CameraCharacteristics
-import android.media.CamcorderProfile
-import android.util.Size
-import androidx.camera.camera2.internal.compat.CameraCharacteristicsCompat
-import androidx.camera.camera2.internal.compat.StreamConfigurationMapCompat
-import androidx.camera.core.CameraSelector
-import androidx.camera.core.impl.ImageFormatConstants
-import androidx.camera.testing.CameraUtil
-import androidx.test.filters.SdkSuppress
-import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assume.assumeTrue
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@SmallTest
-@Suppress("DEPRECATION")
-@SdkSuppress(minSdkVersion = 21)
-public class Camera2CamcorderProfileProviderTest(private val quality: Int) {
- public companion object {
- @JvmStatic
- @Parameterized.Parameters
- public fun data(): Array<Array<Int>> = arrayOf(
- arrayOf(CamcorderProfile.QUALITY_LOW),
- arrayOf(CamcorderProfile.QUALITY_HIGH),
- arrayOf(CamcorderProfile.QUALITY_QCIF),
- arrayOf(CamcorderProfile.QUALITY_CIF),
- arrayOf(CamcorderProfile.QUALITY_480P),
- arrayOf(CamcorderProfile.QUALITY_720P),
- arrayOf(CamcorderProfile.QUALITY_1080P),
- arrayOf(CamcorderProfile.QUALITY_QVGA),
- arrayOf(CamcorderProfile.QUALITY_2160P),
- arrayOf(CamcorderProfile.QUALITY_VGA),
- arrayOf(CamcorderProfile.QUALITY_4KDCI),
- arrayOf(CamcorderProfile.QUALITY_QHD),
- arrayOf(CamcorderProfile.QUALITY_2K)
- )
- }
-
- private lateinit var camcorderProfileProvider: Camera2CamcorderProfileProvider
- private lateinit var cameraCharacteristics: CameraCharacteristicsCompat
- private var isLegacyCamera = false
- private var intCameraId = -1
-
- @Before
- public fun setup() {
- assumeTrue(CameraUtil.hasCameraWithLensFacing(CameraSelector.LENS_FACING_BACK))
-
- val cameraId = CameraUtil.getCameraIdWithLensFacing(CameraSelector.LENS_FACING_BACK)!!
- intCameraId = cameraId.toInt()
-
- cameraCharacteristics = CameraCharacteristicsCompat.toCameraCharacteristicsCompat(
- CameraUtil.getCameraCharacteristics(CameraSelector.LENS_FACING_BACK)!!
- )
- val hardwareLevel =
- cameraCharacteristics[CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL]
-
- isLegacyCamera = hardwareLevel != null && hardwareLevel == CameraCharacteristics
- .INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
-
- camcorderProfileProvider = Camera2CamcorderProfileProvider(cameraId, cameraCharacteristics)
- }
-
- @Test
- public fun nonLegacyCamera_hasProfile_returnSameResult() {
- assumeTrue(!isLegacyCamera)
-
- assertThat(camcorderProfileProvider.hasProfile(quality))
- .isEqualTo(CamcorderProfile.hasProfile(intCameraId, quality))
- }
-
- @Test
- public fun nonLegacyCamera_notHasProfile_getReturnNull() {
- assumeTrue(!isLegacyCamera)
- assumeTrue(!CamcorderProfile.hasProfile(intCameraId, quality))
-
- assertThat(camcorderProfileProvider.get(quality)).isNull()
- }
-
- @Test
- public fun nonLegacyCamera_hasProfile_getReturnSameQualityProfile() {
- assumeTrue(!isLegacyCamera)
- assumeTrue(CamcorderProfile.hasProfile(intCameraId, quality))
-
- val profileProxy = camcorderProfileProvider.get(quality)!!
- val profile = CamcorderProfile.get(intCameraId, quality)
- assertThat(profileProxy.quality).isEqualTo(profile.quality)
- }
-
- @Test
- public fun legacyCamera_notHasProfile_returnFalse() {
- assumeTrue(isLegacyCamera)
- assumeTrue(!CamcorderProfile.hasProfile(intCameraId, quality))
-
- assertThat(camcorderProfileProvider.hasProfile(quality)).isFalse()
- }
-
- @Test
- public fun legacyCamera_hasProfile_shouldCheckSupportedResolution() {
- assumeTrue(isLegacyCamera)
- assumeTrue(CamcorderProfile.hasProfile(intCameraId, quality))
-
- val videoSupportedResolutions = getVideoSupportedResolutions()
- val isResolutionSupported =
- videoSupportedResolutions.contains(CamcorderProfile.get(intCameraId, quality).size())
-
- assertThat(camcorderProfileProvider.hasProfile(quality)).isEqualTo(isResolutionSupported)
- }
-
- @Test
- public fun legacyCamera_notHasProfile_getReturnNull() {
- assumeTrue(isLegacyCamera)
- assumeTrue(!CamcorderProfile.hasProfile(intCameraId, quality))
-
- assertThat(camcorderProfileProvider.get(quality)).isNull()
- }
-
- @Test
- public fun legacyCamera_hasProfile_getShouldCheckSupportedResolution() {
- assumeTrue(isLegacyCamera)
- assumeTrue(CamcorderProfile.hasProfile(intCameraId, quality))
-
- val profile = CamcorderProfile.get(intCameraId, quality)
- val videoSupportedResolutions = getVideoSupportedResolutions()
- val isResolutionSupported = videoSupportedResolutions.contains(profile.size())
-
- val profileProxy = camcorderProfileProvider.get(quality)
- if (isResolutionSupported) {
- assertThat(profileProxy!!.quality).isEqualTo(profile.quality)
- } else {
- assertThat(profileProxy).isNull()
- }
- }
-
- private fun getVideoSupportedResolutions(): Array<Size> {
- val mapCompat = StreamConfigurationMapCompat.toStreamConfigurationMapCompat(
- cameraCharacteristics[CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP]!!
- )
- return mapCompat.getOutputSizes(ImageFormatConstants.INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE)
- ?: emptyArray()
- }
-
- private fun CamcorderProfile.size() = Size(videoFrameWidth, videoFrameHeight)
-}
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2EncoderProfilesProviderTest.kt b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2EncoderProfilesProviderTest.kt
index 8a87d6a..4376357 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2EncoderProfilesProviderTest.kt
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2EncoderProfilesProviderTest.kt
@@ -17,16 +17,18 @@
package androidx.camera.camera2.internal
import android.media.CamcorderProfile
-import android.media.EncoderProfiles.VideoProfile.YUV_420
import android.media.EncoderProfiles.VideoProfile.HDR_NONE
+import android.media.EncoderProfiles.VideoProfile.YUV_420
import android.os.Build
+import androidx.camera.camera2.internal.compat.quirk.DeviceQuirks
+import androidx.camera.camera2.internal.compat.quirk.InvalidVideoProfilesQuirk
import androidx.camera.core.CameraSelector
import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy.BIT_DEPTH_8
import androidx.camera.testing.CameraUtil
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
-import org.junit.Assume
+import org.junit.Assume.assumeFalse
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Rule
@@ -68,7 +70,6 @@
@Before
fun setup() {
- skipTestOnProblematicBuildsOfCuttlefishApi33()
assumeTrue(CameraUtil.hasCameraWithLensFacing(CameraSelector.LENS_FACING_BACK))
cameraId = CameraUtil.getCameraIdWithLensFacing(CameraSelector.LENS_FACING_BACK)!!
@@ -156,6 +157,7 @@
@Test
fun afterApi33_hasSameContentAsEncoderProfiles() {
assumeTrue(CamcorderProfile.hasProfile(quality))
+ skipTestOnDevicesWithProblematicBuild()
val profiles = CamcorderProfile.getAll(cameraId, quality)
val video = profiles!!.videoProfiles[0]
@@ -184,13 +186,14 @@
assertThat(audioProxy.profile).isEqualTo(audio.profile)
}
- // TODO: removes after b/265613005 is fixed
- private fun skipTestOnProblematicBuildsOfCuttlefishApi33() {
- // Skip test for b/265613005
- Assume.assumeFalse(
- "Cuttlefish has null VideoProfile issue. Unable to test.",
- Build.MODEL.contains("Cuttlefish") && Build.VERSION.SDK_INT == 33 &&
- Build.ID.startsWith("TP1A")
+ private fun skipTestOnDevicesWithProblematicBuild() {
+ // Skip test for b/265613005 and b/223439995
+ val hasVideoProfilesQuirk = DeviceQuirks.get(InvalidVideoProfilesQuirk::class.java) != null
+ val isProblematicCuttlefishBuild =
+ Build.MODEL.contains("Cuttlefish") && Build.ID.startsWith("TP1A")
+ assumeFalse(
+ "Skip test with null VideoProfile issue. Unable to test.",
+ hasVideoProfilesQuirk || isProblematicCuttlefishBuild
)
}
}
\ No newline at end of file
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CamcorderProfileProvider.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CamcorderProfileProvider.java
deleted file mode 100644
index 4ad7dd3..0000000
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CamcorderProfileProvider.java
+++ /dev/null
@@ -1,111 +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.camera.camera2.internal;
-
-import android.media.CamcorderProfile;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.RequiresApi;
-import androidx.camera.camera2.internal.compat.CameraCharacteristicsCompat;
-import androidx.camera.camera2.internal.compat.quirk.CamcorderProfileResolutionQuirk;
-import androidx.camera.camera2.internal.compat.quirk.CameraQuirks;
-import androidx.camera.camera2.internal.compat.workaround.CamcorderProfileResolutionValidator;
-import androidx.camera.core.Logger;
-import androidx.camera.core.impl.CamcorderProfileProvider;
-import androidx.camera.core.impl.CamcorderProfileProxy;
-
-/** An implementation that provides the {@link CamcorderProfileProxy}. */
-@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-public class Camera2CamcorderProfileProvider implements CamcorderProfileProvider {
- private static final String TAG = "Camera2CamcorderProfileProvider";
-
- private final boolean mHasValidCameraId;
- private final int mCameraId;
- private final CamcorderProfileResolutionValidator mCamcorderProfileResolutionValidator;
-
- public Camera2CamcorderProfileProvider(@NonNull String cameraId,
- @NonNull CameraCharacteristicsCompat cameraCharacteristics) {
- boolean hasValidCameraId = false;
- int intCameraId = -1;
- try {
- intCameraId = Integer.parseInt(cameraId);
- hasValidCameraId = true;
- } catch (NumberFormatException e) {
- Logger.w(TAG, "Camera id is not an integer: " + cameraId
- + ", unable to create CamcorderProfileProvider");
- }
- mHasValidCameraId = hasValidCameraId;
- mCameraId = intCameraId;
- CamcorderProfileResolutionQuirk quirk = CameraQuirks.get(cameraId, cameraCharacteristics)
- .get(CamcorderProfileResolutionQuirk.class);
- mCamcorderProfileResolutionValidator = new CamcorderProfileResolutionValidator(quirk);
- }
-
- /** {@inheritDoc} */
- @Override
- public boolean hasProfile(int quality) {
- if (!mHasValidCameraId) {
- return false;
- }
-
- if (!CamcorderProfile.hasProfile(mCameraId, quality)) {
- return false;
- }
-
- if (mCamcorderProfileResolutionValidator.hasQuirk()) {
- // Only get profile when quirk exist for performance concern.
- CamcorderProfileProxy profile = getProfileInternal(quality);
- return mCamcorderProfileResolutionValidator.hasValidVideoResolution(profile);
- }
- return true;
- }
-
- /** {@inheritDoc} */
- @Override
- @Nullable
- public CamcorderProfileProxy get(int quality) {
- if (!mHasValidCameraId) {
- return null;
- }
-
- if (!CamcorderProfile.hasProfile(mCameraId, quality)) {
- return null;
- }
-
- CamcorderProfileProxy profile = getProfileInternal(quality);
- if (!mCamcorderProfileResolutionValidator.hasValidVideoResolution(profile)) {
- return null;
- }
- return profile;
- }
-
- @Nullable
- @SuppressWarnings("deprecation")
- private CamcorderProfileProxy getProfileInternal(int quality) {
- CamcorderProfile profile = null;
- try {
- profile = CamcorderProfile.get(mCameraId, quality);
- } catch (RuntimeException e) {
- // CamcorderProfile.get() will throw
- // - RuntimeException if not able to retrieve camcorder profile params.
- // - IllegalArgumentException if quality is not valid.
- Logger.w(TAG, "Unable to get CamcorderProfile by quality: " + quality, e);
- }
- return profile != null ? CamcorderProfileProxy.fromCamcorderProfile(profile) : null;
- }
-}
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java
index df26798..a79d18b 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraInfoImpl.java
@@ -54,9 +54,9 @@
import androidx.camera.core.FocusMeteringAction;
import androidx.camera.core.Logger;
import androidx.camera.core.ZoomState;
-import androidx.camera.core.impl.CamcorderProfileProvider;
import androidx.camera.core.impl.CameraCaptureCallback;
import androidx.camera.core.impl.CameraInfoInternal;
+import androidx.camera.core.impl.EncoderProfilesProvider;
import androidx.camera.core.impl.ImageOutputConfig.RotationValue;
import androidx.camera.core.impl.Quirks;
import androidx.camera.core.impl.Timebase;
@@ -115,7 +115,7 @@
@NonNull
private final Quirks mCameraQuirks;
@NonNull
- private final CamcorderProfileProvider mCamera2CamcorderProfileProvider;
+ private final EncoderProfilesProvider mCamera2EncoderProfilesProvider;
@NonNull
private final CameraManagerCompat mCameraManager;
@@ -131,8 +131,7 @@
mCameraCharacteristicsCompat = cameraManager.getCameraCharacteristicsCompat(mCameraId);
mCamera2CameraInfo = new Camera2CameraInfo(this);
mCameraQuirks = CameraQuirks.get(cameraId, mCameraCharacteristicsCompat);
- mCamera2CamcorderProfileProvider = new Camera2CamcorderProfileProvider(cameraId,
- mCameraCharacteristicsCompat);
+ mCamera2EncoderProfilesProvider = new Camera2EncoderProfilesProvider(cameraId);
mCameraStateLiveData = new RedirectableLiveData<>(
CameraState.create(CameraState.Type.CLOSED));
}
@@ -401,8 +400,8 @@
/** {@inheritDoc} */
@NonNull
@Override
- public CamcorderProfileProvider getCamcorderProfileProvider() {
- return mCamera2CamcorderProfileProvider;
+ public EncoderProfilesProvider getEncoderProfilesProvider() {
+ return mCamera2EncoderProfilesProvider;
}
@NonNull
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2EncoderProfilesProvider.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2EncoderProfilesProvider.java
index a35596c..5103731 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2EncoderProfilesProvider.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2EncoderProfilesProvider.java
@@ -24,6 +24,8 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
+import androidx.camera.camera2.internal.compat.quirk.DeviceQuirks;
+import androidx.camera.camera2.internal.compat.quirk.InvalidVideoProfilesQuirk;
import androidx.camera.core.Logger;
import androidx.camera.core.impl.EncoderProfilesProvider;
import androidx.camera.core.impl.EncoderProfilesProxy;
@@ -80,23 +82,44 @@
}
@Nullable
- @SuppressWarnings("deprecation")
private EncoderProfilesProxy getProfilesInternal(int quality) {
if (Build.VERSION.SDK_INT >= 31) {
EncoderProfiles profiles = Api31Impl.getAll(mCameraId, quality);
- return profiles != null ? EncoderProfilesProxyCompat.from(profiles) : null;
- } else {
- CamcorderProfile profile = null;
- try {
- profile = CamcorderProfile.get(mIntCameraId, quality);
- } catch (RuntimeException e) {
- // CamcorderProfile.get() will throw
- // - RuntimeException if not able to retrieve camcorder profile params.
- // - IllegalArgumentException if quality is not valid.
- Logger.w(TAG, "Unable to get CamcorderProfile by quality: " + quality, e);
+ if (profiles == null) {
+ return null;
}
- return profile != null ? EncoderProfilesProxyCompat.from(profile) : null;
+
+ boolean isVideoProfilesInvalid = DeviceQuirks.get(InvalidVideoProfilesQuirk.class)
+ != null;
+ if (isVideoProfilesInvalid) {
+ Logger.d(TAG, "EncoderProfiles contains invalid video profiles, use "
+ + "CamcorderProfile to create EncoderProfilesProxy.");
+ } else {
+ try {
+ return EncoderProfilesProxyCompat.from(profiles);
+ } catch (NullPointerException e) {
+ Logger.w(TAG, "Failed to create EncoderProfilesProxy, EncoderProfiles might "
+ + " contain invalid video profiles. Use CamcorderProfile instead.", e);
+ }
+ }
}
+
+ return createProfilesFromCamcorderProfile(quality);
+ }
+
+ @Nullable
+ @SuppressWarnings("deprecation")
+ private EncoderProfilesProxy createProfilesFromCamcorderProfile(int quality) {
+ CamcorderProfile profile = null;
+ try {
+ profile = CamcorderProfile.get(mIntCameraId, quality);
+ } catch (RuntimeException e) {
+ // CamcorderProfile.get() will throw
+ // - RuntimeException if not able to retrieve camcorder profile params.
+ // - IllegalArgumentException if quality is not valid.
+ Logger.w(TAG, "Unable to get CamcorderProfile by quality: " + quality, e);
+ }
+ return profile != null ? EncoderProfilesProxyCompat.from(profile) : null;
}
@RequiresApi(31)
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirk.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirk.java
index 86a0c16..abeb482 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirk.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirk.java
@@ -25,8 +25,8 @@
import androidx.annotation.RequiresApi;
import androidx.camera.camera2.internal.compat.CameraCharacteristicsCompat;
import androidx.camera.camera2.internal.compat.StreamConfigurationMapCompat;
-import androidx.camera.camera2.internal.compat.workaround.CamcorderProfileResolutionValidator;
import androidx.camera.core.Logger;
+import androidx.camera.core.impl.EncoderProfilesResolutionValidator;
import androidx.camera.core.impl.ImageFormatConstants;
import androidx.camera.core.impl.quirk.ProfileResolutionQuirk;
@@ -52,7 +52,7 @@
* resolution is contained in the list returned.
* Device(s): All legacy devices
* @see CamcorderProfile#hasProfile
- * @see CamcorderProfileResolutionValidator
+ * @see EncoderProfilesResolutionValidator
*/
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
public class CamcorderProfileResolutionQuirk implements ProfileResolutionQuirk {
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/DeviceQuirksLoader.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/DeviceQuirksLoader.java
index 45aa1b8..ed4d62e 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/DeviceQuirksLoader.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/DeviceQuirksLoader.java
@@ -86,6 +86,9 @@
if (ExtraSupportedOutputSizeQuirk.load()) {
quirks.add(new ExtraSupportedOutputSizeQuirk());
}
+ if (InvalidVideoProfilesQuirk.load()) {
+ quirks.add(new InvalidVideoProfilesQuirk());
+ }
return quirks;
}
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/InvalidVideoProfilesQuirk.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/InvalidVideoProfilesQuirk.java
new file mode 100644
index 0000000..bb4c9e1
--- /dev/null
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/InvalidVideoProfilesQuirk.java
@@ -0,0 +1,75 @@
+/*
+ * 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.camera2.internal.compat.quirk;
+
+import android.media.EncoderProfiles;
+import android.os.Build;
+
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.impl.Quirk;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * Quirk denoting the video profile list returns by {@link EncoderProfiles} is invalid.
+ *
+ * <p>QuirkSummary
+ * Bug Id: 267727595
+ * Description: When using {@link EncoderProfiles} on TP1A or TD1A builds of Android API 33,
+ * {@link EncoderProfiles#getVideoProfiles()} returns a list with size one, but
+ * the single value in the list is null. This is not the expected behavior, and
+ * makes {@link EncoderProfiles} lack of video information.
+ * Device(s): Pixel 4 and above pixel devices with TP1A or TD1A builds (API 33).
+ */
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+public class InvalidVideoProfilesQuirk implements Quirk {
+
+ static final List<String> AFFECTED_MODELS = Arrays.asList(
+ "pixel 4",
+ "pixel 4a",
+ "pixel 4 xl",
+ "pixel 5",
+ "pixel 5a",
+ "pixel 6",
+ "pixel 6a",
+ "pixel 6 pro",
+ "pixel 7",
+ "pixel 7 pro"
+ );
+
+ static boolean load() {
+ return isAffectedModel() && isAffectedBuild();
+ }
+
+ private static boolean isAffectedModel() {
+ return AFFECTED_MODELS.contains(Build.MODEL.toLowerCase(Locale.US));
+ }
+
+ private static boolean isAffectedBuild() {
+ return isTp1aBuild() || isTd1aBuild();
+ }
+
+ private static boolean isTp1aBuild() {
+ return Build.ID.startsWith("TP1A");
+ }
+
+ private static boolean isTd1aBuild() {
+ return Build.ID.startsWith("TD1A");
+ }
+}
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/workaround/CamcorderProfileResolutionValidator.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/workaround/CamcorderProfileResolutionValidator.java
deleted file mode 100644
index e63fcda..0000000
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/workaround/CamcorderProfileResolutionValidator.java
+++ /dev/null
@@ -1,67 +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.camera.camera2.internal.compat.workaround;
-
-import android.media.CamcorderProfile;
-import android.util.Size;
-
-import androidx.annotation.Nullable;
-import androidx.annotation.RequiresApi;
-import androidx.camera.camera2.internal.compat.quirk.CamcorderProfileResolutionQuirk;
-import androidx.camera.core.impl.CamcorderProfileProxy;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Validates the video resolution of {@link CamcorderProfile}.
- *
- * @see CamcorderProfileResolutionQuirk
- */
-@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-public class CamcorderProfileResolutionValidator {
-
- private final CamcorderProfileResolutionQuirk mQuirk;
- private final Set<Size> mSupportedResolutions;
-
- public CamcorderProfileResolutionValidator(@Nullable CamcorderProfileResolutionQuirk quirk) {
- mQuirk = quirk;
- mSupportedResolutions = quirk != null ? new HashSet<>(quirk.getSupportedResolutions()) :
- Collections.emptySet();
- }
-
- /** Checks if this validator contains quirk. */
- public boolean hasQuirk() {
- return mQuirk != null;
- }
-
- /** Checks if the video resolution of CamcorderProfile is valid. */
- public boolean hasValidVideoResolution(@Nullable CamcorderProfileProxy profile) {
- if (profile == null) {
- return false;
- }
-
- if (mQuirk == null) {
- // Quirk doesn't exist, always valid.
- return true;
- }
-
- Size videoSize = new Size(profile.getVideoFrameWidth(), profile.getVideoFrameHeight());
- return mSupportedResolutions.contains(videoSize);
- }
-}
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt
index 760a818..1a822dd 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt
@@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package androidx.camera.camera2.internal
import android.content.Context
@@ -21,6 +22,10 @@
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraMetadata
import android.media.CamcorderProfile
+import android.media.CamcorderProfile.QUALITY_1080P
+import android.media.CamcorderProfile.QUALITY_2160P
+import android.media.CamcorderProfile.QUALITY_480P
+import android.media.CamcorderProfile.QUALITY_720P
import android.os.Build
import android.util.Pair
import android.util.Range
@@ -62,16 +67,16 @@
import androidx.camera.core.impl.utils.CompareSizesByArea
import androidx.camera.core.impl.utils.executor.CameraXExecutors
import androidx.camera.core.internal.utils.SizeUtil.RESOLUTION_VGA
-import androidx.camera.testing.CamcorderProfileUtil
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.CameraXUtil
import androidx.camera.testing.Configs
+import androidx.camera.testing.EncoderProfilesUtil
import androidx.camera.testing.SurfaceTextureProvider
import androidx.camera.testing.SurfaceTextureProvider.SurfaceTextureCallback
-import androidx.camera.testing.fakes.FakeCamcorderProfileProvider
import androidx.camera.testing.fakes.FakeCamera
import androidx.camera.testing.fakes.FakeCameraFactory
import androidx.camera.testing.fakes.FakeCameraInfoInternal
+import androidx.camera.testing.fakes.FakeEncoderProfilesProvider
import androidx.camera.testing.fakes.FakeUseCaseConfig
import androidx.camera.video.FallbackStrategy
import androidx.camera.video.MediaSpec
@@ -145,18 +150,17 @@
CamcorderProfile::class.java
)
private var cameraManagerCompat: CameraManagerCompat? = null
- private val profileUhd = CamcorderProfileUtil.createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_2160P, RECORD_SIZE.width, RECORD_SIZE.height
+ private val profileUhd = EncoderProfilesUtil.createFakeEncoderProfilesProxy(
+ RECORD_SIZE.width, RECORD_SIZE.height
)
- private val profileFhd = CamcorderProfileUtil.createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_1080P, 1920, 1080
+ private val profileFhd = EncoderProfilesUtil.createFakeEncoderProfilesProxy(
+ 1920, 1080
)
- private val profileHd = CamcorderProfileUtil.createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_720P, PREVIEW_SIZE.width, PREVIEW_SIZE.height
+ private val profileHd = EncoderProfilesUtil.createFakeEncoderProfilesProxy(
+ PREVIEW_SIZE.width, PREVIEW_SIZE.height
)
- private val profileSd = CamcorderProfileUtil.createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_480P, RESOLUTION_VGA.width,
- RESOLUTION_VGA.height
+ private val profileSd = EncoderProfilesUtil.createFakeEncoderProfilesProxy(
+ RESOLUTION_VGA.width, RESOLUTION_VGA.height
)
private val context = ApplicationProvider.getApplicationContext<Context>()
private var cameraFactory: FakeCameraFactory? = null
@@ -3052,15 +3056,12 @@
sensorOrientation,
CameraCharacteristics.LENS_FACING_BACK
).apply {
- camcorderProfileProvider = FakeCamcorderProfileProvider.Builder()
- .addProfile(
- CamcorderProfileUtil.asHighQuality(profileUhd),
- profileUhd,
- profileFhd,
- profileHd,
- profileSd,
- CamcorderProfileUtil.asLowQuality(profileSd)
- ).build()
+ encoderProfilesProvider = FakeEncoderProfilesProvider.Builder()
+ .add(QUALITY_2160P, profileUhd)
+ .add(QUALITY_1080P, profileFhd)
+ .add(QUALITY_720P, profileHd)
+ .add(QUALITY_480P, profileSd)
+ .build()
}
cameraFactory = FakeCameraFactory().apply {
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirkTest.kt b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirkTest.kt
index f052a5a..baecee6 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirkTest.kt
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirkTest.kt
@@ -23,8 +23,8 @@
import android.os.Build
import android.util.Size
import androidx.camera.camera2.internal.compat.CameraCharacteristicsCompat
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_1080P
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_2160P
+import androidx.camera.testing.EncoderProfilesUtil.RESOLUTION_1080P
+import androidx.camera.testing.EncoderProfilesUtil.RESOLUTION_2160P
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
@@ -40,10 +40,10 @@
@RunWith(RobolectricTestRunner::class)
@DoNotInstrument
@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
-public class CamcorderProfileResolutionQuirkTest {
+class CamcorderProfileResolutionQuirkTest {
@Test
- public fun loadByHardwareLevel() {
+ fun loadByHardwareLevel() {
var cameraCharacteristicsCompat =
createCameraCharacteristicsCompat(CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL)
assertThat(CamcorderProfileResolutionQuirk.load(cameraCharacteristicsCompat)).isFalse()
@@ -62,7 +62,7 @@
}
@Test
- public fun canGetCorrectSupportedSizes() {
+ fun canGetCorrectSupportedSizes() {
val cameraCharacteristicsCompat =
createCameraCharacteristicsCompat(
supportedSizes = arrayOf(
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/workaround/CamcorderProfileResolutionValidatorTest.kt b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/workaround/CamcorderProfileResolutionValidatorTest.kt
deleted file mode 100644
index 5787efb..0000000
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/workaround/CamcorderProfileResolutionValidatorTest.kt
+++ /dev/null
@@ -1,96 +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.camera.camera2.internal.compat.workaround
-
-import android.graphics.SurfaceTexture
-import android.hardware.camera2.CameraCharacteristics
-import android.hardware.camera2.params.StreamConfigurationMap
-import android.os.Build
-import android.util.Size
-import androidx.camera.camera2.internal.compat.CameraCharacteristicsCompat
-import androidx.camera.camera2.internal.compat.quirk.CamcorderProfileResolutionQuirk
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_2160P
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_720P
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_2160P
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentMatchers
-import org.mockito.Mockito
-import org.mockito.Mockito.`when`
-import org.robolectric.RobolectricTestRunner
-import org.robolectric.annotation.Config
-import org.robolectric.annotation.internal.DoNotInstrument
-import org.robolectric.shadow.api.Shadow
-import org.robolectric.shadows.ShadowCameraCharacteristics
-
-@RunWith(RobolectricTestRunner::class)
-@DoNotInstrument
-@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
-public class CamcorderProfileResolutionValidatorTest {
-
- @Test
- public fun noQuirk_alwaysValid() {
- val validator = CamcorderProfileResolutionValidator(null)
-
- assertThat(validator.hasValidVideoResolution(PROFILE_2160P)).isTrue()
- assertThat(validator.hasValidVideoResolution(PROFILE_720P)).isTrue()
- }
-
- @Test
- public fun hasQuirk_shouldCheckSupportedResolutions() {
- val cameraCharacteristicsCompat = createCameraCharacteristicsCompat(
- supportedResolution = arrayOf(RESOLUTION_2160P)
- )
- val quirk = CamcorderProfileResolutionQuirk(cameraCharacteristicsCompat)
- val validator = CamcorderProfileResolutionValidator(quirk)
-
- assertThat(validator.hasValidVideoResolution(PROFILE_2160P)).isTrue()
- assertThat(validator.hasValidVideoResolution(PROFILE_720P)).isFalse()
- }
-
- @Test
- public fun nullProfile_notValid() {
- val cameraCharacteristicsCompat = createCameraCharacteristicsCompat(
- supportedResolution = arrayOf(RESOLUTION_2160P)
- )
- val quirk = CamcorderProfileResolutionQuirk(cameraCharacteristicsCompat)
- val validator = CamcorderProfileResolutionValidator(quirk)
-
- assertThat(validator.hasValidVideoResolution(null)).isFalse()
- }
-
- private fun createCameraCharacteristicsCompat(
- supportedResolution: Array<Size> = emptyArray()
- ): CameraCharacteristicsCompat {
- val characteristics = ShadowCameraCharacteristics.newCameraCharacteristics()
- val shadowCharacteristics = Shadow.extract<ShadowCameraCharacteristics>(characteristics)
-
- val mockMap = Mockito.mock(StreamConfigurationMap::class.java)
-
- // Before Android 23, use {@link SurfaceTexture} will finally mapped to 0x22 in
- // StreamConfigurationMap to retrieve the output sizes information.
- `when`(mockMap.getOutputSizes(ArgumentMatchers.any<Class<SurfaceTexture>>()))
- .thenReturn(supportedResolution)
- `when`(mockMap.getOutputSizes(ArgumentMatchers.anyInt()))
- .thenReturn(supportedResolution)
-
- shadowCharacteristics.set(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP, mockMap)
-
- return CameraCharacteristicsCompat.toCameraCharacteristicsCompat(characteristics)
- }
-}
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/UseCaseTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/UseCaseTest.kt
index 16ee9c4c..4ad6236 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/UseCaseTest.kt
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/UseCaseTest.kt
@@ -21,9 +21,6 @@
import android.util.Rational
import android.util.Size
import android.view.Surface
-import androidx.camera.testing.fakes.FakeUseCaseConfig
-import androidx.camera.testing.fakes.FakeUseCase
-import androidx.camera.testing.fakes.FakeCameraInfoInternal
import androidx.camera.core.impl.CameraInternal
import androidx.camera.core.impl.Config
import androidx.camera.core.impl.ImageOutputConfig
@@ -33,23 +30,26 @@
import androidx.camera.core.internal.CameraUseCaseAdapter
import androidx.camera.testing.fakes.FakeCamera
import androidx.camera.testing.fakes.FakeCameraDeviceSurfaceManager
+import androidx.camera.testing.fakes.FakeCameraInfoInternal
+import androidx.camera.testing.fakes.FakeUseCase
+import androidx.camera.testing.fakes.FakeUseCaseConfig
import androidx.camera.testing.fakes.FakeUseCaseConfigFactory
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth
+import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers
import org.mockito.Mockito
-import java.util.LinkedHashSet
@SmallTest
@RunWith(AndroidJUnit4::class)
@SdkSuppress(minSdkVersion = 21)
class UseCaseTest {
private var mockCameraInternal: CameraInternal? = null
+
@Before
fun setup() {
mockCameraInternal = Mockito.mock(
@@ -58,26 +58,41 @@
}
@Test
+ fun noCameraTransform_rotationMirrored() {
+ // Arrange.
+ val testUseCase = createFakeUseCase(targetRotation = Surface.ROTATION_90)
+ val fakeCamera = FakeCamera()
+ testUseCase.hasCameraTransform = false
+ // Act/Assert:
+ assertThat(testUseCase.getRelativeRotation(fakeCamera, true)).isEqualTo(90)
+ assertThat(testUseCase.getRelativeRotation(fakeCamera, false)).isEqualTo(270)
+ }
+
+ @Test
+ fun hasCameraTransform_rotationNotMirrored() {
+ // Arrange.
+ val testUseCase = createFakeUseCase(targetRotation = Surface.ROTATION_90)
+ val fakeCamera = FakeCamera()
+ // Act/Assert:
+ assertThat(testUseCase.getRelativeRotation(fakeCamera, true)).isEqualTo(270)
+ assertThat(testUseCase.getRelativeRotation(fakeCamera, false)).isEqualTo(270)
+ }
+
+ @Test
fun getAttachedSessionConfig() {
- val config = FakeUseCaseConfig.Builder().setTargetName(
- "UseCase"
- ).useCaseConfig
- val testUseCase = TestUseCase(config)
+ val testUseCase = createFakeUseCase()
val sessionToAttach = SessionConfig.Builder().build()
testUseCase.updateSessionConfig(sessionToAttach)
val attachedSession = testUseCase.sessionConfig
- Truth.assertThat(attachedSession).isEqualTo(sessionToAttach)
+ assertThat(attachedSession).isEqualTo(sessionToAttach)
}
@Test
fun removeListener() {
- val config = FakeUseCaseConfig.Builder().setTargetName(
- "UseCase"
- ).useCaseConfig
- val testUseCase = TestUseCase(config)
+ val testUseCase = createFakeUseCase()
testUseCase.bindToCamera(mockCameraInternal!!, null, null)
testUseCase.unbindFromCamera(mockCameraInternal!!)
- testUseCase.activate()
+ testUseCase.notifyActive()
Mockito.verify(mockCameraInternal, Mockito.never())!!.onUseCaseActive(
ArgumentMatchers.any(
UseCase::class.java
@@ -87,43 +102,31 @@
@Test
fun notifyActiveState() {
- val config = FakeUseCaseConfig.Builder().setTargetName(
- "UseCase"
- ).useCaseConfig
- val testUseCase = TestUseCase(config)
+ val testUseCase = createFakeUseCase()
testUseCase.bindToCamera(mockCameraInternal!!, null, null)
- testUseCase.activate()
+ testUseCase.notifyActive()
Mockito.verify(mockCameraInternal, Mockito.times(1))!!.onUseCaseActive(testUseCase)
}
@Test
fun notifyInactiveState() {
- val config = FakeUseCaseConfig.Builder().setTargetName(
- "UseCase"
- ).useCaseConfig
- val testUseCase = TestUseCase(config)
+ val testUseCase = createFakeUseCase()
testUseCase.bindToCamera(mockCameraInternal!!, null, null)
- testUseCase.deactivate()
+ testUseCase.notifyInactive()
Mockito.verify(mockCameraInternal, Mockito.times(1))!!.onUseCaseInactive(testUseCase)
}
@Test
fun notifyUpdatedSettings() {
- val config = FakeUseCaseConfig.Builder().setTargetName(
- "UseCase"
- ).useCaseConfig
- val testUseCase = TestUseCase(config)
+ val testUseCase = FakeUseCase()
testUseCase.bindToCamera(mockCameraInternal!!, null, null)
- testUseCase.update()
+ testUseCase.notifyUpdated()
Mockito.verify(mockCameraInternal, Mockito.times(1))!!.onUseCaseUpdated(testUseCase)
}
@Test
fun notifyResetUseCase() {
- val config = FakeUseCaseConfig.Builder().setTargetName(
- "UseCase"
- ).useCaseConfig
- val testUseCase = TestUseCase(config)
+ val testUseCase = FakeUseCase()
testUseCase.bindToCamera(mockCameraInternal!!, null, null)
testUseCase.notifyReset()
Mockito.verify(mockCameraInternal, Mockito.times(1))!!.onUseCaseReset(testUseCase)
@@ -136,47 +139,38 @@
builder.mutableConfig.insertOption(opt, Config.OptionPriority.ALWAYS_OVERRIDE, 1)
val fakeUseCase = builder.build()
val useCaseConfig = fakeUseCase.currentConfig
- Truth.assertThat(useCaseConfig.getOptionPriority(opt))
+ assertThat(useCaseConfig.getOptionPriority(opt))
.isEqualTo(Config.OptionPriority.ALWAYS_OVERRIDE)
}
@Test
fun attachedSurfaceResolutionCanBeReset_whenOnDetach() {
- val config = FakeUseCaseConfig.Builder().setTargetName(
- "UseCase"
- ).useCaseConfig
- val testUseCase = TestUseCase(config)
+ val testUseCase = FakeUseCase()
testUseCase.updateSuggestedStreamSpec(TEST_STREAM_SPEC)
- Truth.assertThat(testUseCase.attachedSurfaceResolution).isNotNull()
+ assertThat(testUseCase.attachedSurfaceResolution).isNotNull()
testUseCase.bindToCamera(mockCameraInternal!!, null, null)
testUseCase.unbindFromCamera(mockCameraInternal!!)
- Truth.assertThat(testUseCase.attachedSurfaceResolution).isNull()
+ assertThat(testUseCase.attachedSurfaceResolution).isNull()
}
@Test
fun attachedStreamSpecCanBeReset_whenOnDetach() {
- val config = FakeUseCaseConfig.Builder().setTargetName(
- "UseCase"
- ).useCaseConfig
- val testUseCase = TestUseCase(config)
+ val testUseCase = FakeUseCase()
testUseCase.updateSuggestedStreamSpec(TEST_STREAM_SPEC)
- Truth.assertThat(testUseCase.attachedStreamSpec).isNotNull()
+ assertThat(testUseCase.attachedStreamSpec).isNotNull()
testUseCase.bindToCamera(mockCameraInternal!!, null, null)
testUseCase.unbindFromCamera(mockCameraInternal!!)
- Truth.assertThat(testUseCase.attachedStreamSpec).isNull()
+ assertThat(testUseCase.attachedStreamSpec).isNull()
}
@Test
fun viewPortCropRectCanBeReset_whenOnDetach() {
- val config = FakeUseCaseConfig.Builder().setTargetName(
- "UseCase"
- ).useCaseConfig
- val testUseCase = TestUseCase(config)
+ val testUseCase = FakeUseCase()
testUseCase.setViewPortCropRect(Rect(0, 0, 640, 480))
- Truth.assertThat(testUseCase.viewPortCropRect).isNotNull()
+ assertThat(testUseCase.viewPortCropRect).isNotNull()
testUseCase.bindToCamera(mockCameraInternal!!, null, null)
testUseCase.unbindFromCamera(mockCameraInternal!!)
- Truth.assertThat(testUseCase.viewPortCropRect).isNull()
+ assertThat(testUseCase.viewPortCropRect).isNull()
}
@Test
@@ -192,22 +186,22 @@
.setBufferFormat(useCaseImageFormat).useCaseConfig
val extendedConfig = FakeUseCaseConfig.Builder()
.setTargetRotation(Surface.ROTATION_180).useCaseConfig
- val testUseCase = TestUseCase(useCaseConfig)
+ val testUseCase = FakeUseCase(useCaseConfig)
val cameraInfo = FakeCameraInfoInternal()
val mergedConfig = testUseCase.mergeConfigs(
cameraInfo, extendedConfig,
defaultConfig
)
- Truth.assertThat(mergedConfig.surfaceOccupancyPriority).isEqualTo(cameraDefaultPriority)
- Truth.assertThat(mergedConfig.inputFormat).isEqualTo(useCaseImageFormat)
+ assertThat(mergedConfig.surfaceOccupancyPriority).isEqualTo(cameraDefaultPriority)
+ assertThat(mergedConfig.inputFormat).isEqualTo(useCaseImageFormat)
val imageOutputConfig = mergedConfig as ImageOutputConfig
- Truth.assertThat(imageOutputConfig.targetRotation).isEqualTo(Surface.ROTATION_180)
+ assertThat(imageOutputConfig.targetRotation).isEqualTo(Surface.ROTATION_180)
}
@Test
fun returnNullResolutionInfo_beforeAddingToCameraUseCaseAdapter() {
val fakeUseCase = FakeUseCase()
- Truth.assertThat(fakeUseCase.resolutionInfo).isNull()
+ assertThat(fakeUseCase.resolutionInfo).isNull()
}
@Test
@@ -217,15 +211,15 @@
val cameraUseCaseAdapter = createCameraUseCaseAdapter()
cameraUseCaseAdapter.addUseCases(listOf<UseCase>(fakeUseCase))
val resolutionInfo = fakeUseCase.resolutionInfo
- Truth.assertThat(resolutionInfo).isNotNull()
- Truth.assertThat(resolutionInfo!!.resolution).isEqualTo(SURFACE_RESOLUTION)
- Truth.assertThat(resolutionInfo.cropRect).isEqualTo(
+ assertThat(resolutionInfo).isNotNull()
+ assertThat(resolutionInfo!!.resolution).isEqualTo(SURFACE_RESOLUTION)
+ assertThat(resolutionInfo.cropRect).isEqualTo(
Rect(
0, 0,
SURFACE_RESOLUTION.width, SURFACE_RESOLUTION.height
)
)
- Truth.assertThat(resolutionInfo.rotationDegrees).isEqualTo(0)
+ assertThat(resolutionInfo.rotationDegrees).isEqualTo(0)
}
@Test
@@ -236,7 +230,7 @@
cameraUseCaseAdapter.addUseCases(listOf<UseCase>(fakeUseCase))
cameraUseCaseAdapter.removeUseCases(listOf<UseCase>(fakeUseCase))
val resolutionInfo = fakeUseCase.resolutionInfo
- Truth.assertThat(resolutionInfo).isNull()
+ assertThat(resolutionInfo).isNull()
}
@Test
@@ -247,7 +241,7 @@
val cameraUseCaseAdapter = createCameraUseCaseAdapter()
cameraUseCaseAdapter.addUseCases(listOf<UseCase>(fakeUseCase))
val resolutionInfo = fakeUseCase.resolutionInfo
- Truth.assertThat(resolutionInfo!!.rotationDegrees).isEqualTo(270)
+ assertThat(resolutionInfo!!.rotationDegrees).isEqualTo(270)
}
@Test
@@ -263,7 +257,18 @@
)
cameraUseCaseAdapter.addUseCases(listOf<UseCase>(fakeUseCase))
val resolutionInfo = fakeUseCase.resolutionInfo
- Truth.assertThat(resolutionInfo!!.cropRect).isEqualTo(Rect(0, 60, 640, 420))
+ assertThat(resolutionInfo!!.cropRect).isEqualTo(Rect(0, 60, 640, 420))
+ }
+
+ private fun createFakeUseCase(
+ targetRotation: Int = Surface.ROTATION_0
+ ): FakeUseCase {
+ return FakeUseCase(
+ FakeUseCaseConfig.Builder()
+ .setTargetName("UseCase")
+ .setTargetRotation(targetRotation)
+ .useCaseConfig
+ )
}
private fun createCameraUseCaseAdapter(): CameraUseCaseAdapter {
@@ -286,24 +291,6 @@
)
}
- internal class TestUseCase(config: FakeUseCaseConfig?) : FakeUseCase(config!!) {
- fun activate() {
- notifyActive()
- }
-
- fun deactivate() {
- notifyInactive()
- }
-
- fun update() {
- notifyUpdated()
- }
-
- override fun onSuggestedStreamSpecUpdated(suggestedStreamSpec: StreamSpec): StreamSpec {
- return suggestedStreamSpec
- }
- }
-
companion object {
private val SURFACE_RESOLUTION: Size by lazy { Size(640, 480) }
private val TEST_STREAM_SPEC: StreamSpec by lazy {
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/impl/CamcorderProfileProxyTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/impl/CamcorderProfileProxyTest.kt
deleted file mode 100644
index ce31a22..0000000
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/impl/CamcorderProfileProxyTest.kt
+++ /dev/null
@@ -1,55 +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.camera.core.impl
-
-import android.media.CamcorderProfile
-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.Assume.assumeTrue
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-@Suppress("DEPRECATION")
-@SdkSuppress(minSdkVersion = 21)
-public class CamcorderProfileProxyTest {
-
- @Test
- public fun createInstance() {
- // QUALITY_HIGH is guaranteed to be supported.
- assumeTrue(CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH))
-
- val profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)
- val profileProxy = CamcorderProfileProxy.fromCamcorderProfile(profile)
-
- assertThat(profileProxy.duration).isEqualTo(profile.duration)
- assertThat(profileProxy.quality).isEqualTo(profile.quality)
- assertThat(profileProxy.fileFormat).isEqualTo(profile.fileFormat)
- assertThat(profileProxy.videoCodec).isEqualTo(profile.videoCodec)
- assertThat(profileProxy.videoBitRate).isEqualTo(profile.videoBitRate)
- assertThat(profileProxy.videoFrameRate).isEqualTo(profile.videoFrameRate)
- assertThat(profileProxy.videoFrameWidth).isEqualTo(profile.videoFrameWidth)
- assertThat(profileProxy.videoFrameHeight).isEqualTo(profile.videoFrameHeight)
- assertThat(profileProxy.audioCodec).isEqualTo(profile.audioCodec)
- assertThat(profileProxy.audioBitRate).isEqualTo(profile.audioBitRate)
- assertThat(profileProxy.audioSampleRate).isEqualTo(profile.audioSampleRate)
- assertThat(profileProxy.audioChannels).isEqualTo(profile.audioChannels)
- }
-}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
index e0c2bc1..b248db5 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
@@ -90,7 +90,10 @@
* @return A {@link ListenableFuture} which completes with {@link FocusMeteringAction} when
* auto focus is done and AF/AE/AWB regions are updated. In case AF points are not added,
* auto focus will not be triggered and this {@link ListenableFuture} completes when
- * AE/AWB regions are updated. Cancellation of this future is a no-op.
+ * AE/AWB regions are updated. It fails with {@link OperationCanceledException} if there is
+ * newer value being set or camera is closed. If none of the specified AF/AE/AWB
+ * {@link MeteringPoint} is supported, it fails with {@link IllegalArgumentException}.
+ * Cancellation of this future is a no-op.
*/
@NonNull
ListenableFuture<FocusMeteringResult> startFocusAndMetering(
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraEffect.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraEffect.java
index 58183ca..7416ee1 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraEffect.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraEffect.java
@@ -17,11 +17,15 @@
import static androidx.core.util.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
+
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
+import androidx.camera.core.processing.SurfaceProcessorInternal;
+import androidx.camera.core.processing.SurfaceProcessorWithExecutor;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -195,4 +199,21 @@
public ImageProcessor getImageProcessor() {
return mImageProcessor;
}
+
+ // --- Internal methods ---
+
+ /**
+ * Creates a {@link SurfaceProcessorInternal} instance.
+ *
+ * <p>Throws {@link IllegalArgumentException} if the effect does not contain a
+ * {@link SurfaceProcessor}.
+ *
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ @NonNull
+ public SurfaceProcessorInternal createSurfaceProcessorInternal() {
+ return new SurfaceProcessorWithExecutor(requireNonNull(getSurfaceProcessor()),
+ getExecutor());
+ }
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
index d5f8971..75bbe4f 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
@@ -340,9 +340,6 @@
@SuppressWarnings("WeakerAccess")
final Executor mSequentialIoExecutor;
- @Nullable
- private CameraEffect mCameraEffect;
-
/**
* Creates a new image capture use case from the given configuration.
*
@@ -1664,7 +1661,7 @@
Size resolution = streamSpec.getResolution();
checkState(mImagePipeline == null);
- mImagePipeline = new ImagePipeline(config, resolution, mCameraEffect);
+ mImagePipeline = new ImagePipeline(config, resolution, getEffect());
if (mTakePictureManager == null) {
// mTakePictureManager is reused when the Surface is reset.
@@ -1805,27 +1802,6 @@
return mImagePipeline != null && mTakePictureManager != null;
}
- /**
- * @hide
- */
- @MainThread
- @RestrictTo(Scope.LIBRARY_GROUP)
- public void setEffect(@Nullable CameraEffect cameraEffect) {
- checkMainThread();
- mCameraEffect = cameraEffect;
- }
-
- /**
- * @hide
- */
- @MainThread
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Nullable
- public CameraEffect getEffect() {
- checkMainThread();
- return mCameraEffect;
- }
-
@VisibleForTesting
@NonNull
TakePictureManager getTakePictureManager() {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
index c9de0b5..72331e6 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
@@ -82,12 +82,10 @@
import androidx.camera.core.impl.UseCaseConfig;
import androidx.camera.core.impl.UseCaseConfigFactory;
import androidx.camera.core.impl.utils.executor.CameraXExecutors;
-import androidx.camera.core.internal.CameraUseCaseAdapter;
import androidx.camera.core.internal.TargetConfig;
import androidx.camera.core.internal.ThreadConfig;
import androidx.camera.core.processing.Node;
import androidx.camera.core.processing.SurfaceEdge;
-import androidx.camera.core.processing.SurfaceProcessorInternal;
import androidx.camera.core.processing.SurfaceProcessorNode;
import androidx.core.util.Consumer;
import androidx.lifecycle.LifecycleOwner;
@@ -191,9 +189,6 @@
private Size mSurfaceSize;
@Nullable
- private SurfaceProcessorInternal mSurfaceProcessor;
-
- @Nullable
private SurfaceProcessorNode mNode;
/**
@@ -213,7 +208,7 @@
@NonNull StreamSpec streamSpec) {
// Build pipeline with node if processor is set. Eventually we will move all the code to
// createPipelineWithNode.
- if (mSurfaceProcessor != null) {
+ if (getEffect() != null) {
return createPipelineWithNode(cameraId, config, streamSpec);
}
@@ -251,14 +246,13 @@
@NonNull StreamSpec streamSpec) {
// Check arguments
checkMainThread();
- checkNotNull(mSurfaceProcessor);
- CameraInternal camera = getCamera();
- checkNotNull(camera);
+ CameraEffect effect = requireNonNull(getEffect());
+ CameraInternal camera = requireNonNull(getCamera());
clearPipeline();
// Create nodes and edges.
- mNode = new SurfaceProcessorNode(camera, mSurfaceProcessor);
+ mNode = new SurfaceProcessorNode(camera, effect.createSurfaceProcessorInternal());
// Make sure the previously created camera edge is cleared before creating a new one.
checkState(mCameraEdge == null);
mCameraEdge = new SurfaceEdge(
@@ -267,7 +261,7 @@
new Matrix(),
getHasCameraTransform(),
requireNonNull(getCropRect(streamSpec.getResolution())),
- getRelativeRotation(camera),
+ getRelativeRotation(camera, camera.isFrontFacing()),
shouldMirror());
mCameraEdge.addOnInvalidatedListener(this::notifyReset);
SurfaceProcessorNode.OutConfig outConfig = SurfaceProcessorNode.OutConfig.of(mCameraEdge);
@@ -311,31 +305,6 @@
}
/**
- * Sets a {@link SurfaceProcessorInternal}.
- *
- * <p>Internal API invoked by {@link CameraUseCaseAdapter}. {@link #createPipeline} uses the
- * value to setup post-processing pipeline.
- *
- * @hide
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- public void setProcessor(@Nullable SurfaceProcessorInternal surfaceProcessor) {
- mSurfaceProcessor = surfaceProcessor;
- }
-
- /**
- * Gets the {@link SurfaceProcessorInternal} for testing.
- *
- * @hide
- */
- @Nullable
- @VisibleForTesting
- @RestrictTo(Scope.LIBRARY_GROUP)
- public SurfaceProcessorInternal getProcessor() {
- return mSurfaceProcessor;
- }
-
- /**
* Creates previously allocated {@link DeferrableSurface} include those allocated by nodes.
*/
private void clearPipeline() {
@@ -427,11 +396,12 @@
if (mNode == null) {
surfaceRequest.updateTransformationInfo(SurfaceRequest.TransformationInfo.of(
cropRect,
- getRelativeRotation(cameraInternal),
+ getRelativeRotation(cameraInternal, cameraInternal.isFrontFacing()),
getAppTargetRotation(),
getHasCameraTransform()));
} else {
- mCameraEdge.setRotationDegrees(getRelativeRotation(cameraInternal));
+ mCameraEdge.setRotationDegrees(
+ getRelativeRotation(cameraInternal, cameraInternal.isFrontFacing()));
}
}
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/UseCase.java b/camera/camera-core/src/main/java/androidx/camera/core/UseCase.java
index e37d862..47c501d 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/UseCase.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/UseCase.java
@@ -16,6 +16,8 @@
package androidx.camera.core;
+import static androidx.camera.core.impl.utils.TransformUtils.within360;
+
import android.annotation.SuppressLint;
import android.graphics.Matrix;
import android.graphics.Rect;
@@ -145,6 +147,9 @@
@GuardedBy("mCameraLock")
private CameraInternal mCamera;
+ @Nullable
+ private CameraEffect mEffect;
+
////////////////////////////////////////////////////////////////////////////////////////////
// [UseCase attached dynamic] - Can change but is only available when the UseCase is attached.
////////////////////////////////////////////////////////////////////////////////////////////
@@ -342,15 +347,36 @@
}
/**
- * Gets the relative rotation degrees based on the target rotation.
+ * Gets the relative rotation degrees without mirroring.
*
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@IntRange(from = 0, to = 359)
protected int getRelativeRotation(@NonNull CameraInternal cameraInternal) {
- return cameraInternal.getCameraInfoInternal().getSensorRotationDegrees(
+ return getRelativeRotation(cameraInternal, /*requireMirroring=*/false);
+ }
+
+ /**
+ * Gets the relative rotation degrees given whether the output should be mirrored.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @IntRange(from = 0, to = 359)
+ protected int getRelativeRotation(@NonNull CameraInternal cameraInternal,
+ boolean requireMirroring) {
+ int rotation = cameraInternal.getCameraInfoInternal().getSensorRotationDegrees(
getTargetRotationInternal());
+ // Parent UseCase always mirror the stream if the child requires it. No camera transform
+ // means that the stream is copied by a parent, and if the child also requires mirroring,
+ // we know that the stream has been mirrored.
+ boolean inputStreamMirrored = !mHasCameraTransform && requireMirroring;
+ if (inputStreamMirrored) {
+ // Flip rotation if the stream has been mirrored.
+ rotation = within360(-rotation);
+ }
+ return rotation;
}
/**
@@ -768,6 +794,27 @@
}
/**
+ * Sets the {@link CameraEffect} associated with this use case.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public void setEffect(@Nullable CameraEffect effect) {
+ mEffect = effect;
+ }
+
+ /**
+ * Gets the {@link CameraEffect} associated with this use case.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ public CameraEffect getEffect() {
+ return mEffect;
+ }
+
+ /**
* Sets whether the producer writes camera transform to the {@link Surface}.
*
* @hide
@@ -789,8 +836,6 @@
return mHasCameraTransform;
}
-
-
/**
* Gets the view port crop rect.
*
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/CamcorderProfileProvider.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/CamcorderProfileProvider.java
deleted file mode 100644
index e8ed228..0000000
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/CamcorderProfileProvider.java
+++ /dev/null
@@ -1,60 +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.camera.core.impl;
-
-import android.media.CamcorderProfile;
-
-import androidx.annotation.Nullable;
-import androidx.annotation.RequiresApi;
-
-/**
- * CamcorderProfileProvider is used to obtain the {@link CamcorderProfileProxy}.
- */
-@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-public interface CamcorderProfileProvider {
-
- /**
- * Check if the quality is supported on this device.
- *
- * <p>The quality should be one of quality constants defined in {@link CamcorderProfile}.
- */
- boolean hasProfile(int quality);
-
- /**
- * Gets the {@link CamcorderProfileProxy} if the quality is supported on the device.
- *
- * <p>The quality should be one of quality constants defined in {@link CamcorderProfile}.
- *
- * @see #hasProfile(int)
- */
- @Nullable
- CamcorderProfileProxy get(int quality);
-
- /** An implementation that contains no data. */
- CamcorderProfileProvider EMPTY = new CamcorderProfileProvider() {
- @Override
- public boolean hasProfile(int quality) {
- return false;
- }
-
- @Nullable
- @Override
- public CamcorderProfileProxy get(int quality) {
- return null;
- }
- };
-}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/CamcorderProfileProxy.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/CamcorderProfileProxy.java
deleted file mode 100644
index 325c32f..0000000
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/CamcorderProfileProxy.java
+++ /dev/null
@@ -1,241 +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.camera.core.impl;
-
-import static android.media.MediaRecorder.AudioEncoder.AAC;
-import static android.media.MediaRecorder.AudioEncoder.AAC_ELD;
-import static android.media.MediaRecorder.AudioEncoder.AMR_NB;
-import static android.media.MediaRecorder.AudioEncoder.AMR_WB;
-import static android.media.MediaRecorder.AudioEncoder.HE_AAC;
-import static android.media.MediaRecorder.AudioEncoder.OPUS;
-import static android.media.MediaRecorder.AudioEncoder.VORBIS;
-import static android.media.MediaRecorder.VideoEncoder.H263;
-import static android.media.MediaRecorder.VideoEncoder.H264;
-import static android.media.MediaRecorder.VideoEncoder.HEVC;
-import static android.media.MediaRecorder.VideoEncoder.MPEG_4_SP;
-import static android.media.MediaRecorder.VideoEncoder.VP8;
-
-import android.media.CamcorderProfile;
-import android.media.MediaCodecInfo;
-import android.media.MediaFormat;
-import android.media.MediaRecorder;
-
-import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.RequiresApi;
-
-import com.google.auto.value.AutoValue;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * CamcorderProfileProxy defines the get methods that is mapping to the fields of
- * {@link CamcorderProfile}.
- */
-@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-@AutoValue
-public abstract class CamcorderProfileProxy {
-
- /** Constant representing no codec profile. */
- public static int CODEC_PROFILE_NONE = -1;
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({H263, H264, HEVC, VP8, MPEG_4_SP, MediaRecorder.VideoEncoder.DEFAULT})
- @interface VideoEncoder {
- }
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({AAC, AAC_ELD, AMR_NB, AMR_WB, HE_AAC, OPUS, VORBIS,
- MediaRecorder.AudioEncoder.DEFAULT})
- @interface AudioEncoder {
- }
-
- /** Creates a CamcorderProfileProxy instance. */
- @NonNull
- public static CamcorderProfileProxy create(int duration,
- int quality,
- int fileFormat,
- @VideoEncoder int videoCodec,
- int videoBitRate,
- int videoFrameRate,
- int videoFrameWidth,
- int videoFrameHeight,
- @AudioEncoder int audioCodec,
- int audioBitRate,
- int audioSampleRate,
- int audioChannels) {
- return new AutoValue_CamcorderProfileProxy(
- duration,
- quality,
- fileFormat,
- videoCodec,
- videoBitRate,
- videoFrameRate,
- videoFrameWidth,
- videoFrameHeight,
- audioCodec,
- audioBitRate,
- audioSampleRate,
- audioChannels
- );
- }
-
- /** Creates a CamcorderProfileProxy instance from {@link CamcorderProfile}. */
- @NonNull
- public static CamcorderProfileProxy fromCamcorderProfile(
- @NonNull CamcorderProfile camcorderProfile) {
- return new AutoValue_CamcorderProfileProxy(
- camcorderProfile.duration,
- camcorderProfile.quality,
- camcorderProfile.fileFormat,
- camcorderProfile.videoCodec,
- camcorderProfile.videoBitRate,
- camcorderProfile.videoFrameRate,
- camcorderProfile.videoFrameWidth,
- camcorderProfile.videoFrameHeight,
- camcorderProfile.audioCodec,
- camcorderProfile.audioBitRate,
- camcorderProfile.audioSampleRate,
- camcorderProfile.audioChannels
- );
- }
-
- /** @see CamcorderProfile#duration */
- public abstract int getDuration();
-
- /** @see CamcorderProfile#quality */
- public abstract int getQuality();
-
- /** @see CamcorderProfile#fileFormat */
- public abstract int getFileFormat();
-
- /** @see CamcorderProfile#videoCodec */
- @VideoEncoder
- public abstract int getVideoCodec();
-
- /** @see CamcorderProfile#videoBitRate */
- public abstract int getVideoBitRate();
-
- /** @see CamcorderProfile#videoFrameRate */
- public abstract int getVideoFrameRate();
-
- /** @see CamcorderProfile#videoFrameWidth */
- public abstract int getVideoFrameWidth();
-
- /** @see CamcorderProfile#videoFrameHeight */
- public abstract int getVideoFrameHeight();
-
- /** @see CamcorderProfile#audioCodec */
- @AudioEncoder
- public abstract int getAudioCodec();
-
- /** @see CamcorderProfile#audioBitRate */
- public abstract int getAudioBitRate();
-
- /** @see CamcorderProfile#audioSampleRate */
- public abstract int getAudioSampleRate();
-
- /** @see CamcorderProfile#audioChannels */
- public abstract int getAudioChannels();
-
- /**
- * Returns a mime-type string for the video codec type returned by {@link #getVideoCodec()}.
- *
- * @return A mime-type string or {@code null} if the codec type is
- * {@link android.media.MediaRecorder.VideoEncoder#DEFAULT}, as this type is under-defined
- * and cannot be resolved to a specific mime type without more information.
- */
- @Nullable
- public String getVideoCodecMimeType() {
- // Mime-type definitions taken from
- // frameworks/av/media/libstagefright/foundation/MediaDefs.cpp
- switch (getVideoCodec()) {
- case H263:
- return MediaFormat.MIMETYPE_VIDEO_H263;
- case H264:
- return MediaFormat.MIMETYPE_VIDEO_AVC;
- case HEVC:
- return MediaFormat.MIMETYPE_VIDEO_HEVC;
- case VP8:
- return MediaFormat.MIMETYPE_VIDEO_VP8;
- case MPEG_4_SP:
- return MediaFormat.MIMETYPE_VIDEO_MPEG4;
- case MediaRecorder.VideoEncoder.DEFAULT:
- break;
- }
-
- return null;
- }
-
- /**
- * Returns a mime-type string for the audio codec type returned by {@link #getAudioCodec()}.
- *
- * @return A mime-type string or {@code null} if the codec type is
- * {@link android.media.MediaRecorder.AudioEncoder#DEFAULT}, as this type is under-defined
- * and cannot be resolved to a specific mime type without more information.
- */
- @Nullable
- public String getAudioCodecMimeType() {
- // Mime-type definitions taken from
- // frameworks/av/media/libstagefright/foundation/MediaDefs.cpp
- switch (getAudioCodec()) {
- case AAC: // Should use aac-profile LC
- case HE_AAC: // Should use aac-profile HE
- case AAC_ELD: // Should use aac-profile ELD
- return MediaFormat.MIMETYPE_AUDIO_AAC;
- case AMR_NB:
- return MediaFormat.MIMETYPE_AUDIO_AMR_NB;
- case AMR_WB:
- return MediaFormat.MIMETYPE_AUDIO_AMR_WB;
- case OPUS:
- return MediaFormat.MIMETYPE_AUDIO_OPUS;
- case VORBIS:
- return MediaFormat.MIMETYPE_AUDIO_VORBIS;
- case MediaRecorder.AudioEncoder.DEFAULT:
- break;
- }
-
- return null;
- }
-
- /**
- * Returns the required audio profile for the audio encoder given by {@link #getAudioCodec()}.
- *
- * <p>For example, this can be used to differentiate between AAC encoders
- * {@link android.media.MediaRecorder.AudioEncoder#AAC},
- * {@link android.media.MediaRecorder.AudioEncoder#AAC_ELD},
- * and {@link android.media.MediaRecorder.AudioEncoder#HE_AAC}.
- * Should be used with the {@link MediaCodecInfo.CodecProfileLevel#profile} field.
- *
- * @return The profile required by the audio codec. If no profile is required, returns
- * {@link #CODEC_PROFILE_NONE}.
- */
- public int getRequiredAudioProfile() {
- switch (getAudioCodec()) {
- case AAC:
- return MediaCodecInfo.CodecProfileLevel.AACObjectLC;
- case AAC_ELD:
- return MediaCodecInfo.CodecProfileLevel.AACObjectELD;
- case HE_AAC:
- return MediaCodecInfo.CodecProfileLevel.AACObjectHE;
- default:
- return CODEC_PROFILE_NONE;
- }
- }
-}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraInfoInternal.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraInfoInternal.java
index 633c72c..1fb2f48 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraInfoInternal.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraInfoInternal.java
@@ -65,9 +65,9 @@
@NonNull
Quirks getCameraQuirks();
- /** Returns the {@link CamcorderProfileProvider} associated with this camera. */
+ /** Returns the {@link EncoderProfilesProvider} associated with this camera. */
@NonNull
- CamcorderProfileProvider getCamcorderProfileProvider();
+ EncoderProfilesProvider getEncoderProfilesProvider();
/** Returns the {@link Timebase} of frame output by this camera. */
@NonNull
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraInternal.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraInternal.java
index 25ebd61..71f1696fe 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraInternal.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/CameraInternal.java
@@ -22,6 +22,7 @@
import androidx.camera.core.Camera;
import androidx.camera.core.CameraControl;
import androidx.camera.core.CameraInfo;
+import androidx.camera.core.CameraSelector;
import androidx.camera.core.UseCase;
import com.google.common.util.concurrent.ListenableFuture;
@@ -131,6 +132,13 @@
}
/**
+ * Whether the camera is front facing.
+ */
+ default boolean isFrontFacing() {
+ return getCameraInfo().getLensFacing() == CameraSelector.LENS_FACING_FRONT;
+ }
+
+ /**
* Release the camera.
*
* <p>Once the camera is released it is permanently closed. A new instance must be created to
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/compat/EncoderProfilesProxyCompat.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/compat/EncoderProfilesProxyCompat.java
index cd50106..a214fe1 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/compat/EncoderProfilesProxyCompat.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/compat/EncoderProfilesProxyCompat.java
@@ -22,6 +22,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
+import androidx.camera.core.Logger;
import androidx.camera.core.impl.EncoderProfilesProxy;
/**
@@ -31,6 +32,8 @@
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
public final class EncoderProfilesProxyCompat {
+ private static final String TAG = "EncoderProfilesProxyCompat";
+
/** Creates an EncoderProfilesProxy instance from {@link EncoderProfiles}. */
@RequiresApi(31)
@NonNull
@@ -50,13 +53,11 @@
@NonNull
public static EncoderProfilesProxy from(@NonNull CamcorderProfile camcorderProfile) {
if (Build.VERSION.SDK_INT >= 31) {
- throw new RuntimeException(
- "Should not use from(CamcorderProfile) on API " + Build.VERSION.SDK_INT
- + ". CamcorderProfile is deprecated on API 31, use "
- + "from(EncoderProfiles) instead.");
- } else {
- return EncoderProfilesProxyCompatBaseImpl.from(camcorderProfile);
+ Logger.w(TAG, "Should use from(EncoderProfiles) on API " + Build.VERSION.SDK_INT
+ + "instead. CamcorderProfile is deprecated on API 31.");
}
+
+ return EncoderProfilesProxyCompatBaseImpl.from(camcorderProfile);
}
// Class should not be instantiated.
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java b/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java
index ee71415..924d3a4 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java
@@ -58,7 +58,6 @@
import androidx.camera.core.impl.UseCaseConfig;
import androidx.camera.core.impl.UseCaseConfigFactory;
import androidx.camera.core.impl.utils.executor.CameraXExecutors;
-import androidx.camera.core.processing.SurfaceProcessorWithExecutor;
import androidx.camera.core.streamsharing.StreamSharing;
import androidx.core.util.Preconditions;
@@ -90,7 +89,6 @@
private final UseCaseConfigFactory mUseCaseConfigFactory;
private static final String TAG = "CameraUseCaseAdapter";
- private boolean mStreamSharingEnabled = false;
private final CameraId mId;
@@ -279,7 +277,7 @@
// resolution. Throw exception here if (applyStreamSharing == false), both video
// and preview are used and preview resolution is lower than user configuration.
} catch (IllegalArgumentException exception) {
- if (!applyStreamSharing && mStreamSharingEnabled && hasNoExtension()) {
+ if (!applyStreamSharing && hasNoExtension()) {
// Try again and see if StreamSharing resolves the issue.
updateUseCases(appUseCases, /*applyStreamSharing*/true);
return;
@@ -546,18 +544,9 @@
// Set effects on the UseCases. This also removes existing effects if necessary.
for (UseCase useCase : useCases) {
if (useCase instanceof Preview) {
- Preview preview = ((Preview) useCase);
- CameraEffect effect = effectsByTargets.get(CameraEffect.PREVIEW);
- if (effect == null) {
- preview.setProcessor(null);
- continue;
- }
- preview.setProcessor(new SurfaceProcessorWithExecutor(
- requireNonNull(effect.getSurfaceProcessor()),
- effect.getExecutor()));
+ useCase.setEffect(effectsByTargets.get(CameraEffect.PREVIEW));
} else if (useCase instanceof ImageCapture) {
- ImageCapture imageCapture = ((ImageCapture) useCase);
- imageCapture.setEffect(effectsByTargets.get(CameraEffect.IMAGE_CAPTURE));
+ useCase.setEffect(effectsByTargets.get(CameraEffect.IMAGE_CAPTURE));
}
}
}
@@ -870,9 +859,4 @@
private ImageCapture createExtraImageCapture() {
return new ImageCapture.Builder().setTargetName("ImageCapture-Extra").build();
}
-
- @VisibleForTesting
- void setStreamSharingEnabled(boolean streamSharingEnabled) {
- mStreamSharingEnabled = streamSharingEnabled;
- }
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharing.java b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharing.java
index f6bc6c4..54f0b6a 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharing.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharing.java
@@ -180,7 +180,7 @@
getSensorToBufferTransformMatrix(),
getHasCameraTransform(),
requireNonNull(getCropRect(streamSpec.getResolution())),
- getRelativeRotation(camera),
+ /*rotationDegrees=*/0, // Rotation are handled by each child.
/*mirroring=*/false); // Mirroring will be decided by each child.
mNode = new SurfaceProcessorNode(camera, DefaultSurfaceProcessor.Factory.newInstance());
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/VirtualCamera.java b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/VirtualCamera.java
index a08de59..667b674 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/VirtualCamera.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/VirtualCamera.java
@@ -165,7 +165,7 @@
// stream without changing it. Later we will update it to allow
// cropping/down-sampling to better match children UseCase config.
int target = useCase instanceof Preview ? PREVIEW : VIDEO_CAPTURE;
- boolean mirroring = useCase instanceof Preview;
+ boolean mirroring = useCase instanceof Preview && isFrontFacing();
outConfigs.put(useCase, OutConfig.of(
target,
cameraEdge.getCropRect(),
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt
index 122860b..e1271ec 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt
@@ -39,7 +39,6 @@
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
import androidx.camera.core.internal.CameraUseCaseAdapter
import androidx.camera.core.internal.utils.SizeUtil
-import androidx.camera.core.processing.SurfaceProcessorInternal
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.CameraXUtil
import androidx.camera.testing.fakes.FakeAppConfig
@@ -47,6 +46,7 @@
import androidx.camera.testing.fakes.FakeCameraDeviceSurfaceManager
import androidx.camera.testing.fakes.FakeCameraFactory
import androidx.camera.testing.fakes.FakeCameraInfoInternal
+import androidx.camera.testing.fakes.FakeSurfaceEffect
import androidx.camera.testing.fakes.FakeSurfaceProcessorInternal
import androidx.camera.testing.fakes.FakeUseCase
import androidx.test.core.app.ApplicationProvider
@@ -75,7 +75,7 @@
)
class PreviewTest {
- var cameraUseCaseAdapter: CameraUseCaseAdapter? = null
+ private var cameraUseCaseAdapter: CameraUseCaseAdapter? = null
private lateinit var appSurface: Surface
private lateinit var appSurfaceTexture: SurfaceTexture
@@ -84,6 +84,8 @@
private lateinit var cameraXConfig: CameraXConfig
private lateinit var context: Context
private lateinit var previewToDetach: Preview
+ private lateinit var processor: FakeSurfaceProcessorInternal
+ private lateinit var effect: CameraEffect
@Before
@Throws(ExecutionException::class, InterruptedException::class)
@@ -109,6 +111,8 @@
).setCameraFactoryProvider(cameraFactoryProvider).build()
context = ApplicationProvider.getApplicationContext<Context>()
CameraXUtil.initialize(context, cameraXConfig).get()
+ processor = FakeSurfaceProcessorInternal(mainThreadExecutor())
+ effect = FakeSurfaceEffect(processor)
}
@After
@@ -123,6 +127,7 @@
if (::previewToDetach.isInitialized) {
previewToDetach.onUnbind()
}
+ processor.release()
CameraXUtil.shutdown().get()
}
@@ -233,11 +238,10 @@
@Test
fun createSurfaceRequestWithProcessor_noCameraTransform() {
// Arrange: attach Preview without a SurfaceProvider.
- val processor = FakeSurfaceProcessorInternal(mainThreadExecutor())
var transformationInfo: TransformationInfo? = null
// Act: create pipeline in Preview and provide Surface.
- val preview = createPreview(processor)
+ val preview = createPreview(effect)
preview.mCurrentSurfaceRequest!!.setTransformationInfoListener(mainThreadExecutor()) {
transformationInfo = it
}
@@ -265,31 +269,24 @@
@Test
fun backCameraWithProcessor_notMirrored() {
- // Arrange.
- val processor = FakeSurfaceProcessorInternal(mainThreadExecutor())
// Act: create pipeline
- val preview = createPreview(processor, backCamera)
+ val preview = createPreview(effect, backCamera)
// Assert
assertThat(preview.cameraEdge.mirroring).isFalse()
}
@Test
fun frontCameraWithProcessor_mirrored() {
- // Arrange.
- val processor = FakeSurfaceProcessorInternal(mainThreadExecutor())
// Act: create pipeline
- val preview = createPreview(processor, frontCamera)
+ val preview = createPreview(effect, frontCamera)
// Assert
assertThat(preview.cameraEdge.mirroring).isTrue()
}
@Test
fun setTargetRotationWithProcessor_rotationChangesOnSurfaceEdge() {
- // Arrange.
- val processor = FakeSurfaceProcessorInternal(mainThreadExecutor())
-
// Act: create pipeline
- val preview = createPreview(processor)
+ val preview = createPreview(effect)
// Act: update target rotation
preview.targetRotation = Surface.ROTATION_0
shadowOf(getMainLooper()).idle()
@@ -306,8 +303,7 @@
@Test
fun invalidateAppSurfaceRequestWithProcessing_cameraNotReset() {
// Arrange: create Preview with processing.
- val processor = FakeSurfaceProcessorInternal(mainThreadExecutor(), false)
- val surfaceRequest = createPreview(processor).mCurrentSurfaceRequest
+ val surfaceRequest = createPreview(effect).mCurrentSurfaceRequest
// Act: invalidate.
surfaceRequest!!.invalidate()
shadowOf(getMainLooper()).idle()
@@ -318,8 +314,7 @@
@Test
fun invalidateNodeSurfaceRequest_cameraReset() {
// Arrange: create Preview with processing.
- val processor = FakeSurfaceProcessorInternal(mainThreadExecutor(), false)
- val preview = createPreview(processor)
+ val preview = createPreview(effect)
// Act: invalidate.
processor.surfaceRequest!!.invalidate()
shadowOf(getMainLooper()).idle()
@@ -342,8 +337,7 @@
@Test
fun invalidateWhenDetached_deferrableSurfaceClosed() {
// Arrange: create Preview with processing then detach.
- val processor = FakeSurfaceProcessorInternal(mainThreadExecutor(), false)
- val preview = createPreview(processor)
+ val preview = createPreview(effect)
val surfaceRequest = processor.surfaceRequest!!
preview.unbindFromCamera(backCamera)
// Act: invalidate.
@@ -355,11 +349,38 @@
}
@Test
+ fun hasCameraTransform_rotationDegreesNotFlipped() {
+ // Act: create preview with hasCameraTransform == true
+ val preview = createPreview(
+ effect,
+ frontCamera,
+ targetRotation = Surface.ROTATION_90
+ )
+ assertThat(preview.cameraEdge.hasCameraTransform()).isTrue()
+ // Assert: rotationDegrees is not flipped.
+ assertThat(preview.cameraEdge.rotationDegrees).isEqualTo(90)
+ }
+
+ @Test
+ fun noCameraTransform_rotationDegreesFlipped() {
+ // Act: create preview with hasCameraTransform == false
+ val preview = createPreview(
+ effect,
+ frontCamera,
+ hasCameraTransform = false,
+ targetRotation = Surface.ROTATION_90
+ )
+ // Assert: rotationDegrees is flipped
+ assertThat(preview.cameraEdge.rotationDegrees).isEqualTo(270)
+ }
+
+ @Test
fun setNoCameraTransform_propagatesToCameraEdge() {
// Act: create preview with hasCameraTransform == false
val preview = createPreview(
- FakeSurfaceProcessorInternal(mainThreadExecutor()),
- hasCameraTransform = false
+ effect,
+ hasCameraTransform = false,
+ targetRotation = Surface.ROTATION_90
)
// Assert
assertThat(preview.cameraEdge.hasCameraTransform()).isFalse()
@@ -370,9 +391,10 @@
fun frontCameraWithoutCameraTransform_noMirroring() {
// Act: create preview with hasCameraTransform == false
val preview = createPreview(
- FakeSurfaceProcessorInternal(mainThreadExecutor()),
+ effect,
frontCamera,
- hasCameraTransform = false
+ hasCameraTransform = false,
+ targetRotation = Surface.ROTATION_90
)
// Assert
assertThat(preview.cameraEdge.mirroring).isFalse()
@@ -380,23 +402,13 @@
@Test
fun cameraEdgeHasTransformByDefault() {
- assertThat(
- createPreview(
- FakeSurfaceProcessorInternal(mainThreadExecutor())
- ).cameraEdge.hasCameraTransform()
- ).isTrue()
+ assertThat(createPreview(effect).cameraEdge.hasCameraTransform()).isTrue()
}
@Test
fun bindAndUnbindPreview_surfacesPropagated() {
- // Arrange.
- val processor = FakeSurfaceProcessorInternal(
- mainThreadExecutor(),
- false
- )
-
// Act: create pipeline in Preview and provide Surface.
- val preview = createPreview(processor)
+ val preview = createPreview(effect)
val surfaceRequest = preview.mCurrentSurfaceRequest!!
var appSurfaceReadyToRelease = false
surfaceRequest.provideSurface(appSurface, mainThreadExecutor()) {
@@ -422,21 +434,13 @@
assertThat(processor.isReleased).isTrue()
assertThat(processor.isOutputSurfaceRequestedToClose[PREVIEW]).isTrue()
assertThat(processor.isInputSurfaceReleased).isTrue()
- assertThat(appSurfaceReadyToRelease).isFalse()
-
- // Act: close SurfaceOutput
- processor.surfaceOutputs[CameraEffect.PREVIEW]!!.close()
- shadowOf(getMainLooper()).idle()
assertThat(appSurfaceReadyToRelease).isTrue()
}
@Test
fun invokedErrorListener_recreatePipeline() {
// Arrange: create pipeline and get a reference of the SessionConfig.
- val processor = FakeSurfaceProcessorInternal(
- mainThreadExecutor()
- )
- val preview = createPreview(processor)
+ val preview = createPreview(effect)
val originalSessionConfig = preview.sessionConfig
// Act: invoke the error listener.
@@ -638,15 +642,16 @@
}
private fun createPreview(
- surfaceProcessor: SurfaceProcessorInternal? = null,
+ effect: CameraEffect? = null,
camera: FakeCamera = backCamera,
- hasCameraTransform: Boolean = true
+ hasCameraTransform: Boolean = true,
+ targetRotation: Int = Surface.ROTATION_0
): Preview {
previewToDetach = Preview.Builder()
- .setTargetRotation(Surface.ROTATION_0)
+ .setTargetRotation(targetRotation)
.build()
previewToDetach.hasCameraTransform = hasCameraTransform
- previewToDetach.processor = surfaceProcessor
+ previewToDetach.effect = effect
previewToDetach.setSurfaceProvider(CameraXExecutors.directExecutor()) {}
val previewConfig = PreviewConfig(
cameraXConfig.getUseCaseConfigFactoryProvider(null)!!.newInstance(context).getConfig(
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/UseCaseGroupTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/UseCaseGroupTest.kt
index 035cbfa0..7d877d1 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/UseCaseGroupTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/UseCaseGroupTest.kt
@@ -22,7 +22,7 @@
import androidx.camera.core.CameraEffect.VIDEO_CAPTURE
import androidx.camera.core.UseCaseGroup.Builder.getHumanReadableTargets
import androidx.camera.core.impl.utils.executor.CameraXExecutors
-import androidx.camera.testing.fakes.FakePreviewEffect
+import androidx.camera.testing.fakes.FakeSurfaceEffect
import androidx.camera.testing.fakes.FakeSurfaceProcessor
import androidx.camera.testing.fakes.FakeUseCase
import com.google.common.truth.Truth.assertThat
@@ -43,7 +43,7 @@
@Test
fun duplicateTargets_throwsException() {
// Arrange.
- val previewEffect = FakePreviewEffect(
+ val previewEffect = FakeSurfaceEffect(
CameraXExecutors.mainThreadExecutor(),
FakeSurfaceProcessor(CameraXExecutors.mainThreadExecutor())
)
@@ -61,8 +61,8 @@
// Assert.
assertThat(message).isEqualTo(
- "Effects androidx.camera.testing.fakes.FakePreviewEffect " +
- "and androidx.camera.testing.fakes.FakePreviewEffect " +
+ "Effects androidx.camera.testing.fakes.FakeSurfaceEffect " +
+ "and androidx.camera.testing.fakes.FakeSurfaceEffect " +
"contain duplicate targets PREVIEW."
)
}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/impl/CameraInternalTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/impl/CameraInternalTest.kt
new file mode 100644
index 0000000..eb693ac
--- /dev/null
+++ b/camera/camera-core/src/test/java/androidx/camera/core/impl/CameraInternalTest.kt
@@ -0,0 +1,49 @@
+/*
+ * 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.core.impl
+
+import android.os.Build
+import androidx.camera.core.CameraSelector
+import androidx.camera.testing.fakes.FakeCamera
+import androidx.camera.testing.fakes.FakeCameraInfoInternal
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.internal.DoNotInstrument
+import com.google.common.truth.Truth.assertThat
+
+/**
+ * Unit tests for [CameraInternal].
+ */
+@RunWith(RobolectricTestRunner::class)
+@DoNotInstrument
+@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
+class CameraInternalTest {
+
+ @Test
+ fun frontCamera_isFacingFront() {
+ val camera = FakeCamera(null, FakeCameraInfoInternal(0, CameraSelector.LENS_FACING_FRONT))
+ assertThat(camera.isFrontFacing).isTrue()
+ }
+
+ @Test
+ fun backCamera_isFacingBack() {
+ val camera = FakeCamera(null, FakeCameraInfoInternal(0, CameraSelector.LENS_FACING_BACK))
+ assertThat(camera.isFrontFacing).isFalse()
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
index d8c9c75..b8e92f5 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
@@ -41,11 +41,10 @@
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
import androidx.camera.core.internal.CameraUseCaseAdapter.CameraException
import androidx.camera.core.processing.DefaultSurfaceProcessor
-import androidx.camera.core.processing.SurfaceProcessorWithExecutor
import androidx.camera.core.streamsharing.StreamSharing
import androidx.camera.testing.fakes.FakeCamera
import androidx.camera.testing.fakes.FakeCameraDeviceSurfaceManager
-import androidx.camera.testing.fakes.FakePreviewEffect
+import androidx.camera.testing.fakes.FakeSurfaceEffect
import androidx.camera.testing.fakes.FakeSurfaceProcessor
import androidx.camera.testing.fakes.FakeSurfaceProcessorInternal
import androidx.camera.testing.fakes.FakeUseCase
@@ -88,6 +87,7 @@
private lateinit var fakeCameraDeviceSurfaceManager: FakeCameraDeviceSurfaceManager
private lateinit var fakeCamera: FakeCamera
private lateinit var useCaseConfigFactory: UseCaseConfigFactory
+ private lateinit var previewEffect: FakeSurfaceEffect
private val fakeCameraSet = LinkedHashSet<CameraInternal>()
private val imageEffect = GrayscaleImageEffect()
private val preview = Preview.Builder().build()
@@ -104,7 +104,11 @@
fakeCameraSet.add(fakeCamera)
surfaceProcessor = FakeSurfaceProcessor(mainThreadExecutor())
executor = Executors.newSingleThreadExecutor()
- effects = listOf(FakePreviewEffect(executor, surfaceProcessor), imageEffect)
+ previewEffect = FakeSurfaceEffect(
+ executor,
+ surfaceProcessor
+ )
+ effects = listOf(previewEffect, imageEffect)
adapter = CameraUseCaseAdapter(
fakeCameraSet,
fakeCameraDeviceSurfaceManager,
@@ -122,7 +126,6 @@
@Test
fun attachAndDetachUseCases_cameraUseCasesAttachedAndDetached() {
// Arrange: bind UseCases that requires sharing.
- adapter.setStreamSharingEnabled(true)
adapter.addUseCases(setOf(preview, video, image))
val streamSharing =
adapter.cameraUseCases.filterIsInstance(StreamSharing::class.java).single()
@@ -138,8 +141,6 @@
@Test(expected = CameraException::class)
fun addStreamSharing_throwsException() {
- // Arrange.
- adapter.setStreamSharingEnabled(true)
val streamSharing = StreamSharing(fakeCamera, setOf(preview, video), useCaseConfigFactory)
// Act: add use cases that can only be supported with StreamSharing
adapter.addUseCases(setOf(streamSharing, video, image))
@@ -147,8 +148,6 @@
@Test
fun invalidUseCaseCombo_streamSharingOn() {
- // Arrange.
- adapter.setStreamSharingEnabled(true)
// Act: add use cases that can only be supported with StreamSharing
adapter.addUseCases(setOf(preview, video, image))
// Assert: StreamSharing is connected to camera.
@@ -168,8 +167,6 @@
@Test
fun validUseCaseCombo_streamSharingOff() {
- // Arrange.
- adapter.setStreamSharingEnabled(true)
// Act: add use cases that do not need StreamSharing
adapter.addUseCases(setOf(preview, video))
// Assert: the app UseCase are connected to camera.
@@ -184,7 +181,6 @@
@Test(expected = CameraException::class)
fun invalidUseCaseComboCantBeFixedByStreamSharing_throwsException() {
// Arrange: create a camera that only support one JPEG stream.
- adapter.setStreamSharingEnabled(true)
fakeCameraDeviceSurfaceManager.setValidSurfaceCombos(setOf(listOf(JPEG)))
// Act: add PRIV and JPEG streams.
adapter.addUseCases(setOf(preview, image))
@@ -192,8 +188,6 @@
@Test
fun addChildThatRequiresStreamSharing_streamSharingOn() {
- // Arrange.
- adapter.setStreamSharingEnabled(true)
// Act: add UseCase that do not need StreamSharing
adapter.addUseCases(setOf(video, image))
// Assert.
@@ -223,8 +217,6 @@
@Test
fun removeChildThatRequiresStreamSharing_streamSharingOff() {
- // Arrange.
- adapter.setStreamSharingEnabled(true)
// Act: add UseCases that need StreamSharing.
adapter.addUseCases(setOf(preview, video, image))
// Assert: StreamSharing exists and bound.
@@ -257,15 +249,12 @@
fun extensionEnabled_streamSharingOffAndThrowsException() {
// Arrange: enable extensions
adapter.setExtendedConfig(createCoexistingRequiredRuleCameraConfig())
- adapter.setStreamSharingEnabled(true)
// Act: add UseCases that require StreamSharing
adapter.addUseCases(setOf(preview, video, image))
}
@Test
fun addAdditionalUseCase_streamSharingReused() {
- // Arrange.
- adapter.setStreamSharingEnabled(true)
// Act: add UseCases that require StreamSharing
adapter.addUseCases(setOf(preview, video, image))
// Assert: StreamSharing is used.
@@ -839,17 +828,14 @@
// Act: update use cases with effects.
CameraUseCaseAdapter.updateEffects(effects, useCases)
- // Assert: preview has processor wrapped with the right executor.
- val previewProcessor = preview.processor as SurfaceProcessorWithExecutor
- assertThat(previewProcessor.processor).isEqualTo(surfaceProcessor)
- assertThat(previewProcessor.executor).isEqualTo(executor)
- // Assert: imageCapture has the effect set.
+ // Assert: UseCase have effects
+ assertThat(preview.effect).isEqualTo(previewEffect)
assertThat(imageCapture.effect).isEqualTo(imageEffect)
// Act: update again with no effects.
CameraUseCaseAdapter.updateEffects(listOf(), useCases)
// Assert: use cases no longer has effects.
- assertThat(preview.processor).isNull()
+ assertThat(preview.effect).isNull()
assertThat(imageCapture.effect).isNull()
}
diff --git a/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt b/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
index 8cb0c37..0c38d7a 100644
--- a/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
+++ b/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
@@ -30,14 +30,13 @@
import androidx.camera.core.concurrent.SingleCameraConfig
import androidx.camera.core.impl.CameraFactory
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
-import androidx.camera.core.processing.SurfaceProcessorWithExecutor
import androidx.camera.testing.fakes.FakeAppConfig
import androidx.camera.testing.fakes.FakeCamera
import androidx.camera.testing.fakes.FakeCameraDeviceSurfaceManager
import androidx.camera.testing.fakes.FakeCameraFactory
import androidx.camera.testing.fakes.FakeCameraInfoInternal
import androidx.camera.testing.fakes.FakeLifecycleOwner
-import androidx.camera.testing.fakes.FakePreviewEffect
+import androidx.camera.testing.fakes.FakeSurfaceEffect
import androidx.camera.testing.fakes.FakeSurfaceProcessor
import androidx.camera.testing.fakes.FakeUseCaseConfigFactory
import androidx.concurrent.futures.await
@@ -81,7 +80,10 @@
// Arrange.
ProcessCameraProvider.configureInstance(FakeAppConfig.create())
val surfaceProcessor = FakeSurfaceProcessor(mainThreadExecutor())
- val effect = FakePreviewEffect(mainThreadExecutor(), surfaceProcessor)
+ val effect = FakeSurfaceEffect(
+ mainThreadExecutor(),
+ surfaceProcessor
+ )
val preview = Preview.Builder().setSessionOptionUnpacker { _, _ -> }.build()
val useCaseGroup = UseCaseGroup.Builder().addUseCase(preview).addEffect(effect).build()
@@ -94,8 +96,7 @@
)
// Assert.
- val useCaseProcessor = (preview.processor as SurfaceProcessorWithExecutor).processor
- assertThat(useCaseProcessor).isEqualTo(surfaceProcessor)
+ assertThat(preview.effect).isEqualTo(effect)
}
}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/CamcorderProfileUtil.java b/camera/camera-testing/src/main/java/androidx/camera/testing/CamcorderProfileUtil.java
deleted file mode 100644
index 923a59b..0000000
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/CamcorderProfileUtil.java
+++ /dev/null
@@ -1,204 +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.camera.testing;
-
-import android.media.CamcorderProfile;
-import android.media.MediaRecorder;
-import android.util.Size;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.RequiresApi;
-import androidx.camera.core.impl.CamcorderProfileProxy;
-
-/**
- * Utility methods for testing {@link CamcorderProfile} related classes, including predefined
- * resolutions, attributes and {@link CamcorderProfileProxy}, which can be used directly on the
- * unit tests.
- */
-@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-public final class CamcorderProfileUtil {
-
- private CamcorderProfileUtil() {
- }
-
- /** Resolution for QCIF. */
- public static final Size RESOLUTION_QCIF = new Size(176, 144);
- /** Resolution for QVGA. */
- public static final Size RESOLUTION_QVGA = new Size(320, 240);
- /** Resolution for CIF. */
- public static final Size RESOLUTION_CIF = new Size(352, 288);
- /** Resolution for VGA. */
- public static final Size RESOLUTION_VGA = new Size(640, 480);
- /** Resolution for 480P. */
- public static final Size RESOLUTION_480P = new Size(720, 480); /* 640, 704 or 720 x 480 */
- /** Resolution for 720P. */
- public static final Size RESOLUTION_720P = new Size(1280, 720);
- /** Resolution for 1080P. */
- public static final Size RESOLUTION_1080P = new Size(1920, 1080); /* 1920 x 1080 or 1088 */
- /** Resolution for 2K. */
- public static final Size RESOLUTION_2K = new Size(2048, 1080);
- /** Resolution for QHD. */
- public static final Size RESOLUTION_QHD = new Size(2560, 1440);
- /** Resolution for 2160P. */
- public static final Size RESOLUTION_2160P = new Size(3840, 2160);
- /** Resolution for 4KDCI. */
- public static final Size RESOLUTION_4KDCI = new Size(4096, 2160);
-
- /** Default duration. */
- public static final int DEFAULT_DURATION = 30;
- /** Default output format. */
- public static final int DEFAULT_OUTPUT_FORMAT = MediaRecorder.OutputFormat.MPEG_4;
- /** Default video codec. */
- public static final int DEFAULT_VIDEO_CODEC = MediaRecorder.VideoEncoder.H264;
- /** Default video bitrate. */
- public static final int DEFAULT_VIDEO_BITRATE = 8 * 1024 * 1024;
- /** Default video frame rate. */
- public static final int DEFAULT_VIDEO_FRAME_RATE = 30;
- /** Default audio codec. */
- public static final int DEFAULT_AUDIO_CODEC = MediaRecorder.AudioEncoder.AAC;
- /** Default audio bitrate. */
- public static final int DEFAULT_AUDIO_BITRATE = 192_000;
- /** Default audio sample rate. */
- public static final int DEFAULT_AUDIO_SAMPLE_RATE = 48_000;
- /** Default channel count. */
- public static final int DEFAULT_AUDIO_CHANNELS = 1;
-
- public static final CamcorderProfileProxy PROFILE_QCIF = createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_QCIF,
- RESOLUTION_QCIF.getWidth(),
- RESOLUTION_QCIF.getHeight()
- );
-
- public static final CamcorderProfileProxy PROFILE_QVGA = createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_QVGA,
- RESOLUTION_QVGA.getWidth(),
- RESOLUTION_QVGA.getHeight()
- );
-
- public static final CamcorderProfileProxy PROFILE_CIF = createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_CIF,
- RESOLUTION_CIF.getWidth(),
- RESOLUTION_CIF.getHeight()
- );
-
- public static final CamcorderProfileProxy PROFILE_VGA = createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_VGA,
- RESOLUTION_VGA.getWidth(),
- RESOLUTION_VGA.getHeight()
- );
-
- public static final CamcorderProfileProxy PROFILE_480P = createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_480P,
- RESOLUTION_480P.getWidth(),
- RESOLUTION_480P.getHeight()
- );
-
- public static final CamcorderProfileProxy PROFILE_720P = createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_720P,
- RESOLUTION_720P.getWidth(),
- RESOLUTION_720P.getHeight()
- );
-
- public static final CamcorderProfileProxy PROFILE_1080P = createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_1080P,
- RESOLUTION_1080P.getWidth(),
- RESOLUTION_1080P.getHeight()
- );
-
- public static final CamcorderProfileProxy PROFILE_2K = createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_2K,
- RESOLUTION_2K.getWidth(),
- RESOLUTION_2K.getHeight()
- );
-
- public static final CamcorderProfileProxy PROFILE_QHD = createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_QHD,
- RESOLUTION_QHD.getWidth(),
- RESOLUTION_QHD.getHeight()
- );
-
- public static final CamcorderProfileProxy PROFILE_2160P = createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_2160P,
- RESOLUTION_2160P.getWidth(),
- RESOLUTION_2160P.getHeight()
- );
-
- public static final CamcorderProfileProxy PROFILE_4KDCI = createCamcorderProfileProxy(
- CamcorderProfile.QUALITY_4KDCI,
- RESOLUTION_4KDCI.getWidth(),
- RESOLUTION_4KDCI.getHeight()
- );
-
- /** A utility method to create a CamcorderProfileProxy with some default values. */
- @NonNull
- public static CamcorderProfileProxy createCamcorderProfileProxy(
- int quality,
- int videoFrameWidth,
- int videoFrameHeight
- ) {
- return CamcorderProfileProxy.create(
- DEFAULT_DURATION,
- quality,
- DEFAULT_OUTPUT_FORMAT,
- DEFAULT_VIDEO_CODEC,
- DEFAULT_VIDEO_BITRATE,
- DEFAULT_VIDEO_FRAME_RATE,
- videoFrameWidth,
- videoFrameHeight,
- DEFAULT_AUDIO_CODEC,
- DEFAULT_AUDIO_BITRATE,
- DEFAULT_AUDIO_SAMPLE_RATE,
- DEFAULT_AUDIO_CHANNELS
- );
- }
-
- /**
- * Copies a CamcorderProfileProxy and sets the quality to
- * {@link CamcorderProfile#QUALITY_HIGH}.
- */
- @NonNull
- public static CamcorderProfileProxy asHighQuality(@NonNull CamcorderProfileProxy profile) {
- return asQuality(profile, CamcorderProfile.QUALITY_HIGH);
- }
-
- /**
- * Copies a CamcorderProfileProxy and sets the quality to
- * {@link CamcorderProfile#QUALITY_LOW}.
- */
- @NonNull
- public static CamcorderProfileProxy asLowQuality(@NonNull CamcorderProfileProxy profile) {
- return asQuality(profile, CamcorderProfile.QUALITY_LOW);
- }
-
- private static CamcorderProfileProxy asQuality(@NonNull CamcorderProfileProxy profile,
- int quality) {
- return CamcorderProfileProxy.create(
- profile.getDuration(),
- quality,
- profile.getFileFormat(),
- profile.getVideoCodec(),
- profile.getVideoBitRate(),
- profile.getVideoFrameRate(),
- profile.getVideoFrameWidth(),
- profile.getVideoFrameHeight(),
- profile.getAudioCodec(),
- profile.getAudioBitRate(),
- profile.getAudioSampleRate(),
- profile.getAudioChannels()
- );
- }
-}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCamcorderProfileProvider.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCamcorderProfileProvider.java
deleted file mode 100644
index f59107f..0000000
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCamcorderProfileProvider.java
+++ /dev/null
@@ -1,81 +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.camera.testing.fakes;
-
-import android.media.CameraProfile;
-import android.util.SparseArray;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.RequiresApi;
-import androidx.camera.core.impl.CamcorderProfileProvider;
-import androidx.camera.core.impl.CamcorderProfileProxy;
-
-/**
- * A fake implementation of the {@link CamcorderProfileProvider} and used for test.
- */
-@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-public class FakeCamcorderProfileProvider implements CamcorderProfileProvider {
-
- private final SparseArray<CamcorderProfileProxy> mQualityToProfileMap;
-
- FakeCamcorderProfileProvider(@NonNull SparseArray<CamcorderProfileProxy> qualityToProfileMap) {
- mQualityToProfileMap = qualityToProfileMap;
- }
-
- /** {@inheritDoc} */
- @Override
- @Nullable
- public CamcorderProfileProxy get(int quality) {
- return mQualityToProfileMap.get(quality);
- }
-
- /** {@inheritDoc} */
- @Override
- public boolean hasProfile(int quality) {
- return mQualityToProfileMap.get(quality) != null;
- }
-
- /**
- * The builder to create a FakeCamcorderProfileProvider instance.
- */
- @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
- public static class Builder {
- private final SparseArray<CamcorderProfileProxy> mQualityToProfileMap = new SparseArray<>();
-
- /**
- * Sets the camera id and corresponding profiles.
- *
- * <p>In normal case, the {@link CameraProfile#QUALITY_HIGH} and
- * {@link CameraProfile#QUALITY_LOW} should be added in order to follow the contract of
- * CamcorderProfile.
- */
- @NonNull
- public Builder addProfile(@NonNull CamcorderProfileProxy ...camcorderProfiles) {
- for (CamcorderProfileProxy camcorderProfile : camcorderProfiles) {
- mQualityToProfileMap.put(camcorderProfile.getQuality(), camcorderProfile);
- }
- return this;
- }
-
- /** Builds the FakeCamcorderProfileProvider instance. */
- @NonNull
- public FakeCamcorderProfileProvider build() {
- return new FakeCamcorderProfileProvider(mQualityToProfileMap.clone());
- }
- }
-}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java
index d15ce7a..77cfb2b 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java
@@ -30,9 +30,9 @@
import androidx.camera.core.FocusMeteringAction;
import androidx.camera.core.TorchState;
import androidx.camera.core.ZoomState;
-import androidx.camera.core.impl.CamcorderProfileProvider;
import androidx.camera.core.impl.CameraCaptureCallback;
import androidx.camera.core.impl.CameraInfoInternal;
+import androidx.camera.core.impl.EncoderProfilesProvider;
import androidx.camera.core.impl.ImageOutputConfig.RotationValue;
import androidx.camera.core.impl.Quirk;
import androidx.camera.core.impl.Quirks;
@@ -70,7 +70,7 @@
// Leave uninitialized to support camera-core:1.0.0 dependencies.
// Can be initialized during class init once there are no more pinned dependencies on
// camera-core:1.0.0
- private CamcorderProfileProvider mCamcorderProfileProvider;
+ private EncoderProfilesProvider mEncoderProfilesProvider;
private boolean mIsPrivateReprocessingSupported = false;
private float mIntrinsicZoomRatio = 1.0F;
@@ -173,9 +173,9 @@
@NonNull
@Override
- public CamcorderProfileProvider getCamcorderProfileProvider() {
- return mCamcorderProfileProvider == null ? CamcorderProfileProvider.EMPTY :
- mCamcorderProfileProvider;
+ public EncoderProfilesProvider getEncoderProfilesProvider() {
+ return mEncoderProfilesProvider == null ? EncoderProfilesProvider.EMPTY :
+ mEncoderProfilesProvider;
}
@NonNull
@@ -242,10 +242,10 @@
mImplementationType = implementationType;
}
- /** Set the CamcorderProfileProvider for testing */
- public void setCamcorderProfileProvider(
- @NonNull CamcorderProfileProvider camcorderProfileProvider) {
- mCamcorderProfileProvider = Preconditions.checkNotNull(camcorderProfileProvider);
+ /** Set the EncoderProfilesProvider for testing */
+ public void setEncoderProfilesProvider(
+ @NonNull EncoderProfilesProvider encoderProfilesProvider) {
+ mEncoderProfilesProvider = Preconditions.checkNotNull(encoderProfilesProvider);
}
/** Set the timebase for testing */
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakePreviewEffect.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakePreviewEffect.java
deleted file mode 100644
index e1a6ea9..0000000
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakePreviewEffect.java
+++ /dev/null
@@ -1,38 +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.
- */
-
-package androidx.camera.testing.fakes;
-
-import android.os.Build;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.RequiresApi;
-import androidx.camera.core.CameraEffect;
-import androidx.camera.core.SurfaceProcessor;
-
-import java.util.concurrent.Executor;
-
-/**
- * A fake {@link CameraEffect} with {@link SurfaceProcessor}.
- */
-@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
-public class FakePreviewEffect extends CameraEffect {
- public FakePreviewEffect(
- @NonNull Executor processorExecutor,
- @NonNull SurfaceProcessor surfaceProcessor) {
- super(PREVIEW, processorExecutor, surfaceProcessor);
- }
-}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffect.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffect.java
new file mode 100644
index 0000000..b792c7a
--- /dev/null
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffect.java
@@ -0,0 +1,66 @@
+/*
+ * 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.camera.testing.fakes;
+
+import static androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor;
+
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.CameraEffect;
+import androidx.camera.core.SurfaceProcessor;
+import androidx.camera.core.processing.SurfaceProcessorInternal;
+
+import java.util.concurrent.Executor;
+
+/**
+ * A fake {@link CameraEffect} with {@link SurfaceProcessor}.
+ */
+@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+public class FakeSurfaceEffect extends CameraEffect {
+
+ private SurfaceProcessorInternal mSurfaceProcessorInternal;
+
+ public FakeSurfaceEffect(
+ @NonNull Executor processorExecutor,
+ @NonNull SurfaceProcessor surfaceProcessor) {
+ super(PREVIEW, processorExecutor, surfaceProcessor);
+ }
+
+ /**
+ * Create a fake {@link CameraEffect} the {@link #createSurfaceProcessorInternal} value
+ * overridden.
+ *
+ * <p> This is helpful when we want to make sure the {@link SurfaceProcessorInternal} is
+ * released properly.
+ */
+ public FakeSurfaceEffect(@NonNull SurfaceProcessorInternal surfaceProcessorInternal) {
+ super(PREVIEW, mainThreadExecutor(), surfaceProcessorInternal);
+ mSurfaceProcessorInternal = surfaceProcessorInternal;
+ }
+
+ @NonNull
+ @Override
+ public SurfaceProcessorInternal createSurfaceProcessorInternal() {
+ if (mSurfaceProcessorInternal != null) {
+ return mSurfaceProcessorInternal;
+ } else {
+ return super.createSurfaceProcessorInternal();
+ }
+ }
+}
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/AudioChecker.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/AudioChecker.kt
index dbd3371..4a6f310 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/AudioChecker.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/AudioChecker.kt
@@ -24,7 +24,7 @@
import androidx.camera.testing.CameraUtil
import androidx.camera.video.internal.AudioSource
import androidx.camera.video.internal.FakeBufferProvider
-import androidx.camera.video.internal.config.AudioSourceSettingsCamcorderProfileResolver
+import androidx.camera.video.internal.config.AudioSourceSettingsAudioProfileResolver
import androidx.camera.video.internal.encoder.FakeInputBuffer
import androidx.concurrent.futures.await
import kotlinx.coroutines.CompletableDeferred
@@ -56,16 +56,16 @@
cameraSelector: CameraSelector,
qualitySelector: QualitySelector
) = runBlocking {
- // Get audio source settings from CamcorderProfile
+ // Get audio source settings from EncoderProfiles
val cameraInfo =
CameraUtil.createCameraUseCaseAdapter(context, cameraSelector).cameraInfo
val videoCapabilities = VideoCapabilities.from(cameraInfo)
val quality = qualitySelector.getPrioritizedQualities(cameraInfo).first()
// Get a config using the default audio spec.
val audioSourceSettings =
- AudioSourceSettingsCamcorderProfileResolver(
+ AudioSourceSettingsAudioProfileResolver(
AudioSpec.builder().build(),
- videoCapabilities.getProfile(quality)!!
+ videoCapabilities.getProfiles(quality)!!.defaultAudioProfile!!
).get()
val audioSource = AudioSource(audioSourceSettings, CameraXExecutors.ioExecutor(), null)
try {
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/DeviceCompatibilityTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/DeviceCompatibilityTest.kt
index 7892f10..1261cd5 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/DeviceCompatibilityTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/DeviceCompatibilityTest.kt
@@ -25,10 +25,11 @@
import androidx.camera.core.CameraSelector.DEFAULT_BACK_CAMERA
import androidx.camera.core.CameraSelector.DEFAULT_FRONT_CAMERA
import androidx.camera.core.CameraXConfig
-import androidx.camera.core.impl.CamcorderProfileProxy
+import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy
import androidx.camera.testing.CameraPipeConfigTestRule
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.CameraXUtil
+import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy
import androidx.camera.video.internal.compat.quirk.DeviceQuirks
import androidx.camera.video.internal.compat.quirk.MediaCodecInfoReportIncorrectInfoQuirk
import androidx.test.core.app.ApplicationProvider
@@ -86,11 +87,11 @@
}
@Test
- fun mediaCodecInfoShouldSupportCamcorderProfileSizes() {
+ fun mediaCodecInfoShouldSupportEncoderProfilesSizes() {
assumeTrue(DeviceQuirks.get(MediaCodecInfoReportIncorrectInfoQuirk::class.java) == null)
// Arrange: Collect all supported profiles from default back/front camera.
- val supportedProfiles = mutableListOf<CamcorderProfileProxy>()
+ val supportedProfiles = mutableListOf<VideoValidatedEncoderProfilesProxy>()
supportedProfiles.addAll(getSupportedProfiles(DEFAULT_BACK_CAMERA))
supportedProfiles.addAll(getSupportedProfiles(DEFAULT_FRONT_CAMERA))
assumeTrue(supportedProfiles.isNotEmpty())
@@ -99,7 +100,11 @@
// Arrange: Find the codec and its video capabilities.
// If mime is null, skip the test instead of failing it since this isn't the purpose
// of the test.
- val mime = profile.videoCodecMimeType ?: return@forEach
+ val videoProfile = profile.defaultVideoProfile
+ val mime = videoProfile.mediaType
+ if (mime == VideoProfileProxy.MEDIA_TYPE_NONE) {
+ return@forEach
+ }
val capabilities = MediaCodec.createEncoderByType(mime).let { codec ->
try {
codec.codecInfo.getCapabilitiesForType(mime).videoCapabilities
@@ -109,7 +114,7 @@
}
// Act.
- val (width, height) = profile.videoFrameWidth to profile.videoFrameHeight
+ val (width, height) = videoProfile.width to videoProfile.height
val supportedWidths = capabilities.supportedWidths
val supportedHeights = capabilities.supportedHeights
val supportedWidthsForHeight = capabilities.getWidthsForHeightQuietly(height)
@@ -128,14 +133,16 @@
}
}
- private fun getSupportedProfiles(cameraSelector: CameraSelector): List<CamcorderProfileProxy> {
+ private fun getSupportedProfiles(
+ cameraSelector: CameraSelector
+ ): List<VideoValidatedEncoderProfilesProxy> {
if (!CameraUtil.hasCameraWithLensFacing(cameraSelector.lensFacing!!)) {
return emptyList()
}
val cameraInfo = CameraUtil.createCameraUseCaseAdapter(context, cameraSelector).cameraInfo
val videoCapabilities = VideoCapabilities.from(cameraInfo)
return videoCapabilities.supportedQualities
- .mapNotNull { videoCapabilities.getProfile(it) }
+ .mapNotNull { videoCapabilities.getProfiles(it) }
}
private fun android.util.Range<Int>.toClosed() = Range.closed(lower, upper)
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/SupportedQualitiesVerificationTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/SupportedQualitiesVerificationTest.kt
index 66b2c8e..be254c5 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/SupportedQualitiesVerificationTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/SupportedQualitiesVerificationTest.kt
@@ -37,6 +37,7 @@
import androidx.camera.camera2.Camera2Config
import androidx.camera.camera2.pipe.integration.CameraPipeConfig
import androidx.camera.core.Camera
+import androidx.camera.core.CameraEffect
import androidx.camera.core.CameraInfo
import androidx.camera.core.CameraSelector
import androidx.camera.core.CameraXConfig
@@ -47,6 +48,7 @@
import androidx.camera.testing.CameraPipeConfigTestRule
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.fakes.FakeLifecycleOwner
+import androidx.camera.testing.fakes.FakeSurfaceEffect
import androidx.core.util.Consumer
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.LargeTest
@@ -187,14 +189,14 @@
fun qualityOptionCanRecordVideo_enableSurfaceProcessor() {
assumeSuccessfulSurfaceProcessing()
- testQualityOptionRecordVideo(surfaceProcessor = createSurfaceProcessor())
+ testQualityOptionRecordVideo(effect = createEffect())
}
- private fun testQualityOptionRecordVideo(surfaceProcessor: SurfaceProcessorInternal? = null) {
+ private fun testQualityOptionRecordVideo(effect: CameraEffect? = null) {
// Arrange.
val recorder = Recorder.Builder().setQualitySelector(QualitySelector.from(quality)).build()
val videoCapture = VideoCapture.withOutput(recorder)
- videoCapture.setProcessor(surfaceProcessor)
+ videoCapture.effect = effect
val file = File.createTempFile("CameraX", ".tmp").apply { deleteOnExit() }
val latchForRecordingStatus = CountDownLatch(5)
val latchForRecordingFinalized = CountDownLatch(1)
@@ -239,8 +241,13 @@
file.delete()
}
- private fun createSurfaceProcessor(): SurfaceProcessorInternal =
- DefaultSurfaceProcessor.Factory.newInstance().apply { surfaceProcessorsToRelease.add(this) }
+ private fun createEffect(): CameraEffect {
+ val fakeSurfaceProcessor = DefaultSurfaceProcessor.Factory.newInstance()
+ surfaceProcessorsToRelease.add(fakeSurfaceProcessor)
+ return FakeSurfaceEffect(
+ fakeSurfaceProcessor
+ )
+ }
/** Skips tests which will enable surface processing and encounter device specific issues. */
private fun assumeSuccessfulSurfaceProcessing() {
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoCaptureDeviceTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoCaptureDeviceTest.kt
index 02f2e3b..4d7a118 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoCaptureDeviceTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoCaptureDeviceTest.kt
@@ -44,6 +44,7 @@
import java.util.concurrent.ArrayBlockingQueue
import java.util.concurrent.CopyOnWriteArraySet
import java.util.concurrent.Executors
+import java.util.concurrent.RejectedExecutionException
import java.util.concurrent.TimeUnit
import kotlin.time.Duration.Companion.seconds
import kotlinx.coroutines.CompletableDeferred
@@ -404,10 +405,15 @@
attachToGLContext(GLUtil.getTexIdFromGLContext())
setOnFrameAvailableListener {
frameCountFlow.getAndUpdate { frameCount -> frameCount + 1 }
- executor.execute {
- if (!isReleased) {
- updateTexImage()
+ try {
+ executor.execute {
+ if (!isReleased) {
+ updateTexImage()
+ }
}
+ } catch (_: RejectedExecutionException) {
+ // Ignored since frame updating is no longer needed after surface
+ // and executor are released.
}
}
}
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioEncoderConfigCamcorderProfileResolverTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioEncoderConfigAudioProfileResolverTest.kt
similarity index 70%
rename from camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioEncoderConfigCamcorderProfileResolverTest.kt
rename to camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioEncoderConfigAudioProfileResolverTest.kt
index df98596..68d64f6 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioEncoderConfigCamcorderProfileResolverTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioEncoderConfigAudioProfileResolverTest.kt
@@ -48,7 +48,7 @@
@RunWith(Parameterized::class)
@SmallTest
@SdkSuppress(minSdkVersion = 21)
-class AudioEncoderConfigCamcorderProfileResolverTest(
+class AudioEncoderConfigAudioProfileResolverTest(
private val implName: String,
private val cameraConfig: CameraXConfig
) {
@@ -103,38 +103,49 @@
@Test
fun defaultAudioSpecAndAudioSourceProducesValidSettings() {
val supportedProfiles = videoCapabilities.supportedQualities.map {
- videoCapabilities.getProfile(it)!!
+ videoCapabilities.getProfiles(it)!!
}
- supportedProfiles.forEach {
+ for (encoderProfiles in supportedProfiles) {
+ val audioProfile = encoderProfiles.defaultAudioProfile ?: continue
+
val sourceSettings =
- AudioSourceSettingsCamcorderProfileResolver(defaultAudioSpec, it).get()
- val config = AudioEncoderConfigCamcorderProfileResolver(
- it.audioCodecMimeType!!,
- it.requiredAudioProfile,
+ AudioSourceSettingsAudioProfileResolver(
+ defaultAudioSpec,
+ audioProfile
+ ).get()
+ val config = AudioEncoderConfigAudioProfileResolver(
+ audioProfile.mediaType,
+ audioProfile.profile,
timebase,
defaultAudioSpec,
sourceSettings,
- it
+ audioProfile
).get()
- assertThat(config.mimeType).isEqualTo(it.audioCodecMimeType)
- assertThat(config.bitrate).isEqualTo(it.audioBitRate)
- assertThat(config.sampleRate).isEqualTo(it.audioSampleRate)
- assertThat(config.channelCount).isEqualTo(it.audioChannels)
+ assertThat(config.mimeType).isEqualTo(audioProfile.mediaType)
+ assertThat(config.bitrate).isEqualTo(audioProfile.bitrate)
+ assertThat(config.sampleRate).isEqualTo(audioProfile.sampleRate)
+ assertThat(config.channelCount).isEqualTo(audioProfile.channels)
}
}
@Test
fun increasedChannelCountIncreasesBitrate() {
+ val encoderProfiles = videoCapabilities.getProfiles(Quality.HIGHEST)!!
+ val profile = encoderProfiles.defaultAudioProfile
+ Assume.assumeTrue(profile != null)
+
// Get default channel count
- val profile = videoCapabilities.getProfile(Quality.HIGHEST)!!
val defaultSourceSettings =
- AudioSourceSettingsCamcorderProfileResolver(defaultAudioSpec, profile).get()
+ AudioSourceSettingsAudioProfileResolver(
+ defaultAudioSpec,
+ profile!!
+ ).get()
val defaultConfig =
- AudioEncoderConfigCamcorderProfileResolver(
- profile.audioCodecMimeType!!,
- profile.requiredAudioProfile,
+ AudioEncoderConfigAudioProfileResolver(
+ profile.mediaType,
+ profile.profile,
timebase,
defaultAudioSpec,
defaultSourceSettings,
@@ -145,9 +156,9 @@
val higherChannelCountSourceSettings =
defaultSourceSettings.toBuilder().setChannelCount(defaultChannelCount * 2).build()
- val higherChannelCountConfig = AudioEncoderConfigCamcorderProfileResolver(
- profile.audioCodecMimeType!!,
- profile.requiredAudioProfile,
+ val higherChannelCountConfig = AudioEncoderConfigAudioProfileResolver(
+ profile.mediaType,
+ profile.profile,
timebase,
defaultAudioSpec,
higherChannelCountSourceSettings,
@@ -159,14 +170,20 @@
@Test
fun increasedSampleRateIncreasesBitrate() {
+ val encoderProfiles = videoCapabilities.getProfiles(Quality.HIGHEST)!!
+ val profile = encoderProfiles.defaultAudioProfile
+ Assume.assumeTrue(profile != null)
+
// Get default sample rate
- val profile = videoCapabilities.getProfile(Quality.HIGHEST)!!
val defaultSourceSettings =
- AudioSourceSettingsCamcorderProfileResolver(defaultAudioSpec, profile).get()
+ AudioSourceSettingsAudioProfileResolver(
+ defaultAudioSpec,
+ profile!!
+ ).get()
val defaultConfig =
- AudioEncoderConfigCamcorderProfileResolver(
- profile.audioCodecMimeType!!,
- profile.requiredAudioProfile,
+ AudioEncoderConfigAudioProfileResolver(
+ profile.mediaType,
+ profile.profile,
timebase,
defaultAudioSpec,
defaultSourceSettings,
@@ -177,9 +194,9 @@
val higherSampleRateSourceSettings =
defaultSourceSettings.toBuilder().setChannelCount(defaultSampleRate * 2).build()
- val higherSampleRateConfig = AudioEncoderConfigCamcorderProfileResolver(
- profile.audioCodecMimeType!!,
- profile.requiredAudioProfile,
+ val higherSampleRateConfig = AudioEncoderConfigAudioProfileResolver(
+ profile.mediaType,
+ profile.profile,
timebase,
defaultAudioSpec,
higherSampleRateSourceSettings,
@@ -191,11 +208,17 @@
@Test
fun bitrateRangeInVideoSpecClampsBitrate() {
- val profile = videoCapabilities.getProfile(Quality.HIGHEST)!!
- val defaultSourceSettings =
- AudioSourceSettingsCamcorderProfileResolver(defaultAudioSpec, profile).get()
+ val encoderProfiles = videoCapabilities.getProfiles(Quality.HIGHEST)!!
+ val profile = encoderProfiles.defaultAudioProfile
+ Assume.assumeTrue(profile != null)
- val defaultBitrate = profile.audioBitRate
+ val defaultSourceSettings =
+ AudioSourceSettingsAudioProfileResolver(
+ defaultAudioSpec,
+ profile!!
+ ).get()
+
+ val defaultBitrate = profile.bitrate
// Create audio spec with limit 20% higher than default.
val higherBitrate = (defaultBitrate * 1.2).toInt()
@@ -207,9 +230,9 @@
val lowerAudioSpec = AudioSpec.builder().setBitrate(Range(0, lowerBitrate)).build()
assertThat(
- AudioEncoderConfigCamcorderProfileResolver(
- profile.audioCodecMimeType!!,
- profile.requiredAudioProfile,
+ AudioEncoderConfigAudioProfileResolver(
+ profile.mediaType,
+ profile.profile,
timebase,
higherAudioSpec,
defaultSourceSettings,
@@ -218,9 +241,9 @@
).isEqualTo(higherBitrate)
assertThat(
- AudioEncoderConfigCamcorderProfileResolver(
- profile.audioCodecMimeType!!,
- profile.requiredAudioProfile,
+ AudioEncoderConfigAudioProfileResolver(
+ profile.mediaType,
+ profile.profile,
timebase,
lowerAudioSpec,
defaultSourceSettings,
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioSourceSettingsCamcorderProfileResolverTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioSourceSettingsAudioProfileResolverTest.kt
similarity index 74%
rename from camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioSourceSettingsCamcorderProfileResolverTest.kt
rename to camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioSourceSettingsAudioProfileResolverTest.kt
index 5d67a7a..13e4086 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioSourceSettingsCamcorderProfileResolverTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/AudioSourceSettingsAudioProfileResolverTest.kt
@@ -51,7 +51,7 @@
@RunWith(Parameterized::class)
@SmallTest
@SdkSuppress(minSdkVersion = 21)
-class AudioSourceSettingsCamcorderProfileResolverTest(
+class AudioSourceSettingsAudioProfileResolverTest(
private val implName: String,
private val cameraConfig: CameraXConfig
) {
@@ -106,9 +106,17 @@
@Test
fun defaultAudioSpecResolvesToSupportedSettings() {
- val resolvedSettings = videoCapabilities.supportedQualities.map {
- val camcorderProfile = videoCapabilities.getProfile(it)
- AudioSourceSettingsCamcorderProfileResolver(defaultAudioSpec, camcorderProfile!!).get()
+ val resolvedSettings = videoCapabilities.supportedQualities.mapNotNull {
+ val encoderProfiles = videoCapabilities.getProfiles(it)!!
+ val audioProfile = encoderProfiles.defaultAudioProfile
+ if (audioProfile == null) {
+ null
+ } else {
+ AudioSourceSettingsAudioProfileResolver(
+ defaultAudioSpec,
+ audioProfile
+ ).get()
+ }
}
resolvedSettings.forEach {
@@ -131,9 +139,17 @@
)
val resolvedSettings = videoCapabilities.supportedQualities.flatMap { quality ->
- val camcorderProfile = videoCapabilities.getProfile(quality)
- audioSpecs.map {
- AudioSourceSettingsCamcorderProfileResolver(it, camcorderProfile!!).get()
+ val encoderProfiles = videoCapabilities.getProfiles(quality)!!
+ val audioProfile = encoderProfiles.defaultAudioProfile
+ if (audioProfile == null) {
+ emptyList()
+ } else {
+ audioSpecs.map {
+ AudioSourceSettingsAudioProfileResolver(
+ it,
+ audioProfile
+ ).get()
+ }
}
}
@@ -149,21 +165,27 @@
}
@Test
- fun sampleRateCanOverrideCamcorderProfile_ifSupported() {
- val profile = videoCapabilities.getProfile(Quality.HIGHEST)
+ fun sampleRateCanOverrideEncoderProfiles_ifSupported() {
+ val encoderProfiles = videoCapabilities.getProfiles(Quality.HIGHEST)!!
+ val audioProfile = encoderProfiles.defaultAudioProfile
+ Assume.assumeTrue(audioProfile != null)
+
// Get a config using the default audio spec to retrieve the source format
// Note: This relies on resolution of sample rate and source format being independent.
// If a dependency between the two is introduced, this will stop working and will
// need to be rewritten.
- val autoCamcorderProfileConfig =
- AudioSourceSettingsCamcorderProfileResolver(defaultAudioSpec, profile!!).get()
+ val autoEncoderProfileConfig =
+ AudioSourceSettingsAudioProfileResolver(
+ defaultAudioSpec,
+ audioProfile!!
+ ).get()
// Try to find a sample rate that is supported, but not the
- // sample rate advertised by CamcorderProfile
+ // sample rate advertised by EncoderProfiles
val nonReportedSampleRate = AudioSource.COMMON_SAMPLE_RATES.firstOrNull {
- it != profile.audioSampleRate && AudioSource.isSettingsSupported(
+ it != audioProfile.sampleRate && AudioSource.isSettingsSupported(
it,
- profile.audioChannels,
- autoCamcorderProfileConfig.audioFormat
+ audioProfile.channels,
+ autoEncoderProfileConfig.audioFormat
)
}
Assume.assumeTrue(
@@ -176,20 +198,26 @@
AudioSpec.builder().setSampleRate(Range(nonReportedSampleRate!!, nonReportedSampleRate))
.build()
val resolvedSampleRate =
- AudioSourceSettingsCamcorderProfileResolver(audioSpec, profile).get().sampleRate
+ AudioSourceSettingsAudioProfileResolver(
+ audioSpec,
+ audioProfile
+ ).get().sampleRate
- assertThat(resolvedSampleRate).isNotEqualTo(profile.audioSampleRate)
+ assertThat(resolvedSampleRate).isNotEqualTo(audioProfile.sampleRate)
assertThat(resolvedSampleRate).isEqualTo(nonReportedSampleRate)
}
@Test
fun audioSpecDefaultProducesValidSourceEnum() {
- val profile = videoCapabilities.getProfile(Quality.HIGHEST)
+ val encoderProfiles = videoCapabilities.getProfiles(Quality.HIGHEST)!!
+ val audioProfile = encoderProfiles.defaultAudioProfile
+ Assume.assumeTrue(audioProfile != null)
+
val audioSpec = AudioSpec.builder().build()
val resolvedAudioSourceEnum =
- AudioSourceSettingsCamcorderProfileResolver(
+ AudioSourceSettingsAudioProfileResolver(
audioSpec,
- profile!!
+ audioProfile!!
).get().audioSource
assertThat(resolvedAudioSourceEnum).isAnyOf(
@@ -200,12 +228,15 @@
@Test
fun audioSpecDefaultProducesValidSourceFormat() {
- val profile = videoCapabilities.getProfile(Quality.HIGHEST)
+ val encoderProfiles = videoCapabilities.getProfiles(Quality.HIGHEST)!!
+ val audioProfile = encoderProfiles.defaultAudioProfile
+ Assume.assumeTrue(audioProfile != null)
+
val audioSpec = AudioSpec.builder().build()
val resolvedAudioSourceFormat =
- AudioSourceSettingsCamcorderProfileResolver(
+ AudioSourceSettingsAudioProfileResolver(
audioSpec,
- profile!!
+ audioProfile!!
).get().audioFormat
assertThat(resolvedAudioSourceFormat).isNotEqualTo(AudioFormat.ENCODING_INVALID)
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolverTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolverTest.kt
index 066adfd..afdaa23 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolverTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigDefaultResolverTest.kt
@@ -18,7 +18,7 @@
import android.util.Range
import androidx.camera.core.impl.Timebase
-import androidx.camera.testing.CamcorderProfileUtil
+import androidx.camera.testing.EncoderProfilesUtil
import androidx.camera.video.VideoSpec
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
@@ -44,9 +44,9 @@
@Test
fun defaultVideoSpecProducesValidSettings_forDifferentSurfaceSizes() {
- val surfaceSizeCif = CamcorderProfileUtil.RESOLUTION_CIF
- val surfaceSize720p = CamcorderProfileUtil.RESOLUTION_720P
- val surfaceSize1080p = CamcorderProfileUtil.RESOLUTION_1080P
+ val surfaceSizeCif = EncoderProfilesUtil.RESOLUTION_CIF
+ val surfaceSize720p = EncoderProfilesUtil.RESOLUTION_720P
+ val surfaceSize1080p = EncoderProfilesUtil.RESOLUTION_1080P
val expectedFrameRateRange = Range(FRAME_RATE_30, FRAME_RATE_30)
@@ -96,7 +96,7 @@
@Test
fun bitrateRangeInVideoSpecClampsBitrate() {
- val surfaceSize720p = CamcorderProfileUtil.RESOLUTION_720P
+ val surfaceSize720p = EncoderProfilesUtil.RESOLUTION_720P
// Get default bit rate for this size
val defaultConfig =
@@ -144,7 +144,7 @@
// Give a VideoSpec with a frame rate higher than 30
val videoSpec =
VideoSpec.builder().setFrameRate(Range(FRAME_RATE_60, FRAME_RATE_60)).build()
- val size = CamcorderProfileUtil.RESOLUTION_1080P
+ val size = EncoderProfilesUtil.RESOLUTION_1080P
assertThat(
VideoEncoderConfigDefaultResolver(
@@ -164,7 +164,7 @@
// Give a VideoSpec with a frame rate higher than 30
val videoSpec =
VideoSpec.builder().setFrameRate(Range(FRAME_RATE_60, FRAME_RATE_60)).build()
- val size = CamcorderProfileUtil.RESOLUTION_1080P
+ val size = EncoderProfilesUtil.RESOLUTION_1080P
val expectedFrameRateRange = Range(FRAME_RATE_30, FRAME_RATE_30)
@@ -187,7 +187,7 @@
// Give a VideoSpec with a frame rate higher than 30
val videoSpec =
VideoSpec.builder().setFrameRate(Range(FRAME_RATE_30, FRAME_RATE_45)).build()
- val size = CamcorderProfileUtil.RESOLUTION_1080P
+ val size = EncoderProfilesUtil.RESOLUTION_1080P
val expectedFrameRateRange = Range(FRAME_RATE_30, FRAME_RATE_60)
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigCamcorderProfileResolverTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolverTest.kt
similarity index 71%
rename from camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigCamcorderProfileResolverTest.kt
rename to camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolverTest.kt
index 1a555f6..1719d00 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigCamcorderProfileResolverTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolverTest.kt
@@ -49,7 +49,7 @@
@RunWith(Parameterized::class)
@SmallTest
@SdkSuppress(minSdkVersion = 21)
-class VideoEncoderConfigCamcorderProfileResolverTest(
+class VideoEncoderConfigVideoProfileResolverTest(
private val implName: String,
private val cameraConfig: CameraXConfig
) {
@@ -103,33 +103,34 @@
@Test
fun defaultVideoSpecProducesValidSettings_forSurfaceSizeEquivalentToQuality() {
val supportedProfiles = videoCapabilities.supportedQualities.map {
- videoCapabilities.getProfile(it)!!
+ videoCapabilities.getProfiles(it)!!
}
supportedProfiles.forEach {
- val config = VideoEncoderConfigCamcorderProfileResolver(
- it.videoCodecMimeType!!,
+ val videoProfile = it.defaultVideoProfile
+ val config = VideoEncoderConfigVideoProfileResolver(
+ videoProfile.mediaType,
timebase,
defaultVideoSpec,
- Size(it.videoFrameWidth, it.videoFrameHeight),
- it,
+ Size(videoProfile.width, videoProfile.height),
+ videoProfile,
/*expectedFrameRateRange=*/null
).get()
- assertThat(config.mimeType).isEqualTo(it.videoCodecMimeType)
- assertThat(config.bitrate).isEqualTo(it.videoBitRate)
- assertThat(config.resolution).isEqualTo(Size(it.videoFrameWidth, it.videoFrameHeight))
- assertThat(config.frameRate).isEqualTo(it.videoFrameRate)
+ assertThat(config.mimeType).isEqualTo(videoProfile.mediaType)
+ assertThat(config.bitrate).isEqualTo(videoProfile.bitrate)
+ assertThat(config.resolution).isEqualTo(Size(videoProfile.width, videoProfile.height))
+ assertThat(config.frameRate).isEqualTo(videoProfile.frameRate)
}
}
@Test
fun bitrateIncreasesOrDecreasesWithIncreaseOrDecreaseInSurfaceSize() {
- val profile = videoCapabilities.getProfile(Quality.HIGHEST)!!
- val surfaceSize = Size(profile.videoFrameWidth, profile.videoFrameHeight)
+ val profile = videoCapabilities.getProfiles(Quality.HIGHEST)!!.defaultVideoProfile
+ val surfaceSize = Size(profile.width, profile.height)
- val defaultBitrate = VideoEncoderConfigCamcorderProfileResolver(
- profile.videoCodecMimeType!!,
+ val defaultBitrate = VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
timebase,
defaultVideoSpec,
surfaceSize,
@@ -141,8 +142,8 @@
val decreasedSurfaceSize = Size(surfaceSize.width - 100, surfaceSize.height - 100)
assertThat(
- VideoEncoderConfigCamcorderProfileResolver(
- profile.videoCodecMimeType!!,
+ VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
timebase,
defaultVideoSpec,
increasedSurfaceSize,
@@ -152,8 +153,8 @@
).isGreaterThan(defaultBitrate)
assertThat(
- VideoEncoderConfigCamcorderProfileResolver(
- profile.videoCodecMimeType!!,
+ VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
timebase,
defaultVideoSpec,
decreasedSurfaceSize,
@@ -165,11 +166,11 @@
@Test
fun bitrateRangeInVideoSpecClampsBitrate() {
- val profile = videoCapabilities.getProfile(Quality.HIGHEST)!!
- val surfaceSize = Size(profile.videoFrameWidth, profile.videoFrameHeight)
+ val profile = videoCapabilities.getProfiles(Quality.HIGHEST)!!.defaultVideoProfile
+ val surfaceSize = Size(profile.width, profile.height)
- val defaultBitrate = VideoEncoderConfigCamcorderProfileResolver(
- profile.videoCodecMimeType!!,
+ val defaultBitrate = VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
timebase,
defaultVideoSpec,
surfaceSize,
@@ -187,8 +188,8 @@
val lowerVideoSpec = VideoSpec.builder().setBitrate(Range(0, lowerBitrate)).build()
assertThat(
- VideoEncoderConfigCamcorderProfileResolver(
- profile.videoCodecMimeType!!,
+ VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
timebase,
higherVideoSpec,
surfaceSize,
@@ -198,8 +199,8 @@
).isEqualTo(higherBitrate)
assertThat(
- VideoEncoderConfigCamcorderProfileResolver(
- profile.videoCodecMimeType!!,
+ VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
timebase,
lowerVideoSpec,
surfaceSize,
@@ -211,15 +212,15 @@
@Test
fun resolvedFrameRateIsClampedToOperatingRate() {
- val profile = videoCapabilities.getProfile(Quality.HIGHEST)!!
- val surfaceSize = Size(profile.videoFrameWidth, profile.videoFrameHeight)
+ val profile = videoCapabilities.getProfiles(Quality.HIGHEST)!!.defaultVideoProfile
+ val surfaceSize = Size(profile.width, profile.height)
// Construct operating ranges that are both lower and higher than the profile FPS
- val lowerOperatingRange = Range(profile.videoFrameRate / 4, profile.videoFrameRate / 2)
- val higherOperatingRange = Range(profile.videoFrameRate * 2, profile.videoFrameRate * 4)
+ val lowerOperatingRange = Range(profile.frameRate / 4, profile.frameRate / 2)
+ val higherOperatingRange = Range(profile.frameRate * 2, profile.frameRate * 4)
- val clampedDownFrameRate = VideoEncoderConfigCamcorderProfileResolver(
- profile.videoCodecMimeType!!,
+ val clampedDownFrameRate = VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
timebase,
defaultVideoSpec,
surfaceSize,
@@ -227,8 +228,8 @@
lowerOperatingRange
).get().frameRate
- val clampedUpFrameRate = VideoEncoderConfigCamcorderProfileResolver(
- profile.videoCodecMimeType!!,
+ val clampedUpFrameRate = VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
timebase,
defaultVideoSpec,
surfaceSize,
@@ -242,14 +243,14 @@
@Test
fun resolvedFrameRateInsideOperatingRangeIsUnchanged() {
- val profile = videoCapabilities.getProfile(Quality.HIGHEST)!!
- val surfaceSize = Size(profile.videoFrameWidth, profile.videoFrameHeight)
+ val profile = videoCapabilities.getProfiles(Quality.HIGHEST)!!.defaultVideoProfile
+ val surfaceSize = Size(profile.width, profile.height)
// Construct a range that includes the profile FPS
- val operatingRange = Range(profile.videoFrameRate / 2, profile.videoFrameRate * 2)
+ val operatingRange = Range(profile.frameRate / 2, profile.frameRate * 2)
- val resolvedFrameRate = VideoEncoderConfigCamcorderProfileResolver(
- profile.videoCodecMimeType!!,
+ val resolvedFrameRate = VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
timebase,
defaultVideoSpec,
surfaceSize,
@@ -257,20 +258,20 @@
operatingRange
).get().frameRate
- assertThat(resolvedFrameRate).isEqualTo(profile.videoFrameRate)
+ assertThat(resolvedFrameRate).isEqualTo(profile.frameRate)
}
@Test
fun bitrateScalesWithFrameRateOperatingRange() {
- val profile = videoCapabilities.getProfile(Quality.HIGHEST)!!
- val surfaceSize = Size(profile.videoFrameWidth, profile.videoFrameHeight)
+ val profile = videoCapabilities.getProfiles(Quality.HIGHEST)!!.defaultVideoProfile
+ val surfaceSize = Size(profile.width, profile.height)
// Construct a range which is constant and half the profile FPS
- val operatingFrameRate = profile.videoFrameRate / 2
+ val operatingFrameRate = profile.frameRate / 2
val operatingRange = Range(operatingFrameRate, operatingFrameRate)
- val resolvedBitrate = VideoEncoderConfigCamcorderProfileResolver(
- profile.videoCodecMimeType!!,
+ val resolvedBitrate = VideoEncoderConfigVideoProfileResolver(
+ profile.mediaType,
timebase,
defaultVideoSpec,
surfaceSize,
@@ -279,8 +280,7 @@
).get().bitrate
assertThat(resolvedBitrate).isEqualTo(
- (profile.videoBitRate *
- (operatingFrameRate.toDouble() / profile.videoFrameRate)).toInt()
+ (profile.bitrate * (operatingFrameRate.toDouble() / profile.frameRate)).toInt()
)
}
}
\ No newline at end of file
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/workaround/EncoderFinderTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/workaround/EncoderFinderTest.kt
index 72350dc..4af3517 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/workaround/EncoderFinderTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/workaround/EncoderFinderTest.kt
@@ -37,7 +37,7 @@
import androidx.camera.video.VideoSpec
import androidx.camera.video.internal.compat.quirk.DeviceQuirks
import androidx.camera.video.internal.compat.quirk.MediaCodecInfoReportIncorrectInfoQuirk
-import androidx.camera.video.internal.config.VideoEncoderConfigCamcorderProfileResolver
+import androidx.camera.video.internal.config.VideoEncoderConfigVideoProfileResolver
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
@@ -144,7 +144,7 @@
@LabTestRule.LabTestOnly
@Test
- fun findEncoderForFormat_CamcorderProfile() {
+ fun findEncoderForFormat_EncoderProfiles() {
// Arrange.
val cameraInfo = camera.cameraInfo as CameraInfoInternal
val resolution = QualitySelector.getResolution(cameraInfo, quality)
@@ -153,18 +153,18 @@
resolution != null
)
- val camcorderProfile = VideoCapabilities.from(cameraInfo).getProfile(quality)
- val camcorderProfileVideoMime = camcorderProfile!!.videoCodecMimeType!!
+ val encoderProfiles = VideoCapabilities.from(cameraInfo).getProfiles(quality)
+ val videoProfile = encoderProfiles!!.defaultVideoProfile
val videoSpec =
VideoSpec.builder().setQualitySelector(QualitySelector.from(quality)).build()
- val mediaFormat = VideoEncoderConfigCamcorderProfileResolver(
- camcorderProfileVideoMime,
+ val mediaFormat = VideoEncoderConfigVideoProfileResolver(
+ videoProfile.mediaType,
timebase,
videoSpec,
resolution!!,
- camcorderProfile,
+ videoProfile,
/*expectedFrameRateRange=*/null
).get().toMediaFormat()
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/QualitySelector.java b/camera/camera-video/src/main/java/androidx/camera/video/QualitySelector.java
index ae10a14..a48f442 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/QualitySelector.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/QualitySelector.java
@@ -27,7 +27,8 @@
import androidx.annotation.RestrictTo;
import androidx.camera.core.CameraInfo;
import androidx.camera.core.Logger;
-import androidx.camera.core.impl.CamcorderProfileProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy;
+import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
import androidx.core.util.Preconditions;
import java.util.ArrayList;
@@ -139,8 +140,9 @@
@Nullable
public static Size getResolution(@NonNull CameraInfo cameraInfo, @NonNull Quality quality) {
checkQualityConstantsOrThrow(quality);
- CamcorderProfileProxy profile = VideoCapabilities.from(cameraInfo).getProfile(quality);
- return profile != null ? getProfileVideoSize(profile) : null;
+ VideoValidatedEncoderProfilesProxy profiles =
+ VideoCapabilities.from(cameraInfo).getProfiles(quality);
+ return profiles != null ? getProfileVideoSize(profiles) : null;
}
/**
@@ -156,7 +158,7 @@
Map<Quality, Size> map = new HashMap<>();
for (Quality supportedQuality : videoCapabilities.getSupportedQualities()) {
map.put(supportedQuality, getProfileVideoSize(
- requireNonNull(videoCapabilities.getProfile(supportedQuality))));
+ requireNonNull(videoCapabilities.getProfiles(supportedQuality))));
}
return map;
}
@@ -404,8 +406,9 @@
}
@NonNull
- private static Size getProfileVideoSize(@NonNull CamcorderProfileProxy profile) {
- return new Size(profile.getVideoFrameWidth(), profile.getVideoFrameHeight());
+ private static Size getProfileVideoSize(@NonNull VideoValidatedEncoderProfilesProxy profiles) {
+ VideoProfileProxy videoProfile = profiles.getDefaultVideoProfile();
+ return new Size(videoProfile.getWidth(), videoProfile.getHeight());
}
private static void checkQualityConstantsOrThrow(@NonNull List<Quality> qualities) {
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java b/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java
index 701b88d..78f4a24 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java
@@ -59,7 +59,6 @@
import androidx.camera.core.AspectRatio;
import androidx.camera.core.Logger;
import androidx.camera.core.SurfaceRequest;
-import androidx.camera.core.impl.CamcorderProfileProxy;
import androidx.camera.core.impl.MutableStateObservable;
import androidx.camera.core.impl.Observable;
import androidx.camera.core.impl.StateObservable;
@@ -74,6 +73,7 @@
import androidx.camera.video.StreamInfo.StreamState;
import androidx.camera.video.internal.AudioSource;
import androidx.camera.video.internal.AudioSourceAccessException;
+import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
import androidx.camera.video.internal.compat.Api26Impl;
import androidx.camera.video.internal.compat.quirk.DeactivateEncoderSurfaceBeforeStopEncoderQuirk;
import androidx.camera.video.internal.compat.quirk.DeviceQuirks;
@@ -346,7 +346,7 @@
@SuppressWarnings("WeakerAccess") /* synthetic accessor */
boolean mInProgressRecordingStopping = false;
private SurfaceRequest.TransformationInfo mSurfaceTransformationInfo = null;
- private CamcorderProfileProxy mResolvedCamcorderProfile = null;
+ private VideoValidatedEncoderProfilesProxy mResolvedEncoderProfiles = null;
@SuppressWarnings("WeakerAccess") /* synthetic accessor */
final List<ListenableFuture<Void>> mEncodingFutures = new ArrayList<>();
@SuppressWarnings("WeakerAccess") /* synthetic accessor */
@@ -1041,17 +1041,17 @@
surfaceRequest.setTransformationInfoListener(mSequentialExecutor,
(transformationInfo) -> mSurfaceTransformationInfo = transformationInfo);
Size surfaceSize = surfaceRequest.getResolution();
- // Fetch and cache nearest camcorder profile, if one exists.
+ // Fetch and cache nearest encoder profiles, if one exists.
VideoCapabilities capabilities =
VideoCapabilities.from(surfaceRequest.getCamera().getCameraInfo());
Quality highestSupportedQuality = capabilities.findHighestSupportedQualityFor(surfaceSize);
Logger.d(TAG, "Using supported quality of " + highestSupportedQuality
+ " for surface size " + surfaceSize);
if (highestSupportedQuality != Quality.NONE) {
- mResolvedCamcorderProfile = capabilities.getProfile(highestSupportedQuality);
- if (mResolvedCamcorderProfile == null) {
+ mResolvedEncoderProfiles = capabilities.getProfiles(highestSupportedQuality);
+ if (mResolvedEncoderProfiles == null) {
throw new AssertionError("Camera advertised available quality but did not "
- + "produce CamcorderProfile for advertised quality.");
+ + "produce EncoderProfiles for advertised quality.");
}
}
setupVideo(surfaceRequest, videoSourceTimebase);
@@ -1071,7 +1071,7 @@
MediaSpec mediaSpec = getObservableData(mMediaSpec);
ListenableFuture<Encoder> configureFuture =
videoEncoderSession.configure(request, timebase, mediaSpec,
- mResolvedCamcorderProfile);
+ mResolvedEncoderProfiles);
mVideoEncoderSession = videoEncoderSession;
Futures.addCallback(configureFuture, new FutureCallback<Encoder>() {
@Override
@@ -1237,7 +1237,7 @@
throws AudioSourceAccessException, InvalidConfigException {
MediaSpec mediaSpec = getObservableData(mMediaSpec);
// Resolve the audio mime info
- MimeInfo audioMimeInfo = resolveAudioMimeInfo(mediaSpec, mResolvedCamcorderProfile);
+ MimeInfo audioMimeInfo = resolveAudioMimeInfo(mediaSpec, mResolvedEncoderProfiles);
Timebase audioSourceTimebase = Timebase.UPTIME;
// Select and create the audio source
@@ -1377,7 +1377,7 @@
MediaSpec mediaSpec = getObservableData(mMediaSpec);
int muxerOutputFormat =
mediaSpec.getOutputFormat() == MediaSpec.OUTPUT_FORMAT_AUTO
- ? supportedMuxerFormatOrDefaultFrom(mResolvedCamcorderProfile,
+ ? supportedMuxerFormatOrDefaultFrom(mResolvedEncoderProfiles,
MediaSpec.outputFormatToMuxerFormat(
MEDIA_SPEC_DEFAULT.getOutputFormat()))
: MediaSpec.outputFormatToMuxerFormat(mediaSpec.getOutputFormat());
@@ -2566,9 +2566,9 @@
}
private static int supportedMuxerFormatOrDefaultFrom(
- @Nullable CamcorderProfileProxy profileProxy, int defaultMuxerFormat) {
- if (profileProxy != null) {
- switch (profileProxy.getFileFormat()) {
+ @Nullable VideoValidatedEncoderProfilesProxy profilesProxy, int defaultMuxerFormat) {
+ if (profilesProxy != null) {
+ switch (profilesProxy.getRecommendedFileFormat()) {
case MediaRecorder.OutputFormat.MPEG_4:
return MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4;
case MediaRecorder.OutputFormat.WEBM:
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
index dfd3af6..a28a713 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
@@ -25,10 +25,14 @@
import androidx.annotation.RestrictTo.Scope;
import androidx.camera.core.CameraInfo;
import androidx.camera.core.Logger;
-import androidx.camera.core.impl.CamcorderProfileProvider;
-import androidx.camera.core.impl.CamcorderProfileProxy;
import androidx.camera.core.impl.CameraInfoInternal;
+import androidx.camera.core.impl.EncoderProfilesProvider;
+import androidx.camera.core.impl.EncoderProfilesProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy;
+import androidx.camera.core.impl.Quirks;
+import androidx.camera.core.impl.ResolutionValidatedEncoderProfilesProvider;
import androidx.camera.core.impl.utils.CompareSizesByArea;
+import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
import androidx.camera.video.internal.compat.quirk.DeviceQuirks;
import androidx.camera.video.internal.compat.quirk.VideoQualityQuirk;
import androidx.core.util.Preconditions;
@@ -54,55 +58,61 @@
private static final String TAG = "VideoCapabilities";
/**
- * The supported @link CamcorderProfileProxy} map from quality to CamcorderProfileProxy. The
- * order is from size large to small.
+ * Maps quality to supported {@link VideoValidatedEncoderProfilesProxy}. The order is from
+ * size large to small.
*/
- private final Map<Quality, CamcorderProfileProxy> mSupportedProfileMap = new LinkedHashMap<>();
+ private final Map<Quality, VideoValidatedEncoderProfilesProxy> mSupportedProfilesMap =
+ new LinkedHashMap<>();
private final TreeMap<Size, Quality> mAreaSortedSizeToQualityMap =
new TreeMap<>(new CompareSizesByArea());
- private final CamcorderProfileProxy mHighestProfile;
- private final CamcorderProfileProxy mLowestProfile;
+ private final VideoValidatedEncoderProfilesProxy mHighestProfiles;
+ private final VideoValidatedEncoderProfilesProxy mLowestProfiles;
+ private final EncoderProfilesProvider mEncoderProfilesProvider;
/**
* Creates a VideoCapabilities.
*
* @param cameraInfoInternal the cameraInfo
* @throws IllegalArgumentException if unable to get the capability information from the
- * CameraInfo.
+ * CameraInfo.
*/
VideoCapabilities(@NonNull CameraInfoInternal cameraInfoInternal) {
- CamcorderProfileProvider camcorderProfileProvider =
- cameraInfoInternal.getCamcorderProfileProvider();
+ Quirks cameraQuirks = cameraInfoInternal.getCameraQuirks();
+ mEncoderProfilesProvider = new ResolutionValidatedEncoderProfilesProvider(
+ cameraInfoInternal.getEncoderProfilesProvider(), cameraQuirks);
// Construct supported profile map
for (Quality quality : Quality.getSortedQualities()) {
- // SortedQualities is from size large to small
- Preconditions.checkState(quality instanceof Quality.ConstantQuality,
- "Currently only support ConstantQuality");
- int qualityValue = ((Quality.ConstantQuality) quality).getValue();
-
- // Get CamcorderProfile
- if (!camcorderProfileProvider.hasProfile(qualityValue) || !isDeviceValidQuality(
- cameraInfoInternal, quality)) {
+ EncoderProfilesProxy profiles = getEncoderProfiles(cameraInfoInternal, quality);
+ if (profiles == null) {
continue;
}
- CamcorderProfileProxy profile =
- Preconditions.checkNotNull(camcorderProfileProvider.get(qualityValue));
- Size profileSize = new Size(profile.getVideoFrameWidth(),
- profile.getVideoFrameHeight());
- Logger.d(TAG, "profile = " + profile);
- mSupportedProfileMap.put(quality, profile);
- mAreaSortedSizeToQualityMap.put(profileSize, quality);
+
+ // Validate that EncoderProfiles contain video information
+ Logger.d(TAG, "profiles = " + profiles);
+ VideoValidatedEncoderProfilesProxy validatedProfiles = toValidatedProfiles(profiles);
+ if (validatedProfiles == null) {
+ Logger.w(TAG, "EncoderProfiles of quality " + quality + " has no video "
+ + "validated profiles.");
+ continue;
+ }
+
+ VideoProfileProxy videoProfile = validatedProfiles.getDefaultVideoProfile();
+ Size size = new Size(videoProfile.getWidth(), videoProfile.getHeight());
+ mAreaSortedSizeToQualityMap.put(size, quality);
+
+ // SortedQualities is from size large to small
+ mSupportedProfilesMap.put(quality, validatedProfiles);
}
- if (mSupportedProfileMap.isEmpty()) {
- Logger.e(TAG, "No supported CamcorderProfile");
- mLowestProfile = null;
- mHighestProfile = null;
+ if (mSupportedProfilesMap.isEmpty()) {
+ Logger.e(TAG, "No supported EncoderProfiles");
+ mLowestProfiles = null;
+ mHighestProfiles = null;
} else {
- Deque<CamcorderProfileProxy> profileQueue = new ArrayDeque<>(
- mSupportedProfileMap.values());
- mHighestProfile = profileQueue.peekFirst();
- mLowestProfile = profileQueue.peekLast();
+ Deque<VideoValidatedEncoderProfilesProxy> profileQueue = new ArrayDeque<>(
+ mSupportedProfilesMap.values());
+ mHighestProfiles = profileQueue.peekFirst();
+ mLowestProfiles = profileQueue.peekLast();
}
}
@@ -116,77 +126,78 @@
* Gets all supported qualities on the device.
*
* <p>The returned list is sorted by quality size from large to small. For the qualities in
- * the returned list, calling {@link #getProfile(Quality)} with these qualities will return a
+ * the returned list, calling {@link #getProfiles(Quality)} with these qualities will return a
* non-null result.
*
* <p>Note: Constants {@link Quality#HIGHEST} and {@link Quality#LOWEST} are not included.
*/
@NonNull
public List<Quality> getSupportedQualities() {
- return new ArrayList<>(mSupportedProfileMap.keySet());
+ return new ArrayList<>(mSupportedProfilesMap.keySet());
}
/**
* Checks if the quality is supported.
*
* @param quality one of the quality constants. Possible values include
- * {@link Quality#LOWEST}, {@link Quality#HIGHEST}, {@link Quality#SD},
- * {@link Quality#HD}, {@link Quality#FHD}, or {@link Quality#UHD}.
+ * {@link Quality#LOWEST}, {@link Quality#HIGHEST}, {@link Quality#SD},
+ * {@link Quality#HD}, {@link Quality#FHD}, or {@link Quality#UHD}.
* @return {@code true} if the quality is supported; {@code false} otherwise.
* @throws IllegalArgumentException if not a quality constant.
*/
public boolean isQualitySupported(@NonNull Quality quality) {
checkQualityConstantsOrThrow(quality);
- return getProfile(quality) != null;
+ return getProfiles(quality) != null;
}
/**
- * Gets the corresponding {@link CamcorderProfileProxy} of the input quality.
+ * Gets the corresponding {@link VideoValidatedEncoderProfilesProxy} of the input quality.
*
* @param quality one of the quality constants. Possible values include
- * {@link Quality#LOWEST}, {@link Quality#HIGHEST}, {@link Quality#SD}, {@link Quality#HD},
- * {@link Quality#FHD}, or {@link Quality#UHD}.
- * @return the CamcorderProfileProxy
+ * {@link Quality#LOWEST}, {@link Quality#HIGHEST}, {@link Quality#SD},
+ * {@link Quality#HD}, {@link Quality#FHD}, or {@link Quality#UHD}.
+ * @return the VideoValidatedEncoderProfilesProxy
* @throws IllegalArgumentException if not a quality constant
*/
@Nullable
- public CamcorderProfileProxy getProfile(@NonNull Quality quality) {
+ public VideoValidatedEncoderProfilesProxy getProfiles(@NonNull Quality quality) {
checkQualityConstantsOrThrow(quality);
if (quality == Quality.HIGHEST) {
- return mHighestProfile;
+ return mHighestProfiles;
} else if (quality == Quality.LOWEST) {
- return mLowestProfile;
+ return mLowestProfiles;
}
- return mSupportedProfileMap.get(quality);
+ return mSupportedProfilesMap.get(quality);
}
/**
- * Finds the supported CamcorderProfileProxy with the resolution nearest to the given
+ * Finds the supported EncoderProfilesProxy with the resolution nearest to the given
* {@link Size}.
*
- * <p>The supported CamcorderProfileProxy means the corresponding {@link Quality} is also
- * supported. If the size aligns exactly with the pixel count of a CamcorderProfileProxy, that
- * CamcorderProfileProxy will be selected. If the size falls between two
- * CamcorderProfileProxy, the higher resolution will always be selected. Otherwise, the
- * nearest CamcorderProfileProxy will be selected, whether that CamcorderProfileProxy's
- * resolution is above or below the given size.
+ * <p>The supported EncoderProfilesProxy means the corresponding {@link Quality} is also
+ * supported. If the size aligns exactly with the pixel count of an EncoderProfilesProxy, that
+ * EncoderProfilesProxy will be selected. If the size falls between two EncoderProfilesProxy,
+ * the higher resolution will always be selected. Otherwise, the nearest EncoderProfilesProxy
+ * will be selected, whether that EncoderProfilesProxy's resolution is above or below the
+ * given size.
*
* @see #findHighestSupportedQualityFor(Size)
*/
@Nullable
- public CamcorderProfileProxy findHighestSupportedCamcorderProfileFor(@NonNull Size size) {
- CamcorderProfileProxy camcorderProfile = null;
+ public VideoValidatedEncoderProfilesProxy findHighestSupportedEncoderProfilesFor(
+ @NonNull Size size) {
+ VideoValidatedEncoderProfilesProxy encoderProfiles = null;
Quality highestSupportedQuality = findHighestSupportedQualityFor(size);
Logger.d(TAG,
"Using supported quality of " + highestSupportedQuality + " for size " + size);
if (highestSupportedQuality != Quality.NONE) {
- camcorderProfile = getProfile(highestSupportedQuality);
- if (camcorderProfile == null) {
+ encoderProfiles = getProfiles(highestSupportedQuality);
+ if (encoderProfiles == null) {
throw new AssertionError("Camera advertised available quality but did not "
- + "produce CamcorderProfile for advertised quality.");
+ + "produce EncoderProfiles for advertised quality.");
}
}
- return camcorderProfile;
+ return encoderProfiles;
}
/**
@@ -196,6 +207,7 @@
* will be selected. If the size falls between two qualities, the higher quality will always
* be selected. Otherwise, the nearest single quality will be selected, whether that
* quality's size is above or below the given size.
+ *
* @param size The size representing the number of pixels for comparison. Pixels are assumed
* to be square.
* @return The quality constant defined in {@link Quality}. If no qualities are supported,
@@ -238,4 +250,30 @@
return true;
}
+ @Nullable
+ private EncoderProfilesProxy getEncoderProfiles(@NonNull CameraInfoInternal cameraInfo,
+ @NonNull Quality quality) {
+ Preconditions.checkState(quality instanceof Quality.ConstantQuality,
+ "Currently only support ConstantQuality");
+ int qualityValue = ((Quality.ConstantQuality) quality).getValue();
+
+ if (!mEncoderProfilesProvider.hasProfile(qualityValue) || !isDeviceValidQuality(cameraInfo,
+ quality)) {
+ return null;
+ }
+
+ return mEncoderProfilesProvider.getAll(qualityValue);
+ }
+
+ @Nullable
+ private VideoValidatedEncoderProfilesProxy toValidatedProfiles(
+ @NonNull EncoderProfilesProxy profiles) {
+ // According to the document, the first profile is the default video profile.
+ List<VideoProfileProxy> videoProfiles = profiles.getVideoProfiles();
+ if (videoProfiles.isEmpty()) {
+ return null;
+ }
+
+ return VideoValidatedEncoderProfilesProxy.from(profiles);
+ }
}
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 1d5fad6..3c0a5fa 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
@@ -73,7 +73,6 @@
import androidx.camera.core.SurfaceRequest;
import androidx.camera.core.UseCase;
import androidx.camera.core.ViewPort;
-import androidx.camera.core.impl.CamcorderProfileProxy;
import androidx.camera.core.impl.CameraCaptureCallback;
import androidx.camera.core.impl.CameraCaptureResult;
import androidx.camera.core.impl.CameraInfoInternal;
@@ -101,10 +100,10 @@
import androidx.camera.core.internal.ThreadConfig;
import androidx.camera.core.processing.DefaultSurfaceProcessor;
import androidx.camera.core.processing.SurfaceEdge;
-import androidx.camera.core.processing.SurfaceProcessorInternal;
import androidx.camera.core.processing.SurfaceProcessorNode;
import androidx.camera.video.StreamInfo.StreamState;
import androidx.camera.video.impl.VideoCaptureConfig;
+import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
import androidx.camera.video.internal.compat.quirk.DeviceQuirks;
import androidx.camera.video.internal.compat.quirk.ExtraSupportedResolutionQuirk;
import androidx.camera.video.internal.compat.quirk.ImageCaptureFailedWhenVideoCaptureIsBoundQuirk;
@@ -194,8 +193,6 @@
@SuppressWarnings("WeakerAccess") // Synthetic access
VideoOutput.SourceState mSourceState = VideoOutput.SourceState.INACTIVE;
@Nullable
- private SurfaceProcessorInternal mSurfaceProcessor;
- @Nullable
private SurfaceProcessorNode mNode;
@Nullable
private VideoEncoderInfo mVideoEncoderInfo;
@@ -311,21 +308,6 @@
}
/**
- * Sets a {@link SurfaceProcessorInternal}.
- *
- * <p>The processor is used to setup post-processing pipeline.
- *
- * <p>Note: the value will only be used when VideoCapture is bound. Calling this method after
- * VideoCapture is bound takes no effect until VideoCapture is rebound.
- *
- * @hide
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- public void setProcessor(@Nullable SurfaceProcessorInternal surfaceProcessor) {
- mSurfaceProcessor = surfaceProcessor;
- }
-
- /**
* {@inheritDoc}
*
* @hide
@@ -719,10 +701,10 @@
@Nullable
private SurfaceProcessorNode createNodeIfNeeded(boolean isCropNeeded) {
- if (mSurfaceProcessor != null || ENABLE_SURFACE_PROCESSING_BY_QUIRK || isCropNeeded) {
+ if (getEffect() != null || ENABLE_SURFACE_PROCESSING_BY_QUIRK || isCropNeeded) {
Logger.d(TAG, "Surface processing is enabled.");
return new SurfaceProcessorNode(requireNonNull(getCamera()),
- mSurfaceProcessor != null ? mSurfaceProcessor :
+ getEffect() != null ? getEffect().createSurfaceProcessorInternal() :
DefaultSurfaceProcessor.Factory.newInstance());
}
return null;
@@ -897,11 +879,11 @@
return mVideoEncoderInfo;
}
- // Find the nearest CamcorderProfile
- CamcorderProfileProxy camcorderProfileProxy =
- videoCapabilities.findHighestSupportedCamcorderProfileFor(resolution);
+ // Find the nearest EncoderProfiles
+ VideoValidatedEncoderProfilesProxy encoderProfiles =
+ videoCapabilities.findHighestSupportedEncoderProfilesFor(resolution);
VideoEncoderInfo videoEncoderInfo = resolveVideoEncoderInfo(videoEncoderInfoFinder,
- camcorderProfileProxy, mediaSpec, resolution, targetFps);
+ encoderProfiles, mediaSpec, resolution, targetFps);
if (videoEncoderInfo == null) {
// If VideoCapture cannot find videoEncoderInfo, it means that VideoOutput should
// also not be able to find the encoder. VideoCapture will not handle this situation
@@ -910,9 +892,9 @@
return null;
}
- Size profileSize = camcorderProfileProxy != null ? new Size(
- camcorderProfileProxy.getVideoFrameWidth(),
- camcorderProfileProxy.getVideoFrameHeight()) : null;
+ Size profileSize = encoderProfiles != null ? new Size(
+ encoderProfiles.getDefaultVideoProfile().getWidth(),
+ encoderProfiles.getDefaultVideoProfile().getHeight()) : null;
videoEncoderInfo = VideoEncoderInfoWrapper.from(videoEncoderInfo, profileSize);
// Cache the VideoEncoderInfo as it should be the same when recreating the pipeline.
@@ -926,12 +908,12 @@
@Nullable
private static VideoEncoderInfo resolveVideoEncoderInfo(
@NonNull Function<VideoEncoderConfig, VideoEncoderInfo> videoEncoderInfoFinder,
- @Nullable CamcorderProfileProxy camcorderProfileProxy,
+ @Nullable VideoValidatedEncoderProfilesProxy encoderProfiles,
@NonNull MediaSpec mediaSpec,
@NonNull Size resolution,
@NonNull Range<Integer> targetFps) {
// Resolve the VideoEncoderConfig
- MimeInfo videoMimeInfo = resolveVideoMimeInfo(mediaSpec, camcorderProfileProxy);
+ MimeInfo videoMimeInfo = resolveVideoMimeInfo(mediaSpec, encoderProfiles);
VideoEncoderConfig videoEncoderConfig = resolveVideoEncoderConfig(
videoMimeInfo,
// Timebase won't affect the found EncoderInfo so give a arbitrary one.
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java b/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java
index abc597f..9b9d46c 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java
@@ -16,8 +16,9 @@
package androidx.camera.video;
-import android.util.Range;
-import android.util.Size;
+import static androidx.camera.video.internal.config.VideoConfigUtil.resolveVideoEncoderConfig;
+import static androidx.camera.video.internal.config.VideoConfigUtil.resolveVideoMimeInfo;
+
import android.view.Surface;
import androidx.annotation.NonNull;
@@ -25,21 +26,18 @@
import androidx.annotation.RequiresApi;
import androidx.camera.core.Logger;
import androidx.camera.core.SurfaceRequest;
-import androidx.camera.core.impl.CamcorderProfileProxy;
import androidx.camera.core.impl.Timebase;
import androidx.camera.core.impl.annotation.ExecutedBy;
import androidx.camera.core.impl.utils.futures.FutureCallback;
import androidx.camera.core.impl.utils.futures.Futures;
+import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
import androidx.camera.video.internal.config.MimeInfo;
-import androidx.camera.video.internal.config.VideoEncoderConfigCamcorderProfileResolver;
-import androidx.camera.video.internal.config.VideoEncoderConfigDefaultResolver;
import androidx.camera.video.internal.encoder.Encoder;
import androidx.camera.video.internal.encoder.Encoder.SurfaceInput.OnSurfaceUpdateListener;
import androidx.camera.video.internal.encoder.EncoderFactory;
import androidx.camera.video.internal.encoder.InvalidConfigException;
import androidx.camera.video.internal.encoder.VideoEncoderConfig;
import androidx.concurrent.futures.CallbackToFutureAdapter;
-import androidx.core.util.Supplier;
import com.google.common.util.concurrent.ListenableFuture;
@@ -109,7 +107,7 @@
@ExecutedBy("mSequentialExecutor")
ListenableFuture<Encoder> configure(@NonNull SurfaceRequest surfaceRequest,
@NonNull Timebase timebase, @NonNull MediaSpec mediaSpec,
- @Nullable CamcorderProfileProxy resolvedCamcorderProfile) {
+ @Nullable VideoValidatedEncoderProfilesProxy resolvedEncoderProfiles) {
switch (mVideoEncoderState) {
case NOT_INITIALIZED:
mVideoEncoderState = VideoEncoderState.INITIALIZING;
@@ -127,7 +125,7 @@
ListenableFuture<Encoder> configureFuture = CallbackToFutureAdapter.getFuture(
completer -> {
configureVideoEncoderInternal(surfaceRequest, timebase,
- resolvedCamcorderProfile,
+ resolvedEncoderProfiles,
mediaSpec, completer);
return "ConfigureVideoEncoderFuture " + VideoEncoderSession.this;
});
@@ -286,10 +284,10 @@
@ExecutedBy("mSequentialExecutor")
private void configureVideoEncoderInternal(@NonNull SurfaceRequest surfaceRequest,
@NonNull Timebase timebase,
- @Nullable CamcorderProfileProxy resolvedCamcorderProfile,
+ @Nullable VideoValidatedEncoderProfilesProxy resolvedEncoderProfiles,
@NonNull MediaSpec mediaSpec,
@NonNull CallbackToFutureAdapter.Completer<Encoder> configureCompleter) {
- MimeInfo videoMimeInfo = resolveVideoMimeInfo(resolvedCamcorderProfile, mediaSpec);
+ MimeInfo videoMimeInfo = resolveVideoMimeInfo(mediaSpec, resolvedEncoderProfiles);
// The VideoSpec from mediaSpec only contains settings requested by the recorder, but
// the actual settings may need to differ depending on the FPS chosen by the camera.
@@ -371,69 +369,6 @@
}
}
- @ExecutedBy("mSequentialExecutor")
- private MimeInfo resolveVideoMimeInfo(@Nullable CamcorderProfileProxy resolvedCamcorderProfile,
- @NonNull MediaSpec mediaSpec) {
- String mediaSpecVideoMime = MediaSpec.outputFormatToVideoMime(mediaSpec.getOutputFormat());
- String resolvedVideoMime = mediaSpecVideoMime;
- boolean camcorderProfileIsCompatible = false;
- if (resolvedCamcorderProfile != null) {
- String camcorderProfileVideoMime = resolvedCamcorderProfile.getVideoCodecMimeType();
- // Use camcorder profile settings if the media spec's output format
- // is set to auto or happens to match the CamcorderProfile's output format.
- if (camcorderProfileVideoMime == null) {
- Logger.d(TAG, "CamcorderProfile contains undefined VIDEO mime type so cannot be "
- + "used. May rely on fallback defaults to derive settings "
- + "[chosen mime type: " + resolvedVideoMime + "]");
- } else if (mediaSpec.getOutputFormat() == MediaSpec.OUTPUT_FORMAT_AUTO) {
- camcorderProfileIsCompatible = true;
- resolvedVideoMime = camcorderProfileVideoMime;
- Logger.d(TAG, "MediaSpec contains OUTPUT_FORMAT_AUTO. Using CamcorderProfile "
- + "to derive VIDEO settings [mime type: " + resolvedVideoMime + "]");
- } else if (Objects.equals(mediaSpecVideoMime, camcorderProfileVideoMime)) {
- camcorderProfileIsCompatible = true;
- resolvedVideoMime = camcorderProfileVideoMime;
- Logger.d(TAG, "MediaSpec video mime matches CamcorderProfile. Using "
- + "CamcorderProfile to derive VIDEO settings [mime type: "
- + resolvedVideoMime + "]");
- } else {
- Logger.d(TAG, "MediaSpec video mime does not match CamcorderProfile, so "
- + "CamcorderProfile settings cannot be used. May rely on fallback "
- + "defaults to derive VIDEO settings [CamcorderProfile mime type: "
- + camcorderProfileVideoMime + ", chosen mime type: " + resolvedVideoMime
- + "]");
- }
- } else {
- Logger.d(TAG, "No CamcorderProfile present. May rely on fallback defaults to derive "
- + "VIDEO settings [chosen mime type: " + resolvedVideoMime + "]");
- }
-
- MimeInfo.Builder mimeInfoBuilder = MimeInfo.builder(resolvedVideoMime);
- if (camcorderProfileIsCompatible) {
- mimeInfoBuilder.setCompatibleCamcorderProfile(resolvedCamcorderProfile);
- }
-
- return mimeInfoBuilder.build();
- }
-
- @NonNull
- private static VideoEncoderConfig resolveVideoEncoderConfig(@NonNull MimeInfo videoMimeInfo,
- @NonNull Timebase timebase, @NonNull VideoSpec videoSpec, @NonNull Size surfaceSize,
- @Nullable Range<Integer> expectedFrameRateRange) {
- Supplier<VideoEncoderConfig> configSupplier;
- if (videoMimeInfo.getCompatibleCamcorderProfile() != null) {
- configSupplier = new VideoEncoderConfigCamcorderProfileResolver(
- videoMimeInfo.getMimeType(), timebase, videoSpec, surfaceSize,
- videoMimeInfo.getCompatibleCamcorderProfile(),
- expectedFrameRateRange);
- } else {
- configSupplier = new VideoEncoderConfigDefaultResolver(videoMimeInfo.getMimeType(),
- timebase, videoSpec, surfaceSize, expectedFrameRateRange);
- }
-
- return configSupplier.get();
- }
-
@NonNull
@Override
public String toString() {
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/ReportedVideoQualityNotSupportedQuirk.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/ReportedVideoQualityNotSupportedQuirk.java
index acf2bd5..d4bf9fe 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/ReportedVideoQualityNotSupportedQuirk.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/ReportedVideoQualityNotSupportedQuirk.java
@@ -25,7 +25,6 @@
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
-import androidx.camera.core.impl.CamcorderProfileProvider;
import androidx.camera.core.impl.CameraInfoInternal;
import androidx.camera.video.Quality;
@@ -33,7 +32,7 @@
import java.util.Locale;
/**
- * Quirk where qualities reported as available by {@link CamcorderProfileProvider#hasProfile(int)}
+ * Quirk where qualities reported as available by {@link CamcorderProfile#hasProfile(int)}
* does not work on the device, and should not be used.
*
* <p>QuirkSummary
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioConfigUtil.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioConfigUtil.java
index 61bea4c..9979dd5 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioConfigUtil.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioConfigUtil.java
@@ -16,6 +16,8 @@
package androidx.camera.video.internal.config;
+import static java.util.Objects.requireNonNull;
+
import android.util.Range;
import android.util.Rational;
@@ -23,11 +25,12 @@
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.camera.core.Logger;
-import androidx.camera.core.impl.CamcorderProfileProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy.AudioProfileProxy;
import androidx.camera.core.impl.Timebase;
import androidx.camera.video.AudioSpec;
import androidx.camera.video.MediaSpec;
import androidx.camera.video.internal.AudioSource;
+import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
import androidx.camera.video.internal.encoder.AudioEncoderConfig;
import androidx.core.util.Supplier;
@@ -60,48 +63,48 @@
* Resolves the audio mime information into a {@link MimeInfo}.
*
* @param mediaSpec the media spec to resolve the mime info.
- * @param camcorderProfile the camcorder profile to resolve the mime info. It can be null if
- * there is no relevant camcorder profile.
+ * @param encoderProfiles the encoder profiles to resolve the mime info. It can be null if
+ * there is no relevant encoder profiles.
* @return the audio MimeInfo.
*/
@NonNull
public static MimeInfo resolveAudioMimeInfo(@NonNull MediaSpec mediaSpec,
- @Nullable CamcorderProfileProxy camcorderProfile) {
+ @Nullable VideoValidatedEncoderProfilesProxy encoderProfiles) {
String mediaSpecAudioMime = MediaSpec.outputFormatToAudioMime(mediaSpec.getOutputFormat());
int mediaSpecAudioProfile =
MediaSpec.outputFormatToAudioProfile(mediaSpec.getOutputFormat());
String resolvedAudioMime = mediaSpecAudioMime;
int resolvedAudioProfile = mediaSpecAudioProfile;
- boolean camcorderProfileIsCompatible = false;
- if (camcorderProfile != null) {
- String camcorderProfileAudioMime = camcorderProfile.getAudioCodecMimeType();
- int camcorderProfileAudioProfile = camcorderProfile.getRequiredAudioProfile();
+ boolean encoderProfilesIsCompatible = false;
+ if (encoderProfiles != null && encoderProfiles.getDefaultAudioProfile() != null) {
+ AudioProfileProxy audioProfile = encoderProfiles.getDefaultAudioProfile();
+ String encoderProfileAudioMime = audioProfile.getMediaType();
+ int encoderProfileAudioProfile = audioProfile.getProfile();
- if (camcorderProfileAudioMime == null) {
- Logger.d(TAG, "CamcorderProfile contains undefined AUDIO mime type so cannot be "
+ if (Objects.equals(encoderProfileAudioMime, AudioProfileProxy.MEDIA_TYPE_NONE)) {
+ Logger.d(TAG, "EncoderProfiles contains undefined AUDIO mime type so cannot be "
+ "used. May rely on fallback defaults to derive settings [chosen mime "
+ "type: "
+ resolvedAudioMime + "(profile: " + resolvedAudioProfile + ")]");
} else if (mediaSpec.getOutputFormat() == MediaSpec.OUTPUT_FORMAT_AUTO) {
- camcorderProfileIsCompatible = true;
- resolvedAudioMime = camcorderProfileAudioMime;
- resolvedAudioProfile = camcorderProfileAudioProfile;
- Logger.d(TAG, "MediaSpec contains OUTPUT_FORMAT_AUTO. Using CamcorderProfile "
+ encoderProfilesIsCompatible = true;
+ resolvedAudioMime = encoderProfileAudioMime;
+ resolvedAudioProfile = encoderProfileAudioProfile;
+ Logger.d(TAG, "MediaSpec contains OUTPUT_FORMAT_AUTO. Using EncoderProfiles "
+ "to derive AUDIO settings [mime type: "
+ resolvedAudioMime + "(profile: " + resolvedAudioProfile + ")]");
- } else if (Objects.equals(mediaSpecAudioMime, camcorderProfileAudioMime)
- && mediaSpecAudioProfile == camcorderProfileAudioProfile) {
- camcorderProfileIsCompatible = true;
- resolvedAudioMime = camcorderProfileAudioMime;
- resolvedAudioProfile = camcorderProfileAudioProfile;
- Logger.d(TAG, "MediaSpec audio mime/profile matches CamcorderProfile. "
- + "Using CamcorderProfile to derive AUDIO settings [mime type: "
+ } else if (Objects.equals(mediaSpecAudioMime, encoderProfileAudioMime)
+ && mediaSpecAudioProfile == encoderProfileAudioProfile) {
+ encoderProfilesIsCompatible = true;
+ resolvedAudioMime = encoderProfileAudioMime;
+ Logger.d(TAG, "MediaSpec audio mime/profile matches EncoderProfiles. "
+ + "Using EncoderProfiles to derive AUDIO settings [mime type: "
+ resolvedAudioMime + "(profile: " + resolvedAudioProfile + ")]");
} else {
- Logger.d(TAG, "MediaSpec audio mime or profile does not match CamcorderProfile, so "
- + "CamcorderProfile settings cannot be used. May rely on fallback "
- + "defaults to derive AUDIO settings [CamcorderProfile mime type: "
- + camcorderProfileAudioMime + "(profile: " + camcorderProfileAudioProfile
+ Logger.d(TAG, "MediaSpec audio mime or profile does not match EncoderProfiles, so "
+ + "EncoderProfiles settings cannot be used. May rely on fallback defaults"
+ + " to derive AUDIO settings [EncoderProfiles mime type: "
+ + encoderProfileAudioMime + "(profile: " + encoderProfileAudioProfile
+ "), chosen mime type: "
+ resolvedAudioMime + "(profile: " + resolvedAudioProfile + ")]");
}
@@ -109,8 +112,8 @@
MimeInfo.Builder mimeInfoBuilder = MimeInfo.builder(resolvedAudioMime)
.setProfile(resolvedAudioProfile);
- if (camcorderProfileIsCompatible) {
- mimeInfoBuilder.setCompatibleCamcorderProfile(camcorderProfile);
+ if (encoderProfilesIsCompatible) {
+ mimeInfoBuilder.setCompatibleEncoderProfiles(encoderProfiles);
}
return mimeInfoBuilder.build();
@@ -127,9 +130,10 @@
public static AudioSource.Settings resolveAudioSourceSettings(@NonNull MimeInfo audioMimeInfo,
@NonNull AudioSpec audioSpec) {
Supplier<AudioSource.Settings> settingsSupplier;
- if (audioMimeInfo.getCompatibleCamcorderProfile() != null) {
- settingsSupplier = new AudioSourceSettingsCamcorderProfileResolver(audioSpec,
- audioMimeInfo.getCompatibleCamcorderProfile());
+ VideoValidatedEncoderProfilesProxy profiles = audioMimeInfo.getCompatibleEncoderProfiles();
+ if (profiles != null) {
+ AudioProfileProxy audioProfile = requireNonNull(profiles.getDefaultAudioProfile());
+ settingsSupplier = new AudioSourceSettingsAudioProfileResolver(audioSpec, audioProfile);
} else {
settingsSupplier = new AudioSourceSettingsDefaultResolver(audioSpec);
}
@@ -151,10 +155,12 @@
@NonNull Timebase inputTimebase, @NonNull AudioSource.Settings audioSourceSettings,
@NonNull AudioSpec audioSpec) {
Supplier<AudioEncoderConfig> configSupplier;
- if (audioMimeInfo.getCompatibleCamcorderProfile() != null) {
- configSupplier = new AudioEncoderConfigCamcorderProfileResolver(
+ VideoValidatedEncoderProfilesProxy profiles = audioMimeInfo.getCompatibleEncoderProfiles();
+ if (profiles != null) {
+ AudioProfileProxy audioProfile = requireNonNull(profiles.getDefaultAudioProfile());
+ configSupplier = new AudioEncoderConfigAudioProfileResolver(
audioMimeInfo.getMimeType(), audioMimeInfo.getProfile(), inputTimebase,
- audioSpec, audioSourceSettings, audioMimeInfo.getCompatibleCamcorderProfile());
+ audioSpec, audioSourceSettings, audioProfile);
} else {
configSupplier = new AudioEncoderConfigDefaultResolver(audioMimeInfo.getMimeType(),
audioMimeInfo.getProfile(), inputTimebase, audioSpec, audioSourceSettings);
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioEncoderConfigCamcorderProfileResolver.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioEncoderConfigAudioProfileResolver.java
similarity index 76%
rename from camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioEncoderConfigCamcorderProfileResolver.java
rename to camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioEncoderConfigAudioProfileResolver.java
index 21d59a3..167050f 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioEncoderConfigCamcorderProfileResolver.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioEncoderConfigAudioProfileResolver.java
@@ -22,7 +22,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.camera.core.Logger;
-import androidx.camera.core.impl.CamcorderProfileProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy.AudioProfileProxy;
import androidx.camera.core.impl.Timebase;
import androidx.camera.video.AudioSpec;
import androidx.camera.video.internal.AudioSource;
@@ -32,23 +32,23 @@
/**
* An {@link AudioEncoderConfig} supplier that resolves requested encoder settings from an
* {@link AudioSpec} for the given {@link AudioSource.Settings} using the provided
- * {@link CamcorderProfileProxy}.
+ * {@link AudioProfileProxy}.
*/
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-public final class AudioEncoderConfigCamcorderProfileResolver implements
+public final class AudioEncoderConfigAudioProfileResolver implements
Supplier<AudioEncoderConfig> {
- private static final String TAG = "AudioEncCmcrdrPrflRslvr";
+ private static final String TAG = "AudioEncAdPrflRslvr";
private final String mMimeType;
private final Timebase mInputTimebase;
private final int mAudioProfile;
private final AudioSpec mAudioSpec;
private final AudioSource.Settings mAudioSourceSettings;
- private final CamcorderProfileProxy mCamcorderProfile;
+ private final AudioProfileProxy mAudioProfileProxy;
/**
- * Constructor for an AudioEncoderConfigCamcorderProfileResolver.
+ * Constructor for an AudioEncoderConfigAudioProfileResolver.
*
* @param mimeType The mime type for the audio encoder
* @param audioProfile The profile required for the audio encoder
@@ -56,30 +56,30 @@
* @param audioSpec The {@link AudioSpec} which defines the settings that should be
* used with the audio encoder.
* @param audioSourceSettings The settings used to configure the source of audio.
- * @param camcorderProfile The {@link CamcorderProfileProxy} used to resolve automatic and
+ * @param audioProfileProxy The {@link AudioProfileProxy} used to resolve automatic and
* range settings.
*/
- public AudioEncoderConfigCamcorderProfileResolver(@NonNull String mimeType,
+ public AudioEncoderConfigAudioProfileResolver(@NonNull String mimeType,
int audioProfile, @NonNull Timebase inputTimebase, @NonNull AudioSpec audioSpec,
@NonNull AudioSource.Settings audioSourceSettings,
- @NonNull CamcorderProfileProxy camcorderProfile) {
+ @NonNull AudioProfileProxy audioProfileProxy) {
mMimeType = mimeType;
mAudioProfile = audioProfile;
mInputTimebase = inputTimebase;
mAudioSpec = audioSpec;
mAudioSourceSettings = audioSourceSettings;
- mCamcorderProfile = camcorderProfile;
+ mAudioProfileProxy = audioProfileProxy;
}
@Override
@NonNull
public AudioEncoderConfig get() {
- Logger.d(TAG, "Using resolved AUDIO bitrate from CamcorderProfile");
+ Logger.d(TAG, "Using resolved AUDIO bitrate from AudioProfile");
Range<Integer> audioSpecBitrateRange = mAudioSpec.getBitrate();
int resolvedBitrate = AudioConfigUtil.scaleAndClampBitrate(
- mCamcorderProfile.getAudioBitRate(),
- mAudioSourceSettings.getChannelCount(), mCamcorderProfile.getAudioChannels(),
- mAudioSourceSettings.getSampleRate(), mCamcorderProfile.getAudioSampleRate(),
+ mAudioProfileProxy.getBitrate(),
+ mAudioSourceSettings.getChannelCount(), mAudioProfileProxy.getChannels(),
+ mAudioSourceSettings.getSampleRate(), mAudioProfileProxy.getSampleRate(),
audioSpecBitrateRange);
return AudioEncoderConfig.builder()
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioSourceSettingsCamcorderProfileResolver.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioSourceSettingsAudioProfileResolver.java
similarity index 64%
rename from camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioSourceSettingsCamcorderProfileResolver.java
rename to camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioSourceSettingsAudioProfileResolver.java
index 8d6de0f..4b29d22 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioSourceSettingsCamcorderProfileResolver.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/AudioSourceSettingsAudioProfileResolver.java
@@ -21,36 +21,36 @@
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.camera.core.Logger;
-import androidx.camera.core.impl.CamcorderProfileProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy.AudioProfileProxy;
import androidx.camera.video.AudioSpec;
import androidx.camera.video.internal.AudioSource;
import androidx.core.util.Supplier;
/**
* An {@link AudioSource.Settings} supplier that resolves requested source settings from an
- * {@link AudioSpec} using a {@link CamcorderProfileProxy}.
+ * {@link AudioSpec} using an {@link AudioProfileProxy}.
*/
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-public final class AudioSourceSettingsCamcorderProfileResolver implements
+public final class AudioSourceSettingsAudioProfileResolver implements
Supplier<AudioSource.Settings> {
- private static final String TAG = "AudioSrcCmcrdrPrflRslvr";
+ private static final String TAG = "AudioSrcAdPrflRslvr";
private final AudioSpec mAudioSpec;
- private final CamcorderProfileProxy mCamcorderProfile;
+ private final AudioProfileProxy mAudioProfile;
/**
- * Constructor for an AudioSourceSettingsCamcorderProfileResolver.
+ * Constructor for an AudioSourceSettingsAudioProfileResolver.
*
- * @param camcorderProfile The {@link CamcorderProfileProxy} used to resolve automatic and
- * range settings.
- * @param audioSpec The {@link AudioSpec} which defines the settings that should be
- * used with the audio source.
+ * @param audioProfile The {@link AudioProfileProxy} used to resolve automatic and range
+ * settings.
+ * @param audioSpec The {@link AudioSpec} which defines the settings that should be used
+ * with the audio source.
*/
- public AudioSourceSettingsCamcorderProfileResolver(@NonNull AudioSpec audioSpec,
- @NonNull CamcorderProfileProxy camcorderProfile) {
+ public AudioSourceSettingsAudioProfileResolver(@NonNull AudioSpec audioSpec,
+ @NonNull AudioProfileProxy audioProfile) {
mAudioSpec = audioSpec;
- mCamcorderProfile = camcorderProfile;
+ mAudioProfile = audioProfile;
}
@Override
@@ -67,25 +67,25 @@
Range<Integer> audioSpecSampleRate = mAudioSpec.getSampleRate();
int resolvedSampleRate;
int resolvedChannelCount;
- int camcorderProfileChannelCount = mCamcorderProfile.getAudioChannels();
+ int audioProfileChannelCount = mAudioProfile.getChannels();
if (audioSpecChannelCount == AudioSpec.CHANNEL_COUNT_AUTO) {
- resolvedChannelCount = camcorderProfileChannelCount;
- Logger.d(TAG, "Resolved AUDIO channel count from CamcorderProfile: "
+ resolvedChannelCount = audioProfileChannelCount;
+ Logger.d(TAG, "Resolved AUDIO channel count from AudioProfile: "
+ resolvedChannelCount);
} else {
resolvedChannelCount = audioSpecChannelCount;
- Logger.d(TAG, "Media spec AUDIO channel count overrides CamcorderProfile "
- + "[CamcorderProfile channel count: " + camcorderProfileChannelCount
+ Logger.d(TAG, "Media spec AUDIO channel count overrides AudioProfile "
+ + "[AudioProfile channel count: " + audioProfileChannelCount
+ ", Resolved Channel Count: " + resolvedChannelCount + "]");
}
- int camcorderProfileAudioSampleRate = mCamcorderProfile.getAudioSampleRate();
+ int audioProfileSampleRate = mAudioProfile.getSampleRate();
resolvedSampleRate = AudioConfigUtil.selectSampleRateOrNearestSupported(
audioSpecSampleRate, resolvedChannelCount, resolvedSourceFormat,
- camcorderProfileAudioSampleRate);
+ audioProfileSampleRate);
Logger.d(TAG, "Using resolved AUDIO sample rate or nearest supported from "
- + "CamcorderProfile: " + resolvedSampleRate + "Hz. [CamcorderProfile sample rate: "
- + camcorderProfileAudioSampleRate + "Hz]");
+ + "AudioProfile: " + resolvedSampleRate + "Hz. [AudioProfile sample rate: "
+ + audioProfileSampleRate + "Hz]");
return AudioSource.Settings.builder()
.setAudioSource(resolvedAudioSource)
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/MimeInfo.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/MimeInfo.java
index 4fbbd71..983626b 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/MimeInfo.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/MimeInfo.java
@@ -19,7 +19,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
-import androidx.camera.core.impl.CamcorderProfileProxy;
+import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
import androidx.camera.video.internal.encoder.EncoderConfig;
import com.google.auto.value.AutoValue;
@@ -29,8 +29,9 @@
*
* <p>The information included in this class can include the mime type, profile and any
* compatible configuration types that can be used to resolve settings, such as
- * {@link androidx.camera.core.impl.CamcorderProfileProxy}.
+ * {@link VideoValidatedEncoderProfilesProxy}.
*/
+@SuppressWarnings("NullableProblems") // Problem from AutoValue generated class.
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
@AutoValue
public abstract class MimeInfo {
@@ -49,12 +50,13 @@
public abstract int getProfile();
/**
- * Returns compatible {@link CamcorderProfileProxy} that can be used to resolve settings.
+ * Returns compatible {@link VideoValidatedEncoderProfilesProxy} that can be used to resolve
+ * settings.
*
- * <p>If no camcorder profile is provided, returns {@code null}
+ * <p>If no EncoderProfiles is provided, returns {@code null}
*/
@Nullable
- public abstract CamcorderProfileProxy getCompatibleCamcorderProfile();
+ public abstract VideoValidatedEncoderProfilesProxy getCompatibleEncoderProfiles();
/** Creates a builder for the given mime type */
@NonNull
@@ -76,10 +78,10 @@
@NonNull
public abstract Builder setProfile(int profile);
- /** Sets a compatible camcorder profile */
+ /** Sets a compatible EncoderProfiles */
@NonNull
- public abstract Builder setCompatibleCamcorderProfile(
- @Nullable CamcorderProfileProxy camcorderProfile);
+ public abstract Builder setCompatibleEncoderProfiles(
+ @Nullable VideoValidatedEncoderProfilesProxy encoderProfiles);
/** Builds the {@link androidx.camera.video.internal.config.MimeInfo}. */
@NonNull
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoConfigUtil.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoConfigUtil.java
index 16416a7..8d3be191 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoConfigUtil.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoConfigUtil.java
@@ -24,10 +24,11 @@
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.camera.core.Logger;
-import androidx.camera.core.impl.CamcorderProfileProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy;
import androidx.camera.core.impl.Timebase;
import androidx.camera.video.MediaSpec;
import androidx.camera.video.VideoSpec;
+import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy;
import androidx.camera.video.internal.encoder.VideoEncoderConfig;
import androidx.core.util.Supplier;
@@ -48,51 +49,51 @@
* Resolves the video mime information into a {@link MimeInfo}.
*
* @param mediaSpec the media spec to resolve the mime info.
- * @param camcorderProfile the camcorder profile to resolve the mime info. It can be null if
- * there is no relevant camcorder profile.
+ * @param encoderProfiles the encoder profiles to resolve the mime info. It can be null if
+ * there is no relevant encoder profiles.
* @return the video MimeInfo.
*/
@NonNull
public static MimeInfo resolveVideoMimeInfo(@NonNull MediaSpec mediaSpec,
- @Nullable CamcorderProfileProxy camcorderProfile) {
+ @Nullable VideoValidatedEncoderProfilesProxy encoderProfiles) {
String mediaSpecVideoMime = MediaSpec.outputFormatToVideoMime(mediaSpec.getOutputFormat());
String resolvedVideoMime = mediaSpecVideoMime;
- boolean camcorderProfileIsCompatible = false;
- if (camcorderProfile != null) {
- String camcorderProfileVideoMime = camcorderProfile.getVideoCodecMimeType();
- // Use camcorder profile settings if the media spec's output format
- // is set to auto or happens to match the CamcorderProfile's output format.
- if (camcorderProfileVideoMime == null) {
- Logger.d(TAG, "CamcorderProfile contains undefined VIDEO mime type so cannot be "
+ boolean encoderProfilesIsCompatible = false;
+ if (encoderProfiles != null) {
+ VideoProfileProxy videoProfile = encoderProfiles.getDefaultVideoProfile();
+ String encoderProfilesVideoMime = videoProfile.getMediaType();
+ // Use EncoderProfiles settings if the media spec's output format is set to auto or
+ // happens to match the EncoderProfiles' output format.
+ if (Objects.equals(encoderProfilesVideoMime, VideoProfileProxy.MEDIA_TYPE_NONE)) {
+ Logger.d(TAG, "EncoderProfiles contains undefined VIDEO mime type so cannot be "
+ "used. May rely on fallback defaults to derive settings [chosen mime "
+ "type: " + resolvedVideoMime + "]");
} else if (mediaSpec.getOutputFormat() == MediaSpec.OUTPUT_FORMAT_AUTO) {
- camcorderProfileIsCompatible = true;
- resolvedVideoMime = camcorderProfileVideoMime;
- Logger.d(TAG, "MediaSpec contains OUTPUT_FORMAT_AUTO. Using CamcorderProfile "
+ encoderProfilesIsCompatible = true;
+ resolvedVideoMime = encoderProfilesVideoMime;
+ Logger.d(TAG, "MediaSpec contains OUTPUT_FORMAT_AUTO. Using EncoderProfiles "
+ "to derive VIDEO settings [mime type: " + resolvedVideoMime + "]");
- } else if (Objects.equals(mediaSpecVideoMime, camcorderProfileVideoMime)) {
- camcorderProfileIsCompatible = true;
- resolvedVideoMime = camcorderProfileVideoMime;
- Logger.d(TAG, "MediaSpec video mime matches CamcorderProfile. Using "
- + "CamcorderProfile to derive VIDEO settings [mime type: "
+ } else if (Objects.equals(mediaSpecVideoMime, encoderProfilesVideoMime)) {
+ encoderProfilesIsCompatible = true;
+ resolvedVideoMime = encoderProfilesVideoMime;
+ Logger.d(TAG, "MediaSpec video mime matches EncoderProfiles. Using "
+ + "EncoderProfiles to derive VIDEO settings [mime type: "
+ resolvedVideoMime + "]");
} else {
- Logger.d(TAG, "MediaSpec video mime does not match CamcorderProfile, so "
- + "CamcorderProfile settings cannot be used. May rely on fallback "
- + "defaults to derive VIDEO settings [CamcorderProfile mime type: "
- + camcorderProfileVideoMime + ", chosen mime type: "
+ Logger.d(TAG, "MediaSpec video mime does not match EncoderProfiles, so "
+ + "EncoderProfiles settings cannot be used. May rely on fallback "
+ + "defaults to derive VIDEO settings [EncoderProfiles mime type: "
+ + encoderProfilesVideoMime + ", chosen mime type: "
+ resolvedVideoMime + "]");
}
} else {
- Logger.d(TAG,
- "No CamcorderProfile present. May rely on fallback defaults to derive VIDEO "
- + "settings [chosen mime type: " + resolvedVideoMime + "]");
+ Logger.d(TAG, "No EncoderProfiles present. May rely on fallback defaults to derive "
+ + "VIDEO settings [chosen mime type: " + resolvedVideoMime + "]");
}
MimeInfo.Builder mimeInfoBuilder = MimeInfo.builder(resolvedVideoMime);
- if (camcorderProfileIsCompatible) {
- mimeInfoBuilder.setCompatibleCamcorderProfile(camcorderProfile);
+ if (encoderProfilesIsCompatible) {
+ mimeInfoBuilder.setCompatibleEncoderProfiles(encoderProfiles);
}
return mimeInfoBuilder.build();
@@ -113,11 +114,11 @@
@NonNull Timebase inputTimebase, @NonNull VideoSpec videoSpec,
@NonNull Size surfaceSize, @Nullable Range<Integer> expectedFrameRateRange) {
Supplier<VideoEncoderConfig> configSupplier;
- if (videoMimeInfo.getCompatibleCamcorderProfile() != null) {
- configSupplier = new VideoEncoderConfigCamcorderProfileResolver(
+ VideoValidatedEncoderProfilesProxy profiles = videoMimeInfo.getCompatibleEncoderProfiles();
+ if (profiles != null) {
+ configSupplier = new VideoEncoderConfigVideoProfileResolver(
videoMimeInfo.getMimeType(), inputTimebase, videoSpec, surfaceSize,
- videoMimeInfo.getCompatibleCamcorderProfile(),
- expectedFrameRateRange);
+ profiles.getDefaultVideoProfile(), expectedFrameRateRange);
} else {
configSupplier = new VideoEncoderConfigDefaultResolver(videoMimeInfo.getMimeType(),
inputTimebase, videoSpec, surfaceSize, expectedFrameRateRange);
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigCamcorderProfileResolver.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolver.java
similarity index 72%
rename from camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigCamcorderProfileResolver.java
rename to camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolver.java
index 5020129..0009f26 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigCamcorderProfileResolver.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/config/VideoEncoderConfigVideoProfileResolver.java
@@ -23,7 +23,7 @@
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.camera.core.Logger;
-import androidx.camera.core.impl.CamcorderProfileProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy;
import androidx.camera.core.impl.Timebase;
import androidx.camera.video.VideoSpec;
import androidx.camera.video.internal.encoder.VideoEncoderConfig;
@@ -32,49 +32,49 @@
/**
* A {@link VideoEncoderConfig} supplier that resolves requested encoder settings from a
* {@link VideoSpec} for the given surface {@link Size} using the provided
- * {@link CamcorderProfileProxy}.
+ * {@link VideoProfileProxy}.
*/
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-public class VideoEncoderConfigCamcorderProfileResolver implements Supplier<VideoEncoderConfig> {
+public class VideoEncoderConfigVideoProfileResolver implements Supplier<VideoEncoderConfig> {
- private static final String TAG = "VidEncCmcrdrPrflRslvr";
+ private static final String TAG = "VidEncVdPrflRslvr";
private final String mMimeType;
private final Timebase mInputTimebase;
private final VideoSpec mVideoSpec;
private final Size mSurfaceSize;
- private final CamcorderProfileProxy mCamcorderProfile;
+ private final VideoProfileProxy mVideoProfile;
@Nullable
private final Range<Integer> mExpectedFrameRateRange;
/**
- * Constructor for a VideoEncoderConfigCamcorderProfileResolver.
+ * Constructor for a VideoEncoderConfigVideoProfileResolver.
*
* @param mimeType The mime type for the video encoder
* @param inputTimebase The timebase of the input frame
* @param videoSpec The {@link VideoSpec} which defines the settings that should be
* used with the video encoder.
* @param surfaceSize The size of the surface required by the camera for the video encoder.
- * @param camcorderProfile The {@link CamcorderProfileProxy} used to resolve automatic and
- * range settings.
+ * @param videoProfile The {@link VideoProfileProxy} used to resolve automatic and range
+ * settings.
* @param expectedFrameRateRange The expected source frame rate range. This should act as an
* envelope for any frame rate calculated from {@code videoSpec
- * } and {@code camcorderProfile} since the source should not
+ * } and {@code videoProfile} since the source should not
* produce frames at a frame rate outside this range. If {@code
* null}, then no information about the source frame rate is
* available and it does not need to be used in calculations.
*/
- public VideoEncoderConfigCamcorderProfileResolver(@NonNull String mimeType,
+ public VideoEncoderConfigVideoProfileResolver(@NonNull String mimeType,
@NonNull Timebase inputTimebase,
@NonNull VideoSpec videoSpec,
@NonNull Size surfaceSize,
- @NonNull CamcorderProfileProxy camcorderProfile,
+ @NonNull VideoProfileProxy videoProfile,
@Nullable Range<Integer> expectedFrameRateRange) {
mMimeType = mimeType;
mInputTimebase = inputTimebase;
mVideoSpec = videoSpec;
mSurfaceSize = surfaceSize;
- mCamcorderProfile = camcorderProfile;
+ mVideoProfile = videoProfile;
mExpectedFrameRateRange = expectedFrameRateRange;
}
@@ -85,12 +85,12 @@
Logger.d(TAG, "Resolved VIDEO frame rate: " + resolvedFrameRate + "fps");
Range<Integer> videoSpecBitrateRange = mVideoSpec.getBitrate();
- Logger.d(TAG, "Using resolved VIDEO bitrate from CamcorderProfile");
+ Logger.d(TAG, "Using resolved VIDEO bitrate from EncoderProfiles");
int resolvedBitrate = VideoConfigUtil.scaleAndClampBitrate(
- mCamcorderProfile.getVideoBitRate(),
- resolvedFrameRate, mCamcorderProfile.getVideoFrameRate(),
- mSurfaceSize.getWidth(), mCamcorderProfile.getVideoFrameWidth(),
- mSurfaceSize.getHeight(), mCamcorderProfile.getVideoFrameHeight(),
+ mVideoProfile.getBitrate(),
+ resolvedFrameRate, mVideoProfile.getFrameRate(),
+ mSurfaceSize.getWidth(), mVideoProfile.getWidth(),
+ mSurfaceSize.getHeight(), mVideoProfile.getHeight(),
videoSpecBitrateRange);
return VideoEncoderConfig.builder()
@@ -104,15 +104,15 @@
private int resolveFrameRate() {
Range<Integer> videoSpecFrameRateRange = mVideoSpec.getFrameRate();
- int camcorderProfileVideoFrameRate = mCamcorderProfile.getVideoFrameRate();
+ int videoProfileFrameRate = mVideoProfile.getFrameRate();
Logger.d(TAG,
- String.format("Frame rate from camcorder profile: %dfps. [Requested range: %s, "
- + "Expected operating range: %s]", camcorderProfileVideoFrameRate,
+ String.format("Frame rate from video profile: %dfps. [Requested range: %s, "
+ + "Expected operating range: %s]", videoProfileFrameRate,
videoSpecFrameRateRange, mExpectedFrameRateRange));
return VideoConfigUtil.resolveFrameRate(
/*preferredRange=*/ videoSpecFrameRateRange,
- /*exactFrameRateHint=*/ camcorderProfileVideoFrameRate,
+ /*exactFrameRateHint=*/ videoProfileFrameRate,
/*strictOperatingFpsRange=*/mExpectedFrameRateRange);
}
}
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/encoder/EncoderConfig.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/encoder/EncoderConfig.java
index b3596b2..7d2f985 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/encoder/EncoderConfig.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/encoder/EncoderConfig.java
@@ -20,7 +20,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
-import androidx.camera.core.impl.CamcorderProfileProxy;
+import androidx.camera.core.impl.EncoderProfilesProxy;
import androidx.camera.core.impl.Timebase;
/**
@@ -32,7 +32,7 @@
public interface EncoderConfig {
/** Constant corresponding to no profile for the encoder */
- int CODEC_PROFILE_NONE = CamcorderProfileProxy.CODEC_PROFILE_NONE;
+ int CODEC_PROFILE_NONE = EncoderProfilesProxy.CODEC_PROFILE_NONE;
/**
* The mime type of the encoder.
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/QualitySelectorTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/QualitySelectorTest.kt
index 8e7dd14..664c481 100644
--- a/camera/camera-video/src/test/java/androidx/camera/video/QualitySelectorTest.kt
+++ b/camera/camera-video/src/test/java/androidx/camera/video/QualitySelectorTest.kt
@@ -16,16 +16,21 @@
package androidx.camera.video
+import android.media.CamcorderProfile.QUALITY_1080P
+import android.media.CamcorderProfile.QUALITY_2160P
+import android.media.CamcorderProfile.QUALITY_480P
+import android.media.CamcorderProfile.QUALITY_720P
+import android.media.CamcorderProfile.QUALITY_HIGH
+import android.media.CamcorderProfile.QUALITY_LOW
import android.os.Build
-import androidx.camera.testing.CamcorderProfileUtil
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_1080P
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_2160P
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_480P
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_720P
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_2160P
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_720P
-import androidx.camera.testing.fakes.FakeCamcorderProfileProvider
+import androidx.camera.testing.EncoderProfilesUtil.RESOLUTION_2160P
+import androidx.camera.testing.EncoderProfilesUtil.RESOLUTION_720P
+import androidx.camera.testing.EncoderProfilesUtil.PROFILES_1080P
+import androidx.camera.testing.EncoderProfilesUtil.PROFILES_2160P
+import androidx.camera.testing.EncoderProfilesUtil.PROFILES_480P
+import androidx.camera.testing.EncoderProfilesUtil.PROFILES_720P
import androidx.camera.testing.fakes.FakeCameraInfoInternal
+import androidx.camera.testing.fakes.FakeEncoderProfilesProvider
import com.google.common.truth.Truth.assertThat
import org.junit.Assert.assertThrows
import org.junit.Test
@@ -36,10 +41,6 @@
private const val CAMERA_ID_0 = "0"
private const val CAMERA_ID_1 = "1"
-private val CAMERA_0_PROFILE_HIGH = CamcorderProfileUtil.asHighQuality(PROFILE_2160P)
-private val CAMERA_0_PROFILE_LOW = CamcorderProfileUtil.asLowQuality(PROFILE_720P)
-private val CAMERA_1_PROFILE_HIGH = CamcorderProfileUtil.asHighQuality(PROFILE_1080P)
-private val CAMERA_1_PROFILE_LOW = CamcorderProfileUtil.asLowQuality(PROFILE_480P)
@RunWith(RobolectricTestRunner::class)
@DoNotInstrument
@@ -47,22 +48,20 @@
class QualitySelectorTest {
private val cameraInfo0 = FakeCameraInfoInternal(CAMERA_ID_0).apply {
- camcorderProfileProvider = FakeCamcorderProfileProvider.Builder()
- .addProfile(
- CAMERA_0_PROFILE_HIGH,
- PROFILE_2160P,
- PROFILE_720P,
- CAMERA_0_PROFILE_LOW
- ).build()
+ encoderProfilesProvider = FakeEncoderProfilesProvider.Builder()
+ .add(QUALITY_HIGH, PROFILES_2160P)
+ .add(QUALITY_2160P, PROFILES_2160P)
+ .add(QUALITY_720P, PROFILES_720P)
+ .add(QUALITY_LOW, PROFILES_720P)
+ .build()
}
private val cameraInfo1 = FakeCameraInfoInternal(CAMERA_ID_1).apply {
- camcorderProfileProvider = FakeCamcorderProfileProvider.Builder()
- .addProfile(
- CAMERA_1_PROFILE_HIGH,
- PROFILE_1080P,
- PROFILE_480P,
- CAMERA_1_PROFILE_LOW
- ).build()
+ encoderProfilesProvider = FakeEncoderProfilesProvider.Builder()
+ .add(QUALITY_HIGH, PROFILES_1080P)
+ .add(QUALITY_1080P, PROFILES_1080P)
+ .add(QUALITY_480P, PROFILES_480P)
+ .add(QUALITY_LOW, PROFILES_480P)
+ .build()
}
@Test
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/VideoCapabilitiesTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/VideoCapabilitiesTest.kt
index b77ffb6..8accf99 100644
--- a/camera/camera-video/src/test/java/androidx/camera/video/VideoCapabilitiesTest.kt
+++ b/camera/camera-video/src/test/java/androidx/camera/video/VideoCapabilitiesTest.kt
@@ -16,13 +16,18 @@
package androidx.camera.video
+import android.media.CamcorderProfile.QUALITY_2160P
+import android.media.CamcorderProfile.QUALITY_720P
+import android.media.CamcorderProfile.QUALITY_HIGH
+import android.media.CamcorderProfile.QUALITY_LOW
import android.os.Build
import android.util.Size
-import androidx.camera.testing.CamcorderProfileUtil
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_2160P
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_720P
-import androidx.camera.testing.fakes.FakeCamcorderProfileProvider
+import androidx.camera.testing.EncoderProfilesUtil
+import androidx.camera.testing.EncoderProfilesUtil.PROFILES_2160P
+import androidx.camera.testing.EncoderProfilesUtil.PROFILES_720P
import androidx.camera.testing.fakes.FakeCameraInfoInternal
+import androidx.camera.testing.fakes.FakeEncoderProfilesProvider
+import androidx.camera.video.internal.VideoValidatedEncoderProfilesProxy
import androidx.core.util.component1
import androidx.core.util.component2
import com.google.common.truth.Truth.assertThat
@@ -32,22 +37,21 @@
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
-private val PROFILE_HIGH = CamcorderProfileUtil.asHighQuality(PROFILE_2160P)
-private val PROFILE_LOW = CamcorderProfileUtil.asLowQuality(PROFILE_720P)
-
@RunWith(RobolectricTestRunner::class)
@DoNotInstrument
@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
class VideoCapabilitiesTest {
private val cameraInfo = FakeCameraInfoInternal().apply {
- camcorderProfileProvider = FakeCamcorderProfileProvider.Builder()
- .addProfile(PROFILE_HIGH) // UHD (2160p) per above definition
- .addProfile(PROFILE_2160P) // UHD (2160p)
- .addProfile(PROFILE_720P) // HD (720p)
- .addProfile(PROFILE_LOW) // HD (720p) per above definition
+ encoderProfilesProvider = FakeEncoderProfilesProvider.Builder()
+ .add(QUALITY_HIGH, PROFILES_2160P) // UHD (2160p) per above definition
+ .add(QUALITY_2160P, PROFILES_2160P) // UHD (2160p)
+ .add(QUALITY_720P, PROFILES_720P) // HD (720p)
+ .add(QUALITY_LOW, PROFILES_720P) // HD (720p) per above definition
.build()
}
+ private val validatedProfiles2160p = VideoValidatedEncoderProfilesProxy.from(PROFILES_2160P)
+ private val validatedProfiles720p = VideoValidatedEncoderProfilesProxy.from(PROFILES_720P)
@Test
fun isQualitySupported() {
@@ -63,23 +67,19 @@
@Test
fun getProfile() {
val videoCapabilities = VideoCapabilities.from(cameraInfo)
- assertThat(videoCapabilities.getProfile(Quality.HIGHEST))
- .isEqualTo(PROFILE_2160P)
- assertThat(videoCapabilities.getProfile(Quality.LOWEST))
- .isEqualTo(PROFILE_720P)
- assertThat(videoCapabilities.getProfile(Quality.UHD))
- .isEqualTo(PROFILE_2160P)
- assertThat(videoCapabilities.getProfile(Quality.FHD)).isNull()
- assertThat(videoCapabilities.getProfile(Quality.HD))
- .isEqualTo(PROFILE_720P)
- assertThat(videoCapabilities.getProfile(Quality.SD)).isNull()
+ assertThat(videoCapabilities.getProfiles(Quality.HIGHEST)).isEqualTo(validatedProfiles2160p)
+ assertThat(videoCapabilities.getProfiles(Quality.LOWEST)).isEqualTo(validatedProfiles720p)
+ assertThat(videoCapabilities.getProfiles(Quality.UHD)).isEqualTo(validatedProfiles2160p)
+ assertThat(videoCapabilities.getProfiles(Quality.FHD)).isNull()
+ assertThat(videoCapabilities.getProfiles(Quality.HD)).isEqualTo(validatedProfiles720p)
+ assertThat(videoCapabilities.getProfiles(Quality.SD)).isNull()
}
@Test
fun findHighestSupportedQuality_returnsHigherQuality() {
val videoCapabilities = VideoCapabilities.from(cameraInfo)
// Create a size between 720p and 2160p
- val (width720p, height720p) = CamcorderProfileUtil.RESOLUTION_720P
+ val (width720p, height720p) = EncoderProfilesUtil.RESOLUTION_720P
val inBetweenSize = Size(width720p + 10, height720p)
assertThat(videoCapabilities.findHighestSupportedQualityFor(inBetweenSize))
@@ -90,7 +90,7 @@
fun findHighestSupportedQuality_returnsHighestQuality_whenAboveHighest() {
val videoCapabilities = VideoCapabilities.from(cameraInfo)
// Create a size between greater than the max quality (UHD)
- val (width2160p, height2160p) = CamcorderProfileUtil.RESOLUTION_2160P
+ val (width2160p, height2160p) = EncoderProfilesUtil.RESOLUTION_2160P
val aboveHighestSize = Size(width2160p + 10, height2160p)
assertThat(videoCapabilities.findHighestSupportedQualityFor(aboveHighestSize))
@@ -101,7 +101,7 @@
fun findHighestSupportedQuality_returnsLowestQuality_whenBelowLowest() {
val videoCapabilities = VideoCapabilities.from(cameraInfo)
// Create a size below the lowest quality (HD)
- val (width720p, height720p) = CamcorderProfileUtil.RESOLUTION_720P
+ val (width720p, height720p) = EncoderProfilesUtil.RESOLUTION_720P
val belowLowestSize = Size(width720p - 10, height720p)
assertThat(videoCapabilities.findHighestSupportedQualityFor(belowLowestSize))
@@ -111,51 +111,51 @@
@Test
fun findHighestSupportedQuality_returnsExactQuality_whenExactSizeGiven() {
val videoCapabilities = VideoCapabilities.from(cameraInfo)
- val exactSize720p = CamcorderProfileUtil.RESOLUTION_720P
+ val exactSize720p = EncoderProfilesUtil.RESOLUTION_720P
assertThat(videoCapabilities.findHighestSupportedQualityFor(exactSize720p))
.isEqualTo(Quality.HD)
}
@Test
- fun findHighestSupportedCamcorderProfileFor_returnsHigherProfile() {
+ fun findHighestSupportedEncoderProfilesFor_returnsHigherProfile() {
val videoCapabilities = VideoCapabilities.from(cameraInfo)
// Create a size between 720p and 2160p
- val (width720p, height720p) = CamcorderProfileUtil.RESOLUTION_720P
+ val (width720p, height720p) = EncoderProfilesUtil.RESOLUTION_720P
val inBetweenSize = Size(width720p + 10, height720p)
- assertThat(videoCapabilities.findHighestSupportedCamcorderProfileFor(inBetweenSize))
- .isEqualTo(PROFILE_2160P)
+ assertThat(videoCapabilities.findHighestSupportedEncoderProfilesFor(inBetweenSize))
+ .isEqualTo(validatedProfiles2160p)
}
@Test
- fun findHighestSupportedCamcorderProfileFor_returnsHighestProfile_whenAboveHighest() {
+ fun findHighestSupportedEncoderProfilesFor_returnsHighestProfile_whenAboveHighest() {
val videoCapabilities = VideoCapabilities.from(cameraInfo)
// Create a size between greater than the max quality (UHD)
- val (width2160p, height2160p) = CamcorderProfileUtil.RESOLUTION_2160P
+ val (width2160p, height2160p) = EncoderProfilesUtil.RESOLUTION_2160P
val aboveHighestSize = Size(width2160p + 10, height2160p)
- assertThat(videoCapabilities.findHighestSupportedCamcorderProfileFor(aboveHighestSize))
- .isEqualTo(PROFILE_2160P)
+ assertThat(videoCapabilities.findHighestSupportedEncoderProfilesFor(aboveHighestSize))
+ .isEqualTo(validatedProfiles2160p)
}
@Test
- fun findHighestSupportedCamcorderProfileFor_returnsLowestProfile_whenBelowLowest() {
+ fun findHighestSupportedEncoderProfilesFor_returnsLowestProfile_whenBelowLowest() {
val videoCapabilities = VideoCapabilities.from(cameraInfo)
// Create a size below the lowest quality (HD)
- val (width720p, height720p) = CamcorderProfileUtil.RESOLUTION_720P
+ val (width720p, height720p) = EncoderProfilesUtil.RESOLUTION_720P
val belowLowestSize = Size(width720p - 10, height720p)
- assertThat(videoCapabilities.findHighestSupportedCamcorderProfileFor(belowLowestSize))
- .isEqualTo(PROFILE_720P)
+ assertThat(videoCapabilities.findHighestSupportedEncoderProfilesFor(belowLowestSize))
+ .isEqualTo(validatedProfiles720p)
}
@Test
- fun findHighestSupportedCamcorderProfileFor_returnsExactProfile_whenExactSizeGiven() {
+ fun findHighestSupportedEncoderProfilesFor_returnsExactProfile_whenExactSizeGiven() {
val videoCapabilities = VideoCapabilities.from(cameraInfo)
- val exactSize720p = CamcorderProfileUtil.RESOLUTION_720P
+ val exactSize720p = EncoderProfilesUtil.RESOLUTION_720P
- assertThat(videoCapabilities.findHighestSupportedCamcorderProfileFor(exactSize720p))
- .isEqualTo(PROFILE_720P)
+ assertThat(videoCapabilities.findHighestSupportedEncoderProfilesFor(exactSize720p))
+ .isEqualTo(validatedProfiles720p)
}
}
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/VideoCaptureTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/VideoCaptureTest.kt
index dd46cef..d94802f 100644
--- a/camera/camera-video/src/test/java/androidx/camera/video/VideoCaptureTest.kt
+++ b/camera/camera-video/src/test/java/androidx/camera/video/VideoCaptureTest.kt
@@ -18,6 +18,12 @@
import android.content.Context
import android.graphics.Rect
+import android.media.CamcorderProfile.QUALITY_1080P
+import android.media.CamcorderProfile.QUALITY_2160P
+import android.media.CamcorderProfile.QUALITY_480P
+import android.media.CamcorderProfile.QUALITY_720P
+import android.media.CamcorderProfile.QUALITY_HIGH
+import android.media.CamcorderProfile.QUALITY_LOW
import android.os.Build
import android.os.Looper
import android.util.Range
@@ -26,15 +32,16 @@
import androidx.arch.core.util.Function
import androidx.camera.core.AspectRatio.RATIO_16_9
import androidx.camera.core.AspectRatio.RATIO_4_3
+import androidx.camera.core.CameraEffect
import androidx.camera.core.CameraEffect.VIDEO_CAPTURE
import androidx.camera.core.CameraSelector
import androidx.camera.core.CameraSelector.LENS_FACING_BACK
import androidx.camera.core.CameraXConfig
import androidx.camera.core.SurfaceRequest
import androidx.camera.core.UseCase
-import androidx.camera.core.impl.CamcorderProfileProxy
import androidx.camera.core.impl.CameraFactory
import androidx.camera.core.impl.CameraInfoInternal
+import androidx.camera.core.impl.EncoderProfilesProxy
import androidx.camera.core.impl.ImageFormatConstants
import androidx.camera.core.impl.ImageOutputConfig
import androidx.camera.core.impl.MutableStateObservable
@@ -47,27 +54,26 @@
import androidx.camera.core.impl.utils.executor.CameraXExecutors.directExecutor
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
import androidx.camera.core.internal.CameraUseCaseAdapter
-import androidx.camera.core.processing.SurfaceProcessorInternal
-import androidx.camera.testing.CamcorderProfileUtil
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_1080P
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_2160P
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_480P
-import androidx.camera.testing.CamcorderProfileUtil.PROFILE_720P
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_1080P
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_2160P
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_480P
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_720P
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_QHD
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_QVGA
-import androidx.camera.testing.CamcorderProfileUtil.RESOLUTION_VGA
+import androidx.camera.testing.EncoderProfilesUtil.PROFILES_1080P
+import androidx.camera.testing.EncoderProfilesUtil.PROFILES_2160P
+import androidx.camera.testing.EncoderProfilesUtil.PROFILES_480P
+import androidx.camera.testing.EncoderProfilesUtil.PROFILES_720P
+import androidx.camera.testing.EncoderProfilesUtil.RESOLUTION_1080P
+import androidx.camera.testing.EncoderProfilesUtil.RESOLUTION_2160P
+import androidx.camera.testing.EncoderProfilesUtil.RESOLUTION_480P
+import androidx.camera.testing.EncoderProfilesUtil.RESOLUTION_720P
+import androidx.camera.testing.EncoderProfilesUtil.RESOLUTION_QHD
+import androidx.camera.testing.EncoderProfilesUtil.RESOLUTION_QVGA
+import androidx.camera.testing.EncoderProfilesUtil.RESOLUTION_VGA
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.CameraXUtil
import androidx.camera.testing.fakes.FakeAppConfig
-import androidx.camera.testing.fakes.FakeCamcorderProfileProvider
import androidx.camera.testing.fakes.FakeCamera
import androidx.camera.testing.fakes.FakeCameraDeviceSurfaceManager
import androidx.camera.testing.fakes.FakeCameraFactory
import androidx.camera.testing.fakes.FakeCameraInfoInternal
+import androidx.camera.testing.fakes.FakeEncoderProfilesProvider
+import androidx.camera.testing.fakes.FakeSurfaceEffect
import androidx.camera.testing.fakes.FakeSurfaceProcessorInternal
import androidx.camera.video.Quality.FHD
import androidx.camera.video.Quality.HD
@@ -100,11 +106,11 @@
private val ANY_SIZE = Size(640, 480)
private const val CAMERA_ID_0 = "0"
-private val CAMERA_0_PROFILES = arrayOf(
- CamcorderProfileUtil.asHighQuality(PROFILE_2160P),
- PROFILE_2160P,
- PROFILE_720P,
- CamcorderProfileUtil.asLowQuality(PROFILE_720P)
+private val CAMERA_0_PROFILES = mapOf(
+ QUALITY_HIGH to PROFILES_2160P,
+ QUALITY_2160P to PROFILES_2160P,
+ QUALITY_720P to PROFILES_720P,
+ QUALITY_LOW to PROFILES_720P,
)
@RunWith(RobolectricTestRunner::class)
@@ -145,8 +151,7 @@
fun setNoCameraTransform_propagatesToCameraEdge() {
// Arrange.
setupCamera()
- val processor = createFakeSurfaceProcessor()
- val videoCapture = createVideoCapture(createVideoOutput(), processor = processor)
+ val videoCapture = createVideoCapture(createVideoOutput(), effect = createFakeEffect())
// Act: set no transform and create pipeline.
videoCapture.hasCameraTransform = false
videoCapture.bindToCamera(camera, null, null)
@@ -163,8 +168,7 @@
// Arrange.
setupCamera()
createCameraUseCaseAdapter()
- val processor = createFakeSurfaceProcessor()
- val videoCapture = createVideoCapture(createVideoOutput(), processor = processor)
+ val videoCapture = createVideoCapture(createVideoOutput(), effect = createFakeEffect())
// Act.
addAndAttachUseCases(videoCapture)
// Assert.
@@ -199,7 +203,7 @@
fun enableProcessor_sensorRotationIs0AndSetTargetRotation_sendCorrectResolution() {
testSetRotationWillSendCorrectResolution(
sensorRotation = 0,
- processor = createFakeSurfaceProcessor()
+ effect = createFakeEffect()
)
}
@@ -207,7 +211,7 @@
fun enableProcessor_sensorRotationIs90AndSetTargetRotation_sendCorrectResolution() {
testSetRotationWillSendCorrectResolution(
sensorRotation = 90,
- processor = createFakeSurfaceProcessor()
+ effect = createFakeEffect()
)
}
@@ -215,7 +219,7 @@
fun enableProcessor_sensorRotationIs180AndSetTargetRotation_sendCorrectResolution() {
testSetRotationWillSendCorrectResolution(
sensorRotation = 180,
- processor = createFakeSurfaceProcessor()
+ effect = createFakeEffect()
)
}
@@ -223,7 +227,7 @@
fun enableProcessor_sensorRotationIs270AndSetTargetRotation_sendCorrectResolution() {
testSetRotationWillSendCorrectResolution(
sensorRotation = 270,
- processor = createFakeSurfaceProcessor()
+ effect = createFakeEffect()
)
}
@@ -233,7 +237,7 @@
setupCamera()
createCameraUseCaseAdapter()
val videoCapture =
- createVideoCapture(createVideoOutput(), processor = createFakeSurfaceProcessor())
+ createVideoCapture(createVideoOutput(), effect = createFakeEffect())
addAndAttachUseCases(videoCapture)
// Act: invalidate.
videoCapture.surfaceRequest.invalidate()
@@ -247,8 +251,9 @@
// Arrange: create videoCapture.
setupCamera()
createCameraUseCaseAdapter()
- val processor = createFakeSurfaceProcessor()
- val videoCapture = createVideoCapture(createVideoOutput(), processor = processor)
+ val processor = FakeSurfaceProcessorInternal(mainThreadExecutor())
+ val effect = createFakeEffect(processor = processor)
+ val videoCapture = createVideoCapture(createVideoOutput(), effect = effect)
addAndAttachUseCases(videoCapture)
// Act: invalidate.
processor.surfaceRequest!!.invalidate()
@@ -277,7 +282,7 @@
setupCamera()
createCameraUseCaseAdapter()
val videoCapture =
- createVideoCapture(createVideoOutput(), processor = createFakeSurfaceProcessor())
+ createVideoCapture(createVideoOutput(), effect = createFakeEffect())
addAndAttachUseCases(videoCapture)
val surfaceRequest = videoCapture.surfaceRequest
detachAndRemoveUseCases(videoCapture)
@@ -291,7 +296,7 @@
private fun testSetRotationWillSendCorrectResolution(
sensorRotation: Int = 0,
- processor: SurfaceProcessorInternal? = null
+ effect: CameraEffect? = null
) {
setupCamera(sensorRotation = sensorRotation)
createCameraUseCaseAdapter()
@@ -313,7 +318,7 @@
surfaceRequestListener = { request, _ ->
surfaceRequest = request
})
- val videoCapture = createVideoCapture(videoOutput, processor = processor)
+ val videoCapture = createVideoCapture(videoOutput, effect = effect)
videoCapture.targetRotation = targetRotation
// Act.
@@ -321,7 +326,7 @@
// Assert.
val resolution = CAMERA_0_QUALITY_SIZE[quality]!!
- val expectedResolution = if (processor != null) {
+ val expectedResolution = if (effect != null) {
rotateSize(resolution, cameraInfo.getSensorRotationDegrees(targetRotation))
} else {
resolution
@@ -347,7 +352,7 @@
@Test
fun addUseCasesWithSurfaceProcessor_cameraIsUptime_requestIsUptime() {
testTimebase(
- processor = createFakeSurfaceProcessor(),
+ effect = createFakeEffect(),
cameraTimebase = Timebase.UPTIME,
expectedTimebase = Timebase.UPTIME
)
@@ -356,14 +361,14 @@
@Test
fun addUseCasesWithSurfaceProcessor_cameraIsRealtime_requestIsRealtime() {
testTimebase(
- processor = createFakeSurfaceProcessor(),
+ effect = createFakeEffect(),
cameraTimebase = Timebase.REALTIME,
expectedTimebase = Timebase.REALTIME
)
}
private fun testTimebase(
- processor: SurfaceProcessorInternal? = null,
+ effect: CameraEffect? = null,
cameraTimebase: Timebase,
expectedTimebase: Timebase
) {
@@ -375,7 +380,7 @@
val videoOutput = createVideoOutput(surfaceRequestListener = { _, tb ->
timebase = tb
})
- val videoCapture = createVideoCapture(videoOutput, processor = processor)
+ val videoCapture = createVideoCapture(videoOutput, effect = effect)
// Act.
addAndAttachUseCases(videoCapture)
@@ -433,13 +438,13 @@
fun setQualitySelector_sameCustomOrderedResolutions() {
// Arrange.
setupCamera(
- profiles = arrayOf(
- CamcorderProfileUtil.asHighQuality(PROFILE_2160P),
- PROFILE_2160P,
- PROFILE_1080P,
- PROFILE_720P,
- PROFILE_480P,
- CamcorderProfileUtil.asLowQuality(PROFILE_480P)
+ profiles = mapOf(
+ QUALITY_HIGH to PROFILES_2160P,
+ QUALITY_2160P to PROFILES_2160P,
+ QUALITY_1080P to PROFILES_1080P,
+ QUALITY_720P to PROFILES_720P,
+ QUALITY_480P to PROFILES_480P,
+ QUALITY_LOW to PROFILES_480P
)
)
createCameraUseCaseAdapter()
@@ -475,13 +480,13 @@
fun setAspectRatio_4by3() {
// Arrange.
setupCamera(
- profiles = arrayOf(
- CamcorderProfileUtil.asHighQuality(PROFILE_2160P),
- PROFILE_2160P,
- PROFILE_1080P,
- PROFILE_720P,
- PROFILE_480P,
- CamcorderProfileUtil.asLowQuality(PROFILE_480P)
+ profiles = mapOf(
+ QUALITY_HIGH to PROFILES_2160P,
+ QUALITY_2160P to PROFILES_2160P,
+ QUALITY_1080P to PROFILES_1080P,
+ QUALITY_720P to PROFILES_720P,
+ QUALITY_480P to PROFILES_480P,
+ QUALITY_LOW to PROFILES_480P
)
)
createCameraUseCaseAdapter()
@@ -515,13 +520,13 @@
fun setAspectRatio_16by9() {
// Arrange.
setupCamera(
- profiles = arrayOf(
- CamcorderProfileUtil.asHighQuality(PROFILE_2160P),
- PROFILE_2160P,
- PROFILE_1080P,
- PROFILE_720P,
- PROFILE_480P,
- CamcorderProfileUtil.asLowQuality(PROFILE_480P)
+ profiles = mapOf(
+ QUALITY_HIGH to PROFILES_2160P,
+ QUALITY_2160P to PROFILES_2160P,
+ QUALITY_1080P to PROFILES_1080P,
+ QUALITY_720P to PROFILES_720P,
+ QUALITY_480P to PROFILES_480P,
+ QUALITY_LOW to PROFILES_480P
)
)
createCameraUseCaseAdapter()
@@ -561,7 +566,7 @@
val videoOutput = createVideoOutput()
val videoCapture = createVideoCapture(
videoOutput,
- processor = createFakeSurfaceProcessor(),
+ effect = createFakeEffect(),
videoEncoderInfoFinder = {
createVideoEncoderInfo(widthAlignment = 16, heightAlignment = 16)
})
@@ -597,7 +602,7 @@
@Test
fun noSupportedQuality_supportedResolutionsIsNotSet() {
// Arrange.
- setupCamera(profiles = emptyArray())
+ setupCamera(profiles = emptyMap())
createCameraUseCaseAdapter()
val videoOutput = createVideoOutput(
@@ -764,7 +769,8 @@
appSurfaceReadyToRelease = true
}
})
- val videoCapture = createVideoCapture(videoOutput, processor = processor)
+ val effect = createFakeEffect(processor = processor)
+ val videoCapture = createVideoCapture(videoOutput, effect = effect)
// Act: bind and provide Surface.
addAndAttachUseCases(videoCapture)
@@ -898,7 +904,7 @@
)
val videoCapture = createVideoCapture(
videoOutput,
- processor = createFakeSurfaceProcessor(),
+ effect = createFakeEffect(),
videoEncoderInfoFinder = { videoEncoderInfo }
)
videoCapture.setViewPortCropRect(cropRect)
@@ -997,7 +1003,7 @@
hasCameraTransform: Boolean = true,
targetRotation: Int? = null,
targetResolution: Size? = null,
- processor: SurfaceProcessorInternal? = null,
+ effect: CameraEffect? = null,
videoEncoderInfoFinder: Function<VideoEncoderConfig, VideoEncoderInfo> =
Function { createVideoEncoderInfo() },
): VideoCapture<VideoOutput> = VideoCapture.Builder(videoOutput)
@@ -1007,11 +1013,18 @@
targetResolution?.let { setTargetResolution(it) }
setVideoEncoderInfoFinder(videoEncoderInfoFinder)
}.build().apply {
- setProcessor(processor)
+ setEffect(effect)
setHasCameraTransform(hasCameraTransform)
}
- private fun createFakeSurfaceProcessor() = FakeSurfaceProcessorInternal(mainThreadExecutor())
+ private fun createFakeEffect(
+ processor: FakeSurfaceProcessorInternal = FakeSurfaceProcessorInternal(
+ mainThreadExecutor()
+ )
+ ) =
+ FakeSurfaceEffect(
+ processor
+ )
private fun setSuggestedStreamSpec(quality: Quality) {
setSuggestedStreamSpec(StreamSpec.builder(CAMERA_0_QUALITY_SIZE[quality]!!).build())
@@ -1029,15 +1042,14 @@
cameraId: String = CAMERA_ID_0,
sensorRotation: Int = 0,
supportedResolutions: Map<Int, List<Size>> = CAMERA_0_SUPPORTED_RESOLUTION_MAP,
- vararg profiles: CamcorderProfileProxy = CAMERA_0_PROFILES,
+ profiles: Map<Int, EncoderProfilesProxy> = CAMERA_0_PROFILES,
timebase: Timebase = Timebase.UPTIME,
) {
cameraInfo = FakeCameraInfoInternal(cameraId, sensorRotation, LENS_FACING_BACK).apply {
supportedResolutions.forEach { (format, resolutions) ->
setSupportedResolutions(format, resolutions)
}
- camcorderProfileProvider =
- FakeCamcorderProfileProvider.Builder().addProfile(*profiles).build()
+ encoderProfilesProvider = FakeEncoderProfilesProvider.Builder().addAll(profiles).build()
setTimebase(timebase)
}
camera = FakeCamera(cameraId, null, cameraInfo)
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt b/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
index 9476da71e..e6266ed 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
@@ -35,7 +35,7 @@
import androidx.camera.testing.CoreAppTestUtil
import androidx.camera.testing.fakes.FakeActivity
import androidx.camera.testing.fakes.FakeLifecycleOwner
-import androidx.camera.testing.fakes.FakePreviewEffect
+import androidx.camera.testing.fakes.FakeSurfaceEffect
import androidx.camera.testing.fakes.FakeSurfaceProcessor
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
@@ -126,11 +126,11 @@
waitUtilPreviewViewIsReady(previewView!!)
// Act: set the same effect twice, which is invalid.
- val previewEffect1 = FakePreviewEffect(
+ val previewEffect1 = FakeSurfaceEffect(
mainThreadExecutor(),
FakeSurfaceProcessor(mainThreadExecutor())
)
- val previewEffect2 = FakePreviewEffect(
+ val previewEffect2 = FakeSurfaceEffect(
mainThreadExecutor(),
FakeSurfaceProcessor(mainThreadExecutor())
)
@@ -159,19 +159,19 @@
waitUtilPreviewViewIsReady(previewView!!)
// Act: set an effect
- val effect = FakePreviewEffect(
+ val effect = FakeSurfaceEffect(
mainThreadExecutor(), FakeSurfaceProcessor(mainThreadExecutor())
)
instrumentation.runOnMainSync { controller!!.setEffects(setOf(effect)) }
// Assert: preview has effect
- assertThat(controller!!.mPreview.processor).isNotNull()
+ assertThat(controller!!.mPreview.effect).isNotNull()
// Act: clear the effects
instrumentation.runOnMainSync { controller!!.setEffects(null) }
// Assert: preview no longer has the effect.
- assertThat(controller!!.mPreview.processor).isNull()
+ assertThat(controller!!.mPreview.effect).isNull()
}
@Test
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt
index d41a8ce..1b89972 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt
@@ -174,11 +174,6 @@
@Test
fun setZoomRatio_largerThanMax_zoomUnmodified() = runBlocking {
- assumeFalse(
- "b/262225455: CameraPipe does not yet handle zoom value outside available range",
- implName == "CameraPipeConfig"
- )
-
assumeTrue(2.0f <= cameraInfo.zoomState.value!!.maxZoomRatio + DELTA)
cameraControl.setZoomRatio(2.0f)[5, TimeUnit.SECONDS]
@@ -198,11 +193,6 @@
@Test
fun setZoomRatio_largerThanMax_OutOfRangeException() = runBlocking {
- assumeFalse(
- "b/262225455: CameraPipe does not yet handle zoom value outside available range",
- implName == "CameraPipeConfig"
- )
-
val maxZoomRatio = cameraInfo.zoomState.value!!.maxZoomRatio
val result = cameraControl.setZoomRatio(maxZoomRatio + 1.0f)
@@ -211,11 +201,6 @@
@Test
fun setZoomRatio_smallerThanMin_zoomUnmodified() = runBlocking {
- assumeFalse(
- "b/262225455: CameraPipe does not yet handle zoom value outside available range",
- implName == "CameraPipeConfig"
- )
-
assumeTrue(2.0f <= cameraInfo.zoomState.value!!.maxZoomRatio + DELTA)
cameraControl.setZoomRatio(2.0f)[5, TimeUnit.SECONDS]
@@ -235,11 +220,6 @@
@Test
fun setZoomRatio_smallerThanMin_OutOfRangeException() = runBlocking {
- assumeFalse(
- "b/262225455: CameraPipe does not yet handle zoom value outside available range",
- implName == "CameraPipeConfig"
- )
-
val minZoomRatio = cameraInfo.zoomState.value!!.minZoomRatio
val result = cameraControl.setZoomRatio(minZoomRatio - 1.0f)
@@ -278,7 +258,7 @@
@Test
fun setZoomRatioBy2_0_cropRegionIsSetCorrectly() = runBlocking {
- assumeTrue(getMaxDigitalZoom() != null && getMaxDigitalZoom()!! <= 2.0f + DELTA)
+ assumeTrue(getMaxDigitalZoom() != null && getMaxDigitalZoom()!! > 2.0f + DELTA)
checkTestPreconditions(isAndroidRZoom = false)
@@ -342,11 +322,6 @@
@Test
fun setLinearZoomBy0_5_isHalfCropWidth() = runBlocking {
- assumeFalse(
- "b/267665704: CameraPipe linear zoom conversion to zoom ratio is not correct",
- implName == "CameraPipeConfig"
- )
-
checkTestPreconditions(isAndroidRZoom = false)
// crop region in percentage == 0 may be null, need to use sensor rect instead.
@@ -363,11 +338,6 @@
@Test
@SdkSuppress(minSdkVersion = 30)
fun setLinearZoomBy0_5_androidRZoomRatioUpdatedCorrectly() = runBlocking {
- assumeFalse(
- "b/267665704: CameraPipe linear zoom conversion to zoom ratio is not correct",
- implName == "CameraPipeConfig"
- )
-
checkTestPreconditions(isAndroidRZoom = true)
val cropWidth = 10000f
@@ -388,11 +358,6 @@
@Test
fun setLinearZoom_cropWidthChangedLinearly() = runBlocking {
- assumeFalse(
- "b/267665704: CameraPipe linear zoom conversion to zoom ratio is not correct",
- implName == "CameraPipeConfig"
- )
-
checkTestPreconditions(isAndroidRZoom = false)
// crop region in percentage == 0 may be null, need to use sensor rect instead.
@@ -421,11 +386,6 @@
@RequiresApi(Build.VERSION_CODES.R)
@Test
fun setLinearZoom_androidRZoomRatio_cropWidthChangedLinearly() = runBlocking {
- assumeFalse(
- "b/267665704: CameraPipe linear zoom conversion to zoom ratio is not correct",
- implName == "CameraPipeConfig"
- )
-
checkTestPreconditions(isAndroidRZoom = true)
val cropWidth = 10000f
@@ -456,11 +416,6 @@
@Test
fun setLinearZoom_largerThan1_zoomUnmodified() = runBlocking {
- assumeFalse(
- "b/262225455: CameraPipe does not yet handle zoom value outside available range",
- implName == "CameraPipeConfig"
- )
-
cameraControl.setLinearZoom(0.5f)[5, TimeUnit.SECONDS]
/**
@@ -477,11 +432,6 @@
@Test
fun setLinearZoom_largerThan1_outOfRangeException() = runBlocking {
- assumeFalse(
- "b/262225455: CameraPipe does not yet handle zoom value outside available range",
- implName == "CameraPipeConfig"
- )
-
val result = cameraControl.setLinearZoom(1.1f)
assertFutureThrowsIllegalArgumentException(result)
@@ -489,11 +439,6 @@
@Test
fun setLinearZoom_smallerThan0_zoomUnmodified() = runBlocking {
- assumeFalse(
- "b/262225455: CameraPipe does not yet handle zoom value outside available range",
- implName == "CameraPipeConfig"
- )
-
cameraControl.setLinearZoom(0.5f)[5, TimeUnit.SECONDS]
/**
@@ -510,11 +455,6 @@
@Test
fun setLinearZoom_smallerThan0_outOfRangeException() = runBlocking {
- assumeFalse(
- "b/262225455: CameraPipe does not yet handle zoom value outside available range",
- implName == "CameraPipeConfig"
- )
-
val result = cameraControl.setLinearZoom(-0.1f)
assertFutureThrowsIllegalArgumentException(result)
@@ -527,7 +467,7 @@
@Test
fun getZoomRatioLiveData_observerIsCalledWhenZoomRatioIsSet() = runBlocking {
- assumeTrue(getMaxDigitalZoom() != null && getMaxDigitalZoom()!! <= 2.0f + DELTA)
+ assumeTrue(getMaxDigitalZoom() != null && getMaxDigitalZoom()!! > 2.0f + DELTA)
val latch1 = CountDownLatch(1)
val latch2 = CountDownLatch(1)
@@ -579,11 +519,6 @@
@Test
fun getZoomPercentageLiveData_observerIsCalledWhenZoomPercentageIsSet() = runBlocking {
- assumeFalse(
- "b/267665704: CameraPipe linear zoom conversion to zoom ratio is not correct",
- implName == "CameraPipeConfig"
- )
-
val latch1 = CountDownLatch(1)
val latch2 = CountDownLatch(1)
val latch3 = CountDownLatch(1)
@@ -611,7 +546,7 @@
@Test
fun getZoomPercentageLiveData_observerIsCalledWhenZoomRatioIsSet() = runBlocking {
- assumeTrue(getMaxDigitalZoom() != null && getMaxDigitalZoom()!! <= 2.0f + DELTA)
+ assumeTrue(getMaxDigitalZoom() != null && getMaxDigitalZoom()!! > 2.0f + DELTA)
val latch = CountDownLatch(3)
withContext(Dispatchers.Main) {
diff --git a/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppActivityTest.java b/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppActivityTest.java
index 5d97b81..02804af 100644
--- a/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppActivityTest.java
+++ b/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppActivityTest.java
@@ -117,7 +117,7 @@
ShadowApplication sa = shadowOf(app);
sa.setComponentNameAndServiceForBindService(mRendererComponent, mRenderServiceDelegate);
- } catch (PackageManager.NameNotFoundException | RemoteException e) {
+ } catch (RemoteException e) {
fail(Log.getStackTraceString(e));
}
}
diff --git a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/TemplateLayoutsDemoScreen.java b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/TemplateLayoutsDemoScreen.java
index 76ab41e..b7cb763 100644
--- a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/TemplateLayoutsDemoScreen.java
+++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/TemplateLayoutsDemoScreen.java
@@ -21,6 +21,9 @@
import androidx.annotation.NonNull;
import androidx.car.app.CarContext;
import androidx.car.app.Screen;
+import androidx.car.app.constraints.ConstraintManager;
+import androidx.car.app.model.Action;
+import androidx.car.app.model.ActionStrip;
import androidx.car.app.model.ItemList;
import androidx.car.app.model.ListTemplate;
import androidx.car.app.model.Row;
@@ -32,37 +35,81 @@
import androidx.car.app.sample.showcase.common.screens.templatelayouts.PaneTemplateDemoScreen;
import androidx.car.app.sample.showcase.common.screens.templatelayouts.SearchTemplateDemoScreen;
import androidx.car.app.sample.showcase.common.screens.templatelayouts.SignInTemplateDemoScreen;
+import androidx.car.app.sample.showcase.common.screens.templatelayouts.TabTemplateLayoutsDemoScreen;
+import androidx.car.app.versioning.CarAppApiLevels;
+
+import java.util.ArrayList;
+import java.util.List;
/** A screen demonstrating different template layouts. */
public final class TemplateLayoutsDemoScreen extends Screen {
+ private static final int MAX_PAGES = 2;
+
+ private int mPage;
public TemplateLayoutsDemoScreen(@NonNull CarContext carContext) {
super(carContext);
+ mPage = 0;
}
@NonNull
@Override
public Template onGetTemplate() {
- ItemList.Builder listBuilder = new ItemList.Builder();
-
- listBuilder.addItem(buildRowForTemplate(new ListTemplateDemoScreen(getCarContext()),
+ List<Row> screenList = new ArrayList<>();
+ screenList.add(buildRowForTemplate(new ListTemplateDemoScreen(getCarContext()),
R.string.list_template_demo_title));
- listBuilder.addItem(buildRowForTemplate(new GridTemplateMenuDemoScreen(getCarContext()),
+ screenList.add(buildRowForTemplate(new GridTemplateMenuDemoScreen(getCarContext()),
R.string.grid_template_menu_demo_title));
- listBuilder.addItem(buildRowForTemplate(new MessageTemplateDemoScreen(getCarContext()),
+ screenList.add(buildRowForTemplate(new MessageTemplateDemoScreen(getCarContext()),
R.string.msg_template_demo_title));
- listBuilder.addItem(buildRowForTemplate(new PaneTemplateDemoScreen(getCarContext()),
+ screenList.add(buildRowForTemplate(new PaneTemplateDemoScreen(getCarContext()),
R.string.pane_template_demo_title));
- listBuilder.addItem(buildRowForTemplate(new SearchTemplateDemoScreen(getCarContext()),
+ screenList.add(buildRowForTemplate(new SearchTemplateDemoScreen(getCarContext()),
R.string.search_template_demo_title));
- listBuilder.addItem(buildRowForTemplate(new SignInTemplateDemoScreen(getCarContext()),
+ screenList.add(buildRowForTemplate(new SignInTemplateDemoScreen(getCarContext()),
R.string.sign_in_template_demo_title));
+ if (getCarContext().getCarAppApiLevel() >= CarAppApiLevels.LEVEL_6) {
+ screenList.add(buildRowForTemplate(new TabTemplateLayoutsDemoScreen(getCarContext()),
+ R.string.tab_template_layouts_demo_title));
+ }
- return new ListTemplate.Builder()
+ int listLimit = getCarContext().getCarService(ConstraintManager.class).getContentLimit(
+ ConstraintManager.CONTENT_LIMIT_TYPE_LIST);
+
+ ItemList.Builder listBuilder = new ItemList.Builder();
+ // If the screenArray size is under the limit, we will show all of them on the first page.
+ // Otherwise we will show them in multiple pages.
+ if (screenList.size() <= listLimit) {
+ for (int i = 0; i < screenList.size(); i++) {
+ listBuilder.addItem(screenList.get(i));
+ }
+ } else {
+ int currentItemStartIndex = mPage * listLimit;
+ int currentItemEndIndex = Math.min(currentItemStartIndex + listLimit,
+ screenList.size());
+ for (int i = currentItemStartIndex; i < currentItemEndIndex; i++) {
+ listBuilder.addItem(screenList.get(i));
+ }
+ }
+
+ ListTemplate.Builder builder = new ListTemplate.Builder()
.setSingleList(listBuilder.build())
.setTitle(getCarContext().getString(R.string.template_layouts_demo_title))
- .setHeaderAction(BACK)
- .build();
+ .setHeaderAction(BACK);
+
+ // If the current page does not cover the last item, we will show a More button
+ if ((mPage + 1) * listLimit < screenList.size() && mPage + 1 < MAX_PAGES) {
+ builder.setActionStrip(new ActionStrip.Builder()
+ .addAction(new Action.Builder()
+ .setTitle(getCarContext().getString(R.string.more_action_title))
+ .setOnClickListener(() -> {
+ mPage++;
+ invalidate();
+ })
+ .build())
+ .build());
+ }
+ return builder.build();
}
private Row buildRowForTemplate(Screen screen, int title) {
diff --git a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/TabTemplateLayoutsDemoScreen.java b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/TabTemplateLayoutsDemoScreen.java
new file mode 100644
index 0000000..4cb3772
--- /dev/null
+++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/TabTemplateLayoutsDemoScreen.java
@@ -0,0 +1,64 @@
+/*
+ * 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.car.app.sample.showcase.common.screens.templatelayouts;
+
+import static androidx.car.app.model.Action.BACK;
+
+import androidx.annotation.NonNull;
+import androidx.car.app.CarContext;
+import androidx.car.app.Screen;
+import androidx.car.app.model.ItemList;
+import androidx.car.app.model.ListTemplate;
+import androidx.car.app.model.Row;
+import androidx.car.app.model.Template;
+import androidx.car.app.sample.showcase.common.R;
+import androidx.car.app.sample.showcase.common.screens.templatelayouts.tabtemplates.TabTemplateDemoScreen;
+import androidx.car.app.sample.showcase.common.screens.templatelayouts.tabtemplates.TabTemplateLoadingDemoScreen;
+import androidx.car.app.sample.showcase.common.screens.templatelayouts.tabtemplates.TabTemplateNoTabsDemoScreen;
+
+/** A screen demonstrating different tab template layouts. */
+public final class TabTemplateLayoutsDemoScreen extends Screen {
+
+ public TabTemplateLayoutsDemoScreen(@NonNull CarContext carContext) {
+ super(carContext);
+ }
+
+ @NonNull
+ @Override
+ public Template onGetTemplate() {
+ ItemList.Builder listBuilder = new ItemList.Builder();
+ listBuilder.addItem(buildRowForTemplate(new TabTemplateDemoScreen(getCarContext()),
+ R.string.tab_template_demo_title));
+ listBuilder.addItem(buildRowForTemplate(new TabTemplateLoadingDemoScreen(getCarContext()),
+ R.string.tab_template_loading_demo_title));
+ listBuilder.addItem(buildRowForTemplate(new TabTemplateNoTabsDemoScreen(getCarContext()),
+ R.string.tab_template_no_tabs_demo_title));
+ return new ListTemplate.Builder()
+ .setSingleList(listBuilder.build())
+ .setTitle(getCarContext().getString(R.string.tab_template_layouts_demo_title))
+ .setHeaderAction(BACK)
+ .build();
+ }
+
+ private Row buildRowForTemplate(Screen screen, int title) {
+ return new Row.Builder()
+ .setTitle(getCarContext().getString(title))
+ .setOnClickListener(() -> getScreenManager().push(screen))
+ .setBrowsable(true)
+ .build();
+ }
+}
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
new file mode 100644
index 0000000..af4b1c3
--- /dev/null
+++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateDemoScreen.java
@@ -0,0 +1,202 @@
+/*
+ * 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.car.app.sample.showcase.common.screens.templatelayouts.tabtemplates;
+
+import static androidx.car.app.model.Action.APP_ICON;
+
+import android.annotation.SuppressLint;
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+import androidx.car.app.CarContext;
+import androidx.car.app.CarToast;
+import androidx.car.app.Screen;
+import androidx.car.app.model.Action;
+import androidx.car.app.model.CarIcon;
+import androidx.car.app.model.GridItem;
+import androidx.car.app.model.GridTemplate;
+import androidx.car.app.model.ItemList;
+import androidx.car.app.model.ListTemplate;
+import androidx.car.app.model.MessageTemplate;
+import androidx.car.app.model.Pane;
+import androidx.car.app.model.PaneTemplate;
+import androidx.car.app.model.Row;
+import androidx.car.app.model.Tab;
+import androidx.car.app.model.TabContents;
+import androidx.car.app.model.TabTemplate;
+import androidx.car.app.model.Template;
+import androidx.car.app.sample.showcase.common.R;
+import androidx.core.graphics.drawable.IconCompat;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Creates a screen that demonstrates usage of the full screen {@link TabTemplate}.
+ */
+public final class TabTemplateDemoScreen extends Screen {
+ private static final int LIST_SIZE = 10;
+ private static final int[] TITLE_RES_IDS = new int[]{
+ R.string.tab_title_message,
+ R.string.tab_title_pane,
+ R.string.tab_title_list,
+ R.string.tab_title_grid
+ };
+
+ private static final int[] ICON_RES_IDS = new int[]{
+ R.drawable.ic_explore_white_24dp,
+ R.drawable.ic_face_24px,
+ R.drawable.ic_place_white_24dp,
+ R.drawable.ic_favorite_white_24dp
+ };
+
+ private final Map<String, Tab> mTabs;
+ private final Map<String, TabContents> mTabContentsMap;
+ private TabTemplate.Builder mTabTemplateBuilder;
+ private String mActiveContentId;
+
+ public TabTemplateDemoScreen(@NonNull CarContext carContext) {
+ super(carContext);
+ mTabs = new HashMap<>();
+ mTabContentsMap = new HashMap<>();
+ mActiveContentId = null;
+ }
+
+ @NonNull
+ @Override
+ public Template onGetTemplate() {
+ mTabTemplateBuilder = new TabTemplate.Builder(new TabTemplate.TabCallback() {
+ @SuppressLint("SyntheticAccessor")
+ @Override
+ public void onTabSelected(@NonNull String tabContentId) {
+ mActiveContentId = tabContentId;
+ invalidate();
+ }
+ }).setHeaderAction(APP_ICON);
+
+ mTabContentsMap.clear();
+ mTabs.clear();
+
+ for (int i = 0; i < ICON_RES_IDS.length; i++) {
+ String contentId = String.valueOf(i);
+
+ Template contentTemplate;
+ switch (i) {
+ case 0:
+ contentTemplate = createShortMessageTemplate();
+ break;
+ case 1:
+ contentTemplate = createPaneTemplate();
+ break;
+ case 2:
+ contentTemplate = createListTemplate();
+ break;
+ case 3:
+ default:
+ contentTemplate = createGridTemplate();
+ break;
+ }
+ TabContents tabContents = new TabContents.Builder(contentTemplate).build();
+ mTabContentsMap.put(contentId, tabContents);
+
+ Tab.Builder tabBuilder = new Tab.Builder()
+ .setTitle(getCarContext().getString(TITLE_RES_IDS[i]))
+ .setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(),
+ ICON_RES_IDS[i])).build())
+ .setContentId(contentId);
+ if (TextUtils.isEmpty(mActiveContentId) && i == 0) {
+ tabBuilder.setActive(true);
+ mTabTemplateBuilder.setTabContents(tabContents);
+ } else if (TextUtils.equals(mActiveContentId, contentId)) {
+ tabBuilder.setActive(true);
+ mTabTemplateBuilder.setTabContents(tabContents);
+ } else {
+ tabBuilder.setActive(false);
+ }
+
+ Tab tab = tabBuilder.build();
+ mTabs.put(tab.getContentId(), tab);
+ mTabTemplateBuilder.addTab(tab);
+ }
+ return mTabTemplateBuilder.build();
+ }
+
+ private ListTemplate createListTemplate() {
+ ItemList.Builder listBuilder = new ItemList.Builder();
+ for (int i = 0; i < LIST_SIZE; i++) {
+ listBuilder.addItem(buildRowForTemplate(String.valueOf(i), true));
+ }
+ return new ListTemplate.Builder()
+ .setSingleList(listBuilder.build())
+ .build();
+ }
+
+ private Row buildRowForTemplate(CharSequence title, boolean clickable) {
+ Row.Builder rowBuilder = new Row.Builder()
+ .setTitle(title);
+ if (clickable) {
+ rowBuilder.setOnClickListener(() -> CarToast.makeText(getCarContext(), title,
+ CarToast.LENGTH_SHORT).show());
+ }
+ return rowBuilder.build();
+ }
+
+ private GridTemplate createGridTemplate() {
+ ItemList.Builder listBuilder = new ItemList.Builder();
+ for (int i = 0; i < LIST_SIZE; i++) {
+ listBuilder.addItem(buildGridItemForTemplate(String.valueOf(i)));
+ }
+ return new GridTemplate.Builder()
+ .setSingleList(listBuilder.build())
+ .build();
+ }
+
+ private GridItem buildGridItemForTemplate(CharSequence title) {
+ return new GridItem.Builder()
+ .setImage(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(),
+ R.drawable.ic_emoji_food_beverage_white_48dp)).build(),
+ GridItem.IMAGE_TYPE_ICON)
+ .setTitle(title)
+ .build();
+ }
+
+ private MessageTemplate createShortMessageTemplate() {
+ Action action = new Action.Builder()
+ .setTitle(getCarContext().getString(R.string.back_caps_action_title))
+ .setIcon(CarIcon.BACK)
+ .setOnClickListener(() -> getScreenManager().pop())
+ .build();
+ return new MessageTemplate.Builder(
+ getCarContext().getString(R.string.msg_template_demo_text))
+ .setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(),
+ R.drawable.ic_launcher)).build())
+ .addAction(action)
+ .build();
+ }
+
+ private PaneTemplate createPaneTemplate() {
+ Pane.Builder paneBuilder = new Pane.Builder()
+ .setImage(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(),
+ R.drawable.ic_launcher)).build());
+ for (int i = 0; i < LIST_SIZE; i++) {
+ paneBuilder.addRow(buildRowForTemplate(String.valueOf(i), false));
+ }
+ return new PaneTemplate.Builder(paneBuilder.build())
+ .build();
+ }
+
+}
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
new file mode 100644
index 0000000..ee434b7
--- /dev/null
+++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateLoadingDemoScreen.java
@@ -0,0 +1,137 @@
+/*
+ * 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.car.app.sample.showcase.common.screens.templatelayouts.tabtemplates;
+
+import static androidx.car.app.model.Action.APP_ICON;
+
+import android.annotation.SuppressLint;
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+import androidx.car.app.CarContext;
+import androidx.car.app.CarToast;
+import androidx.car.app.Screen;
+import androidx.car.app.model.CarIcon;
+import androidx.car.app.model.ItemList;
+import androidx.car.app.model.Row;
+import androidx.car.app.model.SearchTemplate;
+import androidx.car.app.model.Tab;
+import androidx.car.app.model.TabContents;
+import androidx.car.app.model.TabTemplate;
+import androidx.car.app.model.Template;
+import androidx.car.app.sample.showcase.common.R;
+import androidx.core.graphics.drawable.IconCompat;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Creates a screen that demonstrates usage of the full screen {@link TabTemplate} with loading
+ * state.
+ */
+public final class TabTemplateLoadingDemoScreen extends Screen {
+ private static final int[] sTitleResIds = new int[]{
+ R.string.tab_title_message, R.string.tab_title_search
+ };
+
+ private static final int[] sIconResIds = new int[]{
+ R.drawable.ic_explore_white_24dp,
+ R.drawable.ic_face_24px
+ };
+
+ private final Map<String, Tab> mTabs;
+ private TabTemplate.Builder mTabTemplateBuilder;
+ private String mActiveContentId;
+
+ public TabTemplateLoadingDemoScreen(@NonNull CarContext carContext) {
+ super(carContext);
+ mTabs = new HashMap<>();
+ }
+
+ @NonNull
+ @Override
+ public Template onGetTemplate() {
+ mTabTemplateBuilder = new TabTemplate.Builder(new TabTemplate.TabCallback() {
+ @SuppressLint("SyntheticAccessor")
+ @Override
+ public void onTabSelected(@NonNull String tabContentId) {
+ mActiveContentId = tabContentId;
+ invalidate();
+ }
+ })
+ .setHeaderAction(APP_ICON);
+
+ mTabs.clear();
+
+ for (int i = 0; i < 2; i++) {
+ String contentId = String.valueOf(i);
+
+ Tab.Builder tabBuilder = new Tab.Builder()
+ .setTitle(getCarContext().getString(sTitleResIds[i]))
+ .setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(),
+ sIconResIds[i])).build())
+ .setContentId(contentId);
+ if (TextUtils.isEmpty(mActiveContentId) && i == 0) {
+ tabBuilder.setActive(true);
+ } else if (TextUtils.equals(mActiveContentId, contentId)) {
+ tabBuilder.setActive(true);
+ } else {
+ tabBuilder.setActive(false);
+ }
+
+ Tab tab = tabBuilder.build();
+ mTabs.put(tab.getContentId(), tab);
+ mTabTemplateBuilder.addTab(tab);
+
+ if (tab.isActive()) {
+ if (i == 0) {
+ mTabTemplateBuilder.setLoading(true);
+ } else {
+ mTabTemplateBuilder.setTabContents(createSearchTab());
+ }
+ }
+ }
+ return mTabTemplateBuilder.build();
+ }
+
+ private TabContents createSearchTab() {
+ ItemList.Builder listBuilder = new ItemList.Builder();
+ for (int i = 1; i <= 6; ++i) {
+ listBuilder.addItem(
+ new Row.Builder()
+ .setTitle(
+ getCarContext().getString(R.string.back_caps_action_title) + " "
+ + i)
+ .addText("Tap to go back to previous screen")
+ .setOnClickListener(() -> getScreenManager().pop())
+ .build());
+ }
+ SearchTemplate searchTemplate = new SearchTemplate.Builder(
+ new SearchTemplate.SearchCallback() {
+ @Override
+ public void onSearchSubmitted(@NonNull String searchText) {
+ CarToast.makeText(getCarContext(), searchText,
+ CarToast.LENGTH_SHORT).show();
+ }
+ })
+ .setItemList(listBuilder.build())
+ .setShowKeyboardByDefault(true)
+ .build();
+ return new TabContents.Builder(searchTemplate).build();
+ }
+
+}
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
new file mode 100644
index 0000000..38c7368
--- /dev/null
+++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateNoTabsDemoScreen.java
@@ -0,0 +1,62 @@
+/*
+ * 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.car.app.sample.showcase.common.screens.templatelayouts.tabtemplates;
+
+import static androidx.car.app.model.Action.APP_ICON;
+
+import android.annotation.SuppressLint;
+import android.os.Handler;
+
+import androidx.annotation.NonNull;
+import androidx.car.app.CarContext;
+import androidx.car.app.CarToast;
+import androidx.car.app.Screen;
+import androidx.car.app.model.TabTemplate;
+import androidx.car.app.model.Template;
+
+/**
+ * Creates a screen that demonstrates usage of the full screen {@link TabTemplate} without tabs.
+ */
+public final class TabTemplateNoTabsDemoScreen extends Screen {
+ private TabTemplate.Builder mTabTemplateBuilder;
+
+ public TabTemplateNoTabsDemoScreen(@NonNull CarContext carContext) {
+ super(carContext);
+ }
+
+ @NonNull
+ @Override
+ public Template onGetTemplate() {
+ mTabTemplateBuilder = new TabTemplate.Builder(new TabTemplate.TabCallback() {
+ @SuppressLint("SyntheticAccessor")
+ @Override
+ public void onTabSelected(@NonNull String tabContentId) {
+ // No-op
+ }
+ })
+ .setHeaderAction(APP_ICON)
+ .setLoading(true);
+
+ new Handler(getCarContext().getMainLooper()).postDelayed(() -> {
+ getScreenManager().pop();
+ CarToast.makeText(getCarContext(), "Back to previous screen",
+ CarToast.LENGTH_SHORT).show();
+ }, 5000);
+ return mTabTemplateBuilder.build();
+ }
+
+}
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml
index 93dddc8..cc0fa9d 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml
@@ -67,7 +67,7 @@
<string name="parked_toast_msg" msgid="2532422265890824446">"\"Aparkatutakoak\" ekintza"</string>
<string name="more_toast_msg" msgid="5938288138225509885">"\"Gehiago\" sakatuta dago"</string>
<string name="commute_toast_msg" msgid="4112684360647638688">"Eguneroko joan-etorrien botoia sakatuta dago"</string>
- <string name="grant_location_permission_toast_msg" msgid="268046297444808010">"Eman kokapena atzitzeko baimena oraingo kokapena ikusteko"</string>
+ <string name="grant_location_permission_toast_msg" msgid="268046297444808010">"Eman kokapena erabiltzeko baimena oraingo kokapena ikusteko"</string>
<string name="sign_in_with_google_toast_msg" msgid="5720947549233124775">"Hemen hasten da Google-ko kontuarekin saioa hasteko prozesua"</string>
<string name="changes_selection_to_index_toast_msg_prefix" msgid="957766225794389167">"Hautapena indizera aldatu da"</string>
<string name="yes_action_toast_msg" msgid="6216215197177241247">"\"Bai\" botoia sakatu da"</string>
@@ -327,9 +327,9 @@
<string name="perm_group" msgid="3834918337351876270">"Baimenen taldea"</string>
<string name="perm_group_description" msgid="7348847631139139024">"Showcase aplikazioaren baimenen taldea"</string>
<string name="perm_fine_location" msgid="5438874642600304118">"Kokapen zehatzerako sarbidea"</string>
- <string name="perm_fine_location_desc" msgid="3549183883787912516">"Kokapen zehatza atzitzeko baimena"</string>
+ <string name="perm_fine_location_desc" msgid="3549183883787912516">"Kokapen zehatza erabiltzeko baimena"</string>
<string name="perm_coarse_location" msgid="6140337431619481015">"Gutxi gorabeherako kokapenerako sarbidea"</string>
- <string name="perm_coarse_location_desc" msgid="6074759942301565943">"Gutxi gorabeherako kokapena atzitzeko baimena"</string>
+ <string name="perm_coarse_location_desc" msgid="6074759942301565943">"Gutxi gorabeherako kokapena erabiltzeko baimena"</string>
<string name="perm_record_audio" msgid="2758340693260523493">"Audioa grabatzeko sarbidea"</string>
<string name="perm_record_audio_desc" msgid="8038648467605928912">"Audioa grabatzeko baimena"</string>
<string name="location_1_description" msgid="4801052291684791371">"Baliabide-bektore tonuduna"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values/strings.xml
index 346a91d..74281f3 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values/strings.xml
@@ -327,6 +327,17 @@
<string name="sign_in_complete_title">Sign in completed</string>
<string name="sign_in_template_demo_title">Sign In Template Demo</string>
+ <!-- TabTemplateScreen -->
+ <string name="tab_template_layouts_demo_title">Tab Template Demos</string>
+ <string name="tab_template_demo_title">Tab Template Demo</string>
+ <string name="tab_title_message">Message Tab</string>
+ <string name="tab_title_pane">Pane Tab</string>
+ <string name="tab_title_list">List Tab</string>
+ <string name="tab_title_grid">Grid Tab with Long Tab Title</string>
+ <string name="tab_title_search">Search Tab</string>
+ <string name="tab_template_loading_demo_title">Tab Template Loading Demo</string>
+ <string name="tab_template_no_tabs_demo_title">Tab Template No Tabs Demo</string>
+
<!-- ContentProviderIconsDemoScreen -->
<string name="images_unknown_host_error">Images cannot be displayed for an unknown host</string>
<string name="icon_title_prefix">Icon</string>
diff --git a/car/app/app/src/main/java/androidx/car/app/messaging/model/CarMessage.java b/car/app/app/src/main/java/androidx/car/app/messaging/model/CarMessage.java
index 439cb47..26429f7 100644
--- a/car/app/app/src/main/java/androidx/car/app/messaging/model/CarMessage.java
+++ b/car/app/app/src/main/java/androidx/car/app/messaging/model/CarMessage.java
@@ -143,7 +143,7 @@
return mReceivedTimeEpochMillis;
}
- /** Returns a {@link boolean}, indicating whether the message has been read */
+ /** Returns a {@code boolean}, indicating whether the message has been read */
public boolean isRead() {
return mIsRead;
}
@@ -175,7 +175,7 @@
return this;
}
- /** Sets a {@link boolean}, indicating whether the message has been read */
+ /** Sets a {@code boolean}, indicating whether the message has been read */
public @NonNull Builder setRead(boolean isRead) {
mIsRead = isRead;
return this;
diff --git a/car/app/app/src/test/java/androidx/car/app/connection/CarConnectionTypeLiveDataTest.java b/car/app/app/src/test/java/androidx/car/app/connection/CarConnectionTypeLiveDataTest.java
index f83a668..d6b1cf4 100644
--- a/car/app/app/src/test/java/androidx/car/app/connection/CarConnectionTypeLiveDataTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/connection/CarConnectionTypeLiveDataTest.java
@@ -38,6 +38,9 @@
import androidx.lifecycle.Observer;
import androidx.test.core.app.ApplicationProvider;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
@@ -69,6 +72,22 @@
private CarConnectionTypeLiveData mCarConnectionTypeLiveData;
private TestContentProvider mContentProvider;
+ /**
+ * Filters receivers to only ones created by the androidx.car group, filtering out for
+ * example the ProfileInstallReceiver which *may* be present, based on inclusion of
+ * profileinstaller (for example, in CI when tested against TOT dependencies).
+ * <p>
+ * To force its presence for local testing, add the following to car:app:app's build.gradle:
+ * <pre>implementation("androidx.profileinstaller:profileinstaller:1.2.1")</pre>
+ */
+ private ImmutableList<ShadowApplication.Wrapper> getFilteredRegisteredReceivers() {
+ return ImmutableList.copyOf(
+ Iterables.filter(shadowOf(mApplication).getRegisteredReceivers(),
+ wrapper -> wrapper.broadcastReceiver.getClass().getName().startsWith(
+ "androidx.car.app.")
+ ));
+ }
+
@Before
public void setUp() {
ProviderInfo info = new ProviderInfo();
@@ -77,7 +96,7 @@
Robolectric.buildContentProvider(TestContentProvider.class).create(info).get();
// Starts with 1 broadcast receiver (for CarPendingIntent)
- assertThat(shadowOf(mApplication).getRegisteredReceivers()).hasSize(1);
+ assertThat(getFilteredRegisteredReceivers()).hasSize(1);
mCarConnectionTypeLiveData = new CarConnectionTypeLiveData(mContext);
}
@@ -90,7 +109,7 @@
mCarConnectionTypeLiveData.observeForever(mMockObserver);
ShadowApplication.Wrapper registeredReceiver =
- shadowOf(mApplication).getRegisteredReceivers().get(0);
+ getFilteredRegisteredReceivers().get(0);
assertThat(registeredReceiver.broadcastReceiver).isNotNull();
assertThat(registeredReceiver.flags).isEqualTo(0);
}
@@ -104,7 +123,7 @@
mCarConnectionTypeLiveData.observeForever(mMockObserver);
ShadowApplication.Wrapper registeredReceiver =
- shadowOf(mApplication).getRegisteredReceivers().get(0);
+ getFilteredRegisteredReceivers().get(0);
assertThat(registeredReceiver.broadcastReceiver).isNotNull();
assertThat(registeredReceiver.flags).isEqualTo(Context.RECEIVER_EXPORTED);
}
@@ -162,8 +181,7 @@
mCarConnectionTypeLiveData.observeForever(mMockObserver);
ShadowLooper.runUiThreadTasks();
- ShadowApplication.Wrapper receiverWrapper = shadowOf(
- mApplication).getRegisteredReceivers().get(1);
+ ShadowApplication.Wrapper receiverWrapper = getFilteredRegisteredReceivers().get(1);
mContentProvider.mIsProjecting = true;
receiverWrapper.broadcastReceiver.onReceive(mContext,
@@ -177,15 +195,15 @@
@Test
public void stopObserving_removedBroadcastReceiver() {
- assertThat(shadowOf(mApplication).getRegisteredReceivers()).hasSize(1);
+ assertThat(getFilteredRegisteredReceivers()).hasSize(1);
mCarConnectionTypeLiveData.observeForever(mMockObserver);
- assertThat(shadowOf(mApplication).getRegisteredReceivers()).hasSize(2);
+ assertThat(getFilteredRegisteredReceivers()).hasSize(2);
mCarConnectionTypeLiveData.removeObserver(mMockObserver);
- assertThat(shadowOf(mApplication).getRegisteredReceivers()).hasSize(1);
+ assertThat(getFilteredRegisteredReceivers()).hasSize(1);
}
private static class TestContentProvider extends ContentProvider {
diff --git a/compose/animation/animation-core/api/1.4.0-beta02.txt b/compose/animation/animation-core/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..06524e6
--- /dev/null
+++ b/compose/animation/animation-core/api/1.4.0-beta02.txt
@@ -0,0 +1,761 @@
+// Signature format: 4.0
+package androidx.compose.animation.core {
+
+ public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
+ ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold, optional String label);
+ ctor @Deprecated public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
+ method public suspend Object? animateDecay(T? initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
+ method public suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
+ method public androidx.compose.runtime.State<T> asState();
+ method public String getLabel();
+ method public T? getLowerBound();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T? getUpperBound();
+ method public T! getValue();
+ method public T! getVelocity();
+ method public V getVelocityVector();
+ method public boolean isRunning();
+ method public suspend Object? snapTo(T? targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? stop(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public void updateBounds(optional T? lowerBound, optional T? upperBound);
+ property public final boolean isRunning;
+ property public final String label;
+ property public final T? lowerBound;
+ property public final T! targetValue;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public final T? upperBound;
+ property public final T! value;
+ property public final T! velocity;
+ property public final V velocityVector;
+ }
+
+ public final class AnimatableKt {
+ method public static androidx.compose.animation.core.Animatable<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> Animatable(float initialValue, optional float visibilityThreshold);
+ }
+
+ public final class AnimateAsStateKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValueAsState(T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValueAsState(T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>? finishedListener);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Animation<T, V extends androidx.compose.animation.core.AnimationVector> {
+ method public long getDurationNanos();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValueFromNanos(long playTimeNanos);
+ method public V getVelocityVectorFromNanos(long playTimeNanos);
+ method public default boolean isFinishedFromNanos(long playTimeNanos);
+ method public boolean isInfinite();
+ property public abstract long durationNanos;
+ property public abstract boolean isInfinite;
+ property public abstract T! targetValue;
+ property public abstract androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ }
+
+ public final class AnimationConstants {
+ field public static final int DefaultDurationMillis = 300; // 0x12c
+ field public static final androidx.compose.animation.core.AnimationConstants INSTANCE;
+ field public static final long UnspecifiedTime = -9223372036854775808L; // 0x8000000000000000L
+ }
+
+ public enum AnimationEndReason {
+ method public static androidx.compose.animation.core.AnimationEndReason valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.animation.core.AnimationEndReason[] values();
+ enum_constant public static final androidx.compose.animation.core.AnimationEndReason BoundReached;
+ enum_constant public static final androidx.compose.animation.core.AnimationEndReason Finished;
+ }
+
+ public final class AnimationKt {
+ method public static androidx.compose.animation.core.DecayAnimation<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> DecayAnimation(androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, float initialValue, optional float initialVelocity);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.TargetBasedAnimation<T,V> TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, T? initialVelocity);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> T! getVelocityFromNanos(androidx.compose.animation.core.Animation<T,V>, long playTimeNanos);
+ }
+
+ public final class AnimationResult<T, V extends androidx.compose.animation.core.AnimationVector> {
+ ctor public AnimationResult(androidx.compose.animation.core.AnimationState<T,V> endState, androidx.compose.animation.core.AnimationEndReason endReason);
+ method public androidx.compose.animation.core.AnimationEndReason getEndReason();
+ method public androidx.compose.animation.core.AnimationState<T,V> getEndState();
+ property public final androidx.compose.animation.core.AnimationEndReason endReason;
+ property public final androidx.compose.animation.core.AnimationState<T,V> endState;
+ }
+
+ public final class AnimationScope<T, V extends androidx.compose.animation.core.AnimationVector> {
+ method public void cancelAnimation();
+ method public long getFinishedTimeNanos();
+ method public long getLastFrameTimeNanos();
+ method public long getStartTimeNanos();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ method public T! getVelocity();
+ method public V getVelocityVector();
+ method public boolean isRunning();
+ method public androidx.compose.animation.core.AnimationState<T,V> toAnimationState();
+ property public final long finishedTimeNanos;
+ property public final boolean isRunning;
+ property public final long lastFrameTimeNanos;
+ property public final long startTimeNanos;
+ property public final T! targetValue;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public final T! value;
+ property public final T! velocity;
+ property public final V velocityVector;
+ }
+
+ public interface AnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ }
+
+ public final class AnimationSpecKt {
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T>! infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.KeyframesSpec<T> keyframes(kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T>,kotlin.Unit> init);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T>! repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SnapSpec<T> snap(optional int delayMillis);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SpringSpec<T> spring(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.TweenSpec<T> tween(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
+ }
+
+ public final class AnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
+ ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, optional V? initialVelocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public long getFinishedTimeNanos();
+ method public long getLastFrameTimeNanos();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ method public T! getVelocity();
+ method public V getVelocityVector();
+ method public boolean isRunning();
+ property public final long finishedTimeNanos;
+ property public final boolean isRunning;
+ property public final long lastFrameTimeNanos;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public T! value;
+ property public final T! velocity;
+ property public final V velocityVector;
+ }
+
+ public final class AnimationStateKt {
+ method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> AnimationState(float initialValue, optional float initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> copy(androidx.compose.animation.core.AnimationState<T,V>, optional T? value, optional V? velocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> copy(androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D>, optional float value, optional float velocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> V createZeroVectorFrom(androidx.compose.animation.core.TwoWayConverter<T,V>, T? value);
+ method public static boolean isFinished(androidx.compose.animation.core.AnimationState<?,?>);
+ }
+
+ public abstract sealed class AnimationVector {
+ }
+
+ public final class AnimationVector1D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector1D(float initVal);
+ method public float getValue();
+ property public final float value;
+ }
+
+ public final class AnimationVector2D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector2D(float v1, float v2);
+ method public float getV1();
+ method public float getV2();
+ property public final float v1;
+ property public final float v2;
+ }
+
+ public final class AnimationVector3D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector3D(float v1, float v2, float v3);
+ method public float getV1();
+ method public float getV2();
+ method public float getV3();
+ property public final float v1;
+ property public final float v2;
+ property public final float v3;
+ }
+
+ public final class AnimationVector4D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector4D(float v1, float v2, float v3, float v4);
+ method public float getV1();
+ method public float getV2();
+ method public float getV3();
+ method public float getV4();
+ property public final float v1;
+ property public final float v2;
+ property public final float v3;
+ property public final float v4;
+ }
+
+ public final class AnimationVectorsKt {
+ method public static androidx.compose.animation.core.AnimationVector1D AnimationVector(float v1);
+ method public static androidx.compose.animation.core.AnimationVector2D AnimationVector(float v1, float v2);
+ method public static androidx.compose.animation.core.AnimationVector3D AnimationVector(float v1, float v2, float v3);
+ method public static androidx.compose.animation.core.AnimationVector4D AnimationVector(float v1, float v2, float v3, float v4);
+ }
+
+ @androidx.compose.runtime.Immutable public final class CubicBezierEasing implements androidx.compose.animation.core.Easing {
+ ctor public CubicBezierEasing(float a, float b, float c, float d);
+ method public float transform(float fraction);
+ }
+
+ public final class DecayAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
+ ctor public DecayAnimation(androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V initialVelocityVector);
+ ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V initialVelocityVector);
+ ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? initialVelocity);
+ method public long getDurationNanos();
+ method public T! getInitialValue();
+ method public V getInitialVelocityVector();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValueFromNanos(long playTimeNanos);
+ method public V getVelocityVectorFromNanos(long playTimeNanos);
+ method public boolean isInfinite();
+ property public long durationNanos;
+ property public final T! initialValue;
+ property public final V initialVelocityVector;
+ property public boolean isInfinite;
+ property public T! targetValue;
+ property public androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ }
+
+ public interface DecayAnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter);
+ }
+
+ public final class DecayAnimationSpecKt {
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> T! calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? initialVelocity);
+ method public static float calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float>, float initialValue, float initialVelocity);
+ method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> exponentialDecay(optional float frictionMultiplier, optional float absVelocityThreshold);
+ method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> generateDecayAnimationSpec(androidx.compose.animation.core.FloatDecayAnimationSpec);
+ }
+
+ public interface DurationBasedAnimationSpec<T> extends androidx.compose.animation.core.FiniteAnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ }
+
+ @androidx.compose.runtime.Stable public fun interface Easing {
+ method public float transform(float fraction);
+ }
+
+ public final class EasingFunctionsKt {
+ method public static androidx.compose.animation.core.Easing getEase();
+ method public static androidx.compose.animation.core.Easing getEaseIn();
+ method public static androidx.compose.animation.core.Easing getEaseInBack();
+ method public static androidx.compose.animation.core.Easing getEaseInBounce();
+ method public static androidx.compose.animation.core.Easing getEaseInCirc();
+ method public static androidx.compose.animation.core.Easing getEaseInCubic();
+ method public static androidx.compose.animation.core.Easing getEaseInElastic();
+ method public static androidx.compose.animation.core.Easing getEaseInExpo();
+ method public static androidx.compose.animation.core.Easing getEaseInOut();
+ method public static androidx.compose.animation.core.Easing getEaseInOutBack();
+ method public static androidx.compose.animation.core.Easing getEaseInOutBounce();
+ method public static androidx.compose.animation.core.Easing getEaseInOutCirc();
+ method public static androidx.compose.animation.core.Easing getEaseInOutCubic();
+ method public static androidx.compose.animation.core.Easing getEaseInOutElastic();
+ method public static androidx.compose.animation.core.Easing getEaseInOutExpo();
+ method public static androidx.compose.animation.core.Easing getEaseInOutQuad();
+ method public static androidx.compose.animation.core.Easing getEaseInOutQuart();
+ method public static androidx.compose.animation.core.Easing getEaseInOutQuint();
+ method public static androidx.compose.animation.core.Easing getEaseInOutSine();
+ method public static androidx.compose.animation.core.Easing getEaseInQuad();
+ method public static androidx.compose.animation.core.Easing getEaseInQuart();
+ method public static androidx.compose.animation.core.Easing getEaseInQuint();
+ method public static androidx.compose.animation.core.Easing getEaseInSine();
+ method public static androidx.compose.animation.core.Easing getEaseOut();
+ method public static androidx.compose.animation.core.Easing getEaseOutBack();
+ method public static androidx.compose.animation.core.Easing getEaseOutBounce();
+ method public static androidx.compose.animation.core.Easing getEaseOutCirc();
+ method public static androidx.compose.animation.core.Easing getEaseOutCubic();
+ method public static androidx.compose.animation.core.Easing getEaseOutElastic();
+ method public static androidx.compose.animation.core.Easing getEaseOutExpo();
+ method public static androidx.compose.animation.core.Easing getEaseOutQuad();
+ method public static androidx.compose.animation.core.Easing getEaseOutQuart();
+ method public static androidx.compose.animation.core.Easing getEaseOutQuint();
+ method public static androidx.compose.animation.core.Easing getEaseOutSine();
+ property public static final androidx.compose.animation.core.Easing Ease;
+ property public static final androidx.compose.animation.core.Easing EaseIn;
+ property public static final androidx.compose.animation.core.Easing EaseInBack;
+ property public static final androidx.compose.animation.core.Easing EaseInBounce;
+ property public static final androidx.compose.animation.core.Easing EaseInCirc;
+ property public static final androidx.compose.animation.core.Easing EaseInCubic;
+ property public static final androidx.compose.animation.core.Easing EaseInElastic;
+ property public static final androidx.compose.animation.core.Easing EaseInExpo;
+ property public static final androidx.compose.animation.core.Easing EaseInOut;
+ property public static final androidx.compose.animation.core.Easing EaseInOutBack;
+ property public static final androidx.compose.animation.core.Easing EaseInOutBounce;
+ property public static final androidx.compose.animation.core.Easing EaseInOutCirc;
+ property public static final androidx.compose.animation.core.Easing EaseInOutCubic;
+ property public static final androidx.compose.animation.core.Easing EaseInOutElastic;
+ property public static final androidx.compose.animation.core.Easing EaseInOutExpo;
+ property public static final androidx.compose.animation.core.Easing EaseInOutQuad;
+ property public static final androidx.compose.animation.core.Easing EaseInOutQuart;
+ property public static final androidx.compose.animation.core.Easing EaseInOutQuint;
+ property public static final androidx.compose.animation.core.Easing EaseInOutSine;
+ property public static final androidx.compose.animation.core.Easing EaseInQuad;
+ property public static final androidx.compose.animation.core.Easing EaseInQuart;
+ property public static final androidx.compose.animation.core.Easing EaseInQuint;
+ property public static final androidx.compose.animation.core.Easing EaseInSine;
+ property public static final androidx.compose.animation.core.Easing EaseOut;
+ property public static final androidx.compose.animation.core.Easing EaseOutBack;
+ property public static final androidx.compose.animation.core.Easing EaseOutBounce;
+ property public static final androidx.compose.animation.core.Easing EaseOutCirc;
+ property public static final androidx.compose.animation.core.Easing EaseOutCubic;
+ property public static final androidx.compose.animation.core.Easing EaseOutElastic;
+ property public static final androidx.compose.animation.core.Easing EaseOutExpo;
+ property public static final androidx.compose.animation.core.Easing EaseOutQuad;
+ property public static final androidx.compose.animation.core.Easing EaseOutQuart;
+ property public static final androidx.compose.animation.core.Easing EaseOutQuint;
+ property public static final androidx.compose.animation.core.Easing EaseOutSine;
+ }
+
+ public final class EasingKt {
+ method public static androidx.compose.animation.core.Easing getFastOutLinearInEasing();
+ method public static androidx.compose.animation.core.Easing getFastOutSlowInEasing();
+ method public static androidx.compose.animation.core.Easing getLinearEasing();
+ method public static androidx.compose.animation.core.Easing getLinearOutSlowInEasing();
+ property public static final androidx.compose.animation.core.Easing FastOutLinearInEasing;
+ property public static final androidx.compose.animation.core.Easing FastOutSlowInEasing;
+ property public static final androidx.compose.animation.core.Easing LinearEasing;
+ property public static final androidx.compose.animation.core.Easing LinearOutSlowInEasing;
+ }
+
+ public interface FiniteAnimationSpec<T> extends androidx.compose.animation.core.AnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface FloatAnimationSpec extends androidx.compose.animation.core.AnimationSpec<java.lang.Float> {
+ method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
+ method public default float getEndVelocity(float initialValue, float targetValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public default <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedFloatAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<java.lang.Float,V> converter);
+ }
+
+ public interface FloatDecayAnimationSpec {
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(float initialValue, float initialVelocity);
+ method public float getTargetValue(float initialValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ property public abstract float absVelocityThreshold;
+ }
+
+ public final class FloatExponentialDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
+ ctor public FloatExponentialDecaySpec(optional float frictionMultiplier, optional float absVelocityThreshold);
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(float initialValue, float initialVelocity);
+ method public float getTargetValue(float initialValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ property public float absVelocityThreshold;
+ }
+
+ public final class FloatSpringSpec implements androidx.compose.animation.core.FloatAnimationSpec {
+ ctor public FloatSpringSpec(optional float dampingRatio, optional float stiffness, optional float visibilityThreshold);
+ method public float getDampingRatio();
+ method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
+ method public float getStiffness();
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ property public final float dampingRatio;
+ property public final float stiffness;
+ }
+
+ public final class FloatTweenSpec implements androidx.compose.animation.core.FloatAnimationSpec {
+ ctor public FloatTweenSpec(optional int duration, optional int delay, optional androidx.compose.animation.core.Easing easing);
+ method public int getDelay();
+ method public int getDuration();
+ method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ property public final int delay;
+ property public final int duration;
+ }
+
+ public final class InfiniteAnimationPolicyKt {
+ method public static suspend inline <R> Object? withInfiniteAnimationFrameMillis(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend <R> Object? withInfiniteAnimationFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
+ ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
+ method public long getInitialStartOffset();
+ method public androidx.compose.animation.core.RepeatMode getRepeatMode();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation;
+ property public final long initialStartOffset;
+ property public final androidx.compose.animation.core.RepeatMode repeatMode;
+ }
+
+ public final class InfiniteTransition {
+ method public java.util.List<androidx.compose.animation.core.InfiniteTransition.TransitionAnimationState<?,?>> getAnimations();
+ method public String getLabel();
+ property public final java.util.List<androidx.compose.animation.core.InfiniteTransition.TransitionAnimationState<?,?>> animations;
+ property public final String label;
+ }
+
+ public final class InfiniteTransition.TransitionAnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
+ method public androidx.compose.animation.core.TargetBasedAnimation<T,V> getAnimation();
+ method public androidx.compose.animation.core.AnimationSpec<T> getAnimationSpec();
+ method public String getLabel();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ property public final androidx.compose.animation.core.TargetBasedAnimation<T,V> animation;
+ property public final androidx.compose.animation.core.AnimationSpec<T> animationSpec;
+ property public final String label;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public T! value;
+ }
+
+ public final class InfiniteTransitionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
+ method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T? initialValue, T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValue(androidx.compose.animation.core.InfiniteTransition, T? initialValue, T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
+ method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition();
+ }
+
+ @androidx.compose.runtime.Immutable public final class KeyframesSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
+ ctor public KeyframesSpec(androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T> config);
+ method public androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T> getConfig();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedKeyframesSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T> config;
+ }
+
+ public static final class KeyframesSpec.KeyframeEntity<T> {
+ }
+
+ public static final class KeyframesSpec.KeyframesSpecConfig<T> {
+ ctor public KeyframesSpec.KeyframesSpecConfig();
+ method public infix androidx.compose.animation.core.KeyframesSpec.KeyframeEntity<T> at(T?, int timeStamp);
+ method public infix androidx.compose.animation.core.KeyframesSpec.KeyframeEntity<T> atFraction(T?, float fraction);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public void setDelayMillis(int);
+ method public void setDurationMillis(int);
+ method public infix void with(androidx.compose.animation.core.KeyframesSpec.KeyframeEntity<T>, androidx.compose.animation.core.Easing easing);
+ property public final int delayMillis;
+ property public final int durationMillis;
+ }
+
+ public final class MutableTransitionState<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 final boolean isIdle;
+ property public final S! targetState;
+ }
+
+ public enum RepeatMode {
+ method public static androidx.compose.animation.core.RepeatMode valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.animation.core.RepeatMode[] values();
+ enum_constant public static final androidx.compose.animation.core.RepeatMode Restart;
+ enum_constant public static final androidx.compose.animation.core.RepeatMode Reverse;
+ }
+
+ @androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
+ ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
+ method public long getInitialStartOffset();
+ method public int getIterations();
+ method public androidx.compose.animation.core.RepeatMode getRepeatMode();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation;
+ property public final long initialStartOffset;
+ property public final int iterations;
+ property public final androidx.compose.animation.core.RepeatMode repeatMode;
+ }
+
+ @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();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final int delay;
+ }
+
+ public final class Spring {
+ field public static final float DampingRatioHighBouncy = 0.2f;
+ field public static final float DampingRatioLowBouncy = 0.75f;
+ field public static final float DampingRatioMediumBouncy = 0.5f;
+ field public static final float DampingRatioNoBouncy = 1.0f;
+ field public static final float DefaultDisplacementThreshold = 0.01f;
+ field public static final androidx.compose.animation.core.Spring INSTANCE;
+ field public static final float StiffnessHigh = 10000.0f;
+ field public static final float StiffnessLow = 200.0f;
+ field public static final float StiffnessMedium = 1500.0f;
+ field public static final float StiffnessMediumLow = 400.0f;
+ field public static final float StiffnessVeryLow = 50.0f;
+ }
+
+ public final class SpringEstimationKt {
+ }
+
+ @androidx.compose.runtime.Immutable public final class SpringSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
+ ctor public SpringSpec(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
+ method public float getDampingRatio();
+ method public float getStiffness();
+ method public T? getVisibilityThreshold();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedSpringSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final float dampingRatio;
+ property public final float stiffness;
+ property public final T? visibilityThreshold;
+ }
+
+ @kotlin.jvm.JvmInline public final value class StartOffset {
+ ctor public StartOffset(int offsetMillis, optional int offsetType);
+ method public int getOffsetMillis();
+ method public int getOffsetType();
+ property public final int offsetMillis;
+ property public final int offsetType;
+ }
+
+ @kotlin.jvm.JvmInline public final value class StartOffsetType {
+ field public static final androidx.compose.animation.core.StartOffsetType.Companion Companion;
+ }
+
+ public static final class StartOffsetType.Companion {
+ method public int getDelay();
+ method public int getFastForward();
+ property public final int Delay;
+ property public final int FastForward;
+ }
+
+ public final class SuspendAnimationKt {
+ method public static suspend Object? animate(float initialValue, float targetValue, optional float initialVelocity, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animate(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional T? initialVelocity, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, kotlin.jvm.functions.Function2<? super T,? super T,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateDecay(float initialValue, float initialVelocity, androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateDecay(androidx.compose.animation.core.AnimationState<T,V>, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateTo(androidx.compose.animation.core.AnimationState<T,V>, T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class TargetBasedAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
+ ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional V? initialVelocityVector);
+ method public long getDurationNanos();
+ method public T! getInitialValue();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValueFromNanos(long playTimeNanos);
+ method public V getVelocityVectorFromNanos(long playTimeNanos);
+ method public boolean isInfinite();
+ property public long durationNanos;
+ property public final T! initialValue;
+ property public boolean isInfinite;
+ property public T! targetValue;
+ property public androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ }
+
+ @androidx.compose.runtime.Stable public final class Transition<S> {
+ method public java.util.List<androidx.compose.animation.core.Transition<S>.TransitionAnimationState<?,?>> getAnimations();
+ method public S! getCurrentState();
+ method public String? getLabel();
+ method public androidx.compose.animation.core.Transition.Segment<S> getSegment();
+ method public S! getTargetState();
+ method public long getTotalDurationNanos();
+ method public java.util.List<androidx.compose.animation.core.Transition<?>> getTransitions();
+ method public boolean isRunning();
+ property public final java.util.List<androidx.compose.animation.core.Transition<S>.TransitionAnimationState<?,?>> animations;
+ property public final S! currentState;
+ property public final boolean isRunning;
+ property public final String? label;
+ property public final androidx.compose.animation.core.Transition.Segment<S> segment;
+ property public final S! targetState;
+ property public final long totalDurationNanos;
+ property public final java.util.List<androidx.compose.animation.core.Transition<?>> transitions;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public static interface Transition.Segment<S> {
+ method public S! getInitialState();
+ method public S! getTargetState();
+ method public default infix boolean isTransitioningTo(S?, S? targetState);
+ property public abstract S! initialState;
+ property public abstract S! targetState;
+ }
+
+ @androidx.compose.runtime.Stable public final class Transition.TransitionAnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
+ method public androidx.compose.animation.core.TargetBasedAnimation<T,V> getAnimation();
+ method public androidx.compose.animation.core.FiniteAnimationSpec<T> getAnimationSpec();
+ method public String getLabel();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ property public final androidx.compose.animation.core.TargetBasedAnimation<T,V> animation;
+ property public final androidx.compose.animation.core.FiniteAnimationSpec<T> animationSpec;
+ property public final String label;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public T! value;
+ }
+
+ public final class TransitionKt {
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDp(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.unit.Dp>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.Dp> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<java.lang.Float> animateFloat(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<java.lang.Float>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,java.lang.Float> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<java.lang.Integer> animateInt(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<java.lang.Integer>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,java.lang.Integer> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffset(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.unit.IntOffset>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntOffset> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSize(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.unit.IntSize>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntSize> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffset(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.Offset>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Offset> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRect(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.Rect>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Rect> targetValueByState);
+ 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 @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(T? targetState, 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);
+ }
+
+ @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();
+ method public int getDurationMillis();
+ method public androidx.compose.animation.core.Easing getEasing();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedTweenSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final int delay;
+ property public final int durationMillis;
+ property public final androidx.compose.animation.core.Easing easing;
+ }
+
+ public interface TwoWayConverter<T, V extends androidx.compose.animation.core.AnimationVector> {
+ method public kotlin.jvm.functions.Function1<V,T> getConvertFromVector();
+ method public kotlin.jvm.functions.Function1<T,V> getConvertToVector();
+ property public abstract kotlin.jvm.functions.Function1<V,T> convertFromVector;
+ property public abstract kotlin.jvm.functions.Function1<T,V> convertToVector;
+ }
+
+ public final class VectorConvertersKt {
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.TwoWayConverter<T,V> TwoWayConverter(kotlin.jvm.functions.Function1<? super T,? extends V> convertToVector, kotlin.jvm.functions.Function1<? super V,? extends T> convertFromVector);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.FloatCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Integer,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.IntCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntOffset.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntSize.Companion);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> {
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public default V getEndVelocity(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public boolean isInfinite();
+ property public abstract boolean isInfinite;
+ }
+
+ public interface VectorizedDecayAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> {
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(V initialValue, V initialVelocity);
+ method public V getTargetValue(V initialValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V initialVelocity);
+ property public abstract float absVelocityThreshold;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedDurationBasedAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public default long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ property public abstract int delayMillis;
+ property public abstract int durationMillis;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedFiniteAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.VectorizedAnimationSpec<V> {
+ method public default boolean isInfinite();
+ property public default boolean isInfinite;
+ }
+
+ public final class VectorizedFloatAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ ctor public VectorizedFloatAnimationSpec(androidx.compose.animation.core.FloatAnimationSpec anim);
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ }
+
+ public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
+ ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public boolean isInfinite();
+ property public boolean isInfinite;
+ }
+
+ public final class VectorizedKeyframesSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
+ ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, optional int delayMillis);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ property public int delayMillis;
+ property public int durationMillis;
+ }
+
+ public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ }
+
+ public final class VectorizedSnapSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
+ ctor public VectorizedSnapSpec(optional int delayMillis);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ property public int delayMillis;
+ property public int durationMillis;
+ }
+
+ public final class VectorizedSpringSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ ctor public VectorizedSpringSpec(optional float dampingRatio, optional float stiffness, optional V? visibilityThreshold);
+ method public float getDampingRatio();
+ method public float getStiffness();
+ property public final float dampingRatio;
+ property public final float stiffness;
+ }
+
+ public final class VectorizedTweenSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
+ ctor public VectorizedTweenSpec(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public androidx.compose.animation.core.Easing getEasing();
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ property public int delayMillis;
+ property public int durationMillis;
+ property public final androidx.compose.animation.core.Easing easing;
+ }
+
+ public final class VisibilityThresholdsKt {
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntOffset.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Offset.Companion);
+ method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
+ method public static float getVisibilityThreshold(androidx.compose.ui.unit.Dp.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.DpOffset.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntSize.Companion);
+ method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
+ }
+
+}
+
diff --git a/compose/animation/animation-core/api/current.ignore b/compose/animation/animation-core/api/current.ignore
deleted file mode 100644
index f7336f7..0000000
--- a/compose/animation/animation-core/api/current.ignore
+++ /dev/null
@@ -1,21 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.compose.animation.core.InfiniteTransitionKt#animateFloat(androidx.compose.animation.core.InfiniteTransition, float, float, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float>):
- Method androidx.compose.animation.core.InfiniteTransitionKt.animateFloat has changed return type from androidx.compose.runtime.State<java.lang.Float> to androidx.compose.runtime.State<? extends java.lang.Float>
-ChangedType: androidx.compose.animation.core.InfiniteTransitionKt#animateValue(androidx.compose.animation.core.InfiniteTransition, T, T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.InfiniteRepeatableSpec<T>):
- Method androidx.compose.animation.core.InfiniteTransitionKt.animateValue has changed return type from androidx.compose.runtime.State<T> to androidx.compose.runtime.State<? extends T>
-
-
-RemovedClass: androidx.compose.animation.core.ActualJvmKt:
- Removed class androidx.compose.animation.core.ActualJvmKt
-RemovedClass: androidx.compose.animation.core.ComplexDoubleKt:
- Removed class androidx.compose.animation.core.ComplexDoubleKt
-RemovedClass: androidx.compose.animation.core.FloatDecayAnimationSpecKt:
- Removed class androidx.compose.animation.core.FloatDecayAnimationSpecKt
-RemovedClass: androidx.compose.animation.core.SpringSimulationKt:
- Removed class androidx.compose.animation.core.SpringSimulationKt
-RemovedClass: androidx.compose.animation.core.VectorizedAnimationSpecKt:
- Removed class androidx.compose.animation.core.VectorizedAnimationSpecKt
-
-
-RemovedPackage: androidx.compose.animation.core.internal:
- Removed package androidx.compose.animation.core.internal
diff --git a/compose/animation/animation-core/api/public_plus_experimental_1.4.0-beta02.txt b/compose/animation/animation-core/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..60b552a
--- /dev/null
+++ b/compose/animation/animation-core/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,768 @@
+// Signature format: 4.0
+package androidx.compose.animation.core {
+
+ public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
+ ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold, optional String label);
+ ctor @Deprecated public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
+ method public suspend Object? animateDecay(T? initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
+ method public suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
+ method public androidx.compose.runtime.State<T> asState();
+ method public String getLabel();
+ method public T? getLowerBound();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T? getUpperBound();
+ method public T! getValue();
+ method public T! getVelocity();
+ method public V getVelocityVector();
+ method public boolean isRunning();
+ method public suspend Object? snapTo(T? targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? stop(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public void updateBounds(optional T? lowerBound, optional T? upperBound);
+ property public final boolean isRunning;
+ property public final String label;
+ property public final T? lowerBound;
+ property public final T! targetValue;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public final T? upperBound;
+ property public final T! value;
+ property public final T! velocity;
+ property public final V velocityVector;
+ }
+
+ public final class AnimatableKt {
+ method public static androidx.compose.animation.core.Animatable<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> Animatable(float initialValue, optional float visibilityThreshold);
+ }
+
+ public final class AnimateAsStateKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValueAsState(T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValueAsState(T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>? finishedListener);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Animation<T, V extends androidx.compose.animation.core.AnimationVector> {
+ method public long getDurationNanos();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValueFromNanos(long playTimeNanos);
+ method public V getVelocityVectorFromNanos(long playTimeNanos);
+ method public default boolean isFinishedFromNanos(long playTimeNanos);
+ method public boolean isInfinite();
+ property public abstract long durationNanos;
+ property public abstract boolean isInfinite;
+ property public abstract T! targetValue;
+ property public abstract androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ }
+
+ public final class AnimationConstants {
+ field public static final int DefaultDurationMillis = 300; // 0x12c
+ field public static final androidx.compose.animation.core.AnimationConstants INSTANCE;
+ field public static final long UnspecifiedTime = -9223372036854775808L; // 0x8000000000000000L
+ }
+
+ public enum AnimationEndReason {
+ method public static androidx.compose.animation.core.AnimationEndReason valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.animation.core.AnimationEndReason[] values();
+ enum_constant public static final androidx.compose.animation.core.AnimationEndReason BoundReached;
+ enum_constant public static final androidx.compose.animation.core.AnimationEndReason Finished;
+ }
+
+ public final class AnimationKt {
+ method public static androidx.compose.animation.core.DecayAnimation<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> DecayAnimation(androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, float initialValue, optional float initialVelocity);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.TargetBasedAnimation<T,V> TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, T? initialVelocity);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> T! getVelocityFromNanos(androidx.compose.animation.core.Animation<T,V>, long playTimeNanos);
+ }
+
+ public final class AnimationResult<T, V extends androidx.compose.animation.core.AnimationVector> {
+ ctor public AnimationResult(androidx.compose.animation.core.AnimationState<T,V> endState, androidx.compose.animation.core.AnimationEndReason endReason);
+ method public androidx.compose.animation.core.AnimationEndReason getEndReason();
+ method public androidx.compose.animation.core.AnimationState<T,V> getEndState();
+ property public final androidx.compose.animation.core.AnimationEndReason endReason;
+ property public final androidx.compose.animation.core.AnimationState<T,V> endState;
+ }
+
+ public final class AnimationScope<T, V extends androidx.compose.animation.core.AnimationVector> {
+ method public void cancelAnimation();
+ method public long getFinishedTimeNanos();
+ method public long getLastFrameTimeNanos();
+ method public long getStartTimeNanos();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ method public T! getVelocity();
+ method public V getVelocityVector();
+ method public boolean isRunning();
+ method public androidx.compose.animation.core.AnimationState<T,V> toAnimationState();
+ property public final long finishedTimeNanos;
+ property public final boolean isRunning;
+ property public final long lastFrameTimeNanos;
+ property public final long startTimeNanos;
+ property public final T! targetValue;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public final T! value;
+ property public final T! velocity;
+ property public final V velocityVector;
+ }
+
+ public interface AnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ }
+
+ public final class AnimationSpecKt {
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T>! infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.KeyframesSpec<T> keyframes(kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T>,kotlin.Unit> init);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T>! repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SnapSpec<T> snap(optional int delayMillis);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SpringSpec<T> spring(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.TweenSpec<T> tween(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
+ }
+
+ public final class AnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
+ ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, optional V? initialVelocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public long getFinishedTimeNanos();
+ method public long getLastFrameTimeNanos();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ method public T! getVelocity();
+ method public V getVelocityVector();
+ method public boolean isRunning();
+ property public final long finishedTimeNanos;
+ property public final boolean isRunning;
+ property public final long lastFrameTimeNanos;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public T! value;
+ property public final T! velocity;
+ property public final V velocityVector;
+ }
+
+ public final class AnimationStateKt {
+ method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> AnimationState(float initialValue, optional float initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> copy(androidx.compose.animation.core.AnimationState<T,V>, optional T? value, optional V? velocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> copy(androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D>, optional float value, optional float velocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> V createZeroVectorFrom(androidx.compose.animation.core.TwoWayConverter<T,V>, T? value);
+ method public static boolean isFinished(androidx.compose.animation.core.AnimationState<?,?>);
+ }
+
+ public abstract sealed class AnimationVector {
+ }
+
+ public final class AnimationVector1D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector1D(float initVal);
+ method public float getValue();
+ property public final float value;
+ }
+
+ public final class AnimationVector2D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector2D(float v1, float v2);
+ method public float getV1();
+ method public float getV2();
+ property public final float v1;
+ property public final float v2;
+ }
+
+ public final class AnimationVector3D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector3D(float v1, float v2, float v3);
+ method public float getV1();
+ method public float getV2();
+ method public float getV3();
+ property public final float v1;
+ property public final float v2;
+ property public final float v3;
+ }
+
+ public final class AnimationVector4D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector4D(float v1, float v2, float v3, float v4);
+ method public float getV1();
+ method public float getV2();
+ method public float getV3();
+ method public float getV4();
+ property public final float v1;
+ property public final float v2;
+ property public final float v3;
+ property public final float v4;
+ }
+
+ public final class AnimationVectorsKt {
+ method public static androidx.compose.animation.core.AnimationVector1D AnimationVector(float v1);
+ method public static androidx.compose.animation.core.AnimationVector2D AnimationVector(float v1, float v2);
+ method public static androidx.compose.animation.core.AnimationVector3D AnimationVector(float v1, float v2, float v3);
+ method public static androidx.compose.animation.core.AnimationVector4D AnimationVector(float v1, float v2, float v3, float v4);
+ }
+
+ @androidx.compose.runtime.Immutable public final class CubicBezierEasing implements androidx.compose.animation.core.Easing {
+ ctor public CubicBezierEasing(float a, float b, float c, float d);
+ method public float transform(float fraction);
+ }
+
+ public final class DecayAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
+ ctor public DecayAnimation(androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V initialVelocityVector);
+ ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V initialVelocityVector);
+ ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? initialVelocity);
+ method public long getDurationNanos();
+ method public T! getInitialValue();
+ method public V getInitialVelocityVector();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValueFromNanos(long playTimeNanos);
+ method public V getVelocityVectorFromNanos(long playTimeNanos);
+ method public boolean isInfinite();
+ property public long durationNanos;
+ property public final T! initialValue;
+ property public final V initialVelocityVector;
+ property public boolean isInfinite;
+ property public T! targetValue;
+ property public androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ }
+
+ public interface DecayAnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter);
+ }
+
+ public final class DecayAnimationSpecKt {
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> T! calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? initialVelocity);
+ method public static float calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float>, float initialValue, float initialVelocity);
+ method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> exponentialDecay(optional float frictionMultiplier, optional float absVelocityThreshold);
+ method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> generateDecayAnimationSpec(androidx.compose.animation.core.FloatDecayAnimationSpec);
+ }
+
+ public interface DurationBasedAnimationSpec<T> extends androidx.compose.animation.core.FiniteAnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ }
+
+ @androidx.compose.runtime.Stable public fun interface Easing {
+ method public float transform(float fraction);
+ }
+
+ public final class EasingFunctionsKt {
+ method public static androidx.compose.animation.core.Easing getEase();
+ method public static androidx.compose.animation.core.Easing getEaseIn();
+ method public static androidx.compose.animation.core.Easing getEaseInBack();
+ method public static androidx.compose.animation.core.Easing getEaseInBounce();
+ method public static androidx.compose.animation.core.Easing getEaseInCirc();
+ method public static androidx.compose.animation.core.Easing getEaseInCubic();
+ method public static androidx.compose.animation.core.Easing getEaseInElastic();
+ method public static androidx.compose.animation.core.Easing getEaseInExpo();
+ method public static androidx.compose.animation.core.Easing getEaseInOut();
+ method public static androidx.compose.animation.core.Easing getEaseInOutBack();
+ method public static androidx.compose.animation.core.Easing getEaseInOutBounce();
+ method public static androidx.compose.animation.core.Easing getEaseInOutCirc();
+ method public static androidx.compose.animation.core.Easing getEaseInOutCubic();
+ method public static androidx.compose.animation.core.Easing getEaseInOutElastic();
+ method public static androidx.compose.animation.core.Easing getEaseInOutExpo();
+ method public static androidx.compose.animation.core.Easing getEaseInOutQuad();
+ method public static androidx.compose.animation.core.Easing getEaseInOutQuart();
+ method public static androidx.compose.animation.core.Easing getEaseInOutQuint();
+ method public static androidx.compose.animation.core.Easing getEaseInOutSine();
+ method public static androidx.compose.animation.core.Easing getEaseInQuad();
+ method public static androidx.compose.animation.core.Easing getEaseInQuart();
+ method public static androidx.compose.animation.core.Easing getEaseInQuint();
+ method public static androidx.compose.animation.core.Easing getEaseInSine();
+ method public static androidx.compose.animation.core.Easing getEaseOut();
+ method public static androidx.compose.animation.core.Easing getEaseOutBack();
+ method public static androidx.compose.animation.core.Easing getEaseOutBounce();
+ method public static androidx.compose.animation.core.Easing getEaseOutCirc();
+ method public static androidx.compose.animation.core.Easing getEaseOutCubic();
+ method public static androidx.compose.animation.core.Easing getEaseOutElastic();
+ method public static androidx.compose.animation.core.Easing getEaseOutExpo();
+ method public static androidx.compose.animation.core.Easing getEaseOutQuad();
+ method public static androidx.compose.animation.core.Easing getEaseOutQuart();
+ method public static androidx.compose.animation.core.Easing getEaseOutQuint();
+ method public static androidx.compose.animation.core.Easing getEaseOutSine();
+ property public static final androidx.compose.animation.core.Easing Ease;
+ property public static final androidx.compose.animation.core.Easing EaseIn;
+ property public static final androidx.compose.animation.core.Easing EaseInBack;
+ property public static final androidx.compose.animation.core.Easing EaseInBounce;
+ property public static final androidx.compose.animation.core.Easing EaseInCirc;
+ property public static final androidx.compose.animation.core.Easing EaseInCubic;
+ property public static final androidx.compose.animation.core.Easing EaseInElastic;
+ property public static final androidx.compose.animation.core.Easing EaseInExpo;
+ property public static final androidx.compose.animation.core.Easing EaseInOut;
+ property public static final androidx.compose.animation.core.Easing EaseInOutBack;
+ property public static final androidx.compose.animation.core.Easing EaseInOutBounce;
+ property public static final androidx.compose.animation.core.Easing EaseInOutCirc;
+ property public static final androidx.compose.animation.core.Easing EaseInOutCubic;
+ property public static final androidx.compose.animation.core.Easing EaseInOutElastic;
+ property public static final androidx.compose.animation.core.Easing EaseInOutExpo;
+ property public static final androidx.compose.animation.core.Easing EaseInOutQuad;
+ property public static final androidx.compose.animation.core.Easing EaseInOutQuart;
+ property public static final androidx.compose.animation.core.Easing EaseInOutQuint;
+ property public static final androidx.compose.animation.core.Easing EaseInOutSine;
+ property public static final androidx.compose.animation.core.Easing EaseInQuad;
+ property public static final androidx.compose.animation.core.Easing EaseInQuart;
+ property public static final androidx.compose.animation.core.Easing EaseInQuint;
+ property public static final androidx.compose.animation.core.Easing EaseInSine;
+ property public static final androidx.compose.animation.core.Easing EaseOut;
+ property public static final androidx.compose.animation.core.Easing EaseOutBack;
+ property public static final androidx.compose.animation.core.Easing EaseOutBounce;
+ property public static final androidx.compose.animation.core.Easing EaseOutCirc;
+ property public static final androidx.compose.animation.core.Easing EaseOutCubic;
+ property public static final androidx.compose.animation.core.Easing EaseOutElastic;
+ property public static final androidx.compose.animation.core.Easing EaseOutExpo;
+ property public static final androidx.compose.animation.core.Easing EaseOutQuad;
+ property public static final androidx.compose.animation.core.Easing EaseOutQuart;
+ property public static final androidx.compose.animation.core.Easing EaseOutQuint;
+ property public static final androidx.compose.animation.core.Easing EaseOutSine;
+ }
+
+ public final class EasingKt {
+ method public static androidx.compose.animation.core.Easing getFastOutLinearInEasing();
+ method public static androidx.compose.animation.core.Easing getFastOutSlowInEasing();
+ method public static androidx.compose.animation.core.Easing getLinearEasing();
+ method public static androidx.compose.animation.core.Easing getLinearOutSlowInEasing();
+ property public static final androidx.compose.animation.core.Easing FastOutLinearInEasing;
+ property public static final androidx.compose.animation.core.Easing FastOutSlowInEasing;
+ property public static final androidx.compose.animation.core.Easing LinearEasing;
+ property public static final androidx.compose.animation.core.Easing LinearOutSlowInEasing;
+ }
+
+ @kotlin.RequiresOptIn(message="This is an experimental animation API for Transition. It may change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalTransitionApi {
+ }
+
+ public interface FiniteAnimationSpec<T> extends androidx.compose.animation.core.AnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface FloatAnimationSpec extends androidx.compose.animation.core.AnimationSpec<java.lang.Float> {
+ method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
+ method public default float getEndVelocity(float initialValue, float targetValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public default <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedFloatAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<java.lang.Float,V> converter);
+ }
+
+ public interface FloatDecayAnimationSpec {
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(float initialValue, float initialVelocity);
+ method public float getTargetValue(float initialValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ property public abstract float absVelocityThreshold;
+ }
+
+ public final class FloatExponentialDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
+ ctor public FloatExponentialDecaySpec(optional float frictionMultiplier, optional float absVelocityThreshold);
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(float initialValue, float initialVelocity);
+ method public float getTargetValue(float initialValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ property public float absVelocityThreshold;
+ }
+
+ public final class FloatSpringSpec implements androidx.compose.animation.core.FloatAnimationSpec {
+ ctor public FloatSpringSpec(optional float dampingRatio, optional float stiffness, optional float visibilityThreshold);
+ method public float getDampingRatio();
+ method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
+ method public float getStiffness();
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ property public final float dampingRatio;
+ property public final float stiffness;
+ }
+
+ public final class FloatTweenSpec implements androidx.compose.animation.core.FloatAnimationSpec {
+ ctor public FloatTweenSpec(optional int duration, optional int delay, optional androidx.compose.animation.core.Easing easing);
+ method public int getDelay();
+ method public int getDuration();
+ method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ property public final int delay;
+ property public final int duration;
+ }
+
+ public final class InfiniteAnimationPolicyKt {
+ method public static suspend inline <R> Object? withInfiniteAnimationFrameMillis(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend <R> Object? withInfiniteAnimationFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
+ ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
+ method public long getInitialStartOffset();
+ method public androidx.compose.animation.core.RepeatMode getRepeatMode();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation;
+ property public final long initialStartOffset;
+ property public final androidx.compose.animation.core.RepeatMode repeatMode;
+ }
+
+ public final class InfiniteTransition {
+ method public java.util.List<androidx.compose.animation.core.InfiniteTransition.TransitionAnimationState<?,?>> getAnimations();
+ method public String getLabel();
+ property public final java.util.List<androidx.compose.animation.core.InfiniteTransition.TransitionAnimationState<?,?>> animations;
+ property public final String label;
+ }
+
+ public final class InfiniteTransition.TransitionAnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
+ method public androidx.compose.animation.core.TargetBasedAnimation<T,V> getAnimation();
+ method public androidx.compose.animation.core.AnimationSpec<T> getAnimationSpec();
+ method public String getLabel();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ property public final androidx.compose.animation.core.TargetBasedAnimation<T,V> animation;
+ property public final androidx.compose.animation.core.AnimationSpec<T> animationSpec;
+ property public final String label;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public T! value;
+ }
+
+ public final class InfiniteTransitionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
+ method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T? initialValue, T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValue(androidx.compose.animation.core.InfiniteTransition, T? initialValue, T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
+ method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition();
+ }
+
+ @kotlin.RequiresOptIn(message="This API is internal to library.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FIELD, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface InternalAnimationApi {
+ }
+
+ @androidx.compose.runtime.Immutable public final class KeyframesSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
+ ctor public KeyframesSpec(androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T> config);
+ method public androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T> getConfig();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedKeyframesSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T> config;
+ }
+
+ public static final class KeyframesSpec.KeyframeEntity<T> {
+ }
+
+ public static final class KeyframesSpec.KeyframesSpecConfig<T> {
+ ctor public KeyframesSpec.KeyframesSpecConfig();
+ method public infix androidx.compose.animation.core.KeyframesSpec.KeyframeEntity<T> at(T?, int timeStamp);
+ method public infix androidx.compose.animation.core.KeyframesSpec.KeyframeEntity<T> atFraction(T?, float fraction);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public void setDelayMillis(int);
+ method public void setDurationMillis(int);
+ method public infix void with(androidx.compose.animation.core.KeyframesSpec.KeyframeEntity<T>, androidx.compose.animation.core.Easing easing);
+ property public final int delayMillis;
+ property public final int durationMillis;
+ }
+
+ public final class MutableTransitionState<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 final boolean isIdle;
+ property public final S! targetState;
+ }
+
+ public enum RepeatMode {
+ method public static androidx.compose.animation.core.RepeatMode valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.animation.core.RepeatMode[] values();
+ enum_constant public static final androidx.compose.animation.core.RepeatMode Restart;
+ enum_constant public static final androidx.compose.animation.core.RepeatMode Reverse;
+ }
+
+ @androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
+ ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
+ method public long getInitialStartOffset();
+ method public int getIterations();
+ method public androidx.compose.animation.core.RepeatMode getRepeatMode();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation;
+ property public final long initialStartOffset;
+ property public final int iterations;
+ property public final androidx.compose.animation.core.RepeatMode repeatMode;
+ }
+
+ @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();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final int delay;
+ }
+
+ public final class Spring {
+ field public static final float DampingRatioHighBouncy = 0.2f;
+ field public static final float DampingRatioLowBouncy = 0.75f;
+ field public static final float DampingRatioMediumBouncy = 0.5f;
+ field public static final float DampingRatioNoBouncy = 1.0f;
+ field public static final float DefaultDisplacementThreshold = 0.01f;
+ field public static final androidx.compose.animation.core.Spring INSTANCE;
+ field public static final float StiffnessHigh = 10000.0f;
+ field public static final float StiffnessLow = 200.0f;
+ field public static final float StiffnessMedium = 1500.0f;
+ field public static final float StiffnessMediumLow = 400.0f;
+ field public static final float StiffnessVeryLow = 50.0f;
+ }
+
+ public final class SpringEstimationKt {
+ }
+
+ @androidx.compose.runtime.Immutable public final class SpringSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
+ ctor public SpringSpec(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
+ method public float getDampingRatio();
+ method public float getStiffness();
+ method public T? getVisibilityThreshold();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedSpringSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final float dampingRatio;
+ property public final float stiffness;
+ property public final T? visibilityThreshold;
+ }
+
+ @kotlin.jvm.JvmInline public final value class StartOffset {
+ ctor public StartOffset(int offsetMillis, optional int offsetType);
+ method public int getOffsetMillis();
+ method public int getOffsetType();
+ property public final int offsetMillis;
+ property public final int offsetType;
+ }
+
+ @kotlin.jvm.JvmInline public final value class StartOffsetType {
+ field public static final androidx.compose.animation.core.StartOffsetType.Companion Companion;
+ }
+
+ public static final class StartOffsetType.Companion {
+ method public int getDelay();
+ method public int getFastForward();
+ property public final int Delay;
+ property public final int FastForward;
+ }
+
+ public final class SuspendAnimationKt {
+ method public static suspend Object? animate(float initialValue, float targetValue, optional float initialVelocity, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animate(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional T? initialVelocity, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, kotlin.jvm.functions.Function2<? super T,? super T,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateDecay(float initialValue, float initialVelocity, androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateDecay(androidx.compose.animation.core.AnimationState<T,V>, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateTo(androidx.compose.animation.core.AnimationState<T,V>, T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class TargetBasedAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
+ ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional V? initialVelocityVector);
+ method public long getDurationNanos();
+ method public T! getInitialValue();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValueFromNanos(long playTimeNanos);
+ method public V getVelocityVectorFromNanos(long playTimeNanos);
+ method public boolean isInfinite();
+ property public long durationNanos;
+ property public final T! initialValue;
+ property public boolean isInfinite;
+ property public T! targetValue;
+ property public androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ }
+
+ @androidx.compose.runtime.Stable public final class Transition<S> {
+ method public java.util.List<androidx.compose.animation.core.Transition<S>.TransitionAnimationState<?,?>> getAnimations();
+ method public S! getCurrentState();
+ method public String? getLabel();
+ method public androidx.compose.animation.core.Transition.Segment<S> getSegment();
+ method public S! getTargetState();
+ method public long getTotalDurationNanos();
+ method public java.util.List<androidx.compose.animation.core.Transition<?>> getTransitions();
+ method public boolean isRunning();
+ property public final java.util.List<androidx.compose.animation.core.Transition<S>.TransitionAnimationState<?,?>> animations;
+ property public final S! currentState;
+ property public final boolean isRunning;
+ property public final String? label;
+ property public final androidx.compose.animation.core.Transition.Segment<S> segment;
+ property public final S! targetState;
+ property public final long totalDurationNanos;
+ property public final java.util.List<androidx.compose.animation.core.Transition<?>> transitions;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public static interface Transition.Segment<S> {
+ method public S! getInitialState();
+ method public S! getTargetState();
+ method public default infix boolean isTransitioningTo(S?, S? targetState);
+ property public abstract S! initialState;
+ property public abstract S! targetState;
+ }
+
+ @androidx.compose.runtime.Stable public final class Transition.TransitionAnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
+ method public androidx.compose.animation.core.TargetBasedAnimation<T,V> getAnimation();
+ method public androidx.compose.animation.core.FiniteAnimationSpec<T> getAnimationSpec();
+ method public String getLabel();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ property public final androidx.compose.animation.core.TargetBasedAnimation<T,V> animation;
+ property public final androidx.compose.animation.core.FiniteAnimationSpec<T> animationSpec;
+ property public final String label;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public T! value;
+ }
+
+ public final class TransitionKt {
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDp(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.unit.Dp>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.Dp> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<java.lang.Float> animateFloat(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<java.lang.Float>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,java.lang.Float> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<java.lang.Integer> animateInt(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<java.lang.Integer>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,java.lang.Integer> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffset(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.unit.IntOffset>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntOffset> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSize(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.unit.IntSize>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntSize> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffset(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.Offset>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Offset> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRect(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.Rect>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Rect> targetValueByState);
+ 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 @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 public static <T> androidx.compose.animation.core.Transition<T> updateTransition(T? targetState, 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);
+ }
+
+ @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();
+ method public int getDurationMillis();
+ method public androidx.compose.animation.core.Easing getEasing();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedTweenSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final int delay;
+ property public final int durationMillis;
+ property public final androidx.compose.animation.core.Easing easing;
+ }
+
+ public interface TwoWayConverter<T, V extends androidx.compose.animation.core.AnimationVector> {
+ method public kotlin.jvm.functions.Function1<V,T> getConvertFromVector();
+ method public kotlin.jvm.functions.Function1<T,V> getConvertToVector();
+ property public abstract kotlin.jvm.functions.Function1<V,T> convertFromVector;
+ property public abstract kotlin.jvm.functions.Function1<T,V> convertToVector;
+ }
+
+ public final class VectorConvertersKt {
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.TwoWayConverter<T,V> TwoWayConverter(kotlin.jvm.functions.Function1<? super T,? extends V> convertToVector, kotlin.jvm.functions.Function1<? super V,? extends T> convertFromVector);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.FloatCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Integer,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.IntCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntOffset.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntSize.Companion);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> {
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public default V getEndVelocity(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public boolean isInfinite();
+ property public abstract boolean isInfinite;
+ }
+
+ public interface VectorizedDecayAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> {
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(V initialValue, V initialVelocity);
+ method public V getTargetValue(V initialValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V initialVelocity);
+ property public abstract float absVelocityThreshold;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedDurationBasedAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public default long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ property public abstract int delayMillis;
+ property public abstract int durationMillis;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedFiniteAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.VectorizedAnimationSpec<V> {
+ method public default boolean isInfinite();
+ property public default boolean isInfinite;
+ }
+
+ public final class VectorizedFloatAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ ctor public VectorizedFloatAnimationSpec(androidx.compose.animation.core.FloatAnimationSpec anim);
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ }
+
+ public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
+ ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public boolean isInfinite();
+ property public boolean isInfinite;
+ }
+
+ public final class VectorizedKeyframesSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
+ ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, optional int delayMillis);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ property public int delayMillis;
+ property public int durationMillis;
+ }
+
+ public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ }
+
+ public final class VectorizedSnapSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
+ ctor public VectorizedSnapSpec(optional int delayMillis);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ property public int delayMillis;
+ property public int durationMillis;
+ }
+
+ public final class VectorizedSpringSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ ctor public VectorizedSpringSpec(optional float dampingRatio, optional float stiffness, optional V? visibilityThreshold);
+ method public float getDampingRatio();
+ method public float getStiffness();
+ property public final float dampingRatio;
+ property public final float stiffness;
+ }
+
+ public final class VectorizedTweenSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
+ ctor public VectorizedTweenSpec(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public androidx.compose.animation.core.Easing getEasing();
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ property public int delayMillis;
+ property public int durationMillis;
+ property public final androidx.compose.animation.core.Easing easing;
+ }
+
+ public final class VisibilityThresholdsKt {
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntOffset.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Offset.Companion);
+ method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
+ method public static float getVisibilityThreshold(androidx.compose.ui.unit.Dp.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.DpOffset.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntSize.Companion);
+ method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
+ }
+
+}
+
diff --git a/compose/animation/animation-core/api/res-1.4.0-beta02.txt b/compose/animation/animation-core/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/animation/animation-core/api/res-1.4.0-beta02.txt
diff --git a/compose/animation/animation-core/api/restricted_1.4.0-beta02.txt b/compose/animation/animation-core/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..9863fd5
--- /dev/null
+++ b/compose/animation/animation-core/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,764 @@
+// Signature format: 4.0
+package androidx.compose.animation.core {
+
+ public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
+ ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold, optional String label);
+ ctor @Deprecated public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
+ method public suspend Object? animateDecay(T? initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
+ method public suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
+ method public androidx.compose.runtime.State<T> asState();
+ method public String getLabel();
+ method public T? getLowerBound();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T? getUpperBound();
+ method public T! getValue();
+ method public T! getVelocity();
+ method public V getVelocityVector();
+ method public boolean isRunning();
+ method public suspend Object? snapTo(T? targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? stop(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public void updateBounds(optional T? lowerBound, optional T? upperBound);
+ property public final boolean isRunning;
+ property public final String label;
+ property public final T? lowerBound;
+ property public final T! targetValue;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public final T? upperBound;
+ property public final T! value;
+ property public final T! velocity;
+ property public final V velocityVector;
+ }
+
+ public final class AnimatableKt {
+ method public static androidx.compose.animation.core.Animatable<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> Animatable(float initialValue, optional float visibilityThreshold);
+ }
+
+ public final class AnimateAsStateKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.Dp> animateDpAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloatAsState(float targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional float visibilityThreshold, optional kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Integer> animateIntAsState(int targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntOffset> animateIntOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.unit.IntSize> animateIntSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Offset> animateOffsetAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Rect> animateRectAsState(androidx.compose.ui.geometry.Rect targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Rect> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Rect,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.geometry.Size> animateSizeAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,? extends kotlin.Unit>? finishedListener);
+ method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValueAsState(T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional String label, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValueAsState(T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? visibilityThreshold, optional kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit>? finishedListener);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Animation<T, V extends androidx.compose.animation.core.AnimationVector> {
+ method public long getDurationNanos();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValueFromNanos(long playTimeNanos);
+ method public V getVelocityVectorFromNanos(long playTimeNanos);
+ method public default boolean isFinishedFromNanos(long playTimeNanos);
+ method public boolean isInfinite();
+ property public abstract long durationNanos;
+ property public abstract boolean isInfinite;
+ property public abstract T! targetValue;
+ property public abstract androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ }
+
+ public final class AnimationConstants {
+ field public static final int DefaultDurationMillis = 300; // 0x12c
+ field public static final androidx.compose.animation.core.AnimationConstants INSTANCE;
+ field public static final long UnspecifiedTime = -9223372036854775808L; // 0x8000000000000000L
+ }
+
+ public enum AnimationEndReason {
+ method public static androidx.compose.animation.core.AnimationEndReason valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.animation.core.AnimationEndReason[] values();
+ enum_constant public static final androidx.compose.animation.core.AnimationEndReason BoundReached;
+ enum_constant public static final androidx.compose.animation.core.AnimationEndReason Finished;
+ }
+
+ public final class AnimationKt {
+ method public static androidx.compose.animation.core.DecayAnimation<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> DecayAnimation(androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, float initialValue, optional float initialVelocity);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.TargetBasedAnimation<T,V> TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, T? initialVelocity);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> T! getVelocityFromNanos(androidx.compose.animation.core.Animation<T,V>, long playTimeNanos);
+ }
+
+ public final class AnimationResult<T, V extends androidx.compose.animation.core.AnimationVector> {
+ ctor public AnimationResult(androidx.compose.animation.core.AnimationState<T,V> endState, androidx.compose.animation.core.AnimationEndReason endReason);
+ method public androidx.compose.animation.core.AnimationEndReason getEndReason();
+ method public androidx.compose.animation.core.AnimationState<T,V> getEndState();
+ property public final androidx.compose.animation.core.AnimationEndReason endReason;
+ property public final androidx.compose.animation.core.AnimationState<T,V> endState;
+ }
+
+ public final class AnimationScope<T, V extends androidx.compose.animation.core.AnimationVector> {
+ method public void cancelAnimation();
+ method public long getFinishedTimeNanos();
+ method public long getLastFrameTimeNanos();
+ method public long getStartTimeNanos();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ method public T! getVelocity();
+ method public V getVelocityVector();
+ method public boolean isRunning();
+ method public androidx.compose.animation.core.AnimationState<T,V> toAnimationState();
+ property public final long finishedTimeNanos;
+ property public final boolean isRunning;
+ property public final long lastFrameTimeNanos;
+ property public final long startTimeNanos;
+ property public final T! targetValue;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public final T! value;
+ property public final T! velocity;
+ property public final V velocityVector;
+ }
+
+ public interface AnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ }
+
+ public final class AnimationSpecKt {
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T>! infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.KeyframesSpec<T> keyframes(kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T>,kotlin.Unit> init);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T>! repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SnapSpec<T> snap(optional int delayMillis);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SpringSpec<T> spring(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.TweenSpec<T> tween(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
+ }
+
+ public final class AnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
+ ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, optional V? initialVelocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public long getFinishedTimeNanos();
+ method public long getLastFrameTimeNanos();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ method public T! getVelocity();
+ method public V getVelocityVector();
+ method public boolean isRunning();
+ property public final long finishedTimeNanos;
+ property public final boolean isRunning;
+ property public final long lastFrameTimeNanos;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public T! value;
+ property public final T! velocity;
+ property public final V velocityVector;
+ }
+
+ public final class AnimationStateKt {
+ method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> AnimationState(float initialValue, optional float initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> copy(androidx.compose.animation.core.AnimationState<T,V>, optional T? value, optional V? velocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> copy(androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D>, optional float value, optional float velocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> V createZeroVectorFrom(androidx.compose.animation.core.TwoWayConverter<T,V>, T? value);
+ method public static boolean isFinished(androidx.compose.animation.core.AnimationState<?,?>);
+ }
+
+ public abstract sealed class AnimationVector {
+ }
+
+ public final class AnimationVector1D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector1D(float initVal);
+ method public float getValue();
+ property public final float value;
+ }
+
+ public final class AnimationVector2D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector2D(float v1, float v2);
+ method public float getV1();
+ method public float getV2();
+ property public final float v1;
+ property public final float v2;
+ }
+
+ public final class AnimationVector3D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector3D(float v1, float v2, float v3);
+ method public float getV1();
+ method public float getV2();
+ method public float getV3();
+ property public final float v1;
+ property public final float v2;
+ property public final float v3;
+ }
+
+ public final class AnimationVector4D extends androidx.compose.animation.core.AnimationVector {
+ ctor public AnimationVector4D(float v1, float v2, float v3, float v4);
+ method public float getV1();
+ method public float getV2();
+ method public float getV3();
+ method public float getV4();
+ property public final float v1;
+ property public final float v2;
+ property public final float v3;
+ property public final float v4;
+ }
+
+ public final class AnimationVectorsKt {
+ method public static androidx.compose.animation.core.AnimationVector1D AnimationVector(float v1);
+ method public static androidx.compose.animation.core.AnimationVector2D AnimationVector(float v1, float v2);
+ method public static androidx.compose.animation.core.AnimationVector3D AnimationVector(float v1, float v2, float v3);
+ method public static androidx.compose.animation.core.AnimationVector4D AnimationVector(float v1, float v2, float v3, float v4);
+ }
+
+ @androidx.compose.runtime.Immutable public final class CubicBezierEasing implements androidx.compose.animation.core.Easing {
+ ctor public CubicBezierEasing(float a, float b, float c, float d);
+ method public float transform(float fraction);
+ }
+
+ public final class DecayAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
+ ctor public DecayAnimation(androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V initialVelocityVector);
+ ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V initialVelocityVector);
+ ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? initialVelocity);
+ method public long getDurationNanos();
+ method public T! getInitialValue();
+ method public V getInitialVelocityVector();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValueFromNanos(long playTimeNanos);
+ method public V getVelocityVectorFromNanos(long playTimeNanos);
+ method public boolean isInfinite();
+ property public long durationNanos;
+ property public final T! initialValue;
+ property public final V initialVelocityVector;
+ property public boolean isInfinite;
+ property public T! targetValue;
+ property public androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ }
+
+ public interface DecayAnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter);
+ }
+
+ public final class DecayAnimationSpecKt {
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> T! calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? initialVelocity);
+ method public static float calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float>, float initialValue, float initialVelocity);
+ method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> exponentialDecay(optional float frictionMultiplier, optional float absVelocityThreshold);
+ method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> generateDecayAnimationSpec(androidx.compose.animation.core.FloatDecayAnimationSpec);
+ }
+
+ public interface DurationBasedAnimationSpec<T> extends androidx.compose.animation.core.FiniteAnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ }
+
+ @androidx.compose.runtime.Stable public fun interface Easing {
+ method public float transform(float fraction);
+ }
+
+ public final class EasingFunctionsKt {
+ method public static androidx.compose.animation.core.Easing getEase();
+ method public static androidx.compose.animation.core.Easing getEaseIn();
+ method public static androidx.compose.animation.core.Easing getEaseInBack();
+ method public static androidx.compose.animation.core.Easing getEaseInBounce();
+ method public static androidx.compose.animation.core.Easing getEaseInCirc();
+ method public static androidx.compose.animation.core.Easing getEaseInCubic();
+ method public static androidx.compose.animation.core.Easing getEaseInElastic();
+ method public static androidx.compose.animation.core.Easing getEaseInExpo();
+ method public static androidx.compose.animation.core.Easing getEaseInOut();
+ method public static androidx.compose.animation.core.Easing getEaseInOutBack();
+ method public static androidx.compose.animation.core.Easing getEaseInOutBounce();
+ method public static androidx.compose.animation.core.Easing getEaseInOutCirc();
+ method public static androidx.compose.animation.core.Easing getEaseInOutCubic();
+ method public static androidx.compose.animation.core.Easing getEaseInOutElastic();
+ method public static androidx.compose.animation.core.Easing getEaseInOutExpo();
+ method public static androidx.compose.animation.core.Easing getEaseInOutQuad();
+ method public static androidx.compose.animation.core.Easing getEaseInOutQuart();
+ method public static androidx.compose.animation.core.Easing getEaseInOutQuint();
+ method public static androidx.compose.animation.core.Easing getEaseInOutSine();
+ method public static androidx.compose.animation.core.Easing getEaseInQuad();
+ method public static androidx.compose.animation.core.Easing getEaseInQuart();
+ method public static androidx.compose.animation.core.Easing getEaseInQuint();
+ method public static androidx.compose.animation.core.Easing getEaseInSine();
+ method public static androidx.compose.animation.core.Easing getEaseOut();
+ method public static androidx.compose.animation.core.Easing getEaseOutBack();
+ method public static androidx.compose.animation.core.Easing getEaseOutBounce();
+ method public static androidx.compose.animation.core.Easing getEaseOutCirc();
+ method public static androidx.compose.animation.core.Easing getEaseOutCubic();
+ method public static androidx.compose.animation.core.Easing getEaseOutElastic();
+ method public static androidx.compose.animation.core.Easing getEaseOutExpo();
+ method public static androidx.compose.animation.core.Easing getEaseOutQuad();
+ method public static androidx.compose.animation.core.Easing getEaseOutQuart();
+ method public static androidx.compose.animation.core.Easing getEaseOutQuint();
+ method public static androidx.compose.animation.core.Easing getEaseOutSine();
+ property public static final androidx.compose.animation.core.Easing Ease;
+ property public static final androidx.compose.animation.core.Easing EaseIn;
+ property public static final androidx.compose.animation.core.Easing EaseInBack;
+ property public static final androidx.compose.animation.core.Easing EaseInBounce;
+ property public static final androidx.compose.animation.core.Easing EaseInCirc;
+ property public static final androidx.compose.animation.core.Easing EaseInCubic;
+ property public static final androidx.compose.animation.core.Easing EaseInElastic;
+ property public static final androidx.compose.animation.core.Easing EaseInExpo;
+ property public static final androidx.compose.animation.core.Easing EaseInOut;
+ property public static final androidx.compose.animation.core.Easing EaseInOutBack;
+ property public static final androidx.compose.animation.core.Easing EaseInOutBounce;
+ property public static final androidx.compose.animation.core.Easing EaseInOutCirc;
+ property public static final androidx.compose.animation.core.Easing EaseInOutCubic;
+ property public static final androidx.compose.animation.core.Easing EaseInOutElastic;
+ property public static final androidx.compose.animation.core.Easing EaseInOutExpo;
+ property public static final androidx.compose.animation.core.Easing EaseInOutQuad;
+ property public static final androidx.compose.animation.core.Easing EaseInOutQuart;
+ property public static final androidx.compose.animation.core.Easing EaseInOutQuint;
+ property public static final androidx.compose.animation.core.Easing EaseInOutSine;
+ property public static final androidx.compose.animation.core.Easing EaseInQuad;
+ property public static final androidx.compose.animation.core.Easing EaseInQuart;
+ property public static final androidx.compose.animation.core.Easing EaseInQuint;
+ property public static final androidx.compose.animation.core.Easing EaseInSine;
+ property public static final androidx.compose.animation.core.Easing EaseOut;
+ property public static final androidx.compose.animation.core.Easing EaseOutBack;
+ property public static final androidx.compose.animation.core.Easing EaseOutBounce;
+ property public static final androidx.compose.animation.core.Easing EaseOutCirc;
+ property public static final androidx.compose.animation.core.Easing EaseOutCubic;
+ property public static final androidx.compose.animation.core.Easing EaseOutElastic;
+ property public static final androidx.compose.animation.core.Easing EaseOutExpo;
+ property public static final androidx.compose.animation.core.Easing EaseOutQuad;
+ property public static final androidx.compose.animation.core.Easing EaseOutQuart;
+ property public static final androidx.compose.animation.core.Easing EaseOutQuint;
+ property public static final androidx.compose.animation.core.Easing EaseOutSine;
+ }
+
+ public final class EasingKt {
+ method public static androidx.compose.animation.core.Easing getFastOutLinearInEasing();
+ method public static androidx.compose.animation.core.Easing getFastOutSlowInEasing();
+ method public static androidx.compose.animation.core.Easing getLinearEasing();
+ method public static androidx.compose.animation.core.Easing getLinearOutSlowInEasing();
+ property public static final androidx.compose.animation.core.Easing FastOutLinearInEasing;
+ property public static final androidx.compose.animation.core.Easing FastOutSlowInEasing;
+ property public static final androidx.compose.animation.core.Easing LinearEasing;
+ property public static final androidx.compose.animation.core.Easing LinearOutSlowInEasing;
+ }
+
+ public interface FiniteAnimationSpec<T> extends androidx.compose.animation.core.AnimationSpec<T> {
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface FloatAnimationSpec extends androidx.compose.animation.core.AnimationSpec<java.lang.Float> {
+ method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
+ method public default float getEndVelocity(float initialValue, float targetValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public default <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedFloatAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<java.lang.Float,V> converter);
+ }
+
+ public interface FloatDecayAnimationSpec {
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(float initialValue, float initialVelocity);
+ method public float getTargetValue(float initialValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ property public abstract float absVelocityThreshold;
+ }
+
+ public final class FloatExponentialDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
+ ctor public FloatExponentialDecaySpec(optional float frictionMultiplier, optional float absVelocityThreshold);
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(float initialValue, float initialVelocity);
+ method public float getTargetValue(float initialValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ property public float absVelocityThreshold;
+ }
+
+ public final class FloatSpringSpec implements androidx.compose.animation.core.FloatAnimationSpec {
+ ctor public FloatSpringSpec(optional float dampingRatio, optional float stiffness, optional float visibilityThreshold);
+ method public float getDampingRatio();
+ method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
+ method public float getStiffness();
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ property public final float dampingRatio;
+ property public final float stiffness;
+ }
+
+ public final class FloatTweenSpec implements androidx.compose.animation.core.FloatAnimationSpec {
+ ctor public FloatTweenSpec(optional int duration, optional int delay, optional androidx.compose.animation.core.Easing easing);
+ method public int getDelay();
+ method public int getDuration();
+ method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float targetValue, float initialVelocity);
+ property public final int delay;
+ property public final int duration;
+ }
+
+ public final class InfiniteAnimationPolicyKt {
+ method public static suspend inline <R> Object? withInfiniteAnimationFrameMillis(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend <R> Object? withInfiniteAnimationFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
+ ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
+ method public long getInitialStartOffset();
+ method public androidx.compose.animation.core.RepeatMode getRepeatMode();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation;
+ property public final long initialStartOffset;
+ property public final androidx.compose.animation.core.RepeatMode repeatMode;
+ }
+
+ public final class InfiniteTransition {
+ method public java.util.List<androidx.compose.animation.core.InfiniteTransition.TransitionAnimationState<?,?>> getAnimations();
+ method public String getLabel();
+ property public final java.util.List<androidx.compose.animation.core.InfiniteTransition.TransitionAnimationState<?,?>> animations;
+ property public final String label;
+ }
+
+ public final class InfiniteTransition.TransitionAnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
+ method public androidx.compose.animation.core.TargetBasedAnimation<T,V> getAnimation();
+ method public androidx.compose.animation.core.AnimationSpec<T> getAnimationSpec();
+ method public String getLabel();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ property public final androidx.compose.animation.core.TargetBasedAnimation<T,V> animation;
+ property public final androidx.compose.animation.core.AnimationSpec<T> animationSpec;
+ property public final String label;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public T! value;
+ }
+
+ public final class InfiniteTransitionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
+ method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T? initialValue, T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValue(androidx.compose.animation.core.InfiniteTransition, T? initialValue, T? targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
+ method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition();
+ }
+
+ @androidx.compose.runtime.Immutable public final class KeyframesSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
+ ctor public KeyframesSpec(androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T> config);
+ method public androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T> getConfig();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedKeyframesSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T> config;
+ }
+
+ public static final class KeyframesSpec.KeyframeEntity<T> {
+ }
+
+ public static final class KeyframesSpec.KeyframesSpecConfig<T> {
+ ctor public KeyframesSpec.KeyframesSpecConfig();
+ method public infix androidx.compose.animation.core.KeyframesSpec.KeyframeEntity<T> at(T?, int timeStamp);
+ method public infix androidx.compose.animation.core.KeyframesSpec.KeyframeEntity<T> atFraction(T?, float fraction);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public void setDelayMillis(int);
+ method public void setDurationMillis(int);
+ method public infix void with(androidx.compose.animation.core.KeyframesSpec.KeyframeEntity<T>, androidx.compose.animation.core.Easing easing);
+ property public final int delayMillis;
+ property public final int durationMillis;
+ }
+
+ public final class MutableTransitionState<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 final boolean isIdle;
+ property public final S! targetState;
+ }
+
+ public enum RepeatMode {
+ method public static androidx.compose.animation.core.RepeatMode valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.animation.core.RepeatMode[] values();
+ enum_constant public static final androidx.compose.animation.core.RepeatMode Restart;
+ enum_constant public static final androidx.compose.animation.core.RepeatMode Reverse;
+ }
+
+ @androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
+ ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
+ method public long getInitialStartOffset();
+ method public int getIterations();
+ method public androidx.compose.animation.core.RepeatMode getRepeatMode();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation;
+ property public final long initialStartOffset;
+ property public final int iterations;
+ property public final androidx.compose.animation.core.RepeatMode repeatMode;
+ }
+
+ @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();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final int delay;
+ }
+
+ public final class Spring {
+ field public static final float DampingRatioHighBouncy = 0.2f;
+ field public static final float DampingRatioLowBouncy = 0.75f;
+ field public static final float DampingRatioMediumBouncy = 0.5f;
+ field public static final float DampingRatioNoBouncy = 1.0f;
+ field public static final float DefaultDisplacementThreshold = 0.01f;
+ field public static final androidx.compose.animation.core.Spring INSTANCE;
+ field public static final float StiffnessHigh = 10000.0f;
+ field public static final float StiffnessLow = 200.0f;
+ field public static final float StiffnessMedium = 1500.0f;
+ field public static final float StiffnessMediumLow = 400.0f;
+ field public static final float StiffnessVeryLow = 50.0f;
+ }
+
+ public final class SpringEstimationKt {
+ }
+
+ @androidx.compose.runtime.Immutable public final class SpringSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
+ ctor public SpringSpec(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
+ method public float getDampingRatio();
+ method public float getStiffness();
+ method public T? getVisibilityThreshold();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedSpringSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final float dampingRatio;
+ property public final float stiffness;
+ property public final T? visibilityThreshold;
+ }
+
+ @kotlin.jvm.JvmInline public final value class StartOffset {
+ ctor public StartOffset(int offsetMillis, optional int offsetType);
+ method public int getOffsetMillis();
+ method public int getOffsetType();
+ property public final int offsetMillis;
+ property public final int offsetType;
+ }
+
+ @kotlin.jvm.JvmInline public final value class StartOffsetType {
+ field public static final androidx.compose.animation.core.StartOffsetType.Companion Companion;
+ }
+
+ public static final class StartOffsetType.Companion {
+ method public int getDelay();
+ method public int getFastForward();
+ property public final int Delay;
+ property public final int FastForward;
+ }
+
+ public final class SuspendAnimationKt {
+ method public static suspend Object? animate(float initialValue, float targetValue, optional float initialVelocity, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animate(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional T? initialVelocity, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, kotlin.jvm.functions.Function2<? super T,? super T,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateDecay(float initialValue, float initialVelocity, androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateDecay(androidx.compose.animation.core.AnimationState<T,V>, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateTo(androidx.compose.animation.core.AnimationState<T,V>, T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class TargetBasedAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
+ ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional V? initialVelocityVector);
+ method public long getDurationNanos();
+ method public T! getInitialValue();
+ method public T! getTargetValue();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValueFromNanos(long playTimeNanos);
+ method public V getVelocityVectorFromNanos(long playTimeNanos);
+ method public boolean isInfinite();
+ property public long durationNanos;
+ property public final T! initialValue;
+ property public boolean isInfinite;
+ property public T! targetValue;
+ property public androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ }
+
+ @androidx.compose.runtime.Stable public final class Transition<S> {
+ ctor @kotlin.PublishedApi internal Transition(androidx.compose.animation.core.MutableTransitionState<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();
+ method public androidx.compose.animation.core.Transition.Segment<S> getSegment();
+ method public S! getTargetState();
+ method public long getTotalDurationNanos();
+ method public java.util.List<androidx.compose.animation.core.Transition<?>> getTransitions();
+ method public boolean isRunning();
+ property public final java.util.List<androidx.compose.animation.core.Transition<S>.TransitionAnimationState<?,?>> animations;
+ property public final S! currentState;
+ property public final boolean isRunning;
+ property public final String? label;
+ property public final androidx.compose.animation.core.Transition.Segment<S> segment;
+ property public final S! targetState;
+ property public final long totalDurationNanos;
+ property public final java.util.List<androidx.compose.animation.core.Transition<?>> transitions;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public static interface Transition.Segment<S> {
+ method public S! getInitialState();
+ method public S! getTargetState();
+ method public default infix boolean isTransitioningTo(S?, S? targetState);
+ property public abstract S! initialState;
+ property public abstract S! targetState;
+ }
+
+ @androidx.compose.runtime.Stable public final class Transition.TransitionAnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
+ method public androidx.compose.animation.core.TargetBasedAnimation<T,V> getAnimation();
+ method public androidx.compose.animation.core.FiniteAnimationSpec<T> getAnimationSpec();
+ method public String getLabel();
+ method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
+ method public T! getValue();
+ property public final androidx.compose.animation.core.TargetBasedAnimation<T,V> animation;
+ property public final androidx.compose.animation.core.FiniteAnimationSpec<T> animationSpec;
+ property public final String label;
+ property public final androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter;
+ property public T! value;
+ }
+
+ public final class TransitionKt {
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> animateDp(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.unit.Dp>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.Dp> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<java.lang.Float> animateFloat(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<java.lang.Float>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,java.lang.Float> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<java.lang.Integer> animateInt(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<java.lang.Integer>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,java.lang.Integer> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntOffset> animateIntOffset(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.unit.IntOffset>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntOffset> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.unit.IntSize> animateIntSize(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.unit.IntSize>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.unit.IntSize> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Offset> animateOffset(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.Offset>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Offset> targetValueByState);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRect(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.Rect>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Rect> targetValueByState);
+ 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 @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 @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(T? targetState, 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);
+ }
+
+ @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();
+ method public int getDurationMillis();
+ method public androidx.compose.animation.core.Easing getEasing();
+ method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedTweenSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
+ property public final int delay;
+ property public final int durationMillis;
+ property public final androidx.compose.animation.core.Easing easing;
+ }
+
+ public interface TwoWayConverter<T, V extends androidx.compose.animation.core.AnimationVector> {
+ method public kotlin.jvm.functions.Function1<V,T> getConvertFromVector();
+ method public kotlin.jvm.functions.Function1<T,V> getConvertToVector();
+ property public abstract kotlin.jvm.functions.Function1<V,T> convertFromVector;
+ property public abstract kotlin.jvm.functions.Function1<T,V> convertToVector;
+ }
+
+ public final class VectorConvertersKt {
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.TwoWayConverter<T,V> TwoWayConverter(kotlin.jvm.functions.Function1<? super T,? extends V> convertToVector, kotlin.jvm.functions.Function1<? super V,? extends T> convertFromVector);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.FloatCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Integer,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.IntCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntOffset.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntSize.Companion);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> {
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public default V getEndVelocity(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public boolean isInfinite();
+ property public abstract boolean isInfinite;
+ }
+
+ public interface VectorizedDecayAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> {
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(V initialValue, V initialVelocity);
+ method public V getTargetValue(V initialValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V initialVelocity);
+ property public abstract float absVelocityThreshold;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedDurationBasedAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public default long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ property public abstract int delayMillis;
+ property public abstract int durationMillis;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedFiniteAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.VectorizedAnimationSpec<V> {
+ method public default boolean isInfinite();
+ property public default boolean isInfinite;
+ }
+
+ public final class VectorizedFloatAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ ctor public VectorizedFloatAnimationSpec(androidx.compose.animation.core.FloatAnimationSpec anim);
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ }
+
+ public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
+ ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public boolean isInfinite();
+ property public boolean isInfinite;
+ }
+
+ public final class VectorizedKeyframesSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
+ ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, optional int delayMillis);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ property public int delayMillis;
+ property public int durationMillis;
+ }
+
+ public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
+ ctor @Deprecated public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ }
+
+ public final class VectorizedSnapSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
+ ctor public VectorizedSnapSpec(optional int delayMillis);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ property public int delayMillis;
+ property public int durationMillis;
+ }
+
+ public final class VectorizedSpringSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
+ ctor public VectorizedSpringSpec(optional float dampingRatio, optional float stiffness, optional V? visibilityThreshold);
+ method public float getDampingRatio();
+ method public float getStiffness();
+ property public final float dampingRatio;
+ property public final float stiffness;
+ }
+
+ public final class VectorizedTweenSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
+ ctor public VectorizedTweenSpec(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
+ method public int getDelayMillis();
+ method public int getDurationMillis();
+ method public androidx.compose.animation.core.Easing getEasing();
+ method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
+ property public int delayMillis;
+ property public int durationMillis;
+ property public final androidx.compose.animation.core.Easing easing;
+ }
+
+ public final class VisibilityThresholdsKt {
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntOffset.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Offset.Companion);
+ method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
+ method public static float getVisibilityThreshold(androidx.compose.ui.unit.Dp.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.DpOffset.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntSize.Companion);
+ method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
+ }
+
+}
+
diff --git a/compose/animation/animation-core/api/restricted_current.ignore b/compose/animation/animation-core/api/restricted_current.ignore
deleted file mode 100644
index f7336f7..0000000
--- a/compose/animation/animation-core/api/restricted_current.ignore
+++ /dev/null
@@ -1,21 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.compose.animation.core.InfiniteTransitionKt#animateFloat(androidx.compose.animation.core.InfiniteTransition, float, float, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float>):
- Method androidx.compose.animation.core.InfiniteTransitionKt.animateFloat has changed return type from androidx.compose.runtime.State<java.lang.Float> to androidx.compose.runtime.State<? extends java.lang.Float>
-ChangedType: androidx.compose.animation.core.InfiniteTransitionKt#animateValue(androidx.compose.animation.core.InfiniteTransition, T, T, androidx.compose.animation.core.TwoWayConverter<T,V>, androidx.compose.animation.core.InfiniteRepeatableSpec<T>):
- Method androidx.compose.animation.core.InfiniteTransitionKt.animateValue has changed return type from androidx.compose.runtime.State<T> to androidx.compose.runtime.State<? extends T>
-
-
-RemovedClass: androidx.compose.animation.core.ActualJvmKt:
- Removed class androidx.compose.animation.core.ActualJvmKt
-RemovedClass: androidx.compose.animation.core.ComplexDoubleKt:
- Removed class androidx.compose.animation.core.ComplexDoubleKt
-RemovedClass: androidx.compose.animation.core.FloatDecayAnimationSpecKt:
- Removed class androidx.compose.animation.core.FloatDecayAnimationSpecKt
-RemovedClass: androidx.compose.animation.core.SpringSimulationKt:
- Removed class androidx.compose.animation.core.SpringSimulationKt
-RemovedClass: androidx.compose.animation.core.VectorizedAnimationSpecKt:
- Removed class androidx.compose.animation.core.VectorizedAnimationSpecKt
-
-
-RemovedPackage: androidx.compose.animation.core.internal:
- Removed package androidx.compose.animation.core.internal
diff --git a/compose/animation/animation-graphics/api/1.4.0-beta02.txt b/compose/animation/animation-graphics/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/compose/animation/animation-graphics/api/1.4.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/compose/animation/animation-graphics/api/current.ignore b/compose/animation/animation-graphics/api/current.ignore
deleted file mode 100644
index 0ab1064..0000000
--- a/compose/animation/animation-graphics/api/current.ignore
+++ /dev/null
@@ -1,7 +0,0 @@
-// Baseline format: 1.0
-RemovedPackage: androidx.compose.animation.graphics.res:
- Removed package androidx.compose.animation.graphics.res
-RemovedPackage: androidx.compose.animation.graphics.vector:
- Removed package androidx.compose.animation.graphics.vector
-RemovedPackage: androidx.compose.animation.graphics.vector.compat:
- Removed package androidx.compose.animation.graphics.vector.compat
diff --git a/compose/animation/animation-graphics/api/public_plus_experimental_1.4.0-beta02.txt b/compose/animation/animation-graphics/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..cf4d086
--- /dev/null
+++ b/compose/animation/animation-graphics/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,35 @@
+// Signature format: 4.0
+package androidx.compose.animation.graphics {
+
+ @kotlin.RequiresOptIn(message="This is an experimental animation graphics API.") @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 ExperimentalAnimationGraphicsApi {
+ }
+
+}
+
+package androidx.compose.animation.graphics.res {
+
+ public final class AnimatedVectorPainterResources_androidKt {
+ method @androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.painter.Painter rememberAnimatedVectorPainter(androidx.compose.animation.graphics.vector.AnimatedImageVector animatedImageVector, boolean atEnd);
+ }
+
+ public final class AnimatedVectorResources_androidKt {
+ method @androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi @androidx.compose.runtime.Composable public static androidx.compose.animation.graphics.vector.AnimatedImageVector animatedVectorResource(androidx.compose.animation.graphics.vector.AnimatedImageVector.Companion, @DrawableRes int id);
+ }
+
+}
+
+package androidx.compose.animation.graphics.vector {
+
+ @androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi @androidx.compose.runtime.Immutable public final class AnimatedImageVector {
+ method public androidx.compose.ui.graphics.vector.ImageVector getImageVector();
+ method public int getTotalDuration();
+ property public final androidx.compose.ui.graphics.vector.ImageVector imageVector;
+ property public final int totalDuration;
+ field public static final androidx.compose.animation.graphics.vector.AnimatedImageVector.Companion Companion;
+ }
+
+ public static final class AnimatedImageVector.Companion {
+ }
+
+}
+
diff --git a/compose/animation/animation-graphics/api/res-1.4.0-beta02.txt b/compose/animation/animation-graphics/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/animation/animation-graphics/api/res-1.4.0-beta02.txt
diff --git a/compose/animation/animation-graphics/api/restricted_1.4.0-beta02.txt b/compose/animation/animation-graphics/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/compose/animation/animation-graphics/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/compose/animation/animation-graphics/api/restricted_current.ignore b/compose/animation/animation-graphics/api/restricted_current.ignore
deleted file mode 100644
index 0ab1064..0000000
--- a/compose/animation/animation-graphics/api/restricted_current.ignore
+++ /dev/null
@@ -1,7 +0,0 @@
-// Baseline format: 1.0
-RemovedPackage: androidx.compose.animation.graphics.res:
- Removed package androidx.compose.animation.graphics.res
-RemovedPackage: androidx.compose.animation.graphics.vector:
- Removed package androidx.compose.animation.graphics.vector
-RemovedPackage: androidx.compose.animation.graphics.vector.compat:
- Removed package androidx.compose.animation.graphics.vector.compat
diff --git a/compose/animation/animation-tooling-internal/api/1.4.0-beta02.txt b/compose/animation/animation-tooling-internal/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..dc21e7e
--- /dev/null
+++ b/compose/animation/animation-tooling-internal/api/1.4.0-beta02.txt
@@ -0,0 +1,57 @@
+// Signature format: 4.0
+package androidx.compose.animation.tooling {
+
+ public final class ComposeAnimatedProperty {
+ ctor public ComposeAnimatedProperty(String label, Object value);
+ method public String component1();
+ method public Object component2();
+ method public androidx.compose.animation.tooling.ComposeAnimatedProperty copy(String label, Object value);
+ method public String getLabel();
+ method public Object getValue();
+ property public final String label;
+ property public final Object value;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ComposeAnimation {
+ method public Object getAnimationObject();
+ method public default String? getLabel();
+ method public default java.util.Set<java.lang.Object> getStates();
+ method public androidx.compose.animation.tooling.ComposeAnimationType getType();
+ property public abstract Object animationObject;
+ property public default String? label;
+ property public default java.util.Set<java.lang.Object> states;
+ property public abstract androidx.compose.animation.tooling.ComposeAnimationType type;
+ }
+
+ public enum ComposeAnimationType {
+ method public static androidx.compose.animation.tooling.ComposeAnimationType valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.animation.tooling.ComposeAnimationType[] values();
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATABLE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATED_CONTENT;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATED_VALUE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATED_VISIBILITY;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATE_CONTENT_SIZE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATE_X_AS_STATE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType DECAY_ANIMATION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType INFINITE_TRANSITION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType TARGET_BASED_ANIMATION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType TRANSITION_ANIMATION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType UNSUPPORTED;
+ }
+
+ public final class TransitionInfo {
+ ctor public TransitionInfo(String label, String specType, long startTimeMillis, long endTimeMillis, java.util.Map<java.lang.Long,?> values);
+ method public long getEndTimeMillis();
+ method public String getLabel();
+ method public String getSpecType();
+ method public long getStartTimeMillis();
+ method public java.util.Map<java.lang.Long,java.lang.Object> getValues();
+ property public final long endTimeMillis;
+ property public final String label;
+ property public final String specType;
+ property public final long startTimeMillis;
+ property public final java.util.Map<java.lang.Long,java.lang.Object> values;
+ }
+
+}
+
diff --git a/compose/animation/animation-tooling-internal/api/public_plus_experimental_1.4.0-beta02.txt b/compose/animation/animation-tooling-internal/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..dc21e7e
--- /dev/null
+++ b/compose/animation/animation-tooling-internal/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,57 @@
+// Signature format: 4.0
+package androidx.compose.animation.tooling {
+
+ public final class ComposeAnimatedProperty {
+ ctor public ComposeAnimatedProperty(String label, Object value);
+ method public String component1();
+ method public Object component2();
+ method public androidx.compose.animation.tooling.ComposeAnimatedProperty copy(String label, Object value);
+ method public String getLabel();
+ method public Object getValue();
+ property public final String label;
+ property public final Object value;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ComposeAnimation {
+ method public Object getAnimationObject();
+ method public default String? getLabel();
+ method public default java.util.Set<java.lang.Object> getStates();
+ method public androidx.compose.animation.tooling.ComposeAnimationType getType();
+ property public abstract Object animationObject;
+ property public default String? label;
+ property public default java.util.Set<java.lang.Object> states;
+ property public abstract androidx.compose.animation.tooling.ComposeAnimationType type;
+ }
+
+ public enum ComposeAnimationType {
+ method public static androidx.compose.animation.tooling.ComposeAnimationType valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.animation.tooling.ComposeAnimationType[] values();
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATABLE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATED_CONTENT;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATED_VALUE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATED_VISIBILITY;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATE_CONTENT_SIZE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATE_X_AS_STATE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType DECAY_ANIMATION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType INFINITE_TRANSITION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType TARGET_BASED_ANIMATION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType TRANSITION_ANIMATION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType UNSUPPORTED;
+ }
+
+ public final class TransitionInfo {
+ ctor public TransitionInfo(String label, String specType, long startTimeMillis, long endTimeMillis, java.util.Map<java.lang.Long,?> values);
+ method public long getEndTimeMillis();
+ method public String getLabel();
+ method public String getSpecType();
+ method public long getStartTimeMillis();
+ method public java.util.Map<java.lang.Long,java.lang.Object> getValues();
+ property public final long endTimeMillis;
+ property public final String label;
+ property public final String specType;
+ property public final long startTimeMillis;
+ property public final java.util.Map<java.lang.Long,java.lang.Object> values;
+ }
+
+}
+
diff --git a/compose/animation/animation-tooling-internal/api/restricted_1.4.0-beta02.txt b/compose/animation/animation-tooling-internal/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..dc21e7e
--- /dev/null
+++ b/compose/animation/animation-tooling-internal/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,57 @@
+// Signature format: 4.0
+package androidx.compose.animation.tooling {
+
+ public final class ComposeAnimatedProperty {
+ ctor public ComposeAnimatedProperty(String label, Object value);
+ method public String component1();
+ method public Object component2();
+ method public androidx.compose.animation.tooling.ComposeAnimatedProperty copy(String label, Object value);
+ method public String getLabel();
+ method public Object getValue();
+ property public final String label;
+ property public final Object value;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ComposeAnimation {
+ method public Object getAnimationObject();
+ method public default String? getLabel();
+ method public default java.util.Set<java.lang.Object> getStates();
+ method public androidx.compose.animation.tooling.ComposeAnimationType getType();
+ property public abstract Object animationObject;
+ property public default String? label;
+ property public default java.util.Set<java.lang.Object> states;
+ property public abstract androidx.compose.animation.tooling.ComposeAnimationType type;
+ }
+
+ public enum ComposeAnimationType {
+ method public static androidx.compose.animation.tooling.ComposeAnimationType valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.animation.tooling.ComposeAnimationType[] values();
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATABLE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATED_CONTENT;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATED_VALUE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATED_VISIBILITY;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATE_CONTENT_SIZE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType ANIMATE_X_AS_STATE;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType DECAY_ANIMATION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType INFINITE_TRANSITION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType TARGET_BASED_ANIMATION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType TRANSITION_ANIMATION;
+ enum_constant public static final androidx.compose.animation.tooling.ComposeAnimationType UNSUPPORTED;
+ }
+
+ public final class TransitionInfo {
+ ctor public TransitionInfo(String label, String specType, long startTimeMillis, long endTimeMillis, java.util.Map<java.lang.Long,?> values);
+ method public long getEndTimeMillis();
+ method public String getLabel();
+ method public String getSpecType();
+ method public long getStartTimeMillis();
+ method public java.util.Map<java.lang.Long,java.lang.Object> getValues();
+ property public final long endTimeMillis;
+ property public final String label;
+ property public final String specType;
+ property public final long startTimeMillis;
+ property public final java.util.Map<java.lang.Long,java.lang.Object> values;
+ }
+
+}
+
diff --git a/compose/animation/animation/api/1.4.0-beta02.txt b/compose/animation/animation/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..9b1560f
--- /dev/null
+++ b/compose/animation/animation/api/1.4.0-beta02.txt
@@ -0,0 +1,102 @@
+// Signature format: 4.0
+package androidx.compose.animation {
+
+ public final class AndroidActualDefaultDecayAnimationSpec_androidKt {
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> defaultDecayAnimationSpec();
+ }
+
+ public final class AnimatedVisibilityKt {
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface AnimatedVisibilityScope {
+ }
+
+ public final class AnimationModifierKt {
+ method public static androidx.compose.ui.Modifier animateContentSize(androidx.compose.ui.Modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.IntSize,? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
+ }
+
+ public final class ColorVectorConverterKt {
+ method public static kotlin.jvm.functions.Function1<androidx.compose.ui.graphics.colorspace.ColorSpace,androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D>> getVectorConverter(androidx.compose.ui.graphics.Color.Companion);
+ }
+
+ public final class CrossfadeKt {
+ method @androidx.compose.runtime.Composable public static <T> void Crossfade(T? targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static <T> void Crossfade(T? targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> content);
+ }
+
+ public final class EnterExitTransitionKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition expandHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Horizontal expandFrom, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialWidth);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition expandIn(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment expandFrom, optional boolean clip, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntSize> initialSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition expandVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Vertical expandFrom, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition fadeIn(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional float initialAlpha);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition fadeOut(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional float targetAlpha);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition shrinkHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Horizontal shrinkTowards, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetWidth);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition shrinkOut(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment shrinkTowards, optional boolean clip, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntSize> targetSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition shrinkVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Vertical shrinkTowards, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition slideIn(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntOffset> initialOffset);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition slideInHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialOffsetX);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition slideInVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialOffsetY);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition slideOut(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntOffset> targetOffset);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition slideOutHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetOffsetX);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition slideOutVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetOffsetY);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class EnterTransition {
+ method @androidx.compose.runtime.Stable public final operator androidx.compose.animation.EnterTransition plus(androidx.compose.animation.EnterTransition enter);
+ field public static final androidx.compose.animation.EnterTransition.Companion Companion;
+ }
+
+ public static final class EnterTransition.Companion {
+ method public androidx.compose.animation.EnterTransition getNone();
+ property public final androidx.compose.animation.EnterTransition None;
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class ExitTransition {
+ method @androidx.compose.runtime.Stable public final operator androidx.compose.animation.ExitTransition plus(androidx.compose.animation.ExitTransition exit);
+ field public static final androidx.compose.animation.ExitTransition.Companion Companion;
+ }
+
+ public static final class ExitTransition.Companion {
+ method public androidx.compose.animation.ExitTransition getNone();
+ property public final androidx.compose.animation.ExitTransition None;
+ }
+
+ public final class SingleValueAnimationKt {
+ method public static androidx.compose.animation.core.Animatable<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> Animatable(long initialValue);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,? extends kotlin.Unit>? finishedListener);
+ }
+
+ public final class SplineBasedDecayKt {
+ method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> splineBasedDecay(androidx.compose.ui.unit.Density density);
+ }
+
+ public final class SplineBasedFloatDecayAnimationSpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
+ ctor public SplineBasedFloatDecayAnimationSpec(androidx.compose.ui.unit.Density density);
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(float initialValue, float initialVelocity);
+ method public float getTargetValue(float initialValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ property public float absVelocityThreshold;
+ }
+
+ public final class SplineBasedFloatDecayAnimationSpec_androidKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> rememberSplineBasedDecay();
+ method @Deprecated public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> splineBasedDecayDeprecated(androidx.compose.ui.unit.Density density);
+ }
+
+ public final class TransitionKt {
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(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.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
+ }
+
+}
+
diff --git a/compose/animation/animation/api/current.ignore b/compose/animation/animation/api/current.ignore
deleted file mode 100644
index 84b4c0e..0000000
--- a/compose/animation/animation/api/current.ignore
+++ /dev/null
@@ -1,13 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.compose.animation.TransitionKt#animateColor(androidx.compose.animation.core.InfiniteTransition, long, long, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color>):
- Method androidx.compose.animation.TransitionKt.animateColor has changed return type from androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> to androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color>
-
-
-RemovedClass: androidx.compose.animation.AnimatedContentKt:
- Removed class androidx.compose.animation.AnimatedContentKt
-RemovedClass: androidx.compose.animation.FlingCalculatorKt:
- Removed class androidx.compose.animation.FlingCalculatorKt
-
-
-RemovedPackage: androidx.compose.animation.internal:
- Removed package androidx.compose.animation.internal
diff --git a/compose/animation/animation/api/public_plus_experimental_1.4.0-beta02.txt b/compose/animation/animation/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..4e9addc
--- /dev/null
+++ b/compose/animation/animation/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,177 @@
+// Signature format: 4.0
+package androidx.compose.animation {
+
+ public final class AndroidActualDefaultDecayAnimationSpec_androidKt {
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> defaultDecayAnimationSpec();
+ }
+
+ public final class AnimatedContentKt {
+ method @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Composable public static <S> void AnimatedContent(S? targetState, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentScope<S>,androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, optional String label, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedVisibilityScope,? super S,kotlin.Unit> content);
+ method @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Composable public static <S> void AnimatedContent(androidx.compose.animation.core.Transition<S>, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentScope<S>,androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, optional kotlin.jvm.functions.Function1<? super S,?> contentKey, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedVisibilityScope,? super S,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Composable public static <S> void AnimatedContent(S? targetState, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentScope<S>,? extends androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedVisibilityScope,? super S,? extends kotlin.Unit> content);
+ method @androidx.compose.animation.ExperimentalAnimationApi public static androidx.compose.animation.SizeTransform SizeTransform(optional boolean clip, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.IntSize,? super androidx.compose.ui.unit.IntSize,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize>> sizeAnimationSpec);
+ method @androidx.compose.animation.ExperimentalAnimationApi public static infix androidx.compose.animation.ContentTransform with(androidx.compose.animation.EnterTransition, androidx.compose.animation.ExitTransition exit);
+ }
+
+ @androidx.compose.animation.ExperimentalAnimationApi public final class AnimatedContentScope<S> implements androidx.compose.animation.core.Transition.Segment<S> {
+ method public S! getInitialState();
+ method public S! getTargetState();
+ method public androidx.compose.animation.EnterTransition slideIntoContainer(int towards, optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialOffset);
+ method public androidx.compose.animation.ExitTransition slideOutOfContainer(int towards, optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetOffset);
+ method @androidx.compose.animation.ExperimentalAnimationApi public infix androidx.compose.animation.ContentTransform using(androidx.compose.animation.ContentTransform, androidx.compose.animation.SizeTransform? sizeTransform);
+ property public S! initialState;
+ property public S! targetState;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public static final value class AnimatedContentScope.SlideDirection {
+ field public static final androidx.compose.animation.AnimatedContentScope.SlideDirection.Companion Companion;
+ }
+
+ public static final class AnimatedContentScope.SlideDirection.Companion {
+ method public int getDown();
+ method public int getEnd();
+ method public int getLeft();
+ method public int getRight();
+ method public int getStart();
+ method public int getUp();
+ property public final int Down;
+ property public final int End;
+ property public final int Left;
+ property public final int Right;
+ property public final int Start;
+ property public final int Up;
+ }
+
+ public final class AnimatedVisibilityKt {
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Composable public static <T> void AnimatedVisibility(androidx.compose.animation.core.Transition<T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Composable public static void AnimatedVisibility(boolean visible, optional androidx.compose.ui.Modifier modifier, androidx.compose.animation.EnterTransition enter, androidx.compose.animation.ExitTransition exit, boolean initiallyVisible, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface AnimatedVisibilityScope {
+ method @androidx.compose.animation.ExperimentalAnimationApi public default androidx.compose.ui.Modifier animateEnterExit(androidx.compose.ui.Modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label);
+ method @androidx.compose.animation.ExperimentalAnimationApi public androidx.compose.animation.core.Transition<androidx.compose.animation.EnterExitState> getTransition();
+ property @androidx.compose.animation.ExperimentalAnimationApi public abstract androidx.compose.animation.core.Transition<androidx.compose.animation.EnterExitState> transition;
+ }
+
+ public final class AnimationModifierKt {
+ method public static androidx.compose.ui.Modifier animateContentSize(androidx.compose.ui.Modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.IntSize,? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
+ }
+
+ public final class ColorVectorConverterKt {
+ method public static kotlin.jvm.functions.Function1<androidx.compose.ui.graphics.colorspace.ColorSpace,androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D>> getVectorConverter(androidx.compose.ui.graphics.Color.Companion);
+ }
+
+ @androidx.compose.animation.ExperimentalAnimationApi public final class ContentTransform {
+ ctor public ContentTransform(androidx.compose.animation.EnterTransition targetContentEnter, androidx.compose.animation.ExitTransition initialContentExit, optional float targetContentZIndex, optional androidx.compose.animation.SizeTransform? sizeTransform);
+ method public androidx.compose.animation.ExitTransition getInitialContentExit();
+ method public androidx.compose.animation.SizeTransform? getSizeTransform();
+ method public androidx.compose.animation.EnterTransition getTargetContentEnter();
+ method public float getTargetContentZIndex();
+ method public void setTargetContentZIndex(float);
+ property public final androidx.compose.animation.ExitTransition initialContentExit;
+ property public final androidx.compose.animation.SizeTransform? sizeTransform;
+ property public final androidx.compose.animation.EnterTransition targetContentEnter;
+ property public final float targetContentZIndex;
+ }
+
+ public final class CrossfadeKt {
+ method @androidx.compose.runtime.Composable public static <T> void Crossfade(T? targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Composable public static <T> void Crossfade(androidx.compose.animation.core.Transition<T>, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,?> contentKey, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static <T> void Crossfade(T? targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> content);
+ }
+
+ @androidx.compose.animation.ExperimentalAnimationApi public enum EnterExitState {
+ method public static androidx.compose.animation.EnterExitState valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.animation.EnterExitState[] values();
+ enum_constant public static final androidx.compose.animation.EnterExitState PostExit;
+ enum_constant public static final androidx.compose.animation.EnterExitState PreEnter;
+ enum_constant public static final androidx.compose.animation.EnterExitState Visible;
+ }
+
+ public final class EnterExitTransitionKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition expandHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Horizontal expandFrom, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialWidth);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition expandIn(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment expandFrom, optional boolean clip, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntSize> initialSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition expandVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Vertical expandFrom, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition fadeIn(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional float initialAlpha);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition fadeOut(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional float targetAlpha);
+ method @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition scaleIn(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional float initialScale, optional long transformOrigin);
+ method @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition scaleOut(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional float targetScale, optional long transformOrigin);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition shrinkHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Horizontal shrinkTowards, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetWidth);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition shrinkOut(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment shrinkTowards, optional boolean clip, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntSize> targetSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition shrinkVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Vertical shrinkTowards, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition slideIn(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntOffset> initialOffset);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition slideInHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialOffsetX);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition slideInVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialOffsetY);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition slideOut(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntOffset> targetOffset);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition slideOutHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetOffsetX);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition slideOutVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetOffsetY);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class EnterTransition {
+ method @androidx.compose.runtime.Stable public final operator androidx.compose.animation.EnterTransition plus(androidx.compose.animation.EnterTransition enter);
+ field public static final androidx.compose.animation.EnterTransition.Companion Companion;
+ }
+
+ public static final class EnterTransition.Companion {
+ method public androidx.compose.animation.EnterTransition getNone();
+ property public final androidx.compose.animation.EnterTransition None;
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class ExitTransition {
+ method @androidx.compose.runtime.Stable public final operator androidx.compose.animation.ExitTransition plus(androidx.compose.animation.ExitTransition exit);
+ field public static final androidx.compose.animation.ExitTransition.Companion Companion;
+ }
+
+ public static final class ExitTransition.Companion {
+ method public androidx.compose.animation.ExitTransition getNone();
+ property public final androidx.compose.animation.ExitTransition None;
+ }
+
+ @kotlin.RequiresOptIn(message="This is an experimental animation API.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FIELD, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface ExperimentalAnimationApi {
+ }
+
+ public final class SingleValueAnimationKt {
+ method public static androidx.compose.animation.core.Animatable<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> Animatable(long initialValue);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,? extends kotlin.Unit>? finishedListener);
+ }
+
+ @androidx.compose.animation.ExperimentalAnimationApi public interface SizeTransform {
+ method public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> createAnimationSpec(long initialSize, long targetSize);
+ method public boolean getClip();
+ property public abstract boolean clip;
+ }
+
+ public final class SplineBasedDecayKt {
+ method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> splineBasedDecay(androidx.compose.ui.unit.Density density);
+ }
+
+ public final class SplineBasedFloatDecayAnimationSpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
+ ctor public SplineBasedFloatDecayAnimationSpec(androidx.compose.ui.unit.Density density);
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(float initialValue, float initialVelocity);
+ method public float getTargetValue(float initialValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ property public float absVelocityThreshold;
+ }
+
+ public final class SplineBasedFloatDecayAnimationSpec_androidKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> rememberSplineBasedDecay();
+ method @Deprecated public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> splineBasedDecayDeprecated(androidx.compose.ui.unit.Density density);
+ }
+
+ public final class TransitionKt {
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(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.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
+ }
+
+}
+
diff --git a/compose/animation/animation/api/res-1.4.0-beta02.txt b/compose/animation/animation/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/animation/animation/api/res-1.4.0-beta02.txt
diff --git a/compose/animation/animation/api/restricted_1.4.0-beta02.txt b/compose/animation/animation/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..9b1560f
--- /dev/null
+++ b/compose/animation/animation/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,102 @@
+// Signature format: 4.0
+package androidx.compose.animation {
+
+ public final class AndroidActualDefaultDecayAnimationSpec_androidKt {
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> defaultDecayAnimationSpec();
+ }
+
+ public final class AnimatedVisibilityKt {
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface AnimatedVisibilityScope {
+ }
+
+ public final class AnimationModifierKt {
+ method public static androidx.compose.ui.Modifier animateContentSize(androidx.compose.ui.Modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.IntSize,? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? finishedListener);
+ }
+
+ public final class ColorVectorConverterKt {
+ method public static kotlin.jvm.functions.Function1<androidx.compose.ui.graphics.colorspace.ColorSpace,androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D>> getVectorConverter(androidx.compose.ui.graphics.Color.Companion);
+ }
+
+ public final class CrossfadeKt {
+ method @androidx.compose.runtime.Composable public static <T> void Crossfade(T? targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static <T> void Crossfade(T? targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> content);
+ }
+
+ public final class EnterExitTransitionKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition expandHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Horizontal expandFrom, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialWidth);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition expandIn(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment expandFrom, optional boolean clip, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntSize> initialSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition expandVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Vertical expandFrom, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition fadeIn(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional float initialAlpha);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition fadeOut(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional float targetAlpha);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition shrinkHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Horizontal shrinkTowards, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetWidth);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition shrinkOut(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment shrinkTowards, optional boolean clip, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntSize> targetSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition shrinkVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> animationSpec, optional androidx.compose.ui.Alignment.Vertical shrinkTowards, optional boolean clip, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition slideIn(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntOffset> initialOffset);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition slideInHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialOffsetX);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.EnterTransition slideInVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> initialOffsetY);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition slideOut(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,androidx.compose.ui.unit.IntOffset> targetOffset);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition slideOutHorizontally(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetOffsetX);
+ method @androidx.compose.runtime.Stable public static androidx.compose.animation.ExitTransition slideOutVertically(optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Integer> targetOffsetY);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class EnterTransition {
+ method @androidx.compose.runtime.Stable public final operator androidx.compose.animation.EnterTransition plus(androidx.compose.animation.EnterTransition enter);
+ field public static final androidx.compose.animation.EnterTransition.Companion Companion;
+ }
+
+ public static final class EnterTransition.Companion {
+ method public androidx.compose.animation.EnterTransition getNone();
+ property public final androidx.compose.animation.EnterTransition None;
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class ExitTransition {
+ method @androidx.compose.runtime.Stable public final operator androidx.compose.animation.ExitTransition plus(androidx.compose.animation.ExitTransition exit);
+ field public static final androidx.compose.animation.ExitTransition.Companion Companion;
+ }
+
+ public static final class ExitTransition.Companion {
+ method public androidx.compose.animation.ExitTransition getNone();
+ property public final androidx.compose.animation.ExitTransition None;
+ }
+
+ public final class SingleValueAnimationKt {
+ method public static androidx.compose.animation.core.Animatable<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> Animatable(long initialValue);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? finishedListener);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColorAsState(long targetValue, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,? extends kotlin.Unit>? finishedListener);
+ }
+
+ public final class SplineBasedDecayKt {
+ method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> splineBasedDecay(androidx.compose.ui.unit.Density density);
+ }
+
+ public final class SplineBasedFloatDecayAnimationSpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
+ ctor public SplineBasedFloatDecayAnimationSpec(androidx.compose.ui.unit.Density density);
+ method public float getAbsVelocityThreshold();
+ method public long getDurationNanos(float initialValue, float initialVelocity);
+ method public float getTargetValue(float initialValue, float initialVelocity);
+ method public float getValueFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ method public float getVelocityFromNanos(long playTimeNanos, float initialValue, float initialVelocity);
+ property public float absVelocityThreshold;
+ }
+
+ public final class SplineBasedFloatDecayAnimationSpec_androidKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> rememberSplineBasedDecay();
+ method @Deprecated public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> splineBasedDecayDeprecated(androidx.compose.ui.unit.Density density);
+ }
+
+ public final class TransitionKt {
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(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.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
+ method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
+ }
+
+}
+
diff --git a/compose/animation/animation/api/restricted_current.ignore b/compose/animation/animation/api/restricted_current.ignore
deleted file mode 100644
index 84b4c0e..0000000
--- a/compose/animation/animation/api/restricted_current.ignore
+++ /dev/null
@@ -1,13 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.compose.animation.TransitionKt#animateColor(androidx.compose.animation.core.InfiniteTransition, long, long, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color>):
- Method androidx.compose.animation.TransitionKt.animateColor has changed return type from androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> to androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color>
-
-
-RemovedClass: androidx.compose.animation.AnimatedContentKt:
- Removed class androidx.compose.animation.AnimatedContentKt
-RemovedClass: androidx.compose.animation.FlingCalculatorKt:
- Removed class androidx.compose.animation.FlingCalculatorKt
-
-
-RemovedPackage: androidx.compose.animation.internal:
- Removed package androidx.compose.animation.internal
diff --git a/compose/foundation/foundation-layout/api/1.4.0-beta02.txt b/compose/foundation/foundation-layout/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..95dd32f
--- /dev/null
+++ b/compose/foundation/foundation-layout/api/1.4.0-beta02.txt
@@ -0,0 +1,301 @@
+// Signature format: 4.0
+package androidx.compose.foundation.layout {
+
+ public final class AlignmentLineKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFrom(androidx.compose.ui.Modifier, androidx.compose.ui.layout.AlignmentLine alignmentLine, optional float before, optional float after);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFrom(androidx.compose.ui.Modifier, androidx.compose.ui.layout.AlignmentLine alignmentLine, optional long before, optional long after);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFromBaseline(androidx.compose.ui.Modifier, optional float top, optional float bottom);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFromBaseline(androidx.compose.ui.Modifier, optional long top, optional long bottom);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Arrangement {
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal aligned(androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Vertical aligned(androidx.compose.ui.Alignment.Vertical alignment);
+ method public androidx.compose.foundation.layout.Arrangement.Vertical getBottom();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getCenter();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getEnd();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getSpaceAround();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getSpaceBetween();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getSpaceEvenly();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getStart();
+ method public androidx.compose.foundation.layout.Arrangement.Vertical getTop();
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical spacedBy(float space);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal spacedBy(float space, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Vertical spacedBy(float space, androidx.compose.ui.Alignment.Vertical alignment);
+ property public final androidx.compose.foundation.layout.Arrangement.Vertical Bottom;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical Center;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal End;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical SpaceAround;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical SpaceBetween;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical SpaceEvenly;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Start;
+ property public final androidx.compose.foundation.layout.Arrangement.Vertical Top;
+ field public static final androidx.compose.foundation.layout.Arrangement INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class Arrangement.Absolute {
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal aligned(androidx.compose.ui.Alignment.Horizontal alignment);
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getCenter();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getLeft();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getRight();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getSpaceAround();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getSpaceBetween();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getSpaceEvenly();
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical spacedBy(float space);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal spacedBy(float space, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Vertical spacedBy(float space, androidx.compose.ui.Alignment.Vertical alignment);
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Center;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Left;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Right;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal SpaceAround;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal SpaceBetween;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal SpaceEvenly;
+ field public static final androidx.compose.foundation.layout.Arrangement.Absolute INSTANCE;
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public static interface Arrangement.Horizontal {
+ method public void arrange(androidx.compose.ui.unit.Density, int totalSize, int[] sizes, androidx.compose.ui.unit.LayoutDirection layoutDirection, int[] outPositions);
+ method public default float getSpacing();
+ property public default float spacing;
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public static interface Arrangement.HorizontalOrVertical extends androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
+ property public default float spacing;
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public static interface Arrangement.Vertical {
+ method public void arrange(androidx.compose.ui.unit.Density, int totalSize, int[] sizes, int[] outPositions);
+ method public default float getSpacing();
+ property public default float spacing;
+ }
+
+ public final class AspectRatioKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier aspectRatio(androidx.compose.ui.Modifier, float ratio, optional boolean matchHeightConstraintsFirst);
+ }
+
+ public final class BoxKt {
+ method @androidx.compose.runtime.Composable public static inline void Box(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Box(androidx.compose.ui.Modifier modifier);
+ }
+
+ @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface BoxScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
+ }
+
+ public final class BoxWithConstraintsKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void BoxWithConstraints(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxWithConstraintsScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Stable public interface BoxWithConstraintsScope extends androidx.compose.foundation.layout.BoxScope {
+ method public long getConstraints();
+ method public float getMaxHeight();
+ method public float getMaxWidth();
+ method public float getMinHeight();
+ method public float getMinWidth();
+ property public abstract long constraints;
+ property public abstract float maxHeight;
+ property public abstract float maxWidth;
+ property public abstract float minHeight;
+ property public abstract float minWidth;
+ }
+
+ public final class ColumnKt {
+ method @androidx.compose.runtime.Composable public static inline void Column(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface ColumnScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
+ }
+
+ public final class IntrinsicKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier height(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredHeight(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredWidth(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier width(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ }
+
+ public enum IntrinsicSize {
+ method public static androidx.compose.foundation.layout.IntrinsicSize valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.foundation.layout.IntrinsicSize[] values();
+ enum_constant public static final androidx.compose.foundation.layout.IntrinsicSize Max;
+ enum_constant public static final androidx.compose.foundation.layout.IntrinsicSize Min;
+ }
+
+ @kotlin.DslMarker public @interface LayoutScopeMarker {
+ }
+
+ public final class OffsetKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier absoluteOffset(androidx.compose.ui.Modifier, optional float x, optional float y);
+ method public static androidx.compose.ui.Modifier absoluteOffset(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Density,androidx.compose.ui.unit.IntOffset> offset);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier offset(androidx.compose.ui.Modifier, optional float x, optional float y);
+ method public static androidx.compose.ui.Modifier offset(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Density,androidx.compose.ui.unit.IntOffset> offset);
+ }
+
+ public final class PaddingKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.PaddingValues PaddingValues(float all);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.PaddingValues PaddingValues(optional float horizontal, optional float vertical);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.PaddingValues PaddingValues(optional float start, optional float top, optional float end, optional float bottom);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier absolutePadding(androidx.compose.ui.Modifier, optional float left, optional float top, optional float right, optional float bottom);
+ method @androidx.compose.runtime.Stable public static float calculateEndPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method @androidx.compose.runtime.Stable public static float calculateStartPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float start, optional float top, optional float end, optional float bottom);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float horizontal, optional float vertical);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, float all);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.PaddingValues paddingValues);
+ }
+
+ @androidx.compose.runtime.Stable public interface PaddingValues {
+ method public float calculateBottomPadding();
+ method public float calculateLeftPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateRightPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateTopPadding();
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PaddingValues.Absolute implements androidx.compose.foundation.layout.PaddingValues {
+ ctor public PaddingValues.Absolute(optional @androidx.compose.runtime.Stable float left, optional @androidx.compose.runtime.Stable float top, optional @androidx.compose.runtime.Stable float right, optional @androidx.compose.runtime.Stable float bottom);
+ method public float calculateBottomPadding();
+ method public float calculateLeftPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateRightPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateTopPadding();
+ }
+
+ public final class RowKt {
+ method @androidx.compose.runtime.Composable public static inline void Row(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface RowScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
+ }
+
+ public final class SizeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier defaultMinSize(androidx.compose.ui.Modifier, optional float minWidth, optional float minHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier fillMaxHeight(androidx.compose.ui.Modifier, optional float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier fillMaxSize(androidx.compose.ui.Modifier, optional float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier fillMaxWidth(androidx.compose.ui.Modifier, optional float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier height(androidx.compose.ui.Modifier, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier heightIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredHeight(androidx.compose.ui.Modifier, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredHeightIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSize(androidx.compose.ui.Modifier, float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSize(androidx.compose.ui.Modifier, float width, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSize(androidx.compose.ui.Modifier, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSizeIn(androidx.compose.ui.Modifier, optional float minWidth, optional float minHeight, optional float maxWidth, optional float maxHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredWidth(androidx.compose.ui.Modifier, float width);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredWidthIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier size(androidx.compose.ui.Modifier, float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier size(androidx.compose.ui.Modifier, float width, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier size(androidx.compose.ui.Modifier, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier sizeIn(androidx.compose.ui.Modifier, optional float minWidth, optional float minHeight, optional float maxWidth, optional float maxHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier width(androidx.compose.ui.Modifier, float width);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier widthIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier wrapContentHeight(androidx.compose.ui.Modifier, optional androidx.compose.ui.Alignment.Vertical align, optional boolean unbounded);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier wrapContentSize(androidx.compose.ui.Modifier, optional androidx.compose.ui.Alignment align, optional boolean unbounded);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier wrapContentWidth(androidx.compose.ui.Modifier, optional androidx.compose.ui.Alignment.Horizontal align, optional boolean unbounded);
+ }
+
+ public final class SpacerKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Spacer(androidx.compose.ui.Modifier modifier);
+ }
+
+ @androidx.compose.runtime.Stable public interface WindowInsets {
+ method public int getBottom(androidx.compose.ui.unit.Density density);
+ method public int getLeft(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public int getRight(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public int getTop(androidx.compose.ui.unit.Density density);
+ field public static final androidx.compose.foundation.layout.WindowInsets.Companion Companion;
+ }
+
+ public static final class WindowInsets.Companion {
+ }
+
+ public final class WindowInsetsKt {
+ method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional int left, optional int top, optional int right, optional int bottom);
+ method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional float left, optional float top, optional float right, optional float bottom);
+ method public static androidx.compose.foundation.layout.WindowInsets add(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets);
+ method public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets, androidx.compose.ui.unit.Density density);
+ method public static androidx.compose.foundation.layout.WindowInsets exclude(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
+ method public static androidx.compose.foundation.layout.WindowInsets only(androidx.compose.foundation.layout.WindowInsets, int sides);
+ method public static androidx.compose.foundation.layout.WindowInsets union(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
+ }
+
+ public final class WindowInsetsPaddingKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumeWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onConsumedWindowInsetsChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.WindowInsets,kotlin.Unit> block);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsPadding(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ }
+
+ public final class WindowInsetsPadding_androidKt {
+ method public static androidx.compose.ui.Modifier captionBarPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier displayCutoutPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier imePadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier mandatorySystemGesturesPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier navigationBarsPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier safeContentPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier safeDrawingPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier safeGesturesPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier statusBarsPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier systemBarsPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier systemGesturesPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier waterfallPadding(androidx.compose.ui.Modifier);
+ }
+
+ @kotlin.jvm.JvmInline public final value class WindowInsetsSides {
+ method public operator int plus(int sides);
+ field public static final androidx.compose.foundation.layout.WindowInsetsSides.Companion Companion;
+ }
+
+ public static final class WindowInsetsSides.Companion {
+ method public int getBottom();
+ method public int getEnd();
+ method public int getHorizontal();
+ method public int getLeft();
+ method public int getRight();
+ method public int getStart();
+ method public int getTop();
+ method public int getVertical();
+ property public final int Bottom;
+ property public final int End;
+ property public final int Horizontal;
+ property public final int Left;
+ property public final int Right;
+ property public final int Start;
+ property public final int Top;
+ property public final int Vertical;
+ }
+
+ public final class WindowInsetsSizeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsBottomHeight(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsEndWidth(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsStartWidth(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsTopHeight(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ }
+
+ public final class WindowInsets_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getCaptionBar(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method public static boolean getConsumeWindowInsets(androidx.compose.ui.platform.ComposeView);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getDisplayCutout(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getIme(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getMandatorySystemGestures(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getNavigationBars(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSafeContent(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSafeDrawing(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSafeGestures(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getStatusBars(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSystemBars(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSystemGestures(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getTappableElement(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getWaterfall(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method public static void setConsumeWindowInsets(androidx.compose.ui.platform.ComposeView, boolean);
+ }
+
+}
+
diff --git a/compose/foundation/foundation-layout/api/current.ignore b/compose/foundation/foundation-layout/api/current.ignore
deleted file mode 100644
index 2e1b921..0000000
--- a/compose/foundation/foundation-layout/api/current.ignore
+++ /dev/null
@@ -1,9 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.foundation.layout.RowColumnImplKt:
- Removed class androidx.compose.foundation.layout.RowColumnImplKt
-RemovedClass: androidx.compose.foundation.layout.WindowInsetsConnection_androidKt:
- Removed class androidx.compose.foundation.layout.WindowInsetsConnection_androidKt
-
-
-RemovedPackage: androidx.compose.foundation.layout.internal:
- Removed package androidx.compose.foundation.layout.internal
diff --git a/compose/foundation/foundation-layout/api/public_plus_experimental_1.4.0-beta02.txt b/compose/foundation/foundation-layout/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..d99d5f0
--- /dev/null
+++ b/compose/foundation/foundation-layout/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,341 @@
+// Signature format: 4.0
+package androidx.compose.foundation.layout {
+
+ public final class AlignmentLineKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFrom(androidx.compose.ui.Modifier, androidx.compose.ui.layout.AlignmentLine alignmentLine, optional float before, optional float after);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFrom(androidx.compose.ui.Modifier, androidx.compose.ui.layout.AlignmentLine alignmentLine, optional long before, optional long after);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFromBaseline(androidx.compose.ui.Modifier, optional float top, optional float bottom);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFromBaseline(androidx.compose.ui.Modifier, optional long top, optional long bottom);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Arrangement {
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal aligned(androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Vertical aligned(androidx.compose.ui.Alignment.Vertical alignment);
+ method public androidx.compose.foundation.layout.Arrangement.Vertical getBottom();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getCenter();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getEnd();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getSpaceAround();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getSpaceBetween();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getSpaceEvenly();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getStart();
+ method public androidx.compose.foundation.layout.Arrangement.Vertical getTop();
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical spacedBy(float space);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal spacedBy(float space, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Vertical spacedBy(float space, androidx.compose.ui.Alignment.Vertical alignment);
+ property public final androidx.compose.foundation.layout.Arrangement.Vertical Bottom;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical Center;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal End;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical SpaceAround;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical SpaceBetween;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical SpaceEvenly;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Start;
+ property public final androidx.compose.foundation.layout.Arrangement.Vertical Top;
+ field public static final androidx.compose.foundation.layout.Arrangement INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class Arrangement.Absolute {
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal aligned(androidx.compose.ui.Alignment.Horizontal alignment);
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getCenter();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getLeft();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getRight();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getSpaceAround();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getSpaceBetween();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getSpaceEvenly();
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical spacedBy(float space);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal spacedBy(float space, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Vertical spacedBy(float space, androidx.compose.ui.Alignment.Vertical alignment);
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Center;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Left;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Right;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal SpaceAround;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal SpaceBetween;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal SpaceEvenly;
+ field public static final androidx.compose.foundation.layout.Arrangement.Absolute INSTANCE;
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public static interface Arrangement.Horizontal {
+ method public void arrange(androidx.compose.ui.unit.Density, int totalSize, int[] sizes, androidx.compose.ui.unit.LayoutDirection layoutDirection, int[] outPositions);
+ method public default float getSpacing();
+ property public default float spacing;
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public static interface Arrangement.HorizontalOrVertical extends androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
+ property public default float spacing;
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public static interface Arrangement.Vertical {
+ method public void arrange(androidx.compose.ui.unit.Density, int totalSize, int[] sizes, int[] outPositions);
+ method public default float getSpacing();
+ property public default float spacing;
+ }
+
+ public final class AspectRatioKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier aspectRatio(androidx.compose.ui.Modifier, float ratio, optional boolean matchHeightConstraintsFirst);
+ }
+
+ public final class BoxKt {
+ method @androidx.compose.runtime.Composable public static inline void Box(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Box(androidx.compose.ui.Modifier modifier);
+ }
+
+ @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface BoxScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
+ }
+
+ public final class BoxWithConstraintsKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void BoxWithConstraints(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxWithConstraintsScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Stable public interface BoxWithConstraintsScope extends androidx.compose.foundation.layout.BoxScope {
+ method public long getConstraints();
+ method public float getMaxHeight();
+ method public float getMaxWidth();
+ method public float getMinHeight();
+ method public float getMinWidth();
+ property public abstract long constraints;
+ property public abstract float maxHeight;
+ property public abstract float maxWidth;
+ property public abstract float minHeight;
+ property public abstract float minWidth;
+ }
+
+ public final class ColumnKt {
+ method @androidx.compose.runtime.Composable public static inline void Column(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface ColumnScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
+ }
+
+ @kotlin.RequiresOptIn(message="The API of this layout is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalLayoutApi {
+ }
+
+ public final class FlowLayoutKt {
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable public static void FlowColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional int maxItemsInEachColumn, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable public static void FlowRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional int maxItemsInEachRow, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ public final class IntrinsicKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier height(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredHeight(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredWidth(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier width(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ }
+
+ public enum IntrinsicSize {
+ method public static androidx.compose.foundation.layout.IntrinsicSize valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.foundation.layout.IntrinsicSize[] values();
+ enum_constant public static final androidx.compose.foundation.layout.IntrinsicSize Max;
+ enum_constant public static final androidx.compose.foundation.layout.IntrinsicSize Min;
+ }
+
+ @kotlin.DslMarker public @interface LayoutScopeMarker {
+ }
+
+ @androidx.compose.foundation.layout.ExperimentalLayoutApi public final class MutableWindowInsets implements androidx.compose.foundation.layout.WindowInsets {
+ ctor public MutableWindowInsets(optional androidx.compose.foundation.layout.WindowInsets initialInsets);
+ method public int getBottom(androidx.compose.ui.unit.Density density);
+ method public androidx.compose.foundation.layout.WindowInsets getInsets();
+ method public int getLeft(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public int getRight(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public int getTop(androidx.compose.ui.unit.Density density);
+ method public void setInsets(androidx.compose.foundation.layout.WindowInsets);
+ property public final androidx.compose.foundation.layout.WindowInsets insets;
+ }
+
+ public final class OffsetKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier absoluteOffset(androidx.compose.ui.Modifier, optional float x, optional float y);
+ method public static androidx.compose.ui.Modifier absoluteOffset(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Density,androidx.compose.ui.unit.IntOffset> offset);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier offset(androidx.compose.ui.Modifier, optional float x, optional float y);
+ method public static androidx.compose.ui.Modifier offset(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Density,androidx.compose.ui.unit.IntOffset> offset);
+ }
+
+ public final class PaddingKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.PaddingValues PaddingValues(float all);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.PaddingValues PaddingValues(optional float horizontal, optional float vertical);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.PaddingValues PaddingValues(optional float start, optional float top, optional float end, optional float bottom);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier absolutePadding(androidx.compose.ui.Modifier, optional float left, optional float top, optional float right, optional float bottom);
+ method @androidx.compose.runtime.Stable public static float calculateEndPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method @androidx.compose.runtime.Stable public static float calculateStartPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float start, optional float top, optional float end, optional float bottom);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float horizontal, optional float vertical);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, float all);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.PaddingValues paddingValues);
+ }
+
+ @androidx.compose.runtime.Stable public interface PaddingValues {
+ method public float calculateBottomPadding();
+ method public float calculateLeftPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateRightPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateTopPadding();
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PaddingValues.Absolute implements androidx.compose.foundation.layout.PaddingValues {
+ ctor public PaddingValues.Absolute(optional @androidx.compose.runtime.Stable float left, optional @androidx.compose.runtime.Stable float top, optional @androidx.compose.runtime.Stable float right, optional @androidx.compose.runtime.Stable float bottom);
+ method public float calculateBottomPadding();
+ method public float calculateLeftPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateRightPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateTopPadding();
+ }
+
+ public final class RowKt {
+ method @androidx.compose.runtime.Composable public static inline void Row(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface RowScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
+ }
+
+ public final class SizeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier defaultMinSize(androidx.compose.ui.Modifier, optional float minWidth, optional float minHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier fillMaxHeight(androidx.compose.ui.Modifier, optional float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier fillMaxSize(androidx.compose.ui.Modifier, optional float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier fillMaxWidth(androidx.compose.ui.Modifier, optional float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier height(androidx.compose.ui.Modifier, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier heightIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredHeight(androidx.compose.ui.Modifier, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredHeightIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSize(androidx.compose.ui.Modifier, float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSize(androidx.compose.ui.Modifier, float width, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSize(androidx.compose.ui.Modifier, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSizeIn(androidx.compose.ui.Modifier, optional float minWidth, optional float minHeight, optional float maxWidth, optional float maxHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredWidth(androidx.compose.ui.Modifier, float width);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredWidthIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier size(androidx.compose.ui.Modifier, float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier size(androidx.compose.ui.Modifier, float width, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier size(androidx.compose.ui.Modifier, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier sizeIn(androidx.compose.ui.Modifier, optional float minWidth, optional float minHeight, optional float maxWidth, optional float maxHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier width(androidx.compose.ui.Modifier, float width);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier widthIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier wrapContentHeight(androidx.compose.ui.Modifier, optional androidx.compose.ui.Alignment.Vertical align, optional boolean unbounded);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier wrapContentSize(androidx.compose.ui.Modifier, optional androidx.compose.ui.Alignment align, optional boolean unbounded);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier wrapContentWidth(androidx.compose.ui.Modifier, optional androidx.compose.ui.Alignment.Horizontal align, optional boolean unbounded);
+ }
+
+ public final class SpacerKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Spacer(androidx.compose.ui.Modifier modifier);
+ }
+
+ @androidx.compose.runtime.Stable public interface WindowInsets {
+ method public int getBottom(androidx.compose.ui.unit.Density density);
+ method public int getLeft(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public int getRight(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public int getTop(androidx.compose.ui.unit.Density density);
+ field public static final androidx.compose.foundation.layout.WindowInsets.Companion Companion;
+ }
+
+ public static final class WindowInsets.Companion {
+ }
+
+ public final class WindowInsetsConnection_androidKt {
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi public static androidx.compose.ui.Modifier imeNestedScroll(androidx.compose.ui.Modifier);
+ }
+
+ public final class WindowInsetsKt {
+ method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional int left, optional int top, optional int right, optional int bottom);
+ method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional float left, optional float top, optional float right, optional float bottom);
+ method public static androidx.compose.foundation.layout.WindowInsets add(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets);
+ method public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets, androidx.compose.ui.unit.Density density);
+ method public static androidx.compose.foundation.layout.WindowInsets exclude(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
+ method public static androidx.compose.foundation.layout.WindowInsets only(androidx.compose.foundation.layout.WindowInsets, int sides);
+ method public static androidx.compose.foundation.layout.WindowInsets union(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
+ }
+
+ public final class WindowInsetsPaddingKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumeWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumeWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.PaddingValues paddingValues);
+ method @Deprecated @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumedWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @Deprecated @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumedWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.PaddingValues paddingValues);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onConsumedWindowInsetsChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.WindowInsets,kotlin.Unit> block);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsPadding(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @Deprecated @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier withConsumedWindowInsets(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.WindowInsets,kotlin.Unit> block);
+ }
+
+ public final class WindowInsetsPadding_androidKt {
+ method public static androidx.compose.ui.Modifier captionBarPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier displayCutoutPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier imePadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier mandatorySystemGesturesPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier navigationBarsPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier safeContentPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier safeDrawingPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier safeGesturesPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier statusBarsPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier systemBarsPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier systemGesturesPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier waterfallPadding(androidx.compose.ui.Modifier);
+ }
+
+ @kotlin.jvm.JvmInline public final value class WindowInsetsSides {
+ method public operator int plus(int sides);
+ field public static final androidx.compose.foundation.layout.WindowInsetsSides.Companion Companion;
+ }
+
+ public static final class WindowInsetsSides.Companion {
+ method public int getBottom();
+ method public int getEnd();
+ method public int getHorizontal();
+ method public int getLeft();
+ method public int getRight();
+ method public int getStart();
+ method public int getTop();
+ method public int getVertical();
+ property public final int Bottom;
+ property public final int End;
+ property public final int Horizontal;
+ property public final int Left;
+ property public final int Right;
+ property public final int Start;
+ property public final int Top;
+ property public final int Vertical;
+ }
+
+ public final class WindowInsetsSizeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsBottomHeight(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsEndWidth(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsStartWidth(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsTopHeight(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ }
+
+ public final class WindowInsets_androidKt {
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static boolean getAreNavigationBarsVisible(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static boolean getAreStatusBarsVisible(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static boolean getAreSystemBarsVisible(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getCaptionBar(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getCaptionBarIgnoringVisibility(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method public static boolean getConsumeWindowInsets(androidx.compose.ui.platform.ComposeView);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getDisplayCutout(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getIme(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getImeAnimationSource(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getImeAnimationTarget(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getMandatorySystemGestures(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getNavigationBars(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getNavigationBarsIgnoringVisibility(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSafeContent(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSafeDrawing(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSafeGestures(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getStatusBars(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getStatusBarsIgnoringVisibility(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSystemBars(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSystemBarsIgnoringVisibility(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSystemGestures(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getTappableElement(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getTappableElementIgnoringVisibility(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getWaterfall(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static boolean isCaptionBarVisible(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static boolean isImeVisible(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static boolean isTappableElementVisible(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method public static void setConsumeWindowInsets(androidx.compose.ui.platform.ComposeView, boolean);
+ }
+
+}
+
diff --git a/compose/foundation/foundation-layout/api/res-1.4.0-beta02.txt b/compose/foundation/foundation-layout/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/foundation/foundation-layout/api/res-1.4.0-beta02.txt
diff --git a/compose/foundation/foundation-layout/api/restricted_1.4.0-beta02.txt b/compose/foundation/foundation-layout/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..3202872
--- /dev/null
+++ b/compose/foundation/foundation-layout/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,306 @@
+// Signature format: 4.0
+package androidx.compose.foundation.layout {
+
+ public final class AlignmentLineKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFrom(androidx.compose.ui.Modifier, androidx.compose.ui.layout.AlignmentLine alignmentLine, optional float before, optional float after);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFrom(androidx.compose.ui.Modifier, androidx.compose.ui.layout.AlignmentLine alignmentLine, optional long before, optional long after);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFromBaseline(androidx.compose.ui.Modifier, optional float top, optional float bottom);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier paddingFromBaseline(androidx.compose.ui.Modifier, optional long top, optional long bottom);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Arrangement {
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal aligned(androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Vertical aligned(androidx.compose.ui.Alignment.Vertical alignment);
+ method public androidx.compose.foundation.layout.Arrangement.Vertical getBottom();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getCenter();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getEnd();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getSpaceAround();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getSpaceBetween();
+ method public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical getSpaceEvenly();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getStart();
+ method public androidx.compose.foundation.layout.Arrangement.Vertical getTop();
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical spacedBy(float space);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal spacedBy(float space, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Vertical spacedBy(float space, androidx.compose.ui.Alignment.Vertical alignment);
+ property public final androidx.compose.foundation.layout.Arrangement.Vertical Bottom;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical Center;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal End;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical SpaceAround;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical SpaceBetween;
+ property public final androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical SpaceEvenly;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Start;
+ property public final androidx.compose.foundation.layout.Arrangement.Vertical Top;
+ field public static final androidx.compose.foundation.layout.Arrangement INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class Arrangement.Absolute {
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal aligned(androidx.compose.ui.Alignment.Horizontal alignment);
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getCenter();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getLeft();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getRight();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getSpaceAround();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getSpaceBetween();
+ method public androidx.compose.foundation.layout.Arrangement.Horizontal getSpaceEvenly();
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.HorizontalOrVertical spacedBy(float space);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Horizontal spacedBy(float space, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.Arrangement.Vertical spacedBy(float space, androidx.compose.ui.Alignment.Vertical alignment);
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Center;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Left;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal Right;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal SpaceAround;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal SpaceBetween;
+ property public final androidx.compose.foundation.layout.Arrangement.Horizontal SpaceEvenly;
+ field public static final androidx.compose.foundation.layout.Arrangement.Absolute INSTANCE;
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public static interface Arrangement.Horizontal {
+ method public void arrange(androidx.compose.ui.unit.Density, int totalSize, int[] sizes, androidx.compose.ui.unit.LayoutDirection layoutDirection, int[] outPositions);
+ method public default float getSpacing();
+ property public default float spacing;
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public static interface Arrangement.HorizontalOrVertical extends androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
+ property public default float spacing;
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public static interface Arrangement.Vertical {
+ method public void arrange(androidx.compose.ui.unit.Density, int totalSize, int[] sizes, int[] outPositions);
+ method public default float getSpacing();
+ property public default float spacing;
+ }
+
+ public final class AspectRatioKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier aspectRatio(androidx.compose.ui.Modifier, float ratio, optional boolean matchHeightConstraintsFirst);
+ }
+
+ public final class BoxKt {
+ method @androidx.compose.runtime.Composable public static inline void Box(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Box(androidx.compose.ui.Modifier modifier);
+ method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.compose.ui.layout.MeasurePolicy rememberBoxMeasurePolicy(androidx.compose.ui.Alignment alignment, boolean propagateMinConstraints);
+ }
+
+ @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface BoxScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
+ }
+
+ public final class BoxWithConstraintsKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void BoxWithConstraints(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxWithConstraintsScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Stable public interface BoxWithConstraintsScope extends androidx.compose.foundation.layout.BoxScope {
+ method public long getConstraints();
+ method public float getMaxHeight();
+ method public float getMaxWidth();
+ method public float getMinHeight();
+ method public float getMinWidth();
+ property public abstract long constraints;
+ property public abstract float maxHeight;
+ property public abstract float maxWidth;
+ property public abstract float minHeight;
+ property public abstract float minWidth;
+ }
+
+ public final class ColumnKt {
+ method @androidx.compose.runtime.Composable public static inline void Column(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.compose.ui.layout.MeasurePolicy columnMeasurePolicy(androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, androidx.compose.ui.Alignment.Horizontal horizontalAlignment);
+ field @kotlin.PublishedApi internal static final androidx.compose.ui.layout.MeasurePolicy DefaultColumnMeasurePolicy;
+ }
+
+ @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface ColumnScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
+ }
+
+ public final class IntrinsicKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier height(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredHeight(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredWidth(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier width(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+ }
+
+ public enum IntrinsicSize {
+ method public static androidx.compose.foundation.layout.IntrinsicSize valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.foundation.layout.IntrinsicSize[] values();
+ enum_constant public static final androidx.compose.foundation.layout.IntrinsicSize Max;
+ enum_constant public static final androidx.compose.foundation.layout.IntrinsicSize Min;
+ }
+
+ @kotlin.DslMarker public @interface LayoutScopeMarker {
+ }
+
+ public final class OffsetKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier absoluteOffset(androidx.compose.ui.Modifier, optional float x, optional float y);
+ method public static androidx.compose.ui.Modifier absoluteOffset(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Density,androidx.compose.ui.unit.IntOffset> offset);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier offset(androidx.compose.ui.Modifier, optional float x, optional float y);
+ method public static androidx.compose.ui.Modifier offset(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Density,androidx.compose.ui.unit.IntOffset> offset);
+ }
+
+ public final class PaddingKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.PaddingValues PaddingValues(float all);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.PaddingValues PaddingValues(optional float horizontal, optional float vertical);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.PaddingValues PaddingValues(optional float start, optional float top, optional float end, optional float bottom);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier absolutePadding(androidx.compose.ui.Modifier, optional float left, optional float top, optional float right, optional float bottom);
+ method @androidx.compose.runtime.Stable public static float calculateEndPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method @androidx.compose.runtime.Stable public static float calculateStartPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float start, optional float top, optional float end, optional float bottom);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float horizontal, optional float vertical);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, float all);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.PaddingValues paddingValues);
+ }
+
+ @androidx.compose.runtime.Stable public interface PaddingValues {
+ method public float calculateBottomPadding();
+ method public float calculateLeftPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateRightPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateTopPadding();
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PaddingValues.Absolute implements androidx.compose.foundation.layout.PaddingValues {
+ ctor public PaddingValues.Absolute(optional @androidx.compose.runtime.Stable float left, optional @androidx.compose.runtime.Stable float top, optional @androidx.compose.runtime.Stable float right, optional @androidx.compose.runtime.Stable float bottom);
+ method public float calculateBottomPadding();
+ method public float calculateLeftPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateRightPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float calculateTopPadding();
+ }
+
+ public final class RowKt {
+ method @androidx.compose.runtime.Composable public static inline void Row(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.compose.ui.layout.MeasurePolicy rowMeasurePolicy(androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, androidx.compose.ui.Alignment.Vertical verticalAlignment);
+ field @kotlin.PublishedApi internal static final androidx.compose.ui.layout.MeasurePolicy DefaultRowMeasurePolicy;
+ }
+
+ @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface RowScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
+ }
+
+ public final class SizeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier defaultMinSize(androidx.compose.ui.Modifier, optional float minWidth, optional float minHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier fillMaxHeight(androidx.compose.ui.Modifier, optional float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier fillMaxSize(androidx.compose.ui.Modifier, optional float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier fillMaxWidth(androidx.compose.ui.Modifier, optional float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier height(androidx.compose.ui.Modifier, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier heightIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredHeight(androidx.compose.ui.Modifier, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredHeightIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSize(androidx.compose.ui.Modifier, float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSize(androidx.compose.ui.Modifier, float width, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSize(androidx.compose.ui.Modifier, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredSizeIn(androidx.compose.ui.Modifier, optional float minWidth, optional float minHeight, optional float maxWidth, optional float maxHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredWidth(androidx.compose.ui.Modifier, float width);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredWidthIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier size(androidx.compose.ui.Modifier, float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier size(androidx.compose.ui.Modifier, float width, float height);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier size(androidx.compose.ui.Modifier, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier sizeIn(androidx.compose.ui.Modifier, optional float minWidth, optional float minHeight, optional float maxWidth, optional float maxHeight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier width(androidx.compose.ui.Modifier, float width);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier widthIn(androidx.compose.ui.Modifier, optional float min, optional float max);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier wrapContentHeight(androidx.compose.ui.Modifier, optional androidx.compose.ui.Alignment.Vertical align, optional boolean unbounded);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier wrapContentSize(androidx.compose.ui.Modifier, optional androidx.compose.ui.Alignment align, optional boolean unbounded);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier wrapContentWidth(androidx.compose.ui.Modifier, optional androidx.compose.ui.Alignment.Horizontal align, optional boolean unbounded);
+ }
+
+ public final class SpacerKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Spacer(androidx.compose.ui.Modifier modifier);
+ }
+
+ @androidx.compose.runtime.Stable public interface WindowInsets {
+ method public int getBottom(androidx.compose.ui.unit.Density density);
+ method public int getLeft(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public int getRight(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public int getTop(androidx.compose.ui.unit.Density density);
+ field public static final androidx.compose.foundation.layout.WindowInsets.Companion Companion;
+ }
+
+ public static final class WindowInsets.Companion {
+ }
+
+ public final class WindowInsetsKt {
+ method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional int left, optional int top, optional int right, optional int bottom);
+ method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional float left, optional float top, optional float right, optional float bottom);
+ method public static androidx.compose.foundation.layout.WindowInsets add(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets);
+ method public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets, androidx.compose.ui.unit.Density density);
+ method public static androidx.compose.foundation.layout.WindowInsets exclude(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
+ method public static androidx.compose.foundation.layout.WindowInsets only(androidx.compose.foundation.layout.WindowInsets, int sides);
+ method public static androidx.compose.foundation.layout.WindowInsets union(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
+ }
+
+ public final class WindowInsetsPaddingKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumeWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onConsumedWindowInsetsChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.WindowInsets,kotlin.Unit> block);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsPadding(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ }
+
+ public final class WindowInsetsPadding_androidKt {
+ method public static androidx.compose.ui.Modifier captionBarPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier displayCutoutPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier imePadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier mandatorySystemGesturesPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier navigationBarsPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier safeContentPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier safeDrawingPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier safeGesturesPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier statusBarsPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier systemBarsPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier systemGesturesPadding(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier waterfallPadding(androidx.compose.ui.Modifier);
+ }
+
+ @kotlin.jvm.JvmInline public final value class WindowInsetsSides {
+ method public operator int plus(int sides);
+ field public static final androidx.compose.foundation.layout.WindowInsetsSides.Companion Companion;
+ }
+
+ public static final class WindowInsetsSides.Companion {
+ method public int getBottom();
+ method public int getEnd();
+ method public int getHorizontal();
+ method public int getLeft();
+ method public int getRight();
+ method public int getStart();
+ method public int getTop();
+ method public int getVertical();
+ property public final int Bottom;
+ property public final int End;
+ property public final int Horizontal;
+ property public final int Left;
+ property public final int Right;
+ property public final int Start;
+ property public final int Top;
+ property public final int Vertical;
+ }
+
+ public final class WindowInsetsSizeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsBottomHeight(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsEndWidth(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsStartWidth(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsTopHeight(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ }
+
+ public final class WindowInsets_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getCaptionBar(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method public static boolean getConsumeWindowInsets(androidx.compose.ui.platform.ComposeView);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getDisplayCutout(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getIme(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getMandatorySystemGestures(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getNavigationBars(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSafeContent(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSafeDrawing(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSafeGestures(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getStatusBars(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSystemBars(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getSystemGestures(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getTappableElement(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getWaterfall(androidx.compose.foundation.layout.WindowInsets.Companion);
+ method public static void setConsumeWindowInsets(androidx.compose.ui.platform.ComposeView, boolean);
+ }
+
+}
+
diff --git a/compose/foundation/foundation-layout/api/restricted_current.ignore b/compose/foundation/foundation-layout/api/restricted_current.ignore
deleted file mode 100644
index 2e1b921..0000000
--- a/compose/foundation/foundation-layout/api/restricted_current.ignore
+++ /dev/null
@@ -1,9 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.foundation.layout.RowColumnImplKt:
- Removed class androidx.compose.foundation.layout.RowColumnImplKt
-RemovedClass: androidx.compose.foundation.layout.WindowInsetsConnection_androidKt:
- Removed class androidx.compose.foundation.layout.WindowInsetsConnection_androidKt
-
-
-RemovedPackage: androidx.compose.foundation.layout.internal:
- Removed package androidx.compose.foundation.layout.internal
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SizeTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SizeTest.kt
index 2e337c7..dc3c333 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SizeTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SizeTest.kt
@@ -58,6 +58,7 @@
import org.junit.runner.RunWith
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
import org.junit.Assert.assertNotEquals
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
@@ -1486,6 +1487,7 @@
assertEquals(Offset(root.width - size.toFloat(), 0f), childPosition.value)
}
+ @SdkSuppress(maxSdkVersion = 32) // b/267699626
@Test
fun testWrapContentSize_rtl() = with(density) {
val sizeDp = 200.toDp()
diff --git a/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/SelectableTextAnnotatedStringElement.kt b/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/SelectableTextAnnotatedStringElement.kt
index 1514df6..0b4fa32 100644
--- a/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/SelectableTextAnnotatedStringElement.kt
+++ b/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/SelectableTextAnnotatedStringElement.kt
@@ -20,7 +20,7 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.node.ModifierNodeElement
-import androidx.compose.ui.platform.debugInspectorInfo
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.Placeholder
import androidx.compose.ui.text.TextLayoutResult
@@ -29,7 +29,7 @@
import androidx.compose.ui.text.style.TextOverflow
@ExperimentalComposeUiApi
-internal class SelectableTextAnnotatedStringElement(
+internal data class SelectableTextAnnotatedStringElement(
private val text: AnnotatedString,
private val style: TextStyle,
private val fontFamilyResolver: FontFamily.Resolver,
@@ -41,7 +41,8 @@
private val placeholders: List<AnnotatedString.Range<Placeholder>>? = null,
private val onPlaceholderLayout: ((List<Rect?>) -> Unit)? = null,
private val selectionController: SelectionController? = null
-) : ModifierNodeElement<SelectableTextAnnotatedStringNode>(inspectorInfo = debugInspectorInfo { }) {
+) : ModifierNodeElement<SelectableTextAnnotatedStringNode>() {
+
override fun create(): SelectableTextAnnotatedStringNode = SelectableTextAnnotatedStringNode(
text,
style,
@@ -101,8 +102,7 @@
}
override fun hashCode(): Int {
- var result = super.hashCode()
- result = 31 * result + text.hashCode()
+ var result = text.hashCode()
result = 31 * result + style.hashCode()
result = 31 * result + fontFamilyResolver.hashCode()
result = 31 * result + (onTextLayout?.hashCode() ?: 0)
@@ -115,4 +115,8 @@
result = 31 * result + (selectionController?.hashCode() ?: 0)
return result
}
+
+ override fun InspectorInfo.inspectableProperties() {
+ // Show nothing in the inspector.
+ }
}
\ No newline at end of file
diff --git a/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/TextAnnotatedStringElement.kt b/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/TextAnnotatedStringElement.kt
index 1204125..e25f48a 100644
--- a/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/TextAnnotatedStringElement.kt
+++ b/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/TextAnnotatedStringElement.kt
@@ -20,7 +20,7 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.node.ModifierNodeElement
-import androidx.compose.ui.platform.debugInspectorInfo
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.Placeholder
import androidx.compose.ui.text.TextLayoutResult
@@ -41,7 +41,8 @@
private val placeholders: List<AnnotatedString.Range<Placeholder>>? = null,
private val onPlaceholderLayout: ((List<Rect?>) -> Unit)? = null,
private val selectionController: SelectionController? = null
-) : ModifierNodeElement<TextAnnotatedStringNode>(inspectorInfo = debugInspectorInfo { }) {
+) : ModifierNodeElement<TextAnnotatedStringNode>() {
+
override fun create(): TextAnnotatedStringNode = TextAnnotatedStringNode(
text,
style,
@@ -105,8 +106,7 @@
}
override fun hashCode(): Int {
- var result = super.hashCode()
- result = 31 * result + text.hashCode()
+ var result = text.hashCode()
result = 31 * result + style.hashCode()
result = 31 * result + fontFamilyResolver.hashCode()
result = 31 * result + (onTextLayout?.hashCode() ?: 0)
@@ -119,4 +119,8 @@
result = 31 * result + (selectionController?.hashCode() ?: 0)
return result
}
+
+ override fun InspectorInfo.inspectableProperties() {
+ // Show nothing in the inspector.
+ }
}
\ No newline at end of file
diff --git a/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/TextStringSimpleElement.kt b/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/TextStringSimpleElement.kt
index 2e2ed43..797e399 100644
--- a/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/TextStringSimpleElement.kt
+++ b/compose/foundation/foundation-newtext/src/commonMain/kotlin/androidx/compose/foundation/newtext/text/modifiers/TextStringSimpleElement.kt
@@ -19,7 +19,7 @@
import androidx.compose.foundation.newtext.text.DefaultMinLines
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.node.ModifierNodeElement
-import androidx.compose.ui.platform.debugInspectorInfo
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.style.TextOverflow
@@ -33,7 +33,8 @@
private val softWrap: Boolean = true,
private val maxLines: Int = Int.MAX_VALUE,
private val minLines: Int = DefaultMinLines,
-) : ModifierNodeElement<TextStringSimpleNode>(inspectorInfo = debugInspectorInfo { }) {
+) : ModifierNodeElement<TextStringSimpleNode>() {
+
override fun create(): TextStringSimpleNode = TextStringSimpleNode(
text,
style,
@@ -81,8 +82,7 @@
}
override fun hashCode(): Int {
- var result = super.hashCode()
- result = 31 * result + text.hashCode()
+ var result = text.hashCode()
result = 31 * result + style.hashCode()
result = 31 * result + fontFamilyResolver.hashCode()
result = 31 * result + overflow.hashCode()
@@ -91,4 +91,8 @@
result = 31 * result + minLines
return result
}
+
+ override fun InspectorInfo.inspectableProperties() {
+ // Show nothing in the inspector.
+ }
}
\ No newline at end of file
diff --git a/compose/foundation/foundation/api/1.4.0-beta02.txt b/compose/foundation/foundation/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..b8a93c56
--- /dev/null
+++ b/compose/foundation/foundation/api/1.4.0-beta02.txt
@@ -0,0 +1,837 @@
+// Signature format: 4.0
+package androidx.compose.foundation {
+
+ public final class BackgroundKt {
+ method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Brush brush, optional androidx.compose.ui.graphics.Shape shape, optional float alpha);
+ }
+
+ public final class BorderKt {
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, androidx.compose.foundation.BorderStroke border, optional androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, long color, optional androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+ }
+
+ @androidx.compose.runtime.Immutable public final class BorderStroke {
+ ctor public BorderStroke(float width, androidx.compose.ui.graphics.Brush brush);
+ method public androidx.compose.foundation.BorderStroke copy(optional float width, optional androidx.compose.ui.graphics.Brush brush);
+ method public androidx.compose.ui.graphics.Brush getBrush();
+ method public float getWidth();
+ property public final androidx.compose.ui.graphics.Brush brush;
+ property public final float width;
+ }
+
+ public final class BorderStrokeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.BorderStroke BorderStroke(float width, long color);
+ }
+
+ public final class CanvasKt {
+ method @androidx.compose.runtime.Composable public static void Canvas(androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDraw);
+ }
+
+ public final class CheckScrollableContainerConstraintsKt {
+ method public static void checkScrollableContainerConstraints(long constraints, androidx.compose.foundation.gestures.Orientation orientation);
+ }
+
+ public final class ClickableKt {
+ method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ }
+
+ public final class ClipScrollableContainerKt {
+ method public static androidx.compose.ui.Modifier clipScrollableContainer(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.Orientation orientation);
+ }
+
+ public final class DarkThemeKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static boolean isSystemInDarkTheme();
+ }
+
+ public final class ExcludeFromSystemGesture_androidKt {
+ method @Deprecated public static androidx.compose.ui.Modifier excludeFromSystemGesture(androidx.compose.ui.Modifier);
+ method @Deprecated public static androidx.compose.ui.Modifier excludeFromSystemGesture(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,androidx.compose.ui.geometry.Rect> exclusion);
+ }
+
+ public final class FocusableKt {
+ method public static androidx.compose.ui.Modifier focusable(androidx.compose.ui.Modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource);
+ }
+
+ public final class HoverableKt {
+ method public static androidx.compose.ui.Modifier hoverable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional boolean enabled);
+ }
+
+ public final class ImageKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int filterQuality);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ }
+
+ @androidx.compose.runtime.Stable public interface Indication {
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.IndicationInstance rememberUpdatedInstance(androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ }
+
+ public interface IndicationInstance {
+ method public void drawIndication(androidx.compose.ui.graphics.drawscope.ContentDrawScope);
+ }
+
+ public final class IndicationKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.Indication> getLocalIndication();
+ method public static androidx.compose.ui.Modifier indication(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.InteractionSource interactionSource, androidx.compose.foundation.Indication? indication);
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.Indication> LocalIndication;
+ }
+
+ public enum MutatePriority {
+ method public static androidx.compose.foundation.MutatePriority valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.foundation.MutatePriority[] values();
+ enum_constant public static final androidx.compose.foundation.MutatePriority Default;
+ enum_constant public static final androidx.compose.foundation.MutatePriority PreventUserInput;
+ enum_constant public static final androidx.compose.foundation.MutatePriority UserInput;
+ }
+
+ @androidx.compose.runtime.Stable public final class MutatorMutex {
+ ctor public MutatorMutex();
+ method public suspend <R> Object? mutate(optional androidx.compose.foundation.MutatePriority priority, kotlin.jvm.functions.Function1<? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ method public suspend <T, R> Object? mutateWith(T? receiver, optional androidx.compose.foundation.MutatePriority priority, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public final class ProgressSemanticsKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier, float value, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier);
+ }
+
+ public final class ScrollKt {
+ method public static androidx.compose.ui.Modifier horizontalScroll(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState state, optional boolean enabled, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional boolean reverseScrolling);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.ScrollState rememberScrollState(optional int initial);
+ method public static androidx.compose.ui.Modifier verticalScroll(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState state, optional boolean enabled, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional boolean reverseScrolling);
+ }
+
+ @androidx.compose.runtime.Stable public final class ScrollState implements androidx.compose.foundation.gestures.ScrollableState {
+ ctor public ScrollState(int initial);
+ method public suspend Object? animateScrollTo(int value, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public float dispatchRawDelta(float delta);
+ method public androidx.compose.foundation.interaction.InteractionSource getInteractionSource();
+ method public int getMaxValue();
+ method public int getValue();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? scrollTo(int value, kotlin.coroutines.Continuation<? super java.lang.Float>);
+ property public boolean canScrollBackward;
+ property public boolean canScrollForward;
+ property public final androidx.compose.foundation.interaction.InteractionSource interactionSource;
+ property public boolean isScrollInProgress;
+ property public final int maxValue;
+ property public final int value;
+ field public static final androidx.compose.foundation.ScrollState.Companion Companion;
+ }
+
+ public static final class ScrollState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.ScrollState,?> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.ScrollState,?> Saver;
+ }
+
+ public final class SystemGestureExclusionKt {
+ method public static androidx.compose.ui.Modifier systemGestureExclusion(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier systemGestureExclusion(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,androidx.compose.ui.geometry.Rect> exclusion);
+ }
+
+}
+
+package androidx.compose.foundation.gestures {
+
+ public final class DragGestureDetectorKt {
+ method public static suspend Object? awaitDragOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitHorizontalDragOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitHorizontalTouchSlopOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onTouchSlopReached, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitLongPressOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitTouchSlopOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onTouchSlopReached, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitVerticalDragOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitVerticalTouchSlopOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onTouchSlopReached, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? detectDragGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? detectDragGesturesAfterLongPress(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? detectHorizontalDragGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onHorizontalDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? detectVerticalDragGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onVerticalDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? drag(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.pointer.PointerInputChange,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ method public static suspend Object? horizontalDrag(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.pointer.PointerInputChange,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ method public static suspend Object? verticalDrag(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.pointer.PointerInputChange,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ }
+
+ public interface DragScope {
+ method public void dragBy(float pixels);
+ }
+
+ public final class DraggableKt {
+ method public static androidx.compose.foundation.gestures.DraggableState DraggableState(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDelta);
+ method public static androidx.compose.ui.Modifier draggable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.DraggableState state, androidx.compose.foundation.gestures.Orientation orientation, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional boolean startDragImmediately, optional kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.ui.geometry.Offset,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onDragStarted, optional kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super java.lang.Float,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onDragStopped, optional boolean reverseDirection);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.DraggableState rememberDraggableState(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDelta);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface DraggableState {
+ method public void dispatchRawDelta(float delta);
+ method public suspend Object? drag(optional androidx.compose.foundation.MutatePriority dragPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.DragScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ @androidx.compose.runtime.Stable public interface FlingBehavior {
+ method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.coroutines.Continuation<? super java.lang.Float>);
+ }
+
+ public final class ForEachGestureKt {
+ method public static suspend Object? awaitEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @Deprecated public static suspend Object? forEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class GestureCancellationException extends java.util.concurrent.CancellationException {
+ ctor public GestureCancellationException(optional String? message);
+ }
+
+ public enum Orientation {
+ method public static androidx.compose.foundation.gestures.Orientation valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.foundation.gestures.Orientation[] values();
+ enum_constant public static final androidx.compose.foundation.gestures.Orientation Horizontal;
+ enum_constant public static final androidx.compose.foundation.gestures.Orientation Vertical;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PressGestureScope extends androidx.compose.ui.unit.Density {
+ method public suspend Object? awaitRelease(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? tryAwaitRelease(kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ }
+
+ public final class ScrollExtensionsKt {
+ method public static suspend Object? animateScrollBy(androidx.compose.foundation.gestures.ScrollableState, float value, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super java.lang.Float>);
+ method public static suspend Object? scrollBy(androidx.compose.foundation.gestures.ScrollableState, float value, kotlin.coroutines.Continuation<? super java.lang.Float>);
+ method public static suspend Object? stopScroll(androidx.compose.foundation.gestures.ScrollableState, optional androidx.compose.foundation.MutatePriority scrollPriority, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public interface ScrollScope {
+ method public float scrollBy(float pixels);
+ }
+
+ public final class ScrollableDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.FlingBehavior flingBehavior();
+ method public boolean reverseDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.foundation.gestures.Orientation orientation, boolean reverseScrolling);
+ field public static final androidx.compose.foundation.gestures.ScrollableDefaults INSTANCE;
+ }
+
+ public final class ScrollableKt {
+ method public static androidx.compose.ui.Modifier scrollable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.ScrollableState state, androidx.compose.foundation.gestures.Orientation orientation, optional boolean enabled, optional boolean reverseDirection, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ScrollableState {
+ method public float dispatchRawDelta(float delta);
+ method public default boolean getCanScrollBackward();
+ method public default boolean getCanScrollForward();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(optional androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public default boolean canScrollBackward;
+ property public default boolean canScrollForward;
+ property public abstract boolean isScrollInProgress;
+ }
+
+ public final class ScrollableStateKt {
+ method public static androidx.compose.foundation.gestures.ScrollableState ScrollableState(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.ScrollableState rememberScrollableState(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
+ }
+
+ public final class TapGestureDetectorKt {
+ method public static suspend Object? awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed);
+ method public static suspend Object? detectTapGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onDoubleTap, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onLongPress, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.gestures.PressGestureScope,? super androidx.compose.ui.geometry.Offset,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onPress, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onTap, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope);
+ }
+
+ public final class TransformGestureDetectorKt {
+ method public static long calculateCentroid(androidx.compose.ui.input.pointer.PointerEvent, optional boolean useCurrent);
+ method public static float calculateCentroidSize(androidx.compose.ui.input.pointer.PointerEvent, optional boolean useCurrent);
+ method public static long calculatePan(androidx.compose.ui.input.pointer.PointerEvent);
+ method public static float calculateRotation(androidx.compose.ui.input.pointer.PointerEvent);
+ method public static float calculateZoom(androidx.compose.ui.input.pointer.PointerEvent);
+ method public static suspend Object? detectTransformGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional boolean panZoomLock, kotlin.jvm.functions.Function4<? super androidx.compose.ui.geometry.Offset,? super androidx.compose.ui.geometry.Offset,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> onGesture, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TransformScope {
+ method public void transformBy(optional float zoomChange, optional long panChange, optional float rotationChange);
+ }
+
+ public final class TransformableKt {
+ method public static androidx.compose.ui.Modifier transformable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.TransformableState state, optional boolean lockRotationOnZoomPan, optional boolean enabled);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TransformableState {
+ method public boolean isTransformInProgress();
+ method public suspend Object? transform(optional androidx.compose.foundation.MutatePriority transformPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.TransformScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public abstract boolean isTransformInProgress;
+ }
+
+ public final class TransformableStateKt {
+ method public static androidx.compose.foundation.gestures.TransformableState TransformableState(kotlin.jvm.functions.Function3<? super java.lang.Float,? super androidx.compose.ui.geometry.Offset,? super java.lang.Float,kotlin.Unit> onTransformation);
+ method public static suspend Object? animatePanBy(androidx.compose.foundation.gestures.TransformableState, long offset, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateRotateBy(androidx.compose.foundation.gestures.TransformableState, float degrees, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateZoomBy(androidx.compose.foundation.gestures.TransformableState, float zoomFactor, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? panBy(androidx.compose.foundation.gestures.TransformableState, long offset, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.TransformableState rememberTransformableState(kotlin.jvm.functions.Function3<? super java.lang.Float,? super androidx.compose.ui.geometry.Offset,? super java.lang.Float,kotlin.Unit> onTransformation);
+ method public static suspend Object? rotateBy(androidx.compose.foundation.gestures.TransformableState, float degrees, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? stopTransformation(androidx.compose.foundation.gestures.TransformableState, optional androidx.compose.foundation.MutatePriority terminationPriority, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? zoomBy(androidx.compose.foundation.gestures.TransformableState, float zoomFactor, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+}
+
+package androidx.compose.foundation.interaction {
+
+ public interface DragInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class DragInteraction.Cancel implements androidx.compose.foundation.interaction.DragInteraction {
+ ctor public DragInteraction.Cancel(androidx.compose.foundation.interaction.DragInteraction.Start start);
+ method public androidx.compose.foundation.interaction.DragInteraction.Start getStart();
+ property public final androidx.compose.foundation.interaction.DragInteraction.Start start;
+ }
+
+ public static final class DragInteraction.Start implements androidx.compose.foundation.interaction.DragInteraction {
+ ctor public DragInteraction.Start();
+ }
+
+ public static final class DragInteraction.Stop implements androidx.compose.foundation.interaction.DragInteraction {
+ ctor public DragInteraction.Stop(androidx.compose.foundation.interaction.DragInteraction.Start start);
+ method public androidx.compose.foundation.interaction.DragInteraction.Start getStart();
+ property public final androidx.compose.foundation.interaction.DragInteraction.Start start;
+ }
+
+ public final class DragInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsDraggedAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+ public interface FocusInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class FocusInteraction.Focus implements androidx.compose.foundation.interaction.FocusInteraction {
+ ctor public FocusInteraction.Focus();
+ }
+
+ public static final class FocusInteraction.Unfocus implements androidx.compose.foundation.interaction.FocusInteraction {
+ ctor public FocusInteraction.Unfocus(androidx.compose.foundation.interaction.FocusInteraction.Focus focus);
+ method public androidx.compose.foundation.interaction.FocusInteraction.Focus getFocus();
+ property public final androidx.compose.foundation.interaction.FocusInteraction.Focus focus;
+ }
+
+ public final class FocusInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsFocusedAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+ public interface HoverInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class HoverInteraction.Enter implements androidx.compose.foundation.interaction.HoverInteraction {
+ ctor public HoverInteraction.Enter();
+ }
+
+ public static final class HoverInteraction.Exit implements androidx.compose.foundation.interaction.HoverInteraction {
+ ctor public HoverInteraction.Exit(androidx.compose.foundation.interaction.HoverInteraction.Enter enter);
+ method public androidx.compose.foundation.interaction.HoverInteraction.Enter getEnter();
+ property public final androidx.compose.foundation.interaction.HoverInteraction.Enter enter;
+ }
+
+ public final class HoverInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsHoveredAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+ public interface Interaction {
+ }
+
+ @androidx.compose.runtime.Stable public interface InteractionSource {
+ method public kotlinx.coroutines.flow.Flow<androidx.compose.foundation.interaction.Interaction> getInteractions();
+ property public abstract kotlinx.coroutines.flow.Flow<androidx.compose.foundation.interaction.Interaction> interactions;
+ }
+
+ public final class InteractionSourceKt {
+ method public static androidx.compose.foundation.interaction.MutableInteractionSource MutableInteractionSource();
+ }
+
+ @androidx.compose.runtime.Stable public interface MutableInteractionSource extends androidx.compose.foundation.interaction.InteractionSource {
+ method public suspend Object? emit(androidx.compose.foundation.interaction.Interaction interaction, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public boolean tryEmit(androidx.compose.foundation.interaction.Interaction interaction);
+ }
+
+ public interface PressInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class PressInteraction.Cancel implements androidx.compose.foundation.interaction.PressInteraction {
+ ctor public PressInteraction.Cancel(androidx.compose.foundation.interaction.PressInteraction.Press press);
+ method public androidx.compose.foundation.interaction.PressInteraction.Press getPress();
+ property public final androidx.compose.foundation.interaction.PressInteraction.Press press;
+ }
+
+ public static final class PressInteraction.Press implements androidx.compose.foundation.interaction.PressInteraction {
+ ctor public PressInteraction.Press(long pressPosition);
+ method public long getPressPosition();
+ property public final long pressPosition;
+ }
+
+ public static final class PressInteraction.Release implements androidx.compose.foundation.interaction.PressInteraction {
+ ctor public PressInteraction.Release(androidx.compose.foundation.interaction.PressInteraction.Press press);
+ method public androidx.compose.foundation.interaction.PressInteraction.Press getPress();
+ property public final androidx.compose.foundation.interaction.PressInteraction.Press press;
+ }
+
+ public final class PressInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsPressedAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+}
+
+package androidx.compose.foundation.lazy {
+
+ public final class LazyDslKt {
+ method @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+ }
+
+ @androidx.compose.foundation.lazy.LazyScopeMarker @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyItemScope {
+ method public androidx.compose.ui.Modifier fillParentMaxHeight(androidx.compose.ui.Modifier, optional float fraction);
+ method public androidx.compose.ui.Modifier fillParentMaxSize(androidx.compose.ui.Modifier, optional float fraction);
+ method public androidx.compose.ui.Modifier fillParentMaxWidth(androidx.compose.ui.Modifier, optional float fraction);
+ }
+
+ public interface LazyListItemInfo {
+ method public int getIndex();
+ method public Object getKey();
+ method public int getOffset();
+ method public int getSize();
+ property public abstract int index;
+ property public abstract Object key;
+ property public abstract int offset;
+ property public abstract int size;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyListLayoutInfo {
+ method public default int getAfterContentPadding();
+ method public default int getBeforeContentPadding();
+ method public default int getMainAxisItemSpacing();
+ method public default androidx.compose.foundation.gestures.Orientation getOrientation();
+ method public default boolean getReverseLayout();
+ method public int getTotalItemsCount();
+ method public int getViewportEndOffset();
+ method public default long getViewportSize();
+ method public int getViewportStartOffset();
+ method public java.util.List<androidx.compose.foundation.lazy.LazyListItemInfo> getVisibleItemsInfo();
+ property public default int afterContentPadding;
+ property public default int beforeContentPadding;
+ property public default int mainAxisItemSpacing;
+ property public default androidx.compose.foundation.gestures.Orientation orientation;
+ property public default boolean reverseLayout;
+ property public abstract int totalItemsCount;
+ property public abstract int viewportEndOffset;
+ property public default long viewportSize;
+ property public abstract int viewportStartOffset;
+ property public abstract java.util.List<androidx.compose.foundation.lazy.LazyListItemInfo> visibleItemsInfo;
+ }
+
+ @androidx.compose.foundation.lazy.LazyScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyListScope {
+ method public default void item(optional Object? key, optional Object? contentType, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
+ method @Deprecated public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,? extends kotlin.Unit> content);
+ method public default void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
+ method @Deprecated public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? extends kotlin.Unit> itemContent);
+ }
+
+ @androidx.compose.runtime.Stable public final class LazyListState implements androidx.compose.foundation.gestures.ScrollableState {
+ ctor public LazyListState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
+ method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public float dispatchRawDelta(float delta);
+ method public int getFirstVisibleItemIndex();
+ method public int getFirstVisibleItemScrollOffset();
+ method public androidx.compose.foundation.interaction.InteractionSource getInteractionSource();
+ method public androidx.compose.foundation.lazy.LazyListLayoutInfo getLayoutInfo();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? scrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public boolean canScrollBackward;
+ property public boolean canScrollForward;
+ property public final int firstVisibleItemIndex;
+ property public final int firstVisibleItemScrollOffset;
+ property public final androidx.compose.foundation.interaction.InteractionSource interactionSource;
+ property public boolean isScrollInProgress;
+ property public final androidx.compose.foundation.lazy.LazyListLayoutInfo layoutInfo;
+ field public static final androidx.compose.foundation.lazy.LazyListState.Companion Companion;
+ }
+
+ public static final class LazyListState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.LazyListState,?> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.LazyListState,?> Saver;
+ }
+
+ public final class LazyListStateKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.lazy.LazyListState rememberLazyListState(optional int initialFirstVisibleItemIndex, optional int initialFirstVisibleItemScrollOffset);
+ }
+
+ @kotlin.DslMarker public @interface LazyScopeMarker {
+ }
+
+}
+
+package androidx.compose.foundation.lazy.grid {
+
+ @androidx.compose.runtime.Stable public interface GridCells {
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ public static final class GridCells.Adaptive implements androidx.compose.foundation.lazy.grid.GridCells {
+ ctor public GridCells.Adaptive(float minSize);
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ public static final class GridCells.Fixed implements androidx.compose.foundation.lazy.grid.GridCells {
+ ctor public GridCells.Fixed(int count);
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class GridItemSpan {
+ method public int getCurrentLineSpan();
+ }
+
+ public final class LazyGridDslKt {
+ method @androidx.compose.runtime.Composable public static void LazyHorizontalGrid(androidx.compose.foundation.lazy.grid.GridCells rows, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.grid.LazyGridState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void LazyVerticalGrid(androidx.compose.foundation.lazy.grid.GridCells columns, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.grid.LazyGridState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridScope,kotlin.Unit> content);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.grid.LazyGridScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.grid.LazyGridScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.grid.LazyGridScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super java.lang.Integer,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.grid.LazyGridScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super java.lang.Integer,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ }
+
+ public sealed interface LazyGridItemInfo {
+ method public int getColumn();
+ method public int getIndex();
+ method public Object getKey();
+ method public long getOffset();
+ method public int getRow();
+ method public long getSize();
+ property public abstract int column;
+ property public abstract int index;
+ property public abstract Object key;
+ property public abstract long offset;
+ property public abstract int row;
+ property public abstract long size;
+ field public static final androidx.compose.foundation.lazy.grid.LazyGridItemInfo.Companion Companion;
+ field public static final int UnknownColumn = -1; // 0xffffffff
+ field public static final int UnknownRow = -1; // 0xffffffff
+ }
+
+ public static final class LazyGridItemInfo.Companion {
+ field public static final int UnknownColumn = -1; // 0xffffffff
+ field public static final int UnknownRow = -1; // 0xffffffff
+ }
+
+ @androidx.compose.foundation.lazy.grid.LazyGridScopeMarker @androidx.compose.runtime.Stable public sealed interface LazyGridItemScope {
+ }
+
+ @androidx.compose.foundation.lazy.grid.LazyGridScopeMarker public sealed interface LazyGridItemSpanScope {
+ method public int getMaxCurrentLineSpan();
+ method public int getMaxLineSpan();
+ property public abstract int maxCurrentLineSpan;
+ property public abstract int maxLineSpan;
+ }
+
+ public sealed interface LazyGridLayoutInfo {
+ method public int getAfterContentPadding();
+ method public int getBeforeContentPadding();
+ method public int getMainAxisItemSpacing();
+ method public androidx.compose.foundation.gestures.Orientation getOrientation();
+ method public boolean getReverseLayout();
+ method public int getTotalItemsCount();
+ method public int getViewportEndOffset();
+ method public long getViewportSize();
+ method public int getViewportStartOffset();
+ method public java.util.List<androidx.compose.foundation.lazy.grid.LazyGridItemInfo> getVisibleItemsInfo();
+ property public abstract int afterContentPadding;
+ property public abstract int beforeContentPadding;
+ property public abstract int mainAxisItemSpacing;
+ property public abstract androidx.compose.foundation.gestures.Orientation orientation;
+ property public abstract boolean reverseLayout;
+ property public abstract int totalItemsCount;
+ property public abstract int viewportEndOffset;
+ property public abstract long viewportSize;
+ property public abstract int viewportStartOffset;
+ property public abstract java.util.List<androidx.compose.foundation.lazy.grid.LazyGridItemInfo> visibleItemsInfo;
+ }
+
+ @androidx.compose.foundation.lazy.grid.LazyGridScopeMarker public sealed interface LazyGridScope {
+ method public void item(optional Object? key, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional Object? contentType, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,kotlin.Unit> content);
+ method public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super java.lang.Integer,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
+ }
+
+ @kotlin.DslMarker public @interface LazyGridScopeMarker {
+ }
+
+ public final class LazyGridSpanKt {
+ method public static long GridItemSpan(int currentLineSpan);
+ }
+
+ @androidx.compose.runtime.Stable public final class LazyGridState implements androidx.compose.foundation.gestures.ScrollableState {
+ ctor public LazyGridState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
+ method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public float dispatchRawDelta(float delta);
+ method public int getFirstVisibleItemIndex();
+ method public int getFirstVisibleItemScrollOffset();
+ method public androidx.compose.foundation.interaction.InteractionSource getInteractionSource();
+ method public androidx.compose.foundation.lazy.grid.LazyGridLayoutInfo getLayoutInfo();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? scrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public boolean canScrollBackward;
+ property public boolean canScrollForward;
+ property public final int firstVisibleItemIndex;
+ property public final int firstVisibleItemScrollOffset;
+ property public final androidx.compose.foundation.interaction.InteractionSource interactionSource;
+ property public boolean isScrollInProgress;
+ property public final androidx.compose.foundation.lazy.grid.LazyGridLayoutInfo layoutInfo;
+ field public static final androidx.compose.foundation.lazy.grid.LazyGridState.Companion Companion;
+ }
+
+ public static final class LazyGridState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.grid.LazyGridState,?> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.grid.LazyGridState,?> Saver;
+ }
+
+ public final class LazyGridStateKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.lazy.grid.LazyGridState rememberLazyGridState(optional int initialFirstVisibleItemIndex, optional int initialFirstVisibleItemScrollOffset);
+ }
+
+}
+
+package androidx.compose.foundation.selection {
+
+ public final class SelectableGroupKt {
+ method public static androidx.compose.ui.Modifier selectableGroup(androidx.compose.ui.Modifier);
+ }
+
+ public final class SelectableKt {
+ method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ }
+
+ public final class ToggleableKt {
+ method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
+ method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
+ method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ }
+
+}
+
+package androidx.compose.foundation.shape {
+
+ public final class AbsoluteCutCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public AbsoluteCutCornerShape(androidx.compose.foundation.shape.CornerSize topLeft, androidx.compose.foundation.shape.CornerSize topRight, androidx.compose.foundation.shape.CornerSize bottomRight, androidx.compose.foundation.shape.CornerSize bottomLeft);
+ method public androidx.compose.foundation.shape.AbsoluteCutCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class AbsoluteCutCornerShapeKt {
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
+ }
+
+ public final class AbsoluteRoundedCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public AbsoluteRoundedCornerShape(androidx.compose.foundation.shape.CornerSize topLeft, androidx.compose.foundation.shape.CornerSize topRight, androidx.compose.foundation.shape.CornerSize bottomRight, androidx.compose.foundation.shape.CornerSize bottomLeft);
+ method public androidx.compose.foundation.shape.AbsoluteRoundedCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class AbsoluteRoundedCornerShapeKt {
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
+ }
+
+ public abstract class CornerBasedShape implements androidx.compose.ui.graphics.Shape {
+ ctor public CornerBasedShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public abstract androidx.compose.foundation.shape.CornerBasedShape copy(optional androidx.compose.foundation.shape.CornerSize topStart, optional androidx.compose.foundation.shape.CornerSize topEnd, optional androidx.compose.foundation.shape.CornerSize bottomEnd, optional androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public final androidx.compose.foundation.shape.CornerBasedShape copy(androidx.compose.foundation.shape.CornerSize all);
+ method public final androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
+ method public abstract androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public final androidx.compose.foundation.shape.CornerSize getBottomEnd();
+ method public final androidx.compose.foundation.shape.CornerSize getBottomStart();
+ method public final androidx.compose.foundation.shape.CornerSize getTopEnd();
+ method public final androidx.compose.foundation.shape.CornerSize getTopStart();
+ property public final androidx.compose.foundation.shape.CornerSize bottomEnd;
+ property public final androidx.compose.foundation.shape.CornerSize bottomStart;
+ property public final androidx.compose.foundation.shape.CornerSize topEnd;
+ property public final androidx.compose.foundation.shape.CornerSize topStart;
+ }
+
+ @androidx.compose.runtime.Immutable public interface CornerSize {
+ method public float toPx(long shapeSize, androidx.compose.ui.unit.Density density);
+ }
+
+ public final class CornerSizeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(int percent);
+ method public static androidx.compose.foundation.shape.CornerSize getZeroCornerSize();
+ property public static final androidx.compose.foundation.shape.CornerSize ZeroCornerSize;
+ }
+
+ public final class CutCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public CutCornerShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.foundation.shape.CutCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class CutCornerShapeKt {
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
+ }
+
+ public final class GenericShape implements androidx.compose.ui.graphics.Shape {
+ ctor public GenericShape(kotlin.jvm.functions.Function3<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,? super androidx.compose.ui.unit.LayoutDirection,kotlin.Unit> builder);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
+ }
+
+ public final class RoundedCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public RoundedCornerShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.foundation.shape.RoundedCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class RoundedCornerShapeKt {
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape getCircleShape();
+ property public static final androidx.compose.foundation.shape.RoundedCornerShape CircleShape;
+ }
+
+}
+
+package androidx.compose.foundation.text {
+
+ public final class BasicTextFieldKt {
+ method @androidx.compose.runtime.Composable public static void BasicTextField(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.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+ method @androidx.compose.runtime.Composable public static void BasicTextField(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.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+ }
+
+ public final class BasicTextKt {
+ method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
+ method @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ }
+
+ public final class ClickableTextKt {
+ method @androidx.compose.runtime.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional boolean softWrap, optional int overflow, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+ }
+
+ @androidx.compose.runtime.Immutable public final class InlineTextContent {
+ ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+ method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
+ method public androidx.compose.ui.text.Placeholder getPlaceholder();
+ property public final kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> children;
+ property public final androidx.compose.ui.text.Placeholder placeholder;
+ }
+
+ public final class InlineTextContentKt {
+ method public static void appendInlineContent(androidx.compose.ui.text.AnnotatedString.Builder, String id, optional String alternateText);
+ }
+
+ public interface KeyboardActionScope {
+ method public void defaultKeyboardAction(int imeAction);
+ }
+
+ @androidx.compose.runtime.Stable public final class KeyboardActions {
+ ctor public KeyboardActions(optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnDone();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnGo();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnNext();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnPrevious();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnSearch();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnSend();
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend;
+ field public static final androidx.compose.foundation.text.KeyboardActions.Companion Companion;
+ }
+
+ public static final class KeyboardActions.Companion {
+ method public androidx.compose.foundation.text.KeyboardActions getDefault();
+ property public final androidx.compose.foundation.text.KeyboardActions Default;
+ }
+
+ public final class KeyboardActionsKt {
+ method public static androidx.compose.foundation.text.KeyboardActions KeyboardActions(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit> onAny);
+ }
+
+ @androidx.compose.runtime.Immutable public final class KeyboardOptions {
+ ctor public KeyboardOptions(optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public androidx.compose.foundation.text.KeyboardOptions copy(optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public boolean getAutoCorrect();
+ method public int getCapitalization();
+ method public int getImeAction();
+ method public int getKeyboardType();
+ property public final boolean autoCorrect;
+ property public final int capitalization;
+ property public final int imeAction;
+ property public final int keyboardType;
+ field public static final androidx.compose.foundation.text.KeyboardOptions.Companion Companion;
+ }
+
+ public static final class KeyboardOptions.Companion {
+ method public androidx.compose.foundation.text.KeyboardOptions getDefault();
+ property public final androidx.compose.foundation.text.KeyboardOptions Default;
+ }
+
+}
+
+package androidx.compose.foundation.text.selection {
+
+ public final class SelectionContainerKt {
+ method @androidx.compose.runtime.Composable public static void DisableSelection(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void SelectionContainer(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextSelectionColors {
+ ctor public TextSelectionColors(long handleColor, long backgroundColor);
+ method public long getBackgroundColor();
+ method public long getHandleColor();
+ property public final long backgroundColor;
+ property public final long handleColor;
+ }
+
+ public final class TextSelectionColorsKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.text.selection.TextSelectionColors> getLocalTextSelectionColors();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.text.selection.TextSelectionColors> LocalTextSelectionColors;
+ }
+
+}
+
diff --git a/compose/foundation/foundation/api/current.ignore b/compose/foundation/foundation/api/current.ignore
deleted file mode 100644
index 529b30a..0000000
--- a/compose/foundation/foundation/api/current.ignore
+++ /dev/null
@@ -1,153 +0,0 @@
-// Baseline format: 1.0
-AddedAbstractMethod: androidx.compose.foundation.lazy.grid.LazyGridLayoutInfo#getMainAxisItemSpacing():
- Added method androidx.compose.foundation.lazy.grid.LazyGridLayoutInfo.getMainAxisItemSpacing()
-
-
-RemovedClass: androidx.compose.foundation.ActualJvmKt:
- Removed class androidx.compose.foundation.ActualJvmKt
-RemovedClass: androidx.compose.foundation.AndroidOverscrollKt:
- Removed class androidx.compose.foundation.AndroidOverscrollKt
-RemovedClass: androidx.compose.foundation.Clickable_androidKt:
- Removed class androidx.compose.foundation.Clickable_androidKt
-RemovedClass: androidx.compose.foundation.DarkTheme_androidKt:
- Removed class androidx.compose.foundation.DarkTheme_androidKt
-RemovedClass: androidx.compose.foundation.FocusedBoundsKt:
- Removed class androidx.compose.foundation.FocusedBoundsKt
-RemovedClass: androidx.compose.foundation.MagnifierKt:
- Removed class androidx.compose.foundation.MagnifierKt
-RemovedClass: androidx.compose.foundation.OverscrollConfigurationKt:
- Removed class androidx.compose.foundation.OverscrollConfigurationKt
-RemovedClass: androidx.compose.foundation.OverscrollKt:
- Removed class androidx.compose.foundation.OverscrollKt
-RemovedClass: androidx.compose.foundation.TempListUtilsKt:
- Removed class androidx.compose.foundation.TempListUtilsKt
-RemovedClass: androidx.compose.foundation.gestures.AndroidScrollable_androidKt:
- Removed class androidx.compose.foundation.gestures.AndroidScrollable_androidKt
-RemovedClass: androidx.compose.foundation.lazy.LazyBeyondBoundsModifierKt:
- Removed class androidx.compose.foundation.lazy.LazyBeyondBoundsModifierKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListHeadersKt:
- Removed class androidx.compose.foundation.lazy.LazyListHeadersKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListItemPlacementAnimatorKt:
- Removed class androidx.compose.foundation.lazy.LazyListItemPlacementAnimatorKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListItemProviderKt:
- Removed class androidx.compose.foundation.lazy.LazyListItemProviderKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListKt:
- Removed class androidx.compose.foundation.lazy.LazyListKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListMeasureKt:
- Removed class androidx.compose.foundation.lazy.LazyListMeasureKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListPinningModifierKt:
- Removed class androidx.compose.foundation.lazy.LazyListPinningModifierKt
-RemovedClass: androidx.compose.foundation.lazy.LazySemanticsKt:
- Removed class androidx.compose.foundation.lazy.LazySemanticsKt
-RemovedClass: androidx.compose.foundation.lazy.grid.LazyGridItemPlacementAnimatorKt:
- Removed class androidx.compose.foundation.lazy.grid.LazyGridItemPlacementAnimatorKt
-RemovedClass: androidx.compose.foundation.lazy.grid.LazyGridItemProviderKt:
- Removed class androidx.compose.foundation.lazy.grid.LazyGridItemProviderKt
-RemovedClass: androidx.compose.foundation.lazy.grid.LazyGridKt:
- Removed class androidx.compose.foundation.lazy.grid.LazyGridKt
-RemovedClass: androidx.compose.foundation.lazy.grid.LazyGridMeasureKt:
- Removed class androidx.compose.foundation.lazy.grid.LazyGridMeasureKt
-RemovedClass: androidx.compose.foundation.lazy.grid.LazySemanticsKt:
- Removed class androidx.compose.foundation.lazy.grid.LazySemanticsKt
-RemovedClass: androidx.compose.foundation.text.AndroidCursorHandle_androidKt:
- Removed class androidx.compose.foundation.text.AndroidCursorHandle_androidKt
-RemovedClass: androidx.compose.foundation.text.ContextMenu_androidKt:
- Removed class androidx.compose.foundation.text.ContextMenu_androidKt
-RemovedClass: androidx.compose.foundation.text.CoreTextFieldKt:
- Removed class androidx.compose.foundation.text.CoreTextFieldKt
-RemovedClass: androidx.compose.foundation.text.CoreTextKt:
- Removed class androidx.compose.foundation.text.CoreTextKt
-RemovedClass: androidx.compose.foundation.text.KeyEventHelpers_androidKt:
- Removed class androidx.compose.foundation.text.KeyEventHelpers_androidKt
-RemovedClass: androidx.compose.foundation.text.KeyMappingKt:
- Removed class androidx.compose.foundation.text.KeyMappingKt
-RemovedClass: androidx.compose.foundation.text.KeyMapping_androidKt:
- Removed class androidx.compose.foundation.text.KeyMapping_androidKt
-RemovedClass: androidx.compose.foundation.text.LongPressTextDragObserverKt:
- Removed class androidx.compose.foundation.text.LongPressTextDragObserverKt
-RemovedClass: androidx.compose.foundation.text.MaxLinesHeightModifierKt:
- Removed class androidx.compose.foundation.text.MaxLinesHeightModifierKt
-RemovedClass: androidx.compose.foundation.text.StringHelpersKt:
- Removed class androidx.compose.foundation.text.StringHelpersKt
-RemovedClass: androidx.compose.foundation.text.StringHelpers_androidKt:
- Removed class androidx.compose.foundation.text.StringHelpers_androidKt
-RemovedClass: androidx.compose.foundation.text.StringHelpers_jvmKt:
- Removed class androidx.compose.foundation.text.StringHelpers_jvmKt
-RemovedClass: androidx.compose.foundation.text.TextDelegateKt:
- Removed class androidx.compose.foundation.text.TextDelegateKt
-RemovedClass: androidx.compose.foundation.text.TextFieldCursorKt:
- Removed class androidx.compose.foundation.text.TextFieldCursorKt
-RemovedClass: androidx.compose.foundation.text.TextFieldDelegateKt:
- Removed class androidx.compose.foundation.text.TextFieldDelegateKt
-RemovedClass: androidx.compose.foundation.text.TextFieldGestureModifiersKt:
- Removed class androidx.compose.foundation.text.TextFieldGestureModifiersKt
-RemovedClass: androidx.compose.foundation.text.TextFieldKeyInputKt:
- Removed class androidx.compose.foundation.text.TextFieldKeyInputKt
-RemovedClass: androidx.compose.foundation.text.TextFieldKeyInput_androidKt:
- Removed class androidx.compose.foundation.text.TextFieldKeyInput_androidKt
-RemovedClass: androidx.compose.foundation.text.TextFieldPressGestureFilterKt:
- Removed class androidx.compose.foundation.text.TextFieldPressGestureFilterKt
-RemovedClass: androidx.compose.foundation.text.TextFieldScrollKt:
- Removed class androidx.compose.foundation.text.TextFieldScrollKt
-RemovedClass: androidx.compose.foundation.text.TextFieldSizeKt:
- Removed class androidx.compose.foundation.text.TextFieldSizeKt
-RemovedClass: androidx.compose.foundation.text.TextLayoutHelperKt:
- Removed class androidx.compose.foundation.text.TextLayoutHelperKt
-RemovedClass: androidx.compose.foundation.text.TextLayoutResultProxyKt:
- Removed class androidx.compose.foundation.text.TextLayoutResultProxyKt
-RemovedClass: androidx.compose.foundation.text.TextPointerIcon_androidKt:
- Removed class androidx.compose.foundation.text.TextPointerIcon_androidKt
-RemovedClass: androidx.compose.foundation.text.TouchMode_androidKt:
- Removed class androidx.compose.foundation.text.TouchMode_androidKt
-RemovedClass: androidx.compose.foundation.text.UndoManagerKt:
- Removed class androidx.compose.foundation.text.UndoManagerKt
-RemovedClass: androidx.compose.foundation.text.UndoManager_jvmKt:
- Removed class androidx.compose.foundation.text.UndoManager_jvmKt
-RemovedClass: androidx.compose.foundation.text.ValidatingOffsetMappingKt:
- Removed class androidx.compose.foundation.text.ValidatingOffsetMappingKt
-RemovedClass: androidx.compose.foundation.text.selection.AndroidSelectionHandles_androidKt:
- Removed class androidx.compose.foundation.text.selection.AndroidSelectionHandles_androidKt
-RemovedClass: androidx.compose.foundation.text.selection.MultiWidgetSelectionDelegateKt:
- Removed class androidx.compose.foundation.text.selection.MultiWidgetSelectionDelegateKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionAdjustmentKt:
- Removed class androidx.compose.foundation.text.selection.SelectionAdjustmentKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionHandlesKt:
- Removed class androidx.compose.foundation.text.selection.SelectionHandlesKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionMagnifierKt:
- Removed class androidx.compose.foundation.text.selection.SelectionMagnifierKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionManagerKt:
- Removed class androidx.compose.foundation.text.selection.SelectionManagerKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionManager_androidKt:
- Removed class androidx.compose.foundation.text.selection.SelectionManager_androidKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionRegistrarKt:
- Removed class androidx.compose.foundation.text.selection.SelectionRegistrarKt
-RemovedClass: androidx.compose.foundation.text.selection.SimpleLayoutKt:
- Removed class androidx.compose.foundation.text.selection.SimpleLayoutKt
-RemovedClass: androidx.compose.foundation.text.selection.TextFieldSelectionDelegateKt:
- Removed class androidx.compose.foundation.text.selection.TextFieldSelectionDelegateKt
-RemovedClass: androidx.compose.foundation.text.selection.TextFieldSelectionManagerKt:
- Removed class androidx.compose.foundation.text.selection.TextFieldSelectionManagerKt
-RemovedClass: androidx.compose.foundation.text.selection.TextFieldSelectionManager_androidKt:
- Removed class androidx.compose.foundation.text.selection.TextFieldSelectionManager_androidKt
-RemovedClass: androidx.compose.foundation.text.selection.TextSelectionDelegateKt:
- Removed class androidx.compose.foundation.text.selection.TextSelectionDelegateKt
-RemovedClass: androidx.compose.foundation.text.selection.TextSelectionMouseDetectorKt:
- Removed class androidx.compose.foundation.text.selection.TextSelectionMouseDetectorKt
-
-
-RemovedMethod: androidx.compose.foundation.gestures.TapGestureDetectorKt#awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, boolean, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>):
- Removed method androidx.compose.foundation.gestures.TapGestureDetectorKt.awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope,boolean,kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>)
-RemovedMethod: androidx.compose.foundation.gestures.TapGestureDetectorKt#waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>):
- Removed method androidx.compose.foundation.gestures.TapGestureDetectorKt.waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope,kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>)
-
-
-RemovedPackage: androidx.compose.foundation.gestures.snapping:
- Removed package androidx.compose.foundation.gestures.snapping
-RemovedPackage: androidx.compose.foundation.internal:
- Removed package androidx.compose.foundation.internal
-RemovedPackage: androidx.compose.foundation.lazy.layout:
- Removed package androidx.compose.foundation.lazy.layout
-RemovedPackage: androidx.compose.foundation.lazy.staggeredgrid:
- Removed package androidx.compose.foundation.lazy.staggeredgrid
-RemovedPackage: androidx.compose.foundation.relocation:
- Removed package androidx.compose.foundation.relocation
diff --git a/compose/foundation/foundation/api/public_plus_experimental_1.4.0-beta02.txt b/compose/foundation/foundation/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..9918bcc
--- /dev/null
+++ b/compose/foundation/foundation/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,1271 @@
+// Signature format: 4.0
+package androidx.compose.foundation {
+
+ public final class BackgroundKt {
+ method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Brush brush, optional androidx.compose.ui.graphics.Shape shape, optional float alpha);
+ }
+
+ public final class BasicMarqueeKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.foundation.MarqueeSpacing MarqueeSpacing(float spacing);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier basicMarquee(androidx.compose.ui.Modifier, optional int iterations, optional int animationMode, optional int delayMillis, optional int initialDelayMillis, optional androidx.compose.foundation.MarqueeSpacing spacing, optional float velocity);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static int getDefaultMarqueeDelayMillis();
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static int getDefaultMarqueeIterations();
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.foundation.MarqueeSpacing getDefaultMarqueeSpacing();
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static float getDefaultMarqueeVelocity();
+ property @androidx.compose.foundation.ExperimentalFoundationApi public static final int DefaultMarqueeDelayMillis;
+ property @androidx.compose.foundation.ExperimentalFoundationApi public static final int DefaultMarqueeIterations;
+ property @androidx.compose.foundation.ExperimentalFoundationApi public static final androidx.compose.foundation.MarqueeSpacing DefaultMarqueeSpacing;
+ property @androidx.compose.foundation.ExperimentalFoundationApi public static final float DefaultMarqueeVelocity;
+ }
+
+ public final class BorderKt {
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, androidx.compose.foundation.BorderStroke border, optional androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, long color, optional androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+ }
+
+ @androidx.compose.runtime.Immutable public final class BorderStroke {
+ ctor public BorderStroke(float width, androidx.compose.ui.graphics.Brush brush);
+ method public androidx.compose.foundation.BorderStroke copy(optional float width, optional androidx.compose.ui.graphics.Brush brush);
+ method public androidx.compose.ui.graphics.Brush getBrush();
+ method public float getWidth();
+ property public final androidx.compose.ui.graphics.Brush brush;
+ property public final float width;
+ }
+
+ public final class BorderStrokeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.BorderStroke BorderStroke(float width, long color);
+ }
+
+ public final class CanvasKt {
+ method @androidx.compose.runtime.Composable public static void Canvas(androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDraw);
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void Canvas(androidx.compose.ui.Modifier modifier, String contentDescription, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDraw);
+ }
+
+ public final class CheckScrollableContainerConstraintsKt {
+ method public static void checkScrollableContainerConstraints(long constraints, androidx.compose.foundation.gestures.Orientation orientation);
+ }
+
+ public final class ClickableKt {
+ method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier combinedClickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, optional String? onLongClickLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onLongClick, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onDoubleClick, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier combinedClickable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, optional String? onLongClickLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onLongClick, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onDoubleClick, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ }
+
+ public final class ClipScrollableContainerKt {
+ method public static androidx.compose.ui.Modifier clipScrollableContainer(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.Orientation orientation);
+ }
+
+ public final class DarkThemeKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static boolean isSystemInDarkTheme();
+ }
+
+ public final class ExcludeFromSystemGesture_androidKt {
+ method @Deprecated public static androidx.compose.ui.Modifier excludeFromSystemGesture(androidx.compose.ui.Modifier);
+ method @Deprecated public static androidx.compose.ui.Modifier excludeFromSystemGesture(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,androidx.compose.ui.geometry.Rect> exclusion);
+ }
+
+ @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalFoundationApi {
+ }
+
+ public final class FocusableKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier focusGroup(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier focusable(androidx.compose.ui.Modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource);
+ }
+
+ public final class FocusedBoundsKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier onFocusedBoundsChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,kotlin.Unit> onPositioned);
+ }
+
+ public final class HoverableKt {
+ method public static androidx.compose.ui.Modifier hoverable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional boolean enabled);
+ }
+
+ public final class ImageKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int filterQuality);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ }
+
+ @androidx.compose.runtime.Stable public interface Indication {
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.IndicationInstance rememberUpdatedInstance(androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ }
+
+ public interface IndicationInstance {
+ method public void drawIndication(androidx.compose.ui.graphics.drawscope.ContentDrawScope);
+ }
+
+ public final class IndicationKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.Indication> getLocalIndication();
+ method public static androidx.compose.ui.Modifier indication(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.InteractionSource interactionSource, androidx.compose.foundation.Indication? indication);
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.Indication> LocalIndication;
+ }
+
+ @kotlin.RequiresOptIn(message="This API is internal to library.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY_SETTER}) public @interface InternalFoundationApi {
+ }
+
+ public final class MagnifierKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier magnifier(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Density,androidx.compose.ui.geometry.Offset> sourceCenter, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Density,androidx.compose.ui.geometry.Offset> magnifierCenter, optional float zoom, optional androidx.compose.foundation.MagnifierStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.DpSize,kotlin.Unit>? onSizeChanged);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public final class MagnifierStyle {
+ ctor @androidx.compose.foundation.ExperimentalFoundationApi public MagnifierStyle(optional long size, optional float cornerRadius, optional float elevation, optional boolean clippingEnabled, optional boolean fishEyeEnabled);
+ method public boolean isSupported();
+ property public final boolean isSupported;
+ field public static final androidx.compose.foundation.MagnifierStyle.Companion Companion;
+ }
+
+ public static final class MagnifierStyle.Companion {
+ method public androidx.compose.foundation.MagnifierStyle getDefault();
+ method public androidx.compose.foundation.MagnifierStyle getTextDefault();
+ property public final androidx.compose.foundation.MagnifierStyle Default;
+ property public final androidx.compose.foundation.MagnifierStyle TextDefault;
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @kotlin.jvm.JvmInline public final value class MarqueeAnimationMode {
+ field public static final androidx.compose.foundation.MarqueeAnimationMode.Companion Companion;
+ }
+
+ public static final class MarqueeAnimationMode.Companion {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public int getImmediately();
+ method @androidx.compose.foundation.ExperimentalFoundationApi public int getWhileFocused();
+ property @androidx.compose.foundation.ExperimentalFoundationApi public final int Immediately;
+ property @androidx.compose.foundation.ExperimentalFoundationApi public final int WhileFocused;
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public fun interface MarqueeSpacing {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public int calculateSpacing(androidx.compose.ui.unit.Density, int contentWidth, int containerWidth);
+ field public static final androidx.compose.foundation.MarqueeSpacing.Companion Companion;
+ }
+
+ public static final class MarqueeSpacing.Companion {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public androidx.compose.foundation.MarqueeSpacing fractionOfContainer(float fraction);
+ }
+
+ public enum MutatePriority {
+ method public static androidx.compose.foundation.MutatePriority valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.foundation.MutatePriority[] values();
+ enum_constant public static final androidx.compose.foundation.MutatePriority Default;
+ enum_constant public static final androidx.compose.foundation.MutatePriority PreventUserInput;
+ enum_constant public static final androidx.compose.foundation.MutatePriority UserInput;
+ }
+
+ @androidx.compose.runtime.Stable public final class MutatorMutex {
+ ctor public MutatorMutex();
+ method public suspend <R> Object? mutate(optional androidx.compose.foundation.MutatePriority priority, kotlin.jvm.functions.Function1<? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ method public suspend <T, R> Object? mutateWith(T? receiver, optional androidx.compose.foundation.MutatePriority priority, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public final class OverscrollConfiguration {
+ ctor public OverscrollConfiguration(optional long glowColor, optional androidx.compose.foundation.layout.PaddingValues drawPadding);
+ method public androidx.compose.foundation.layout.PaddingValues getDrawPadding();
+ method public long getGlowColor();
+ property public final androidx.compose.foundation.layout.PaddingValues drawPadding;
+ property public final long glowColor;
+ }
+
+ public final class OverscrollConfigurationKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.OverscrollConfiguration> getLocalOverscrollConfiguration();
+ property @androidx.compose.foundation.ExperimentalFoundationApi public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.OverscrollConfiguration> LocalOverscrollConfiguration;
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public interface OverscrollEffect {
+ method public suspend Object? applyToFling(long velocity, kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Velocity,? super kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>,?> performFling, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public long applyToScroll(long delta, int source, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,androidx.compose.ui.geometry.Offset> performScroll);
+ method public androidx.compose.ui.Modifier getEffectModifier();
+ method public boolean isInProgress();
+ property public abstract androidx.compose.ui.Modifier effectModifier;
+ property public abstract boolean isInProgress;
+ }
+
+ public final class OverscrollKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier overscroll(androidx.compose.ui.Modifier, androidx.compose.foundation.OverscrollEffect overscrollEffect);
+ }
+
+ public final class ProgressSemanticsKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier, float value, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier);
+ }
+
+ public final class ScrollKt {
+ method public static androidx.compose.ui.Modifier horizontalScroll(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState state, optional boolean enabled, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional boolean reverseScrolling);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.ScrollState rememberScrollState(optional int initial);
+ method public static androidx.compose.ui.Modifier verticalScroll(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState state, optional boolean enabled, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional boolean reverseScrolling);
+ }
+
+ @androidx.compose.runtime.Stable public final class ScrollState implements androidx.compose.foundation.gestures.ScrollableState {
+ ctor public ScrollState(int initial);
+ method public suspend Object? animateScrollTo(int value, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public float dispatchRawDelta(float delta);
+ method public androidx.compose.foundation.interaction.InteractionSource getInteractionSource();
+ method public int getMaxValue();
+ method public int getValue();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? scrollTo(int value, kotlin.coroutines.Continuation<? super java.lang.Float>);
+ property public boolean canScrollBackward;
+ property public boolean canScrollForward;
+ property public final androidx.compose.foundation.interaction.InteractionSource interactionSource;
+ property public boolean isScrollInProgress;
+ property public final int maxValue;
+ property public final int value;
+ field public static final androidx.compose.foundation.ScrollState.Companion Companion;
+ }
+
+ public static final class ScrollState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.ScrollState,?> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.ScrollState,?> Saver;
+ }
+
+ public final class SystemGestureExclusionKt {
+ method public static androidx.compose.ui.Modifier systemGestureExclusion(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier systemGestureExclusion(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,androidx.compose.ui.geometry.Rect> exclusion);
+ }
+
+}
+
+package androidx.compose.foundation.gestures {
+
+ public final class DragGestureDetectorKt {
+ method public static suspend Object? awaitDragOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitHorizontalDragOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitHorizontalTouchSlopOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onTouchSlopReached, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitLongPressOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitTouchSlopOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onTouchSlopReached, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitVerticalDragOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitVerticalTouchSlopOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onTouchSlopReached, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? detectDragGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? detectDragGesturesAfterLongPress(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? detectHorizontalDragGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onHorizontalDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? detectVerticalDragGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onVerticalDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? drag(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.pointer.PointerInputChange,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ method public static suspend Object? horizontalDrag(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.pointer.PointerInputChange,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ method public static suspend Object? verticalDrag(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.pointer.PointerInputChange,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ }
+
+ public interface DragScope {
+ method public void dragBy(float pixels);
+ }
+
+ public final class DraggableKt {
+ method public static androidx.compose.foundation.gestures.DraggableState DraggableState(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDelta);
+ method public static androidx.compose.ui.Modifier draggable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.DraggableState state, androidx.compose.foundation.gestures.Orientation orientation, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional boolean startDragImmediately, optional kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.ui.geometry.Offset,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onDragStarted, optional kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super java.lang.Float,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onDragStopped, optional boolean reverseDirection);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.DraggableState rememberDraggableState(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDelta);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface DraggableState {
+ method public void dispatchRawDelta(float delta);
+ method public suspend Object? drag(optional androidx.compose.foundation.MutatePriority dragPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.DragScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ @androidx.compose.runtime.Stable public interface FlingBehavior {
+ method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.coroutines.Continuation<? super java.lang.Float>);
+ }
+
+ public final class ForEachGestureKt {
+ method public static suspend Object? awaitEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @Deprecated public static suspend Object? forEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class GestureCancellationException extends java.util.concurrent.CancellationException {
+ ctor public GestureCancellationException(optional String? message);
+ }
+
+ public enum Orientation {
+ method public static androidx.compose.foundation.gestures.Orientation valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.foundation.gestures.Orientation[] values();
+ enum_constant public static final androidx.compose.foundation.gestures.Orientation Horizontal;
+ enum_constant public static final androidx.compose.foundation.gestures.Orientation Vertical;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PressGestureScope extends androidx.compose.ui.unit.Density {
+ method public suspend Object? awaitRelease(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? tryAwaitRelease(kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ }
+
+ public final class ScrollExtensionsKt {
+ method public static suspend Object? animateScrollBy(androidx.compose.foundation.gestures.ScrollableState, float value, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super java.lang.Float>);
+ method public static suspend Object? scrollBy(androidx.compose.foundation.gestures.ScrollableState, float value, kotlin.coroutines.Continuation<? super java.lang.Float>);
+ method public static suspend Object? stopScroll(androidx.compose.foundation.gestures.ScrollableState, optional androidx.compose.foundation.MutatePriority scrollPriority, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public interface ScrollScope {
+ method public float scrollBy(float pixels);
+ }
+
+ public final class ScrollableDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.FlingBehavior flingBehavior();
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public androidx.compose.foundation.OverscrollEffect overscrollEffect();
+ method public boolean reverseDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.foundation.gestures.Orientation orientation, boolean reverseScrolling);
+ field public static final androidx.compose.foundation.gestures.ScrollableDefaults INSTANCE;
+ }
+
+ public final class ScrollableKt {
+ method public static androidx.compose.ui.Modifier scrollable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.ScrollableState state, androidx.compose.foundation.gestures.Orientation orientation, optional boolean enabled, optional boolean reverseDirection, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier scrollable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.ScrollableState state, androidx.compose.foundation.gestures.Orientation orientation, androidx.compose.foundation.OverscrollEffect? overscrollEffect, optional boolean enabled, optional boolean reverseDirection, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ScrollableState {
+ method public float dispatchRawDelta(float delta);
+ method public default boolean getCanScrollBackward();
+ method public default boolean getCanScrollForward();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(optional androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public default boolean canScrollBackward;
+ property public default boolean canScrollForward;
+ property public abstract boolean isScrollInProgress;
+ }
+
+ public final class ScrollableStateKt {
+ method public static androidx.compose.foundation.gestures.ScrollableState ScrollableState(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.ScrollableState rememberScrollableState(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
+ }
+
+ public final class TapGestureDetectorKt {
+ method public static suspend Object? awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed);
+ method public static suspend Object? detectTapGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onDoubleTap, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onLongPress, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.gestures.PressGestureScope,? super androidx.compose.ui.geometry.Offset,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onPress, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onTap, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope);
+ }
+
+ public final class TransformGestureDetectorKt {
+ method public static long calculateCentroid(androidx.compose.ui.input.pointer.PointerEvent, optional boolean useCurrent);
+ method public static float calculateCentroidSize(androidx.compose.ui.input.pointer.PointerEvent, optional boolean useCurrent);
+ method public static long calculatePan(androidx.compose.ui.input.pointer.PointerEvent);
+ method public static float calculateRotation(androidx.compose.ui.input.pointer.PointerEvent);
+ method public static float calculateZoom(androidx.compose.ui.input.pointer.PointerEvent);
+ method public static suspend Object? detectTransformGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional boolean panZoomLock, kotlin.jvm.functions.Function4<? super androidx.compose.ui.geometry.Offset,? super androidx.compose.ui.geometry.Offset,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> onGesture, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TransformScope {
+ method public void transformBy(optional float zoomChange, optional long panChange, optional float rotationChange);
+ }
+
+ public final class TransformableKt {
+ method public static androidx.compose.ui.Modifier transformable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.TransformableState state, optional boolean lockRotationOnZoomPan, optional boolean enabled);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TransformableState {
+ method public boolean isTransformInProgress();
+ method public suspend Object? transform(optional androidx.compose.foundation.MutatePriority transformPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.TransformScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public abstract boolean isTransformInProgress;
+ }
+
+ public final class TransformableStateKt {
+ method public static androidx.compose.foundation.gestures.TransformableState TransformableState(kotlin.jvm.functions.Function3<? super java.lang.Float,? super androidx.compose.ui.geometry.Offset,? super java.lang.Float,kotlin.Unit> onTransformation);
+ method public static suspend Object? animatePanBy(androidx.compose.foundation.gestures.TransformableState, long offset, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateRotateBy(androidx.compose.foundation.gestures.TransformableState, float degrees, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateZoomBy(androidx.compose.foundation.gestures.TransformableState, float zoomFactor, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? panBy(androidx.compose.foundation.gestures.TransformableState, long offset, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.TransformableState rememberTransformableState(kotlin.jvm.functions.Function3<? super java.lang.Float,? super androidx.compose.ui.geometry.Offset,? super java.lang.Float,kotlin.Unit> onTransformation);
+ method public static suspend Object? rotateBy(androidx.compose.foundation.gestures.TransformableState, float degrees, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? stopTransformation(androidx.compose.foundation.gestures.TransformableState, optional androidx.compose.foundation.MutatePriority terminationPriority, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? zoomBy(androidx.compose.foundation.gestures.TransformableState, float zoomFactor, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+}
+
+package androidx.compose.foundation.gestures.snapping {
+
+ public final class LazyListSnapLayoutInfoProviderKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider SnapLayoutInfoProvider(androidx.compose.foundation.lazy.LazyListState lazyListState, optional kotlin.jvm.functions.Function3<? super androidx.compose.ui.unit.Density,? super java.lang.Float,? super java.lang.Float,java.lang.Float> positionInLayout);
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.FlingBehavior rememberSnapFlingBehavior(androidx.compose.foundation.lazy.LazyListState lazyListState);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public final class SnapFlingBehavior implements androidx.compose.foundation.gestures.FlingBehavior {
+ ctor public SnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider, androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec, androidx.compose.ui.unit.Density density, optional float shortSnapVelocityThreshold);
+ method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.coroutines.Continuation<? super java.lang.Float>);
+ method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onSettlingDistanceUpdated, kotlin.coroutines.Continuation<? super java.lang.Float>);
+ }
+
+ public final class SnapFlingBehaviorKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.snapping.SnapFlingBehavior rememberSnapFlingBehavior(androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider snapLayoutInfoProvider);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public interface SnapLayoutInfoProvider {
+ method public float calculateApproachOffset(androidx.compose.ui.unit.Density, float initialVelocity);
+ method public float calculateSnapStepSize(androidx.compose.ui.unit.Density);
+ method public kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> calculateSnappingOffsetBounds(androidx.compose.ui.unit.Density);
+ }
+
+}
+
+package androidx.compose.foundation.interaction {
+
+ public interface DragInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class DragInteraction.Cancel implements androidx.compose.foundation.interaction.DragInteraction {
+ ctor public DragInteraction.Cancel(androidx.compose.foundation.interaction.DragInteraction.Start start);
+ method public androidx.compose.foundation.interaction.DragInteraction.Start getStart();
+ property public final androidx.compose.foundation.interaction.DragInteraction.Start start;
+ }
+
+ public static final class DragInteraction.Start implements androidx.compose.foundation.interaction.DragInteraction {
+ ctor public DragInteraction.Start();
+ }
+
+ public static final class DragInteraction.Stop implements androidx.compose.foundation.interaction.DragInteraction {
+ ctor public DragInteraction.Stop(androidx.compose.foundation.interaction.DragInteraction.Start start);
+ method public androidx.compose.foundation.interaction.DragInteraction.Start getStart();
+ property public final androidx.compose.foundation.interaction.DragInteraction.Start start;
+ }
+
+ public final class DragInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsDraggedAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+ public interface FocusInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class FocusInteraction.Focus implements androidx.compose.foundation.interaction.FocusInteraction {
+ ctor public FocusInteraction.Focus();
+ }
+
+ public static final class FocusInteraction.Unfocus implements androidx.compose.foundation.interaction.FocusInteraction {
+ ctor public FocusInteraction.Unfocus(androidx.compose.foundation.interaction.FocusInteraction.Focus focus);
+ method public androidx.compose.foundation.interaction.FocusInteraction.Focus getFocus();
+ property public final androidx.compose.foundation.interaction.FocusInteraction.Focus focus;
+ }
+
+ public final class FocusInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsFocusedAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+ public interface HoverInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class HoverInteraction.Enter implements androidx.compose.foundation.interaction.HoverInteraction {
+ ctor public HoverInteraction.Enter();
+ }
+
+ public static final class HoverInteraction.Exit implements androidx.compose.foundation.interaction.HoverInteraction {
+ ctor public HoverInteraction.Exit(androidx.compose.foundation.interaction.HoverInteraction.Enter enter);
+ method public androidx.compose.foundation.interaction.HoverInteraction.Enter getEnter();
+ property public final androidx.compose.foundation.interaction.HoverInteraction.Enter enter;
+ }
+
+ public final class HoverInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsHoveredAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+ public interface Interaction {
+ }
+
+ @androidx.compose.runtime.Stable public interface InteractionSource {
+ method public kotlinx.coroutines.flow.Flow<androidx.compose.foundation.interaction.Interaction> getInteractions();
+ property public abstract kotlinx.coroutines.flow.Flow<androidx.compose.foundation.interaction.Interaction> interactions;
+ }
+
+ public final class InteractionSourceKt {
+ method public static androidx.compose.foundation.interaction.MutableInteractionSource MutableInteractionSource();
+ }
+
+ @androidx.compose.runtime.Stable public interface MutableInteractionSource extends androidx.compose.foundation.interaction.InteractionSource {
+ method public suspend Object? emit(androidx.compose.foundation.interaction.Interaction interaction, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public boolean tryEmit(androidx.compose.foundation.interaction.Interaction interaction);
+ }
+
+ public interface PressInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class PressInteraction.Cancel implements androidx.compose.foundation.interaction.PressInteraction {
+ ctor public PressInteraction.Cancel(androidx.compose.foundation.interaction.PressInteraction.Press press);
+ method public androidx.compose.foundation.interaction.PressInteraction.Press getPress();
+ property public final androidx.compose.foundation.interaction.PressInteraction.Press press;
+ }
+
+ public static final class PressInteraction.Press implements androidx.compose.foundation.interaction.PressInteraction {
+ ctor public PressInteraction.Press(long pressPosition);
+ method public long getPressPosition();
+ property public final long pressPosition;
+ }
+
+ public static final class PressInteraction.Release implements androidx.compose.foundation.interaction.PressInteraction {
+ ctor public PressInteraction.Release(androidx.compose.foundation.interaction.PressInteraction.Press press);
+ method public androidx.compose.foundation.interaction.PressInteraction.Press getPress();
+ property public final androidx.compose.foundation.interaction.PressInteraction.Press press;
+ }
+
+ public final class PressInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsPressedAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+}
+
+package androidx.compose.foundation.lazy {
+
+ public final class LazyDslKt {
+ method @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+ }
+
+ @androidx.compose.foundation.lazy.LazyScopeMarker @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyItemScope {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public androidx.compose.ui.Modifier animateItemPlacement(androidx.compose.ui.Modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec);
+ method public androidx.compose.ui.Modifier fillParentMaxHeight(androidx.compose.ui.Modifier, optional float fraction);
+ method public androidx.compose.ui.Modifier fillParentMaxSize(androidx.compose.ui.Modifier, optional float fraction);
+ method public androidx.compose.ui.Modifier fillParentMaxWidth(androidx.compose.ui.Modifier, optional float fraction);
+ }
+
+ public interface LazyListItemInfo {
+ method public int getIndex();
+ method public Object getKey();
+ method public int getOffset();
+ method public int getSize();
+ property public abstract int index;
+ property public abstract Object key;
+ property public abstract int offset;
+ property public abstract int size;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyListLayoutInfo {
+ method public default int getAfterContentPadding();
+ method public default int getBeforeContentPadding();
+ method public default int getMainAxisItemSpacing();
+ method public default androidx.compose.foundation.gestures.Orientation getOrientation();
+ method public default boolean getReverseLayout();
+ method public int getTotalItemsCount();
+ method public int getViewportEndOffset();
+ method public default long getViewportSize();
+ method public int getViewportStartOffset();
+ method public java.util.List<androidx.compose.foundation.lazy.LazyListItemInfo> getVisibleItemsInfo();
+ property public default int afterContentPadding;
+ property public default int beforeContentPadding;
+ property public default int mainAxisItemSpacing;
+ property public default androidx.compose.foundation.gestures.Orientation orientation;
+ property public default boolean reverseLayout;
+ property public abstract int totalItemsCount;
+ property public abstract int viewportEndOffset;
+ property public default long viewportSize;
+ property public abstract int viewportStartOffset;
+ property public abstract java.util.List<androidx.compose.foundation.lazy.LazyListItemInfo> visibleItemsInfo;
+ }
+
+ @androidx.compose.foundation.lazy.LazyScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyListScope {
+ method public default void item(optional Object? key, optional Object? contentType, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
+ method @Deprecated public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,? extends kotlin.Unit> content);
+ method public default void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
+ method @Deprecated public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? extends kotlin.Unit> itemContent);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public void stickyHeader(optional Object? key, optional Object? contentType, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Stable public final class LazyListState implements androidx.compose.foundation.gestures.ScrollableState {
+ ctor public LazyListState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
+ method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public float dispatchRawDelta(float delta);
+ method public int getFirstVisibleItemIndex();
+ method public int getFirstVisibleItemScrollOffset();
+ method public androidx.compose.foundation.interaction.InteractionSource getInteractionSource();
+ method public androidx.compose.foundation.lazy.LazyListLayoutInfo getLayoutInfo();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? scrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public boolean canScrollBackward;
+ property public boolean canScrollForward;
+ property public final int firstVisibleItemIndex;
+ property public final int firstVisibleItemScrollOffset;
+ property public final androidx.compose.foundation.interaction.InteractionSource interactionSource;
+ property public boolean isScrollInProgress;
+ property public final androidx.compose.foundation.lazy.LazyListLayoutInfo layoutInfo;
+ field public static final androidx.compose.foundation.lazy.LazyListState.Companion Companion;
+ }
+
+ public static final class LazyListState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.LazyListState,?> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.LazyListState,?> Saver;
+ }
+
+ public final class LazyListStateKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.lazy.LazyListState rememberLazyListState(optional int initialFirstVisibleItemIndex, optional int initialFirstVisibleItemScrollOffset);
+ }
+
+ @kotlin.DslMarker public @interface LazyScopeMarker {
+ }
+
+}
+
+package androidx.compose.foundation.lazy.grid {
+
+ @androidx.compose.runtime.Stable public interface GridCells {
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ public static final class GridCells.Adaptive implements androidx.compose.foundation.lazy.grid.GridCells {
+ ctor public GridCells.Adaptive(float minSize);
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ public static final class GridCells.Fixed implements androidx.compose.foundation.lazy.grid.GridCells {
+ ctor public GridCells.Fixed(int count);
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class GridItemSpan {
+ method public int getCurrentLineSpan();
+ property @androidx.compose.foundation.ExperimentalFoundationApi public final int currentLineSpan;
+ }
+
+ public final class LazyGridDslKt {
+ method @androidx.compose.runtime.Composable public static void LazyHorizontalGrid(androidx.compose.foundation.lazy.grid.GridCells rows, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.grid.LazyGridState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void LazyVerticalGrid(androidx.compose.foundation.lazy.grid.GridCells columns, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.grid.LazyGridState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridScope,kotlin.Unit> content);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.grid.LazyGridScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.grid.LazyGridScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.grid.LazyGridScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super java.lang.Integer,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.grid.LazyGridScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super java.lang.Integer,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ }
+
+ public sealed interface LazyGridItemInfo {
+ method public int getColumn();
+ method public int getIndex();
+ method public Object getKey();
+ method public long getOffset();
+ method public int getRow();
+ method public long getSize();
+ property public abstract int column;
+ property public abstract int index;
+ property public abstract Object key;
+ property public abstract long offset;
+ property public abstract int row;
+ property public abstract long size;
+ field public static final androidx.compose.foundation.lazy.grid.LazyGridItemInfo.Companion Companion;
+ field public static final int UnknownColumn = -1; // 0xffffffff
+ field public static final int UnknownRow = -1; // 0xffffffff
+ }
+
+ public static final class LazyGridItemInfo.Companion {
+ field public static final int UnknownColumn = -1; // 0xffffffff
+ field public static final int UnknownRow = -1; // 0xffffffff
+ }
+
+ @androidx.compose.foundation.lazy.grid.LazyGridScopeMarker @androidx.compose.runtime.Stable public sealed interface LazyGridItemScope {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public androidx.compose.ui.Modifier animateItemPlacement(androidx.compose.ui.Modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> animationSpec);
+ }
+
+ @androidx.compose.foundation.lazy.grid.LazyGridScopeMarker public sealed interface LazyGridItemSpanScope {
+ method public int getMaxCurrentLineSpan();
+ method public int getMaxLineSpan();
+ property public abstract int maxCurrentLineSpan;
+ property public abstract int maxLineSpan;
+ }
+
+ public sealed interface LazyGridLayoutInfo {
+ method public int getAfterContentPadding();
+ method public int getBeforeContentPadding();
+ method public int getMainAxisItemSpacing();
+ method public androidx.compose.foundation.gestures.Orientation getOrientation();
+ method public boolean getReverseLayout();
+ method public int getTotalItemsCount();
+ method public int getViewportEndOffset();
+ method public long getViewportSize();
+ method public int getViewportStartOffset();
+ method public java.util.List<androidx.compose.foundation.lazy.grid.LazyGridItemInfo> getVisibleItemsInfo();
+ property public abstract int afterContentPadding;
+ property public abstract int beforeContentPadding;
+ property public abstract int mainAxisItemSpacing;
+ property public abstract androidx.compose.foundation.gestures.Orientation orientation;
+ property public abstract boolean reverseLayout;
+ property public abstract int totalItemsCount;
+ property public abstract int viewportEndOffset;
+ property public abstract long viewportSize;
+ property public abstract int viewportStartOffset;
+ property public abstract java.util.List<androidx.compose.foundation.lazy.grid.LazyGridItemInfo> visibleItemsInfo;
+ }
+
+ @androidx.compose.foundation.lazy.grid.LazyGridScopeMarker public sealed interface LazyGridScope {
+ method public void item(optional Object? key, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional Object? contentType, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,kotlin.Unit> content);
+ method public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super java.lang.Integer,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
+ }
+
+ @kotlin.DslMarker public @interface LazyGridScopeMarker {
+ }
+
+ public final class LazyGridSpanKt {
+ method public static long GridItemSpan(int currentLineSpan);
+ }
+
+ @androidx.compose.runtime.Stable public final class LazyGridState implements androidx.compose.foundation.gestures.ScrollableState {
+ ctor public LazyGridState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
+ method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public float dispatchRawDelta(float delta);
+ method public int getFirstVisibleItemIndex();
+ method public int getFirstVisibleItemScrollOffset();
+ method public androidx.compose.foundation.interaction.InteractionSource getInteractionSource();
+ method public androidx.compose.foundation.lazy.grid.LazyGridLayoutInfo getLayoutInfo();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? scrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public boolean canScrollBackward;
+ property public boolean canScrollForward;
+ property public final int firstVisibleItemIndex;
+ property public final int firstVisibleItemScrollOffset;
+ property public final androidx.compose.foundation.interaction.InteractionSource interactionSource;
+ property public boolean isScrollInProgress;
+ property public final androidx.compose.foundation.lazy.grid.LazyGridLayoutInfo layoutInfo;
+ field public static final androidx.compose.foundation.lazy.grid.LazyGridState.Companion Companion;
+ }
+
+ public static final class LazyGridState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.grid.LazyGridState,?> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.grid.LazyGridState,?> Saver;
+ }
+
+ public final class LazyGridStateKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.lazy.grid.LazyGridState rememberLazyGridState(optional int initialFirstVisibleItemIndex, optional int initialFirstVisibleItemScrollOffset);
+ }
+
+}
+
+package androidx.compose.foundation.lazy.layout {
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public sealed interface IntervalList<T> {
+ method public void forEach(optional int fromIndex, optional int toIndex, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.layout.IntervalList.Interval<? extends T>,kotlin.Unit> block);
+ method public operator androidx.compose.foundation.lazy.layout.IntervalList.Interval<T> get(int index);
+ method public int getSize();
+ property public abstract int size;
+ }
+
+ public static final class IntervalList.Interval<T> {
+ method public int getSize();
+ method public int getStartIndex();
+ method public T! getValue();
+ property public final int size;
+ property public final int startIndex;
+ property public final T! value;
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public interface LazyLayoutIntervalContent {
+ method public default kotlin.jvm.functions.Function1<java.lang.Integer,java.lang.Object>? getKey();
+ method public default kotlin.jvm.functions.Function1<java.lang.Integer,java.lang.Object> getType();
+ property public default kotlin.jvm.functions.Function1<java.lang.Integer,java.lang.Object>? key;
+ property public default kotlin.jvm.functions.Function1<java.lang.Integer,java.lang.Object> type;
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public interface LazyLayoutItemProvider {
+ method @androidx.compose.runtime.Composable public void Item(int index);
+ method public default Object? getContentType(int index);
+ method public int getItemCount();
+ method public default Object getKey(int index);
+ method public default java.util.Map<java.lang.Object,java.lang.Integer> getKeyToIndexMap();
+ property public abstract int itemCount;
+ property public default java.util.Map<java.lang.Object,java.lang.Integer> keyToIndexMap;
+ }
+
+ public final class LazyLayoutItemProviderKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.foundation.lazy.layout.LazyLayoutItemProvider DelegatingLazyLayoutItemProvider(androidx.compose.runtime.State<? extends androidx.compose.foundation.lazy.layout.LazyLayoutItemProvider> delegate);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static <T extends androidx.compose.foundation.lazy.layout.LazyLayoutIntervalContent> androidx.compose.foundation.lazy.layout.LazyLayoutItemProvider LazyLayoutItemProvider(androidx.compose.foundation.lazy.layout.IntervalList<? extends T> intervals, kotlin.ranges.IntRange nearestItemsRange, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.layout.IntervalList.Interval<? extends T>,? super java.lang.Integer,kotlin.Unit> itemContent);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static Object getDefaultLazyLayoutKey(int index);
+ }
+
+ public final class LazyLayoutKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void LazyLayout(androidx.compose.foundation.lazy.layout.LazyLayoutItemProvider itemProvider, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.layout.LazyLayoutPrefetchState? prefetchState, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public sealed interface LazyLayoutMeasureScope extends androidx.compose.ui.layout.MeasureScope {
+ method public java.util.List<androidx.compose.ui.layout.Placeable> measure(int index, long constraints);
+ method @androidx.compose.runtime.Stable public default float toDp(long);
+ method @androidx.compose.runtime.Stable public default float toDp(int);
+ method @androidx.compose.runtime.Stable public default float toDp(float);
+ method @androidx.compose.runtime.Stable public default long toDpSize(long);
+ method @androidx.compose.runtime.Stable public default long toSize(long);
+ method @androidx.compose.runtime.Stable public default long toSp(float);
+ method @androidx.compose.runtime.Stable public default long toSp(int);
+ method @androidx.compose.runtime.Stable public default long toSp(float);
+ }
+
+ public final class LazyLayoutPinnableItemKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void LazyLayoutPinnableItem(Object? key, int index, androidx.compose.foundation.lazy.layout.LazyLayoutPinnedItemList pinnedItemList, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public final class LazyLayoutPinnedItemList implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.foundation.lazy.layout.LazyLayoutPinnedItemList.PinnedItem> {
+ ctor public LazyLayoutPinnedItemList();
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public static sealed interface LazyLayoutPinnedItemList.PinnedItem {
+ method public int getIndex();
+ method public Object? getKey();
+ property public abstract int index;
+ property public abstract Object? key;
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public final class LazyLayoutPrefetchState {
+ ctor public LazyLayoutPrefetchState();
+ method public androidx.compose.foundation.lazy.layout.LazyLayoutPrefetchState.PrefetchHandle schedulePrefetch(int index, long constraints);
+ }
+
+ public static sealed interface LazyLayoutPrefetchState.PrefetchHandle {
+ method public void cancel();
+ }
+
+ public final class LazyNearestItemsRangeKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<kotlin.ranges.IntRange> rememberLazyNearestItemsRangeState(kotlin.jvm.functions.Function0<java.lang.Integer> firstVisibleItemIndex, kotlin.jvm.functions.Function0<java.lang.Integer> slidingWindowSize, kotlin.jvm.functions.Function0<java.lang.Integer> extraItemCount);
+ }
+
+ public final class Lazy_androidKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static Object getDefaultLazyLayoutKey(int index);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public final class MutableIntervalList<T> implements androidx.compose.foundation.lazy.layout.IntervalList<T> {
+ ctor public MutableIntervalList();
+ method public void addInterval(int size, T? value);
+ method public void forEach(int fromIndex, int toIndex, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.layout.IntervalList.Interval<? extends T>,kotlin.Unit> block);
+ method public androidx.compose.foundation.lazy.layout.IntervalList.Interval<T> get(int index);
+ method public int getSize();
+ property public int size;
+ }
+
+}
+
+package androidx.compose.foundation.lazy.staggeredgrid {
+
+ public final class LazyStaggeredGridDslKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void LazyHorizontalStaggeredGrid(androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells rows, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridScope,kotlin.Unit> content);
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void LazyVerticalStaggeredGrid(androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells columns, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridScope,kotlin.Unit> content);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static inline <T> void items(androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, optional kotlin.jvm.functions.Function1<? super T,androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan>? span, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridItemScope,? super T,kotlin.Unit> itemContent);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static inline <T> void items(androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, optional kotlin.jvm.functions.Function1<? super T,androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan>? span, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridItemScope,? super T,kotlin.Unit> itemContent);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan>? span, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan>? span, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public sealed interface LazyStaggeredGridItemInfo {
+ method public int getIndex();
+ method public Object getKey();
+ method public int getLane();
+ method public long getOffset();
+ method public long getSize();
+ property public abstract int index;
+ property public abstract Object key;
+ property public abstract int lane;
+ property public abstract long offset;
+ property public abstract long size;
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public sealed interface LazyStaggeredGridItemScope {
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public sealed interface LazyStaggeredGridLayoutInfo {
+ method public int getAfterContentPadding();
+ method public int getBeforeContentPadding();
+ method public int getMainAxisItemSpacing();
+ method public androidx.compose.foundation.gestures.Orientation getOrientation();
+ method public int getTotalItemsCount();
+ method public int getViewportEndOffset();
+ method public long getViewportSize();
+ method public int getViewportStartOffset();
+ method public java.util.List<androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridItemInfo> getVisibleItemsInfo();
+ property public abstract int afterContentPadding;
+ property public abstract int beforeContentPadding;
+ property public abstract int mainAxisItemSpacing;
+ property public abstract androidx.compose.foundation.gestures.Orientation orientation;
+ property public abstract int totalItemsCount;
+ property public abstract int viewportEndOffset;
+ property public abstract long viewportSize;
+ property public abstract int viewportStartOffset;
+ property public abstract java.util.List<androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridItemInfo> visibleItemsInfo;
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public sealed interface LazyStaggeredGridScope {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public void item(optional Object? key, optional Object? contentType, optional androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan? span, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridItemScope,kotlin.Unit> content);
+ method public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?> contentType, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan>? span, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public final class LazyStaggeredGridState implements androidx.compose.foundation.gestures.ScrollableState {
+ ctor public LazyStaggeredGridState(optional int initialFirstVisibleItemIndex, optional int initialFirstVisibleItemOffset);
+ method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public float dispatchRawDelta(float delta);
+ method public int getFirstVisibleItemIndex();
+ method public int getFirstVisibleItemScrollOffset();
+ method public androidx.compose.foundation.interaction.InteractionSource getInteractionSource();
+ method public androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridLayoutInfo getLayoutInfo();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? scrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public boolean canScrollBackward;
+ property public boolean canScrollForward;
+ property public final int firstVisibleItemIndex;
+ property public final int firstVisibleItemScrollOffset;
+ property public final androidx.compose.foundation.interaction.InteractionSource interactionSource;
+ property public boolean isScrollInProgress;
+ property public final androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridLayoutInfo layoutInfo;
+ field public static final androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState.Companion Companion;
+ }
+
+ public static final class LazyStaggeredGridState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState,java.lang.Object> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState,java.lang.Object> Saver;
+ }
+
+ public final class LazyStaggeredGridStateKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState rememberLazyStaggeredGridState(optional int initialFirstVisibleItemIndex, optional int initialFirstVisibleItemScrollOffset);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public interface StaggeredGridCells {
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ public static final class StaggeredGridCells.Adaptive implements androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells {
+ ctor public StaggeredGridCells.Adaptive(float minSize);
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ public static final class StaggeredGridCells.Fixed implements androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells {
+ ctor public StaggeredGridCells.Fixed(int count);
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public final class StaggeredGridItemSpan {
+ field public static final androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan.Companion Companion;
+ }
+
+ public static final class StaggeredGridItemSpan.Companion {
+ method public androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan getFullLine();
+ method public androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan getSingleLane();
+ property public final androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan FullLine;
+ property public final androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan SingleLane;
+ }
+
+}
+
+package androidx.compose.foundation.pager {
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public interface PageSize {
+ method public int calculateMainAxisPageSize(androidx.compose.ui.unit.Density, int availableSpace, int pageSpacing);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public static final class PageSize.Fill implements androidx.compose.foundation.pager.PageSize {
+ method public int calculateMainAxisPageSize(androidx.compose.ui.unit.Density, int availableSpace, int pageSpacing);
+ field public static final androidx.compose.foundation.pager.PageSize.Fill INSTANCE;
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public static final class PageSize.Fixed implements androidx.compose.foundation.pager.PageSize {
+ ctor public PageSize.Fixed(float pageSize);
+ method public int calculateMainAxisPageSize(androidx.compose.ui.unit.Density, int availableSpace, int pageSpacing);
+ method public float getPageSize();
+ property public final float pageSize;
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public final class PagerDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.pager.PagerSnapDistance pagerSnapDistance, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> lowVelocityAnimationSpec, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> highVelocityAnimationSpec, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> snapAnimationSpec);
+ method public androidx.compose.ui.input.nestedscroll.NestedScrollConnection pageNestedScrollConnection(androidx.compose.foundation.gestures.Orientation orientation);
+ field public static final androidx.compose.foundation.pager.PagerDefaults INSTANCE;
+ }
+
+ public final class PagerKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void HorizontalPager(int pageCount, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.pager.PageSize pageSize, optional int beyondBoundsPageCount, optional float pageSpacing, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior, optional boolean userScrollEnabled, optional boolean reverseLayout, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional androidx.compose.ui.input.nestedscroll.NestedScrollConnection pageNestedScrollConnection, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> pageContent);
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void VerticalPager(int pageCount, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.pager.PagerState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.pager.PageSize pageSize, optional int beyondBoundsPageCount, optional float pageSpacing, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.snapping.SnapFlingBehavior flingBehavior, optional boolean userScrollEnabled, optional boolean reverseLayout, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional androidx.compose.ui.input.nestedscroll.NestedScrollConnection pageNestedScrollConnection, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> pageContent);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public interface PagerSnapDistance {
+ method public int calculateTargetPage(int startPage, int suggestedTargetPage, float velocity, int pageSize, int pageSpacing);
+ field public static final androidx.compose.foundation.pager.PagerSnapDistance.Companion Companion;
+ }
+
+ public static final class PagerSnapDistance.Companion {
+ method public androidx.compose.foundation.pager.PagerSnapDistance atMost(int pages);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public final class PagerState implements androidx.compose.foundation.gestures.ScrollableState {
+ ctor public PagerState(optional int initialPage, optional float initialPageOffsetFraction);
+ method public suspend Object? animateScrollToPage(int page, optional float pageOffsetFraction, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public float dispatchRawDelta(float delta);
+ method public int getCurrentPage();
+ method public float getCurrentPageOffsetFraction();
+ method public int getInitialPage();
+ method public float getInitialPageOffsetFraction();
+ method public androidx.compose.foundation.interaction.InteractionSource getInteractionSource();
+ method public int getSettledPage();
+ method public int getTargetPage();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? scrollToPage(int page, optional float pageOffsetFraction, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public boolean canScrollBackward;
+ property public boolean canScrollForward;
+ property public final int currentPage;
+ property public final float currentPageOffsetFraction;
+ property public final int initialPage;
+ property public final float initialPageOffsetFraction;
+ property public final androidx.compose.foundation.interaction.InteractionSource interactionSource;
+ property public boolean isScrollInProgress;
+ property public final int settledPage;
+ property public final int targetPage;
+ field public static final androidx.compose.foundation.pager.PagerState.Companion Companion;
+ }
+
+ public static final class PagerState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.pager.PagerState,?> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.pager.PagerState,?> Saver;
+ }
+
+ public final class PagerStateKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.pager.PagerState rememberPagerState(optional int initialPage, optional float initialPageOffsetFraction);
+ }
+
+}
+
+package androidx.compose.foundation.relocation {
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public sealed interface BringIntoViewRequester {
+ method public suspend Object? bringIntoView(optional androidx.compose.ui.geometry.Rect? rect, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class BringIntoViewRequesterKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.foundation.relocation.BringIntoViewRequester BringIntoViewRequester();
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier bringIntoViewRequester(androidx.compose.ui.Modifier, androidx.compose.foundation.relocation.BringIntoViewRequester bringIntoViewRequester);
+ }
+
+ @androidx.compose.foundation.ExperimentalFoundationApi public interface BringIntoViewResponder {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public suspend Object? bringChildIntoView(kotlin.jvm.functions.Function0<androidx.compose.ui.geometry.Rect> localRect, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public androidx.compose.ui.geometry.Rect calculateRectForParent(androidx.compose.ui.geometry.Rect localRect);
+ }
+
+ public final class BringIntoViewResponderKt {
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier bringIntoViewResponder(androidx.compose.ui.Modifier, androidx.compose.foundation.relocation.BringIntoViewResponder responder);
+ }
+
+}
+
+package androidx.compose.foundation.selection {
+
+ public final class SelectableGroupKt {
+ method public static androidx.compose.ui.Modifier selectableGroup(androidx.compose.ui.Modifier);
+ }
+
+ public final class SelectableKt {
+ method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ }
+
+ public final class ToggleableKt {
+ method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
+ method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
+ method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ }
+
+}
+
+package androidx.compose.foundation.shape {
+
+ public final class AbsoluteCutCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public AbsoluteCutCornerShape(androidx.compose.foundation.shape.CornerSize topLeft, androidx.compose.foundation.shape.CornerSize topRight, androidx.compose.foundation.shape.CornerSize bottomRight, androidx.compose.foundation.shape.CornerSize bottomLeft);
+ method public androidx.compose.foundation.shape.AbsoluteCutCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class AbsoluteCutCornerShapeKt {
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
+ }
+
+ public final class AbsoluteRoundedCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public AbsoluteRoundedCornerShape(androidx.compose.foundation.shape.CornerSize topLeft, androidx.compose.foundation.shape.CornerSize topRight, androidx.compose.foundation.shape.CornerSize bottomRight, androidx.compose.foundation.shape.CornerSize bottomLeft);
+ method public androidx.compose.foundation.shape.AbsoluteRoundedCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class AbsoluteRoundedCornerShapeKt {
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
+ }
+
+ public abstract class CornerBasedShape implements androidx.compose.ui.graphics.Shape {
+ ctor public CornerBasedShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public abstract androidx.compose.foundation.shape.CornerBasedShape copy(optional androidx.compose.foundation.shape.CornerSize topStart, optional androidx.compose.foundation.shape.CornerSize topEnd, optional androidx.compose.foundation.shape.CornerSize bottomEnd, optional androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public final androidx.compose.foundation.shape.CornerBasedShape copy(androidx.compose.foundation.shape.CornerSize all);
+ method public final androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
+ method public abstract androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public final androidx.compose.foundation.shape.CornerSize getBottomEnd();
+ method public final androidx.compose.foundation.shape.CornerSize getBottomStart();
+ method public final androidx.compose.foundation.shape.CornerSize getTopEnd();
+ method public final androidx.compose.foundation.shape.CornerSize getTopStart();
+ property public final androidx.compose.foundation.shape.CornerSize bottomEnd;
+ property public final androidx.compose.foundation.shape.CornerSize bottomStart;
+ property public final androidx.compose.foundation.shape.CornerSize topEnd;
+ property public final androidx.compose.foundation.shape.CornerSize topStart;
+ }
+
+ @androidx.compose.runtime.Immutable public interface CornerSize {
+ method public float toPx(long shapeSize, androidx.compose.ui.unit.Density density);
+ }
+
+ public final class CornerSizeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(int percent);
+ method public static androidx.compose.foundation.shape.CornerSize getZeroCornerSize();
+ property public static final androidx.compose.foundation.shape.CornerSize ZeroCornerSize;
+ }
+
+ public final class CutCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public CutCornerShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.foundation.shape.CutCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class CutCornerShapeKt {
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
+ }
+
+ public final class GenericShape implements androidx.compose.ui.graphics.Shape {
+ ctor public GenericShape(kotlin.jvm.functions.Function3<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,? super androidx.compose.ui.unit.LayoutDirection,kotlin.Unit> builder);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
+ }
+
+ public final class RoundedCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public RoundedCornerShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.foundation.shape.RoundedCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class RoundedCornerShapeKt {
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape getCircleShape();
+ property public static final androidx.compose.foundation.shape.RoundedCornerShape CircleShape;
+ }
+
+}
+
+package androidx.compose.foundation.text {
+
+ public final class BasicTextFieldKt {
+ method @androidx.compose.runtime.Composable public static void BasicTextField(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.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+ method @androidx.compose.runtime.Composable public static void BasicTextField(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.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+ }
+
+ public final class BasicTextKt {
+ method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
+ method @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ }
+
+ public final class ClickableTextKt {
+ method @androidx.compose.runtime.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional boolean softWrap, optional int overflow, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onHover, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional boolean softWrap, optional int overflow, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+ }
+
+ @androidx.compose.runtime.Immutable public final class InlineTextContent {
+ ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+ method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
+ method public androidx.compose.ui.text.Placeholder getPlaceholder();
+ property public final kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> children;
+ property public final androidx.compose.ui.text.Placeholder placeholder;
+ }
+
+ public final class InlineTextContentKt {
+ method public static void appendInlineContent(androidx.compose.ui.text.AnnotatedString.Builder, String id, optional String alternateText);
+ }
+
+ @kotlin.RequiresOptIn(message="Internal/Unstable API for use only between foundation modules sharing " + "the same exact version, subject to change without notice.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY_SETTER}) public @interface InternalFoundationTextApi {
+ }
+
+ public interface KeyboardActionScope {
+ method public void defaultKeyboardAction(int imeAction);
+ }
+
+ @androidx.compose.runtime.Stable public final class KeyboardActions {
+ ctor public KeyboardActions(optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnDone();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnGo();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnNext();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnPrevious();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnSearch();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnSend();
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend;
+ field public static final androidx.compose.foundation.text.KeyboardActions.Companion Companion;
+ }
+
+ public static final class KeyboardActions.Companion {
+ method public androidx.compose.foundation.text.KeyboardActions getDefault();
+ property public final androidx.compose.foundation.text.KeyboardActions Default;
+ }
+
+ public final class KeyboardActionsKt {
+ method public static androidx.compose.foundation.text.KeyboardActions KeyboardActions(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit> onAny);
+ }
+
+ @androidx.compose.runtime.Immutable public final class KeyboardOptions {
+ ctor public KeyboardOptions(optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public androidx.compose.foundation.text.KeyboardOptions copy(optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public boolean getAutoCorrect();
+ method public int getCapitalization();
+ method public int getImeAction();
+ method public int getKeyboardType();
+ property public final boolean autoCorrect;
+ property public final int capitalization;
+ property public final int imeAction;
+ property public final int keyboardType;
+ field public static final androidx.compose.foundation.text.KeyboardOptions.Companion Companion;
+ }
+
+ public static final class KeyboardOptions.Companion {
+ method public androidx.compose.foundation.text.KeyboardOptions getDefault();
+ property public final androidx.compose.foundation.text.KeyboardOptions Default;
+ }
+
+}
+
+package androidx.compose.foundation.text.selection {
+
+ public final class SelectionContainerKt {
+ method @androidx.compose.runtime.Composable public static void DisableSelection(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void SelectionContainer(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextSelectionColors {
+ ctor public TextSelectionColors(long handleColor, long backgroundColor);
+ method public long getBackgroundColor();
+ method public long getHandleColor();
+ property public final long backgroundColor;
+ property public final long handleColor;
+ }
+
+ public final class TextSelectionColorsKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.text.selection.TextSelectionColors> getLocalTextSelectionColors();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.text.selection.TextSelectionColors> LocalTextSelectionColors;
+ }
+
+}
+
diff --git a/compose/foundation/foundation/api/res-1.4.0-beta02.txt b/compose/foundation/foundation/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/foundation/foundation/api/res-1.4.0-beta02.txt
diff --git a/compose/foundation/foundation/api/restricted_1.4.0-beta02.txt b/compose/foundation/foundation/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..b8a93c56
--- /dev/null
+++ b/compose/foundation/foundation/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,837 @@
+// Signature format: 4.0
+package androidx.compose.foundation {
+
+ public final class BackgroundKt {
+ method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Brush brush, optional androidx.compose.ui.graphics.Shape shape, optional float alpha);
+ }
+
+ public final class BorderKt {
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, androidx.compose.foundation.BorderStroke border, optional androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, long color, optional androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+ }
+
+ @androidx.compose.runtime.Immutable public final class BorderStroke {
+ ctor public BorderStroke(float width, androidx.compose.ui.graphics.Brush brush);
+ method public androidx.compose.foundation.BorderStroke copy(optional float width, optional androidx.compose.ui.graphics.Brush brush);
+ method public androidx.compose.ui.graphics.Brush getBrush();
+ method public float getWidth();
+ property public final androidx.compose.ui.graphics.Brush brush;
+ property public final float width;
+ }
+
+ public final class BorderStrokeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.BorderStroke BorderStroke(float width, long color);
+ }
+
+ public final class CanvasKt {
+ method @androidx.compose.runtime.Composable public static void Canvas(androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDraw);
+ }
+
+ public final class CheckScrollableContainerConstraintsKt {
+ method public static void checkScrollableContainerConstraints(long constraints, androidx.compose.foundation.gestures.Orientation orientation);
+ }
+
+ public final class ClickableKt {
+ method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ }
+
+ public final class ClipScrollableContainerKt {
+ method public static androidx.compose.ui.Modifier clipScrollableContainer(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.Orientation orientation);
+ }
+
+ public final class DarkThemeKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static boolean isSystemInDarkTheme();
+ }
+
+ public final class ExcludeFromSystemGesture_androidKt {
+ method @Deprecated public static androidx.compose.ui.Modifier excludeFromSystemGesture(androidx.compose.ui.Modifier);
+ method @Deprecated public static androidx.compose.ui.Modifier excludeFromSystemGesture(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,androidx.compose.ui.geometry.Rect> exclusion);
+ }
+
+ public final class FocusableKt {
+ method public static androidx.compose.ui.Modifier focusable(androidx.compose.ui.Modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource);
+ }
+
+ public final class HoverableKt {
+ method public static androidx.compose.ui.Modifier hoverable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional boolean enabled);
+ }
+
+ public final class ImageKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int filterQuality);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ }
+
+ @androidx.compose.runtime.Stable public interface Indication {
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.IndicationInstance rememberUpdatedInstance(androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ }
+
+ public interface IndicationInstance {
+ method public void drawIndication(androidx.compose.ui.graphics.drawscope.ContentDrawScope);
+ }
+
+ public final class IndicationKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.Indication> getLocalIndication();
+ method public static androidx.compose.ui.Modifier indication(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.InteractionSource interactionSource, androidx.compose.foundation.Indication? indication);
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.Indication> LocalIndication;
+ }
+
+ public enum MutatePriority {
+ method public static androidx.compose.foundation.MutatePriority valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.foundation.MutatePriority[] values();
+ enum_constant public static final androidx.compose.foundation.MutatePriority Default;
+ enum_constant public static final androidx.compose.foundation.MutatePriority PreventUserInput;
+ enum_constant public static final androidx.compose.foundation.MutatePriority UserInput;
+ }
+
+ @androidx.compose.runtime.Stable public final class MutatorMutex {
+ ctor public MutatorMutex();
+ method public suspend <R> Object? mutate(optional androidx.compose.foundation.MutatePriority priority, kotlin.jvm.functions.Function1<? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ method public suspend <T, R> Object? mutateWith(T? receiver, optional androidx.compose.foundation.MutatePriority priority, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public final class ProgressSemanticsKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier, float value, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier);
+ }
+
+ public final class ScrollKt {
+ method public static androidx.compose.ui.Modifier horizontalScroll(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState state, optional boolean enabled, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional boolean reverseScrolling);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.ScrollState rememberScrollState(optional int initial);
+ method public static androidx.compose.ui.Modifier verticalScroll(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState state, optional boolean enabled, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional boolean reverseScrolling);
+ }
+
+ @androidx.compose.runtime.Stable public final class ScrollState implements androidx.compose.foundation.gestures.ScrollableState {
+ ctor public ScrollState(int initial);
+ method public suspend Object? animateScrollTo(int value, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public float dispatchRawDelta(float delta);
+ method public androidx.compose.foundation.interaction.InteractionSource getInteractionSource();
+ method public int getMaxValue();
+ method public int getValue();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? scrollTo(int value, kotlin.coroutines.Continuation<? super java.lang.Float>);
+ property public boolean canScrollBackward;
+ property public boolean canScrollForward;
+ property public final androidx.compose.foundation.interaction.InteractionSource interactionSource;
+ property public boolean isScrollInProgress;
+ property public final int maxValue;
+ property public final int value;
+ field public static final androidx.compose.foundation.ScrollState.Companion Companion;
+ }
+
+ public static final class ScrollState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.ScrollState,?> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.ScrollState,?> Saver;
+ }
+
+ public final class SystemGestureExclusionKt {
+ method public static androidx.compose.ui.Modifier systemGestureExclusion(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier systemGestureExclusion(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,androidx.compose.ui.geometry.Rect> exclusion);
+ }
+
+}
+
+package androidx.compose.foundation.gestures {
+
+ public final class DragGestureDetectorKt {
+ method public static suspend Object? awaitDragOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitHorizontalDragOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitHorizontalTouchSlopOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onTouchSlopReached, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitLongPressOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitTouchSlopOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onTouchSlopReached, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitVerticalDragOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? awaitVerticalTouchSlopOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onTouchSlopReached, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method public static suspend Object? detectDragGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? detectDragGesturesAfterLongPress(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? detectHorizontalDragGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onHorizontalDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? detectVerticalDragGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStart, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragEnd, optional kotlin.jvm.functions.Function0<kotlin.Unit> onDragCancel, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputChange,? super java.lang.Float,kotlin.Unit> onVerticalDrag, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? drag(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.pointer.PointerInputChange,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ method public static suspend Object? horizontalDrag(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.pointer.PointerInputChange,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ method public static suspend Object? verticalDrag(androidx.compose.ui.input.pointer.AwaitPointerEventScope, long pointerId, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.pointer.PointerInputChange,kotlin.Unit> onDrag, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ }
+
+ public interface DragScope {
+ method public void dragBy(float pixels);
+ }
+
+ public final class DraggableKt {
+ method public static androidx.compose.foundation.gestures.DraggableState DraggableState(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDelta);
+ method public static androidx.compose.ui.Modifier draggable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.DraggableState state, androidx.compose.foundation.gestures.Orientation orientation, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional boolean startDragImmediately, optional kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.ui.geometry.Offset,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onDragStarted, optional kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super java.lang.Float,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onDragStopped, optional boolean reverseDirection);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.DraggableState rememberDraggableState(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDelta);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface DraggableState {
+ method public void dispatchRawDelta(float delta);
+ method public suspend Object? drag(optional androidx.compose.foundation.MutatePriority dragPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.DragScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ @androidx.compose.runtime.Stable public interface FlingBehavior {
+ method public suspend Object? performFling(androidx.compose.foundation.gestures.ScrollScope, float initialVelocity, kotlin.coroutines.Continuation<? super java.lang.Float>);
+ }
+
+ public final class ForEachGestureKt {
+ method public static suspend Object? awaitEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @Deprecated public static suspend Object? forEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class GestureCancellationException extends java.util.concurrent.CancellationException {
+ ctor public GestureCancellationException(optional String? message);
+ }
+
+ public enum Orientation {
+ method public static androidx.compose.foundation.gestures.Orientation valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.foundation.gestures.Orientation[] values();
+ enum_constant public static final androidx.compose.foundation.gestures.Orientation Horizontal;
+ enum_constant public static final androidx.compose.foundation.gestures.Orientation Vertical;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PressGestureScope extends androidx.compose.ui.unit.Density {
+ method public suspend Object? awaitRelease(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? tryAwaitRelease(kotlin.coroutines.Continuation<? super java.lang.Boolean>);
+ }
+
+ public final class ScrollExtensionsKt {
+ method public static suspend Object? animateScrollBy(androidx.compose.foundation.gestures.ScrollableState, float value, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super java.lang.Float>);
+ method public static suspend Object? scrollBy(androidx.compose.foundation.gestures.ScrollableState, float value, kotlin.coroutines.Continuation<? super java.lang.Float>);
+ method public static suspend Object? stopScroll(androidx.compose.foundation.gestures.ScrollableState, optional androidx.compose.foundation.MutatePriority scrollPriority, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public interface ScrollScope {
+ method public float scrollBy(float pixels);
+ }
+
+ public final class ScrollableDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.FlingBehavior flingBehavior();
+ method public boolean reverseDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.foundation.gestures.Orientation orientation, boolean reverseScrolling);
+ field public static final androidx.compose.foundation.gestures.ScrollableDefaults INSTANCE;
+ }
+
+ public final class ScrollableKt {
+ method public static androidx.compose.ui.Modifier scrollable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.ScrollableState state, androidx.compose.foundation.gestures.Orientation orientation, optional boolean enabled, optional boolean reverseDirection, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ScrollableState {
+ method public float dispatchRawDelta(float delta);
+ method public default boolean getCanScrollBackward();
+ method public default boolean getCanScrollForward();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(optional androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public default boolean canScrollBackward;
+ property public default boolean canScrollForward;
+ property public abstract boolean isScrollInProgress;
+ }
+
+ public final class ScrollableStateKt {
+ method public static androidx.compose.foundation.gestures.ScrollableState ScrollableState(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.ScrollableState rememberScrollableState(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
+ }
+
+ public final class TapGestureDetectorKt {
+ method public static suspend Object? awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed);
+ method public static suspend Object? detectTapGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onDoubleTap, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onLongPress, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.gestures.PressGestureScope,? super androidx.compose.ui.geometry.Offset,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onPress, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onTap, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
+ method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope);
+ }
+
+ public final class TransformGestureDetectorKt {
+ method public static long calculateCentroid(androidx.compose.ui.input.pointer.PointerEvent, optional boolean useCurrent);
+ method public static float calculateCentroidSize(androidx.compose.ui.input.pointer.PointerEvent, optional boolean useCurrent);
+ method public static long calculatePan(androidx.compose.ui.input.pointer.PointerEvent);
+ method public static float calculateRotation(androidx.compose.ui.input.pointer.PointerEvent);
+ method public static float calculateZoom(androidx.compose.ui.input.pointer.PointerEvent);
+ method public static suspend Object? detectTransformGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional boolean panZoomLock, kotlin.jvm.functions.Function4<? super androidx.compose.ui.geometry.Offset,? super androidx.compose.ui.geometry.Offset,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> onGesture, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TransformScope {
+ method public void transformBy(optional float zoomChange, optional long panChange, optional float rotationChange);
+ }
+
+ public final class TransformableKt {
+ method public static androidx.compose.ui.Modifier transformable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.TransformableState state, optional boolean lockRotationOnZoomPan, optional boolean enabled);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TransformableState {
+ method public boolean isTransformInProgress();
+ method public suspend Object? transform(optional androidx.compose.foundation.MutatePriority transformPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.TransformScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public abstract boolean isTransformInProgress;
+ }
+
+ public final class TransformableStateKt {
+ method public static androidx.compose.foundation.gestures.TransformableState TransformableState(kotlin.jvm.functions.Function3<? super java.lang.Float,? super androidx.compose.ui.geometry.Offset,? super java.lang.Float,kotlin.Unit> onTransformation);
+ method public static suspend Object? animatePanBy(androidx.compose.foundation.gestures.TransformableState, long offset, optional androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateRotateBy(androidx.compose.foundation.gestures.TransformableState, float degrees, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateZoomBy(androidx.compose.foundation.gestures.TransformableState, float zoomFactor, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? panBy(androidx.compose.foundation.gestures.TransformableState, long offset, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.TransformableState rememberTransformableState(kotlin.jvm.functions.Function3<? super java.lang.Float,? super androidx.compose.ui.geometry.Offset,? super java.lang.Float,kotlin.Unit> onTransformation);
+ method public static suspend Object? rotateBy(androidx.compose.foundation.gestures.TransformableState, float degrees, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? stopTransformation(androidx.compose.foundation.gestures.TransformableState, optional androidx.compose.foundation.MutatePriority terminationPriority, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? zoomBy(androidx.compose.foundation.gestures.TransformableState, float zoomFactor, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+}
+
+package androidx.compose.foundation.interaction {
+
+ public interface DragInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class DragInteraction.Cancel implements androidx.compose.foundation.interaction.DragInteraction {
+ ctor public DragInteraction.Cancel(androidx.compose.foundation.interaction.DragInteraction.Start start);
+ method public androidx.compose.foundation.interaction.DragInteraction.Start getStart();
+ property public final androidx.compose.foundation.interaction.DragInteraction.Start start;
+ }
+
+ public static final class DragInteraction.Start implements androidx.compose.foundation.interaction.DragInteraction {
+ ctor public DragInteraction.Start();
+ }
+
+ public static final class DragInteraction.Stop implements androidx.compose.foundation.interaction.DragInteraction {
+ ctor public DragInteraction.Stop(androidx.compose.foundation.interaction.DragInteraction.Start start);
+ method public androidx.compose.foundation.interaction.DragInteraction.Start getStart();
+ property public final androidx.compose.foundation.interaction.DragInteraction.Start start;
+ }
+
+ public final class DragInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsDraggedAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+ public interface FocusInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class FocusInteraction.Focus implements androidx.compose.foundation.interaction.FocusInteraction {
+ ctor public FocusInteraction.Focus();
+ }
+
+ public static final class FocusInteraction.Unfocus implements androidx.compose.foundation.interaction.FocusInteraction {
+ ctor public FocusInteraction.Unfocus(androidx.compose.foundation.interaction.FocusInteraction.Focus focus);
+ method public androidx.compose.foundation.interaction.FocusInteraction.Focus getFocus();
+ property public final androidx.compose.foundation.interaction.FocusInteraction.Focus focus;
+ }
+
+ public final class FocusInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsFocusedAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+ public interface HoverInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class HoverInteraction.Enter implements androidx.compose.foundation.interaction.HoverInteraction {
+ ctor public HoverInteraction.Enter();
+ }
+
+ public static final class HoverInteraction.Exit implements androidx.compose.foundation.interaction.HoverInteraction {
+ ctor public HoverInteraction.Exit(androidx.compose.foundation.interaction.HoverInteraction.Enter enter);
+ method public androidx.compose.foundation.interaction.HoverInteraction.Enter getEnter();
+ property public final androidx.compose.foundation.interaction.HoverInteraction.Enter enter;
+ }
+
+ public final class HoverInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsHoveredAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+ public interface Interaction {
+ }
+
+ @androidx.compose.runtime.Stable public interface InteractionSource {
+ method public kotlinx.coroutines.flow.Flow<androidx.compose.foundation.interaction.Interaction> getInteractions();
+ property public abstract kotlinx.coroutines.flow.Flow<androidx.compose.foundation.interaction.Interaction> interactions;
+ }
+
+ public final class InteractionSourceKt {
+ method public static androidx.compose.foundation.interaction.MutableInteractionSource MutableInteractionSource();
+ }
+
+ @androidx.compose.runtime.Stable public interface MutableInteractionSource extends androidx.compose.foundation.interaction.InteractionSource {
+ method public suspend Object? emit(androidx.compose.foundation.interaction.Interaction interaction, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public boolean tryEmit(androidx.compose.foundation.interaction.Interaction interaction);
+ }
+
+ public interface PressInteraction extends androidx.compose.foundation.interaction.Interaction {
+ }
+
+ public static final class PressInteraction.Cancel implements androidx.compose.foundation.interaction.PressInteraction {
+ ctor public PressInteraction.Cancel(androidx.compose.foundation.interaction.PressInteraction.Press press);
+ method public androidx.compose.foundation.interaction.PressInteraction.Press getPress();
+ property public final androidx.compose.foundation.interaction.PressInteraction.Press press;
+ }
+
+ public static final class PressInteraction.Press implements androidx.compose.foundation.interaction.PressInteraction {
+ ctor public PressInteraction.Press(long pressPosition);
+ method public long getPressPosition();
+ property public final long pressPosition;
+ }
+
+ public static final class PressInteraction.Release implements androidx.compose.foundation.interaction.PressInteraction {
+ ctor public PressInteraction.Release(androidx.compose.foundation.interaction.PressInteraction.Press press);
+ method public androidx.compose.foundation.interaction.PressInteraction.Press getPress();
+ property public final androidx.compose.foundation.interaction.PressInteraction.Press press;
+ }
+
+ public final class PressInteractionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> collectIsPressedAsState(androidx.compose.foundation.interaction.InteractionSource);
+ }
+
+}
+
+package androidx.compose.foundation.lazy {
+
+ public final class LazyDslKt {
+ method @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+ method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+ }
+
+ @androidx.compose.foundation.lazy.LazyScopeMarker @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyItemScope {
+ method public androidx.compose.ui.Modifier fillParentMaxHeight(androidx.compose.ui.Modifier, optional float fraction);
+ method public androidx.compose.ui.Modifier fillParentMaxSize(androidx.compose.ui.Modifier, optional float fraction);
+ method public androidx.compose.ui.Modifier fillParentMaxWidth(androidx.compose.ui.Modifier, optional float fraction);
+ }
+
+ public interface LazyListItemInfo {
+ method public int getIndex();
+ method public Object getKey();
+ method public int getOffset();
+ method public int getSize();
+ property public abstract int index;
+ property public abstract Object key;
+ property public abstract int offset;
+ property public abstract int size;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyListLayoutInfo {
+ method public default int getAfterContentPadding();
+ method public default int getBeforeContentPadding();
+ method public default int getMainAxisItemSpacing();
+ method public default androidx.compose.foundation.gestures.Orientation getOrientation();
+ method public default boolean getReverseLayout();
+ method public int getTotalItemsCount();
+ method public int getViewportEndOffset();
+ method public default long getViewportSize();
+ method public int getViewportStartOffset();
+ method public java.util.List<androidx.compose.foundation.lazy.LazyListItemInfo> getVisibleItemsInfo();
+ property public default int afterContentPadding;
+ property public default int beforeContentPadding;
+ property public default int mainAxisItemSpacing;
+ property public default androidx.compose.foundation.gestures.Orientation orientation;
+ property public default boolean reverseLayout;
+ property public abstract int totalItemsCount;
+ property public abstract int viewportEndOffset;
+ property public default long viewportSize;
+ property public abstract int viewportStartOffset;
+ property public abstract java.util.List<androidx.compose.foundation.lazy.LazyListItemInfo> visibleItemsInfo;
+ }
+
+ @androidx.compose.foundation.lazy.LazyScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface LazyListScope {
+ method public default void item(optional Object? key, optional Object? contentType, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,kotlin.Unit> content);
+ method @Deprecated public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyItemScope,? extends kotlin.Unit> content);
+ method public default void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
+ method @Deprecated public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? extends kotlin.Unit> itemContent);
+ }
+
+ @androidx.compose.runtime.Stable public final class LazyListState implements androidx.compose.foundation.gestures.ScrollableState {
+ ctor public LazyListState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
+ method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public float dispatchRawDelta(float delta);
+ method public int getFirstVisibleItemIndex();
+ method public int getFirstVisibleItemScrollOffset();
+ method public androidx.compose.foundation.interaction.InteractionSource getInteractionSource();
+ method public androidx.compose.foundation.lazy.LazyListLayoutInfo getLayoutInfo();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? scrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public boolean canScrollBackward;
+ property public boolean canScrollForward;
+ property public final int firstVisibleItemIndex;
+ property public final int firstVisibleItemScrollOffset;
+ property public final androidx.compose.foundation.interaction.InteractionSource interactionSource;
+ property public boolean isScrollInProgress;
+ property public final androidx.compose.foundation.lazy.LazyListLayoutInfo layoutInfo;
+ field public static final androidx.compose.foundation.lazy.LazyListState.Companion Companion;
+ }
+
+ public static final class LazyListState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.LazyListState,?> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.LazyListState,?> Saver;
+ }
+
+ public final class LazyListStateKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.lazy.LazyListState rememberLazyListState(optional int initialFirstVisibleItemIndex, optional int initialFirstVisibleItemScrollOffset);
+ }
+
+ @kotlin.DslMarker public @interface LazyScopeMarker {
+ }
+
+}
+
+package androidx.compose.foundation.lazy.grid {
+
+ @androidx.compose.runtime.Stable public interface GridCells {
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ public static final class GridCells.Adaptive implements androidx.compose.foundation.lazy.grid.GridCells {
+ ctor public GridCells.Adaptive(float minSize);
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ public static final class GridCells.Fixed implements androidx.compose.foundation.lazy.grid.GridCells {
+ ctor public GridCells.Fixed(int count);
+ method public java.util.List<java.lang.Integer> calculateCrossAxisCellSizes(androidx.compose.ui.unit.Density, int availableSize, int spacing);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class GridItemSpan {
+ method public int getCurrentLineSpan();
+ }
+
+ public final class LazyGridDslKt {
+ method @androidx.compose.runtime.Composable public static void LazyHorizontalGrid(androidx.compose.foundation.lazy.grid.GridCells rows, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.grid.LazyGridState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void LazyVerticalGrid(androidx.compose.foundation.lazy.grid.GridCells columns, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.grid.LazyGridState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridScope,kotlin.Unit> content);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.grid.LazyGridScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.grid.LazyGridScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.grid.LazyGridScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super java.lang.Integer,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.grid.LazyGridScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super java.lang.Integer,? super T,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+ }
+
+ public sealed interface LazyGridItemInfo {
+ method public int getColumn();
+ method public int getIndex();
+ method public Object getKey();
+ method public long getOffset();
+ method public int getRow();
+ method public long getSize();
+ property public abstract int column;
+ property public abstract int index;
+ property public abstract Object key;
+ property public abstract long offset;
+ property public abstract int row;
+ property public abstract long size;
+ field public static final androidx.compose.foundation.lazy.grid.LazyGridItemInfo.Companion Companion;
+ field public static final int UnknownColumn = -1; // 0xffffffff
+ field public static final int UnknownRow = -1; // 0xffffffff
+ }
+
+ public static final class LazyGridItemInfo.Companion {
+ field public static final int UnknownColumn = -1; // 0xffffffff
+ field public static final int UnknownRow = -1; // 0xffffffff
+ }
+
+ @androidx.compose.foundation.lazy.grid.LazyGridScopeMarker @androidx.compose.runtime.Stable public sealed interface LazyGridItemScope {
+ }
+
+ @androidx.compose.foundation.lazy.grid.LazyGridScopeMarker public sealed interface LazyGridItemSpanScope {
+ method public int getMaxCurrentLineSpan();
+ method public int getMaxLineSpan();
+ property public abstract int maxCurrentLineSpan;
+ property public abstract int maxLineSpan;
+ }
+
+ public sealed interface LazyGridLayoutInfo {
+ method public int getAfterContentPadding();
+ method public int getBeforeContentPadding();
+ method public int getMainAxisItemSpacing();
+ method public androidx.compose.foundation.gestures.Orientation getOrientation();
+ method public boolean getReverseLayout();
+ method public int getTotalItemsCount();
+ method public int getViewportEndOffset();
+ method public long getViewportSize();
+ method public int getViewportStartOffset();
+ method public java.util.List<androidx.compose.foundation.lazy.grid.LazyGridItemInfo> getVisibleItemsInfo();
+ property public abstract int afterContentPadding;
+ property public abstract int beforeContentPadding;
+ property public abstract int mainAxisItemSpacing;
+ property public abstract androidx.compose.foundation.gestures.Orientation orientation;
+ property public abstract boolean reverseLayout;
+ property public abstract int totalItemsCount;
+ property public abstract int viewportEndOffset;
+ property public abstract long viewportSize;
+ property public abstract int viewportStartOffset;
+ property public abstract java.util.List<androidx.compose.foundation.lazy.grid.LazyGridItemInfo> visibleItemsInfo;
+ }
+
+ @androidx.compose.foundation.lazy.grid.LazyGridScopeMarker public sealed interface LazyGridScope {
+ method public void item(optional Object? key, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional Object? contentType, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,kotlin.Unit> content);
+ method public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, optional kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemSpanScope,? super java.lang.Integer,androidx.compose.foundation.lazy.grid.GridItemSpan>? span, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.grid.LazyGridItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
+ }
+
+ @kotlin.DslMarker public @interface LazyGridScopeMarker {
+ }
+
+ public final class LazyGridSpanKt {
+ method public static long GridItemSpan(int currentLineSpan);
+ }
+
+ @androidx.compose.runtime.Stable public final class LazyGridState implements androidx.compose.foundation.gestures.ScrollableState {
+ ctor public LazyGridState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
+ method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public float dispatchRawDelta(float delta);
+ method public int getFirstVisibleItemIndex();
+ method public int getFirstVisibleItemScrollOffset();
+ method public androidx.compose.foundation.interaction.InteractionSource getInteractionSource();
+ method public androidx.compose.foundation.lazy.grid.LazyGridLayoutInfo getLayoutInfo();
+ method public boolean isScrollInProgress();
+ method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? scrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public boolean canScrollBackward;
+ property public boolean canScrollForward;
+ property public final int firstVisibleItemIndex;
+ property public final int firstVisibleItemScrollOffset;
+ property public final androidx.compose.foundation.interaction.InteractionSource interactionSource;
+ property public boolean isScrollInProgress;
+ property public final androidx.compose.foundation.lazy.grid.LazyGridLayoutInfo layoutInfo;
+ field public static final androidx.compose.foundation.lazy.grid.LazyGridState.Companion Companion;
+ }
+
+ public static final class LazyGridState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.grid.LazyGridState,?> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.lazy.grid.LazyGridState,?> Saver;
+ }
+
+ public final class LazyGridStateKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.lazy.grid.LazyGridState rememberLazyGridState(optional int initialFirstVisibleItemIndex, optional int initialFirstVisibleItemScrollOffset);
+ }
+
+}
+
+package androidx.compose.foundation.selection {
+
+ public final class SelectableGroupKt {
+ method public static androidx.compose.ui.Modifier selectableGroup(androidx.compose.ui.Modifier);
+ }
+
+ public final class SelectableKt {
+ method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ }
+
+ public final class ToggleableKt {
+ method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
+ method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
+ method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ }
+
+}
+
+package androidx.compose.foundation.shape {
+
+ public final class AbsoluteCutCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public AbsoluteCutCornerShape(androidx.compose.foundation.shape.CornerSize topLeft, androidx.compose.foundation.shape.CornerSize topRight, androidx.compose.foundation.shape.CornerSize bottomRight, androidx.compose.foundation.shape.CornerSize bottomLeft);
+ method public androidx.compose.foundation.shape.AbsoluteCutCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class AbsoluteCutCornerShapeKt {
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
+ }
+
+ public final class AbsoluteRoundedCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public AbsoluteRoundedCornerShape(androidx.compose.foundation.shape.CornerSize topLeft, androidx.compose.foundation.shape.CornerSize topRight, androidx.compose.foundation.shape.CornerSize bottomRight, androidx.compose.foundation.shape.CornerSize bottomLeft);
+ method public androidx.compose.foundation.shape.AbsoluteRoundedCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class AbsoluteRoundedCornerShapeKt {
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
+ }
+
+ public abstract class CornerBasedShape implements androidx.compose.ui.graphics.Shape {
+ ctor public CornerBasedShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public abstract androidx.compose.foundation.shape.CornerBasedShape copy(optional androidx.compose.foundation.shape.CornerSize topStart, optional androidx.compose.foundation.shape.CornerSize topEnd, optional androidx.compose.foundation.shape.CornerSize bottomEnd, optional androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public final androidx.compose.foundation.shape.CornerBasedShape copy(androidx.compose.foundation.shape.CornerSize all);
+ method public final androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
+ method public abstract androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public final androidx.compose.foundation.shape.CornerSize getBottomEnd();
+ method public final androidx.compose.foundation.shape.CornerSize getBottomStart();
+ method public final androidx.compose.foundation.shape.CornerSize getTopEnd();
+ method public final androidx.compose.foundation.shape.CornerSize getTopStart();
+ property public final androidx.compose.foundation.shape.CornerSize bottomEnd;
+ property public final androidx.compose.foundation.shape.CornerSize bottomStart;
+ property public final androidx.compose.foundation.shape.CornerSize topEnd;
+ property public final androidx.compose.foundation.shape.CornerSize topStart;
+ }
+
+ @androidx.compose.runtime.Immutable public interface CornerSize {
+ method public float toPx(long shapeSize, androidx.compose.ui.unit.Density density);
+ }
+
+ public final class CornerSizeKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(float size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(int percent);
+ method public static androidx.compose.foundation.shape.CornerSize getZeroCornerSize();
+ property public static final androidx.compose.foundation.shape.CornerSize ZeroCornerSize;
+ }
+
+ public final class CutCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public CutCornerShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.foundation.shape.CutCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class CutCornerShapeKt {
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
+ }
+
+ public final class GenericShape implements androidx.compose.ui.graphics.Shape {
+ ctor public GenericShape(kotlin.jvm.functions.Function3<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,? super androidx.compose.ui.unit.LayoutDirection,kotlin.Unit> builder);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
+ }
+
+ public final class RoundedCornerShape extends androidx.compose.foundation.shape.CornerBasedShape {
+ ctor public RoundedCornerShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.foundation.shape.RoundedCornerShape copy(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ public final class RoundedCornerShapeKt {
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(int percent);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape getCircleShape();
+ property public static final androidx.compose.foundation.shape.RoundedCornerShape CircleShape;
+ }
+
+}
+
+package androidx.compose.foundation.text {
+
+ public final class BasicTextFieldKt {
+ method @androidx.compose.runtime.Composable public static void BasicTextField(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.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+ method @androidx.compose.runtime.Composable public static void BasicTextField(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.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+ }
+
+ public final class BasicTextKt {
+ method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
+ method @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ }
+
+ public final class ClickableTextKt {
+ method @androidx.compose.runtime.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional boolean softWrap, optional int overflow, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+ }
+
+ @androidx.compose.runtime.Immutable public final class InlineTextContent {
+ ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+ method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
+ method public androidx.compose.ui.text.Placeholder getPlaceholder();
+ property public final kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> children;
+ property public final androidx.compose.ui.text.Placeholder placeholder;
+ }
+
+ public final class InlineTextContentKt {
+ method public static void appendInlineContent(androidx.compose.ui.text.AnnotatedString.Builder, String id, optional String alternateText);
+ }
+
+ public interface KeyboardActionScope {
+ method public void defaultKeyboardAction(int imeAction);
+ }
+
+ @androidx.compose.runtime.Stable public final class KeyboardActions {
+ ctor public KeyboardActions(optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnDone();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnGo();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnNext();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnPrevious();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnSearch();
+ method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnSend();
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch;
+ property public final kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend;
+ field public static final androidx.compose.foundation.text.KeyboardActions.Companion Companion;
+ }
+
+ public static final class KeyboardActions.Companion {
+ method public androidx.compose.foundation.text.KeyboardActions getDefault();
+ property public final androidx.compose.foundation.text.KeyboardActions Default;
+ }
+
+ public final class KeyboardActionsKt {
+ method public static androidx.compose.foundation.text.KeyboardActions KeyboardActions(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit> onAny);
+ }
+
+ @androidx.compose.runtime.Immutable public final class KeyboardOptions {
+ ctor public KeyboardOptions(optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public androidx.compose.foundation.text.KeyboardOptions copy(optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public boolean getAutoCorrect();
+ method public int getCapitalization();
+ method public int getImeAction();
+ method public int getKeyboardType();
+ property public final boolean autoCorrect;
+ property public final int capitalization;
+ property public final int imeAction;
+ property public final int keyboardType;
+ field public static final androidx.compose.foundation.text.KeyboardOptions.Companion Companion;
+ }
+
+ public static final class KeyboardOptions.Companion {
+ method public androidx.compose.foundation.text.KeyboardOptions getDefault();
+ property public final androidx.compose.foundation.text.KeyboardOptions Default;
+ }
+
+}
+
+package androidx.compose.foundation.text.selection {
+
+ public final class SelectionContainerKt {
+ method @androidx.compose.runtime.Composable public static void DisableSelection(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void SelectionContainer(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextSelectionColors {
+ ctor public TextSelectionColors(long handleColor, long backgroundColor);
+ method public long getBackgroundColor();
+ method public long getHandleColor();
+ property public final long backgroundColor;
+ property public final long handleColor;
+ }
+
+ public final class TextSelectionColorsKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.text.selection.TextSelectionColors> getLocalTextSelectionColors();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.foundation.text.selection.TextSelectionColors> LocalTextSelectionColors;
+ }
+
+}
+
diff --git a/compose/foundation/foundation/api/restricted_current.ignore b/compose/foundation/foundation/api/restricted_current.ignore
deleted file mode 100644
index 529b30a..0000000
--- a/compose/foundation/foundation/api/restricted_current.ignore
+++ /dev/null
@@ -1,153 +0,0 @@
-// Baseline format: 1.0
-AddedAbstractMethod: androidx.compose.foundation.lazy.grid.LazyGridLayoutInfo#getMainAxisItemSpacing():
- Added method androidx.compose.foundation.lazy.grid.LazyGridLayoutInfo.getMainAxisItemSpacing()
-
-
-RemovedClass: androidx.compose.foundation.ActualJvmKt:
- Removed class androidx.compose.foundation.ActualJvmKt
-RemovedClass: androidx.compose.foundation.AndroidOverscrollKt:
- Removed class androidx.compose.foundation.AndroidOverscrollKt
-RemovedClass: androidx.compose.foundation.Clickable_androidKt:
- Removed class androidx.compose.foundation.Clickable_androidKt
-RemovedClass: androidx.compose.foundation.DarkTheme_androidKt:
- Removed class androidx.compose.foundation.DarkTheme_androidKt
-RemovedClass: androidx.compose.foundation.FocusedBoundsKt:
- Removed class androidx.compose.foundation.FocusedBoundsKt
-RemovedClass: androidx.compose.foundation.MagnifierKt:
- Removed class androidx.compose.foundation.MagnifierKt
-RemovedClass: androidx.compose.foundation.OverscrollConfigurationKt:
- Removed class androidx.compose.foundation.OverscrollConfigurationKt
-RemovedClass: androidx.compose.foundation.OverscrollKt:
- Removed class androidx.compose.foundation.OverscrollKt
-RemovedClass: androidx.compose.foundation.TempListUtilsKt:
- Removed class androidx.compose.foundation.TempListUtilsKt
-RemovedClass: androidx.compose.foundation.gestures.AndroidScrollable_androidKt:
- Removed class androidx.compose.foundation.gestures.AndroidScrollable_androidKt
-RemovedClass: androidx.compose.foundation.lazy.LazyBeyondBoundsModifierKt:
- Removed class androidx.compose.foundation.lazy.LazyBeyondBoundsModifierKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListHeadersKt:
- Removed class androidx.compose.foundation.lazy.LazyListHeadersKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListItemPlacementAnimatorKt:
- Removed class androidx.compose.foundation.lazy.LazyListItemPlacementAnimatorKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListItemProviderKt:
- Removed class androidx.compose.foundation.lazy.LazyListItemProviderKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListKt:
- Removed class androidx.compose.foundation.lazy.LazyListKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListMeasureKt:
- Removed class androidx.compose.foundation.lazy.LazyListMeasureKt
-RemovedClass: androidx.compose.foundation.lazy.LazyListPinningModifierKt:
- Removed class androidx.compose.foundation.lazy.LazyListPinningModifierKt
-RemovedClass: androidx.compose.foundation.lazy.LazySemanticsKt:
- Removed class androidx.compose.foundation.lazy.LazySemanticsKt
-RemovedClass: androidx.compose.foundation.lazy.grid.LazyGridItemPlacementAnimatorKt:
- Removed class androidx.compose.foundation.lazy.grid.LazyGridItemPlacementAnimatorKt
-RemovedClass: androidx.compose.foundation.lazy.grid.LazyGridItemProviderKt:
- Removed class androidx.compose.foundation.lazy.grid.LazyGridItemProviderKt
-RemovedClass: androidx.compose.foundation.lazy.grid.LazyGridKt:
- Removed class androidx.compose.foundation.lazy.grid.LazyGridKt
-RemovedClass: androidx.compose.foundation.lazy.grid.LazyGridMeasureKt:
- Removed class androidx.compose.foundation.lazy.grid.LazyGridMeasureKt
-RemovedClass: androidx.compose.foundation.lazy.grid.LazySemanticsKt:
- Removed class androidx.compose.foundation.lazy.grid.LazySemanticsKt
-RemovedClass: androidx.compose.foundation.text.AndroidCursorHandle_androidKt:
- Removed class androidx.compose.foundation.text.AndroidCursorHandle_androidKt
-RemovedClass: androidx.compose.foundation.text.ContextMenu_androidKt:
- Removed class androidx.compose.foundation.text.ContextMenu_androidKt
-RemovedClass: androidx.compose.foundation.text.CoreTextFieldKt:
- Removed class androidx.compose.foundation.text.CoreTextFieldKt
-RemovedClass: androidx.compose.foundation.text.CoreTextKt:
- Removed class androidx.compose.foundation.text.CoreTextKt
-RemovedClass: androidx.compose.foundation.text.KeyEventHelpers_androidKt:
- Removed class androidx.compose.foundation.text.KeyEventHelpers_androidKt
-RemovedClass: androidx.compose.foundation.text.KeyMappingKt:
- Removed class androidx.compose.foundation.text.KeyMappingKt
-RemovedClass: androidx.compose.foundation.text.KeyMapping_androidKt:
- Removed class androidx.compose.foundation.text.KeyMapping_androidKt
-RemovedClass: androidx.compose.foundation.text.LongPressTextDragObserverKt:
- Removed class androidx.compose.foundation.text.LongPressTextDragObserverKt
-RemovedClass: androidx.compose.foundation.text.MaxLinesHeightModifierKt:
- Removed class androidx.compose.foundation.text.MaxLinesHeightModifierKt
-RemovedClass: androidx.compose.foundation.text.StringHelpersKt:
- Removed class androidx.compose.foundation.text.StringHelpersKt
-RemovedClass: androidx.compose.foundation.text.StringHelpers_androidKt:
- Removed class androidx.compose.foundation.text.StringHelpers_androidKt
-RemovedClass: androidx.compose.foundation.text.StringHelpers_jvmKt:
- Removed class androidx.compose.foundation.text.StringHelpers_jvmKt
-RemovedClass: androidx.compose.foundation.text.TextDelegateKt:
- Removed class androidx.compose.foundation.text.TextDelegateKt
-RemovedClass: androidx.compose.foundation.text.TextFieldCursorKt:
- Removed class androidx.compose.foundation.text.TextFieldCursorKt
-RemovedClass: androidx.compose.foundation.text.TextFieldDelegateKt:
- Removed class androidx.compose.foundation.text.TextFieldDelegateKt
-RemovedClass: androidx.compose.foundation.text.TextFieldGestureModifiersKt:
- Removed class androidx.compose.foundation.text.TextFieldGestureModifiersKt
-RemovedClass: androidx.compose.foundation.text.TextFieldKeyInputKt:
- Removed class androidx.compose.foundation.text.TextFieldKeyInputKt
-RemovedClass: androidx.compose.foundation.text.TextFieldKeyInput_androidKt:
- Removed class androidx.compose.foundation.text.TextFieldKeyInput_androidKt
-RemovedClass: androidx.compose.foundation.text.TextFieldPressGestureFilterKt:
- Removed class androidx.compose.foundation.text.TextFieldPressGestureFilterKt
-RemovedClass: androidx.compose.foundation.text.TextFieldScrollKt:
- Removed class androidx.compose.foundation.text.TextFieldScrollKt
-RemovedClass: androidx.compose.foundation.text.TextFieldSizeKt:
- Removed class androidx.compose.foundation.text.TextFieldSizeKt
-RemovedClass: androidx.compose.foundation.text.TextLayoutHelperKt:
- Removed class androidx.compose.foundation.text.TextLayoutHelperKt
-RemovedClass: androidx.compose.foundation.text.TextLayoutResultProxyKt:
- Removed class androidx.compose.foundation.text.TextLayoutResultProxyKt
-RemovedClass: androidx.compose.foundation.text.TextPointerIcon_androidKt:
- Removed class androidx.compose.foundation.text.TextPointerIcon_androidKt
-RemovedClass: androidx.compose.foundation.text.TouchMode_androidKt:
- Removed class androidx.compose.foundation.text.TouchMode_androidKt
-RemovedClass: androidx.compose.foundation.text.UndoManagerKt:
- Removed class androidx.compose.foundation.text.UndoManagerKt
-RemovedClass: androidx.compose.foundation.text.UndoManager_jvmKt:
- Removed class androidx.compose.foundation.text.UndoManager_jvmKt
-RemovedClass: androidx.compose.foundation.text.ValidatingOffsetMappingKt:
- Removed class androidx.compose.foundation.text.ValidatingOffsetMappingKt
-RemovedClass: androidx.compose.foundation.text.selection.AndroidSelectionHandles_androidKt:
- Removed class androidx.compose.foundation.text.selection.AndroidSelectionHandles_androidKt
-RemovedClass: androidx.compose.foundation.text.selection.MultiWidgetSelectionDelegateKt:
- Removed class androidx.compose.foundation.text.selection.MultiWidgetSelectionDelegateKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionAdjustmentKt:
- Removed class androidx.compose.foundation.text.selection.SelectionAdjustmentKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionHandlesKt:
- Removed class androidx.compose.foundation.text.selection.SelectionHandlesKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionMagnifierKt:
- Removed class androidx.compose.foundation.text.selection.SelectionMagnifierKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionManagerKt:
- Removed class androidx.compose.foundation.text.selection.SelectionManagerKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionManager_androidKt:
- Removed class androidx.compose.foundation.text.selection.SelectionManager_androidKt
-RemovedClass: androidx.compose.foundation.text.selection.SelectionRegistrarKt:
- Removed class androidx.compose.foundation.text.selection.SelectionRegistrarKt
-RemovedClass: androidx.compose.foundation.text.selection.SimpleLayoutKt:
- Removed class androidx.compose.foundation.text.selection.SimpleLayoutKt
-RemovedClass: androidx.compose.foundation.text.selection.TextFieldSelectionDelegateKt:
- Removed class androidx.compose.foundation.text.selection.TextFieldSelectionDelegateKt
-RemovedClass: androidx.compose.foundation.text.selection.TextFieldSelectionManagerKt:
- Removed class androidx.compose.foundation.text.selection.TextFieldSelectionManagerKt
-RemovedClass: androidx.compose.foundation.text.selection.TextFieldSelectionManager_androidKt:
- Removed class androidx.compose.foundation.text.selection.TextFieldSelectionManager_androidKt
-RemovedClass: androidx.compose.foundation.text.selection.TextSelectionDelegateKt:
- Removed class androidx.compose.foundation.text.selection.TextSelectionDelegateKt
-RemovedClass: androidx.compose.foundation.text.selection.TextSelectionMouseDetectorKt:
- Removed class androidx.compose.foundation.text.selection.TextSelectionMouseDetectorKt
-
-
-RemovedMethod: androidx.compose.foundation.gestures.TapGestureDetectorKt#awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, boolean, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>):
- Removed method androidx.compose.foundation.gestures.TapGestureDetectorKt.awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope,boolean,kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>)
-RemovedMethod: androidx.compose.foundation.gestures.TapGestureDetectorKt#waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>):
- Removed method androidx.compose.foundation.gestures.TapGestureDetectorKt.waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope,kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>)
-
-
-RemovedPackage: androidx.compose.foundation.gestures.snapping:
- Removed package androidx.compose.foundation.gestures.snapping
-RemovedPackage: androidx.compose.foundation.internal:
- Removed package androidx.compose.foundation.internal
-RemovedPackage: androidx.compose.foundation.lazy.layout:
- Removed package androidx.compose.foundation.lazy.layout
-RemovedPackage: androidx.compose.foundation.lazy.staggeredgrid:
- Removed package androidx.compose.foundation.lazy.staggeredgrid
-RemovedPackage: androidx.compose.foundation.relocation:
- Removed package androidx.compose.foundation.relocation
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
index 2345c6e..7f51f44 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
@@ -102,6 +102,7 @@
import androidx.test.espresso.action.Swipe
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import kotlin.math.abs
@@ -2341,6 +2342,7 @@
}
}
+ @SdkSuppress(maxSdkVersion = 32) // b/268753157
@Test
fun offsetsScrollable_velocityCalculationShouldConsiderLocalPositions() {
// arrange
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListTest.kt
index 7784e47..0a5cc61 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListTest.kt
@@ -2000,6 +2000,7 @@
.assertStartPositionInRootIsEqualTo(0.dp)
}
+ @SdkSuppress(maxSdkVersion = 32) // b/269178188
@Test
fun assertVelocityCalculationIsSimilar_witHistoricalValues() {
// arrange
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerNestedScrollContentTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerNestedScrollContentTest.kt
index 425ef13..ff4a3e3 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerNestedScrollContentTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerNestedScrollContentTest.kt
@@ -35,6 +35,7 @@
import androidx.compose.ui.unit.Velocity
import androidx.compose.ui.unit.dp
import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
import kotlin.math.absoluteValue
import kotlinx.coroutines.runBlocking
@@ -49,6 +50,7 @@
config: ParamConfig
) : BasePagerTest(config = config) {
+ @SdkSuppress(maxSdkVersion = 32) // b/269171814
@OptIn(ExperimentalFoundationApi::class)
@Test
fun nestedScrollContent_shouldNotPropagateUnconsumedFlings() {
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerStateTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerStateTest.kt
index 27a097a..8aa3c7a 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerStateTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerStateTest.kt
@@ -31,6 +31,7 @@
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performTouchInput
import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
import kotlin.test.assertFalse
import kotlinx.coroutines.Dispatchers
@@ -85,6 +86,7 @@
}
}
+ @SdkSuppress(maxSdkVersion = 32) // b/269176638
@Test
fun scrollToPage_usedOffset_shouldPlacePagesCorrectly() = runBlocking {
// Arrange
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustment.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustment.kt
index 3de82bb..968b74e 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustment.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustment.kt
@@ -16,6 +16,8 @@
package androidx.compose.foundation.text.selection
+import androidx.compose.foundation.text.findFollowingBreak
+import androidx.compose.foundation.text.findPrecedingBreak
import androidx.compose.foundation.text.getParagraphBoundary
import androidx.compose.ui.text.TextLayoutResult
import androidx.compose.ui.text.TextRange
@@ -87,6 +89,7 @@
// If there isn't any selection before, we assume handles are not crossed.
val previousHandlesCrossed = previousSelectionRange?.reversed ?: false
ensureAtLeastOneChar(
+ text = textLayoutResult.layoutInput.text.text,
offset = newRawSelectionRange.start,
lastOffset = textLayoutResult.layoutInput.text.lastIndex,
isStartHandle = isStartHandle,
@@ -205,6 +208,7 @@
// The new selection is collapsed, ensure at least one char is selected.
if (newRawSelectionRange.collapsed) {
return ensureAtLeastOneChar(
+ text = textLayoutResult.layoutInput.text.text,
offset = newRawSelectionRange.start,
lastOffset = textLayoutResult.layoutInput.text.lastIndex,
isStartHandle = isStartHandle,
@@ -402,10 +406,12 @@
}
/**
- * This method adjusts the raw start and end offset and bounds the selection to one character. The
- * logic of bounding evaluates the last selection result, which handle is being dragged, and if
- * selection reaches the boundary.
+ * This method adjusts the raw start and end offset and bounds the selection to one character
+ * respecting [String.findPrecedingBreak] and [String.findFollowingBreak]. The logic of bounding
+ * evaluates the last selection result, which handle is being dragged, and if selection reaches the
+ * boundary.
*
+ * @param text the complete string
* @param offset unprocessed start and end offset calculated directly from input position, in
* this case start and offset equals to each other.
* @param lastOffset last offset of the text. It's actually the length of the text.
@@ -417,6 +423,7 @@
* @return the adjusted [TextRange].
*/
internal fun ensureAtLeastOneChar(
+ text: String,
offset: Int,
lastOffset: Int,
isStartHandle: Boolean,
@@ -430,17 +437,17 @@
// the other handle's position is computed accordingly.
if (offset == 0) {
return if (isStartHandle) {
- TextRange(1, 0)
+ TextRange(text.findFollowingBreak(0), 0)
} else {
- TextRange(0, 1)
+ TextRange(0, text.findFollowingBreak(0))
}
}
if (offset == lastOffset) {
return if (isStartHandle) {
- TextRange(lastOffset - 1, lastOffset)
+ TextRange(text.findPrecedingBreak(lastOffset), lastOffset)
} else {
- TextRange(lastOffset, lastOffset - 1)
+ TextRange(lastOffset, text.findPrecedingBreak(lastOffset))
}
}
@@ -449,18 +456,18 @@
return if (isStartHandle) {
if (!previousHandlesCrossed) {
// Handle is NOT crossed, and the start handle is dragged.
- TextRange(offset - 1, offset)
+ TextRange(text.findPrecedingBreak(offset), offset)
} else {
// Handle is crossed, and the start handle is dragged.
- TextRange(offset + 1, offset)
+ TextRange(text.findFollowingBreak(offset), offset)
}
} else {
if (!previousHandlesCrossed) {
// Handle is NOT crossed, and the end handle is dragged.
- TextRange(offset, offset + 1)
+ TextRange(offset, text.findFollowingBreak(offset))
} else {
// Handle is crossed, and the end handle is dragged.
- TextRange(offset, offset - 1)
+ TextRange(offset, text.findPrecedingBreak(offset))
}
}
}
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustmentTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustmentTest.kt
index 1c52b7c..84211e52 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustmentTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustmentTest.kt
@@ -111,6 +111,82 @@
}
@Test
+ fun adjustment_Character_collapsedNotReversed_returnOneUnicodeSelectionNotReversed() {
+ val textLayoutResult = mockTextLayoutResult(text = "hi\uD83D\uDE00")
+ // After the adjustment, the complete unicode should be selected instead of a single
+ // character that is only part of the unicode.
+ val rawSelection = TextRange(2, 2)
+ val previousSelection = TextRange(2, 4)
+ val isStartHandle = false
+
+ val adjustedSelection = SelectionAdjustment.Character.adjust(
+ textLayoutResult = textLayoutResult,
+ newRawSelectionRange = rawSelection,
+ previousHandleOffset = -1,
+ isStartHandle = isStartHandle,
+ previousSelectionRange = previousSelection
+ )
+
+ assertThat(adjustedSelection).isEqualTo(TextRange(2, 4))
+ }
+
+ @Test
+ fun adjustment_Character_collapsedReversed_returnOneUnicodeSelectionReversed() {
+ val textLayoutResult = mockTextLayoutResult(text = "hi\uD83D\uDE00")
+ val rawSelection = TextRange(4, 4)
+ val previousTextRange = TextRange(4, 2)
+ val isStartHandle = false
+
+ val adjustedTextRange = SelectionAdjustment.Character.adjust(
+ textLayoutResult = textLayoutResult,
+ newRawSelectionRange = rawSelection,
+ previousHandleOffset = -1,
+ isStartHandle = isStartHandle,
+ previousSelectionRange = previousTextRange
+ )
+
+ assertThat(adjustedTextRange).isEqualTo(TextRange(4, 2))
+ }
+
+ @Test
+ fun adjustment_Character_collapsedNotReversed_returnOneEmojiSelectionNotReversed() {
+ val textLayoutResult = mockTextLayoutResult(text = "#️⃣sharp")
+ // After the adjustment, the unicode sequence representing the keycap # emoji should be
+ // selected instead of a single character/unicode that is only part of the emoji.
+ val rawSelection = TextRange(0, 0)
+ val previousSelection = TextRange(0, 3)
+ val isStartHandle = false
+
+ val adjustedSelection = SelectionAdjustment.Character.adjust(
+ textLayoutResult = textLayoutResult,
+ newRawSelectionRange = rawSelection,
+ previousHandleOffset = -1,
+ isStartHandle = isStartHandle,
+ previousSelectionRange = previousSelection
+ )
+
+ assertThat(adjustedSelection).isEqualTo(TextRange(0, 3))
+ }
+
+ @Test
+ fun adjustment_Character_collapsedReversed_returnOneEmojiSelectionReversed() {
+ val textLayoutResult = mockTextLayoutResult(text = "#️⃣sharp")
+ val rawSelection = TextRange(3, 3)
+ val previousTextRange = TextRange(3, 0)
+ val isStartHandle = false
+
+ val adjustedTextRange = SelectionAdjustment.Character.adjust(
+ textLayoutResult = textLayoutResult,
+ newRawSelectionRange = rawSelection,
+ previousHandleOffset = -1,
+ isStartHandle = isStartHandle,
+ previousSelectionRange = previousTextRange
+ )
+
+ assertThat(adjustedTextRange).isEqualTo(TextRange(3, 0))
+ }
+
+ @Test
fun adjustment_Word_collapsed() {
val textLayoutResult = mockTextLayoutResult(
text = "hello world",
diff --git a/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ModifierInspectorInfoDetector.kt b/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ModifierInspectorInfoDetector.kt
index 23f9a14..7cb8923 100644
--- a/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ModifierInspectorInfoDetector.kt
+++ b/compose/lint/internal-lint-checks/src/main/java/androidx/compose/lint/ModifierInspectorInfoDetector.kt
@@ -125,6 +125,10 @@
* )
* )
* ```
+ *
+ * This inspector only applies to Modifiers implemented prior to Modifier.Node. For the
+ * corresponding Modifier.Node inspection, see `ModifierNodeInspectablePropertiesDetector` in
+ * `:compose:ui:ui-lint`.
*/
class ModifierInspectorInfoDetector : Detector(), SourceCodeScanner {
override fun createUastHandler(context: JavaContext): UElementHandler = ModifierHandler(context)
diff --git a/compose/material/material-icons-core/api/1.4.0-beta02.txt b/compose/material/material-icons-core/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..b95d770
--- /dev/null
+++ b/compose/material/material-icons-core/api/1.4.0-beta02.txt
@@ -0,0 +1,1036 @@
+// Signature format: 4.0
+package androidx.compose.material.icons {
+
+ public final class Icons {
+ method public androidx.compose.material.icons.Icons.Filled getDefault();
+ property public final androidx.compose.material.icons.Icons.Filled Default;
+ field public static final androidx.compose.material.icons.Icons INSTANCE;
+ }
+
+ public static final class Icons.Filled {
+ field public static final androidx.compose.material.icons.Icons.Filled INSTANCE;
+ }
+
+ public static final class Icons.Outlined {
+ field public static final androidx.compose.material.icons.Icons.Outlined INSTANCE;
+ }
+
+ public static final class Icons.Rounded {
+ field public static final androidx.compose.material.icons.Icons.Rounded INSTANCE;
+ }
+
+ public static final class Icons.Sharp {
+ field public static final androidx.compose.material.icons.Icons.Sharp INSTANCE;
+ }
+
+ public static final class Icons.TwoTone {
+ field public static final androidx.compose.material.icons.Icons.TwoTone INSTANCE;
+ }
+
+ public final class IconsKt {
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector materialIcon(String name, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.ImageVector.Builder,androidx.compose.ui.graphics.vector.ImageVector.Builder> block);
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector.Builder materialPath(androidx.compose.ui.graphics.vector.ImageVector.Builder, optional float fillAlpha, optional float strokeAlpha, optional int pathFillType, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.PathBuilder,kotlin.Unit> pathBuilder);
+ }
+
+}
+
+package androidx.compose.material.icons.filled {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Filled);
+ }
+
+}
+
+package androidx.compose.material.icons.outlined {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+}
+
+package androidx.compose.material.icons.rounded {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+}
+
+package androidx.compose.material.icons.sharp {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+}
+
+package androidx.compose.material.icons.twotone {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+}
+
diff --git a/compose/material/material-icons-core/api/public_plus_experimental_1.4.0-beta02.txt b/compose/material/material-icons-core/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..b95d770
--- /dev/null
+++ b/compose/material/material-icons-core/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,1036 @@
+// Signature format: 4.0
+package androidx.compose.material.icons {
+
+ public final class Icons {
+ method public androidx.compose.material.icons.Icons.Filled getDefault();
+ property public final androidx.compose.material.icons.Icons.Filled Default;
+ field public static final androidx.compose.material.icons.Icons INSTANCE;
+ }
+
+ public static final class Icons.Filled {
+ field public static final androidx.compose.material.icons.Icons.Filled INSTANCE;
+ }
+
+ public static final class Icons.Outlined {
+ field public static final androidx.compose.material.icons.Icons.Outlined INSTANCE;
+ }
+
+ public static final class Icons.Rounded {
+ field public static final androidx.compose.material.icons.Icons.Rounded INSTANCE;
+ }
+
+ public static final class Icons.Sharp {
+ field public static final androidx.compose.material.icons.Icons.Sharp INSTANCE;
+ }
+
+ public static final class Icons.TwoTone {
+ field public static final androidx.compose.material.icons.Icons.TwoTone INSTANCE;
+ }
+
+ public final class IconsKt {
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector materialIcon(String name, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.ImageVector.Builder,androidx.compose.ui.graphics.vector.ImageVector.Builder> block);
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector.Builder materialPath(androidx.compose.ui.graphics.vector.ImageVector.Builder, optional float fillAlpha, optional float strokeAlpha, optional int pathFillType, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.PathBuilder,kotlin.Unit> pathBuilder);
+ }
+
+}
+
+package androidx.compose.material.icons.filled {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Filled);
+ }
+
+}
+
+package androidx.compose.material.icons.outlined {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+}
+
+package androidx.compose.material.icons.rounded {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+}
+
+package androidx.compose.material.icons.sharp {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+}
+
+package androidx.compose.material.icons.twotone {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+}
+
diff --git a/compose/material/material-icons-core/api/res-1.4.0-beta02.txt b/compose/material/material-icons-core/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/material/material-icons-core/api/res-1.4.0-beta02.txt
diff --git a/compose/material/material-icons-core/api/restricted_1.4.0-beta02.txt b/compose/material/material-icons-core/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..619d449
--- /dev/null
+++ b/compose/material/material-icons-core/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,1037 @@
+// Signature format: 4.0
+package androidx.compose.material.icons {
+
+ public final class Icons {
+ method public androidx.compose.material.icons.Icons.Filled getDefault();
+ property public final androidx.compose.material.icons.Icons.Filled Default;
+ field public static final androidx.compose.material.icons.Icons INSTANCE;
+ }
+
+ public static final class Icons.Filled {
+ field public static final androidx.compose.material.icons.Icons.Filled INSTANCE;
+ }
+
+ public static final class Icons.Outlined {
+ field public static final androidx.compose.material.icons.Icons.Outlined INSTANCE;
+ }
+
+ public static final class Icons.Rounded {
+ field public static final androidx.compose.material.icons.Icons.Rounded INSTANCE;
+ }
+
+ public static final class Icons.Sharp {
+ field public static final androidx.compose.material.icons.Icons.Sharp INSTANCE;
+ }
+
+ public static final class Icons.TwoTone {
+ field public static final androidx.compose.material.icons.Icons.TwoTone INSTANCE;
+ }
+
+ public final class IconsKt {
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector materialIcon(String name, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.ImageVector.Builder,androidx.compose.ui.graphics.vector.ImageVector.Builder> block);
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector.Builder materialPath(androidx.compose.ui.graphics.vector.ImageVector.Builder, optional float fillAlpha, optional float strokeAlpha, optional int pathFillType, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.PathBuilder,kotlin.Unit> pathBuilder);
+ field @kotlin.PublishedApi internal static final float MaterialIconDimension = 24.0f;
+ }
+
+}
+
+package androidx.compose.material.icons.filled {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Filled);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Filled);
+ }
+
+}
+
+package androidx.compose.material.icons.outlined {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Outlined);
+ }
+
+}
+
+package androidx.compose.material.icons.rounded {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Rounded);
+ }
+
+}
+
+package androidx.compose.material.icons.sharp {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.Sharp);
+ }
+
+}
+
+package androidx.compose.material.icons.twotone {
+
+ public final class AccountBoxKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountBox(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class AccountCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAccountCircle(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class AddCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAddCircle(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class AddKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getAdd(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ArrowBackKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowBack(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ArrowDropDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowDropDown(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ArrowForwardKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getArrowForward(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class BuildKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getBuild(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CallKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCall(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CheckCircleKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheckCircle(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CheckKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCheck(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ClearKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClear(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CloseKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getClose(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class CreateKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getCreate(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class DateRangeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDateRange(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class DeleteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDelete(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class DoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getDone(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class EditKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEdit(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class EmailKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getEmail(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ExitToAppKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getExitToApp(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class FaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFace(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class FavoriteBorderKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavoriteBorder(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class FavoriteKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getFavorite(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class HomeKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getHome(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class InfoKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getInfo(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowDownKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowDown(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowLeftKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowLeft(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowRightKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowRight(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class KeyboardArrowUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getKeyboardArrowUp(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ListKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getList(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class LocationOnKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLocationOn(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class LockKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getLock(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class MailOutlineKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMailOutline(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class MenuKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMenu(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class MoreVertKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getMoreVert(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class NotificationsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getNotifications(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PersonKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPerson(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PhoneKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPhone(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PlaceKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlace(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class PlayArrowKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getPlayArrow(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class RefreshKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getRefresh(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class SearchKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSearch(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class SendKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSend(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class SettingsKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getSettings(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ShareKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShare(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ShoppingCartKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getShoppingCart(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class StarKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getStar(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class ThumbUpKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getThumbUp(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+ public final class WarningKt {
+ method public static androidx.compose.ui.graphics.vector.ImageVector getWarning(androidx.compose.material.icons.Icons.TwoTone);
+ }
+
+}
+
diff --git a/compose/material/material-ripple/api/1.4.0-beta02.txt b/compose/material/material-ripple/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..6dba36f
--- /dev/null
+++ b/compose/material/material-ripple/api/1.4.0-beta02.txt
@@ -0,0 +1,37 @@
+// Signature format: 4.0
+package androidx.compose.material.ripple {
+
+ @androidx.compose.runtime.Immutable public final class RippleAlpha {
+ ctor public RippleAlpha(float draggedAlpha, float focusedAlpha, float hoveredAlpha, float pressedAlpha);
+ method public float getDraggedAlpha();
+ method public float getFocusedAlpha();
+ method public float getHoveredAlpha();
+ method public float getPressedAlpha();
+ property public final float draggedAlpha;
+ property public final float focusedAlpha;
+ property public final float hoveredAlpha;
+ property public final float pressedAlpha;
+ }
+
+ public final class RippleKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.Indication rememberRipple(optional boolean bounded, optional float radius, optional long color);
+ }
+
+ public interface RippleTheme {
+ method @androidx.compose.runtime.Composable public long defaultColor();
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ripple.RippleAlpha rippleAlpha();
+ field public static final androidx.compose.material.ripple.RippleTheme.Companion Companion;
+ }
+
+ public static final class RippleTheme.Companion {
+ method public androidx.compose.material.ripple.RippleAlpha defaultRippleAlpha(long contentColor, boolean lightTheme);
+ method public long defaultRippleColor(long contentColor, boolean lightTheme);
+ }
+
+ public final class RippleThemeKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ripple.RippleTheme> getLocalRippleTheme();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ripple.RippleTheme> LocalRippleTheme;
+ }
+
+}
+
diff --git a/compose/material/material-ripple/api/current.ignore b/compose/material/material-ripple/api/current.ignore
deleted file mode 100644
index ae07b75..0000000
--- a/compose/material/material-ripple/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.material.ripple.RippleAnimationKt:
- Removed class androidx.compose.material.ripple.RippleAnimationKt
diff --git a/compose/material/material-ripple/api/public_plus_experimental_1.4.0-beta02.txt b/compose/material/material-ripple/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..6dba36f
--- /dev/null
+++ b/compose/material/material-ripple/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,37 @@
+// Signature format: 4.0
+package androidx.compose.material.ripple {
+
+ @androidx.compose.runtime.Immutable public final class RippleAlpha {
+ ctor public RippleAlpha(float draggedAlpha, float focusedAlpha, float hoveredAlpha, float pressedAlpha);
+ method public float getDraggedAlpha();
+ method public float getFocusedAlpha();
+ method public float getHoveredAlpha();
+ method public float getPressedAlpha();
+ property public final float draggedAlpha;
+ property public final float focusedAlpha;
+ property public final float hoveredAlpha;
+ property public final float pressedAlpha;
+ }
+
+ public final class RippleKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.Indication rememberRipple(optional boolean bounded, optional float radius, optional long color);
+ }
+
+ public interface RippleTheme {
+ method @androidx.compose.runtime.Composable public long defaultColor();
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ripple.RippleAlpha rippleAlpha();
+ field public static final androidx.compose.material.ripple.RippleTheme.Companion Companion;
+ }
+
+ public static final class RippleTheme.Companion {
+ method public androidx.compose.material.ripple.RippleAlpha defaultRippleAlpha(long contentColor, boolean lightTheme);
+ method public long defaultRippleColor(long contentColor, boolean lightTheme);
+ }
+
+ public final class RippleThemeKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ripple.RippleTheme> getLocalRippleTheme();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ripple.RippleTheme> LocalRippleTheme;
+ }
+
+}
+
diff --git a/compose/material/material-ripple/api/res-1.4.0-beta02.txt b/compose/material/material-ripple/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/material/material-ripple/api/res-1.4.0-beta02.txt
diff --git a/compose/material/material-ripple/api/restricted_1.4.0-beta02.txt b/compose/material/material-ripple/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..6dba36f
--- /dev/null
+++ b/compose/material/material-ripple/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,37 @@
+// Signature format: 4.0
+package androidx.compose.material.ripple {
+
+ @androidx.compose.runtime.Immutable public final class RippleAlpha {
+ ctor public RippleAlpha(float draggedAlpha, float focusedAlpha, float hoveredAlpha, float pressedAlpha);
+ method public float getDraggedAlpha();
+ method public float getFocusedAlpha();
+ method public float getHoveredAlpha();
+ method public float getPressedAlpha();
+ property public final float draggedAlpha;
+ property public final float focusedAlpha;
+ property public final float hoveredAlpha;
+ property public final float pressedAlpha;
+ }
+
+ public final class RippleKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.foundation.Indication rememberRipple(optional boolean bounded, optional float radius, optional long color);
+ }
+
+ public interface RippleTheme {
+ method @androidx.compose.runtime.Composable public long defaultColor();
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ripple.RippleAlpha rippleAlpha();
+ field public static final androidx.compose.material.ripple.RippleTheme.Companion Companion;
+ }
+
+ public static final class RippleTheme.Companion {
+ method public androidx.compose.material.ripple.RippleAlpha defaultRippleAlpha(long contentColor, boolean lightTheme);
+ method public long defaultRippleColor(long contentColor, boolean lightTheme);
+ }
+
+ public final class RippleThemeKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ripple.RippleTheme> getLocalRippleTheme();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ripple.RippleTheme> LocalRippleTheme;
+ }
+
+}
+
diff --git a/compose/material/material-ripple/api/restricted_current.ignore b/compose/material/material-ripple/api/restricted_current.ignore
deleted file mode 100644
index ae07b75..0000000
--- a/compose/material/material-ripple/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.material.ripple.RippleAnimationKt:
- Removed class androidx.compose.material.ripple.RippleAnimationKt
diff --git a/compose/material/material/api/1.4.0-beta02.txt b/compose/material/material/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..a8f3f39
--- /dev/null
+++ b/compose/material/material/api/1.4.0-beta02.txt
@@ -0,0 +1,628 @@
+// Signature format: 4.0
+package androidx.compose.material {
+
+ public final class AndroidAlertDialog_androidKt {
+ method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
+ method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
+ }
+
+ public final class AndroidMenu_androidKt {
+ method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ public final class AppBarDefaults {
+ method public float getBottomAppBarElevation();
+ method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+ method public float getTopAppBarElevation();
+ property public final float BottomAppBarElevation;
+ property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+ property public final float TopAppBarElevation;
+ field public static final androidx.compose.material.AppBarDefaults INSTANCE;
+ }
+
+ public final class AppBarKt {
+ method @androidx.compose.runtime.Composable public static void BottomAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.graphics.Shape? cutoutShape, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void TopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional long backgroundColor, optional long contentColor, optional float elevation);
+ method @androidx.compose.runtime.Composable public static void TopAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ public final class BackdropScaffoldDefaults {
+ method public float getFrontLayerElevation();
+ method @androidx.compose.runtime.Composable public long getFrontLayerScrimColor();
+ method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getFrontLayerShape();
+ method public float getHeaderHeight();
+ method public float getPeekHeight();
+ property public final float FrontLayerElevation;
+ property public final float HeaderHeight;
+ property public final float PeekHeight;
+ property @androidx.compose.runtime.Composable public final long frontLayerScrimColor;
+ property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape frontLayerShape;
+ field public static final androidx.compose.material.BackdropScaffoldDefaults INSTANCE;
+ }
+
+ public final class BadgeKt {
+ method @androidx.compose.runtime.Composable public static void Badge(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? content);
+ method @androidx.compose.runtime.Composable public static void BadgedBox(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> badge, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ }
+
+ public final class BottomNavigationDefaults {
+ method public float getElevation();
+ property public final float Elevation;
+ field public static final androidx.compose.material.BottomNavigationDefaults INSTANCE;
+ }
+
+ public final class BottomNavigationKt {
+ method @androidx.compose.runtime.Composable public static void BottomNavigation(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void BottomNavigationItem(androidx.compose.foundation.layout.RowScope, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional boolean alwaysShowLabel, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ }
+
+ public final class BottomSheetScaffoldDefaults {
+ method public float getSheetElevation();
+ method public float getSheetPeekHeight();
+ property public final float SheetElevation;
+ property public final float SheetPeekHeight;
+ field public static final androidx.compose.material.BottomSheetScaffoldDefaults INSTANCE;
+ }
+
+ @androidx.compose.runtime.Stable public interface ButtonColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+ }
+
+ public final class ButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors buttonColors(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation, optional float hoveredElevation, optional float focusedElevation);
+ method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation);
+ method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+ method public float getIconSize();
+ method public float getIconSpacing();
+ method public float getMinHeight();
+ method public float getMinWidth();
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke getOutlinedBorder();
+ method public float getOutlinedBorderSize();
+ method public androidx.compose.foundation.layout.PaddingValues getTextButtonContentPadding();
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors outlinedButtonColors(optional long backgroundColor, optional long contentColor, optional long disabledContentColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors textButtonColors(optional long backgroundColor, optional long contentColor, optional long disabledContentColor);
+ property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+ property public final float IconSize;
+ property public final float IconSpacing;
+ property public final float MinHeight;
+ property public final float MinWidth;
+ property public final float OutlinedBorderSize;
+ property public final androidx.compose.foundation.layout.PaddingValues TextButtonContentPadding;
+ property @androidx.compose.runtime.Composable public final androidx.compose.foundation.BorderStroke outlinedBorder;
+ field public static final androidx.compose.material.ButtonDefaults INSTANCE;
+ field public static final float OutlinedBorderOpacity = 0.12f;
+ }
+
+ @androidx.compose.runtime.Stable public interface ButtonElevation {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> elevation(boolean enabled, androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ }
+
+ public final class ButtonKt {
+ method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.ButtonElevation? elevation, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material.ButtonColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.ButtonElevation? elevation, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material.ButtonColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void TextButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.ButtonElevation? elevation, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material.ButtonColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ public final class CardKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Card(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Stable public interface CheckboxColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> borderColor(boolean enabled, androidx.compose.ui.state.ToggleableState state);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> boxColor(boolean enabled, androidx.compose.ui.state.ToggleableState state);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> checkmarkColor(androidx.compose.ui.state.ToggleableState state);
+ }
+
+ public final class CheckboxDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.CheckboxColors colors(optional long checkedColor, optional long uncheckedColor, optional long checkmarkColor, optional long disabledColor, optional long disabledIndeterminateColor);
+ field public static final androidx.compose.material.CheckboxDefaults INSTANCE;
+ }
+
+ public final class CheckboxKt {
+ method @androidx.compose.runtime.Composable public static void Checkbox(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.CheckboxColors colors);
+ method @androidx.compose.runtime.Composable public static void TriStateCheckbox(androidx.compose.ui.state.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.CheckboxColors colors);
+ }
+
+ @androidx.compose.runtime.Stable public final class Colors {
+ ctor public Colors(long primary, long primaryVariant, long secondary, long secondaryVariant, long background, long surface, long error, long onPrimary, long onSecondary, long onBackground, long onSurface, long onError, boolean isLight);
+ method public androidx.compose.material.Colors copy(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onError, optional boolean isLight);
+ method public long getBackground();
+ method public long getError();
+ method public long getOnBackground();
+ method public long getOnError();
+ method public long getOnPrimary();
+ method public long getOnSecondary();
+ method public long getOnSurface();
+ method public long getPrimary();
+ method public long getPrimaryVariant();
+ method public long getSecondary();
+ method public long getSecondaryVariant();
+ method public long getSurface();
+ method public boolean isLight();
+ property public final long background;
+ property public final long error;
+ property public final boolean isLight;
+ property public final long onBackground;
+ property public final long onError;
+ property public final long onPrimary;
+ property public final long onSecondary;
+ property public final long onSurface;
+ property public final long primary;
+ property public final long primaryVariant;
+ property public final long secondary;
+ property public final long secondaryVariant;
+ property public final long surface;
+ }
+
+ public final class ColorsKt {
+ method public static long contentColorFor(androidx.compose.material.Colors, long backgroundColor);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long contentColorFor(long backgroundColor);
+ method public static androidx.compose.material.Colors darkColors(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onError);
+ method public static long getPrimarySurface(androidx.compose.material.Colors);
+ method public static androidx.compose.material.Colors lightColors(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onError);
+ }
+
+ public final class ContentAlpha {
+ method @androidx.compose.runtime.Composable public float getDisabled();
+ method @androidx.compose.runtime.Composable public float getHigh();
+ method @androidx.compose.runtime.Composable public float getMedium();
+ property @androidx.compose.runtime.Composable public final float disabled;
+ property @androidx.compose.runtime.Composable public final float high;
+ property @androidx.compose.runtime.Composable public final float medium;
+ field public static final androidx.compose.material.ContentAlpha INSTANCE;
+ }
+
+ public final class ContentAlphaKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> getLocalContentAlpha();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> LocalContentAlpha;
+ }
+
+ public final class ContentColorKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> getLocalContentColor();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> LocalContentColor;
+ }
+
+ public enum DismissDirection {
+ method public static androidx.compose.material.DismissDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.DismissDirection[] values();
+ enum_constant public static final androidx.compose.material.DismissDirection EndToStart;
+ enum_constant public static final androidx.compose.material.DismissDirection StartToEnd;
+ }
+
+ public enum DismissValue {
+ method public static androidx.compose.material.DismissValue valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.DismissValue[] values();
+ enum_constant public static final androidx.compose.material.DismissValue Default;
+ enum_constant public static final androidx.compose.material.DismissValue DismissedToEnd;
+ enum_constant public static final androidx.compose.material.DismissValue DismissedToStart;
+ }
+
+ public final class DividerKt {
+ method @androidx.compose.runtime.Composable public static void Divider(optional androidx.compose.ui.Modifier modifier, optional long color, optional float thickness, optional float startIndent);
+ }
+
+ public final class DrawerDefaults {
+ method public float getElevation();
+ method @androidx.compose.runtime.Composable public long getScrimColor();
+ property public final float Elevation;
+ property @androidx.compose.runtime.Composable public final long scrimColor;
+ field public static final androidx.compose.material.DrawerDefaults INSTANCE;
+ field public static final float ScrimOpacity = 0.32f;
+ }
+
+ public final class DrawerKt {
+ method @androidx.compose.runtime.Composable public static void ModalDrawer(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> drawerContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.DrawerState drawerState, optional boolean gesturesEnabled, optional androidx.compose.ui.graphics.Shape drawerShape, optional float drawerElevation, optional long drawerBackgroundColor, optional long drawerContentColor, optional long scrimColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static androidx.compose.material.DrawerState rememberDrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ @androidx.compose.runtime.Stable public final class DrawerState {
+ ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+ method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.material.DrawerValue getCurrentValue();
+ method public boolean isAnimationRunning();
+ method public boolean isClosed();
+ method public boolean isOpen();
+ method public suspend Object? open(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? snapTo(androidx.compose.material.DrawerValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public final androidx.compose.material.DrawerValue currentValue;
+ property public final boolean isAnimationRunning;
+ property public final boolean isClosed;
+ property public final boolean isOpen;
+ field public static final androidx.compose.material.DrawerState.Companion Companion;
+ }
+
+ public static final class DrawerState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.DrawerState,androidx.compose.material.DrawerValue> Saver(kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ public enum DrawerValue {
+ method public static androidx.compose.material.DrawerValue valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.DrawerValue[] values();
+ enum_constant public static final androidx.compose.material.DrawerValue Closed;
+ enum_constant public static final androidx.compose.material.DrawerValue Open;
+ }
+
+ public interface ElevationOverlay {
+ method @androidx.compose.runtime.Composable public long apply(long color, float elevation);
+ }
+
+ public final class ElevationOverlayKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> getLocalAbsoluteElevation();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ElevationOverlay> getLocalElevationOverlay();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> LocalAbsoluteElevation;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ElevationOverlay> LocalElevationOverlay;
+ }
+
+ @kotlin.jvm.JvmInline public final value class FabPosition {
+ field public static final androidx.compose.material.FabPosition.Companion Companion;
+ }
+
+ public static final class FabPosition.Companion {
+ method public int getCenter();
+ method public int getEnd();
+ property public final int Center;
+ property public final int End;
+ }
+
+ public final class FloatingActionButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float hoveredElevation, optional float focusedElevation);
+ method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation);
+ field public static final androidx.compose.material.FloatingActionButtonDefaults INSTANCE;
+ }
+
+ @androidx.compose.runtime.Stable public interface FloatingActionButtonElevation {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> elevation(androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ }
+
+ public final class FloatingActionButtonKt {
+ method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.material.FloatingActionButtonElevation elevation);
+ method @androidx.compose.runtime.Composable public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.material.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class IconButtonKt {
+ method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class IconKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ }
+
+ public final class InteractiveComponentSizeKt {
+ method public static androidx.compose.ui.Modifier minimumInteractiveComponentSize(androidx.compose.ui.Modifier);
+ }
+
+ public final class MaterialTheme {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.material.Colors getColors();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.material.Shapes getShapes();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.material.Typography getTypography();
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.material.Colors colors;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.material.Shapes shapes;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.material.Typography typography;
+ field public static final androidx.compose.material.MaterialTheme INSTANCE;
+ }
+
+ public final class MaterialThemeKt {
+ method @androidx.compose.runtime.Composable public static void MaterialTheme(optional androidx.compose.material.Colors colors, optional androidx.compose.material.Typography typography, optional androidx.compose.material.Shapes shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class MenuDefaults {
+ method public androidx.compose.foundation.layout.PaddingValues getDropdownMenuItemContentPadding();
+ property public final androidx.compose.foundation.layout.PaddingValues DropdownMenuItemContentPadding;
+ field public static final androidx.compose.material.MenuDefaults INSTANCE;
+ }
+
+ public final class ModalBottomSheetDefaults {
+ method public float getElevation();
+ method @androidx.compose.runtime.Composable public long getScrimColor();
+ property public final float Elevation;
+ property @androidx.compose.runtime.Composable public final long scrimColor;
+ field public static final androidx.compose.material.ModalBottomSheetDefaults INSTANCE;
+ }
+
+ public final class NavigationRailDefaults {
+ method public float getElevation();
+ property public final float Elevation;
+ field public static final androidx.compose.material.NavigationRailDefaults INSTANCE;
+ }
+
+ public final class NavigationRailKt {
+ method @androidx.compose.runtime.Composable public static void NavigationRail(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? header, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void NavigationRailItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional boolean alwaysShowLabel, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ }
+
+ public final class OutlinedTextFieldKt {
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ }
+
+ public final class ProgressIndicatorDefaults {
+ method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getProgressAnimationSpec();
+ method public float getStrokeWidth();
+ property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> ProgressAnimationSpec;
+ property public final float StrokeWidth;
+ field public static final androidx.compose.material.ProgressIndicatorDefaults INSTANCE;
+ field public static final float IndicatorBackgroundOpacity = 0.24f;
+ }
+
+ public final class ProgressIndicatorKt {
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
+ }
+
+ @androidx.compose.runtime.Stable public interface RadioButtonColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> radioColor(boolean enabled, boolean selected);
+ }
+
+ public final class RadioButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.RadioButtonColors colors(optional long selectedColor, optional long unselectedColor, optional long disabledColor);
+ field public static final androidx.compose.material.RadioButtonDefaults INSTANCE;
+ }
+
+ public final class RadioButtonKt {
+ method @androidx.compose.runtime.Composable public static void RadioButton(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.RadioButtonColors colors);
+ }
+
+ @androidx.compose.runtime.Immutable public final class ResistanceConfig {
+ ctor public ResistanceConfig(float basis, optional float factorAtMin, optional float factorAtMax);
+ method public float computeResistance(float overflow);
+ method public float getBasis();
+ method public float getFactorAtMax();
+ method public float getFactorAtMin();
+ property public final float basis;
+ property public final float factorAtMax;
+ property public final float factorAtMin;
+ }
+
+ public final class ScaffoldKt {
+ method @androidx.compose.runtime.Composable public static void Scaffold(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.ScaffoldState scaffoldState, optional kotlin.jvm.functions.Function0<kotlin.Unit> topBar, optional kotlin.jvm.functions.Function0<kotlin.Unit> bottomBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.SnackbarHostState,kotlin.Unit> snackbarHost, optional kotlin.jvm.functions.Function0<kotlin.Unit> floatingActionButton, optional int floatingActionButtonPosition, optional boolean isFloatingActionButtonDocked, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? drawerContent, optional boolean drawerGesturesEnabled, optional androidx.compose.ui.graphics.Shape drawerShape, optional float drawerElevation, optional long drawerBackgroundColor, optional long drawerContentColor, optional long drawerScrimColor, optional long backgroundColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static androidx.compose.material.ScaffoldState rememberScaffoldState(optional androidx.compose.material.DrawerState drawerState, optional androidx.compose.material.SnackbarHostState snackbarHostState);
+ }
+
+ @androidx.compose.runtime.Stable public final class ScaffoldState {
+ ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, androidx.compose.material.SnackbarHostState snackbarHostState);
+ method public androidx.compose.material.DrawerState getDrawerState();
+ method public androidx.compose.material.SnackbarHostState getSnackbarHostState();
+ property public final androidx.compose.material.DrawerState drawerState;
+ property public final androidx.compose.material.SnackbarHostState snackbarHostState;
+ }
+
+ @androidx.compose.runtime.Immutable public final class Shapes {
+ ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+ method public androidx.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+ method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
+ method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
+ method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
+ property public final androidx.compose.foundation.shape.CornerBasedShape large;
+ property public final androidx.compose.foundation.shape.CornerBasedShape medium;
+ property public final androidx.compose.foundation.shape.CornerBasedShape small;
+ }
+
+ @androidx.compose.runtime.Stable public interface SliderColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> thumbColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> tickColor(boolean enabled, boolean active);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trackColor(boolean enabled, boolean active);
+ }
+
+ public final class SliderDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.SliderColors colors(optional long thumbColor, optional long disabledThumbColor, optional long activeTrackColor, optional long inactiveTrackColor, optional long disabledActiveTrackColor, optional long disabledInactiveTrackColor, optional long activeTickColor, optional long inactiveTickColor, optional long disabledActiveTickColor, optional long disabledInactiveTickColor);
+ field public static final float DisabledActiveTrackAlpha = 0.32f;
+ field public static final float DisabledInactiveTrackAlpha = 0.12f;
+ field public static final float DisabledTickAlpha = 0.12f;
+ field public static final androidx.compose.material.SliderDefaults INSTANCE;
+ field public static final float InactiveTrackAlpha = 0.24f;
+ field public static final float TickAlpha = 0.54f;
+ }
+
+ public final class SliderKt {
+ method @androidx.compose.runtime.Composable public static void Slider(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onValueChangeFinished, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.SliderColors colors);
+ }
+
+ public interface SnackbarData {
+ method public void dismiss();
+ method public String? getActionLabel();
+ method public androidx.compose.material.SnackbarDuration getDuration();
+ method public String getMessage();
+ method public void performAction();
+ property public abstract String? actionLabel;
+ property public abstract androidx.compose.material.SnackbarDuration duration;
+ property public abstract String message;
+ }
+
+ public final class SnackbarDefaults {
+ method @androidx.compose.runtime.Composable public long getBackgroundColor();
+ method @androidx.compose.runtime.Composable public long getPrimaryActionColor();
+ property @androidx.compose.runtime.Composable public final long backgroundColor;
+ property @androidx.compose.runtime.Composable public final long primaryActionColor;
+ field public static final androidx.compose.material.SnackbarDefaults INSTANCE;
+ }
+
+ public enum SnackbarDuration {
+ method public static androidx.compose.material.SnackbarDuration valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.SnackbarDuration[] values();
+ enum_constant public static final androidx.compose.material.SnackbarDuration Indefinite;
+ enum_constant public static final androidx.compose.material.SnackbarDuration Long;
+ enum_constant public static final androidx.compose.material.SnackbarDuration Short;
+ }
+
+ public final class SnackbarHostKt {
+ method @androidx.compose.runtime.Composable public static void SnackbarHost(androidx.compose.material.SnackbarHostState hostState, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.SnackbarData,kotlin.Unit> snackbar);
+ }
+
+ @androidx.compose.runtime.Stable public final class SnackbarHostState {
+ ctor public SnackbarHostState();
+ method public androidx.compose.material.SnackbarData? getCurrentSnackbarData();
+ method public suspend Object? showSnackbar(String message, optional String? actionLabel, optional androidx.compose.material.SnackbarDuration duration, optional kotlin.coroutines.Continuation<? super androidx.compose.material.SnackbarResult>);
+ property public final androidx.compose.material.SnackbarData? currentSnackbarData;
+ }
+
+ public final class SnackbarKt {
+ method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Snackbar(androidx.compose.material.SnackbarData snackbarData, optional androidx.compose.ui.Modifier modifier, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional long actionColor, optional float elevation);
+ }
+
+ public enum SnackbarResult {
+ method public static androidx.compose.material.SnackbarResult valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.SnackbarResult[] values();
+ enum_constant public static final androidx.compose.material.SnackbarResult ActionPerformed;
+ enum_constant public static final androidx.compose.material.SnackbarResult Dismissed;
+ }
+
+ public final class SurfaceKt {
+ method @androidx.compose.runtime.Composable public static void Surface(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class SwipeableDefaults {
+ method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getAnimationSpec();
+ method public float getVelocityThreshold();
+ method public androidx.compose.material.ResistanceConfig? resistanceConfig(java.util.Set<java.lang.Float> anchors, optional float factorAtMin, optional float factorAtMax);
+ property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> AnimationSpec;
+ property public final float VelocityThreshold;
+ field public static final androidx.compose.material.SwipeableDefaults INSTANCE;
+ field public static final float StandardResistanceFactor = 10.0f;
+ field public static final float StiffResistanceFactor = 20.0f;
+ }
+
+ @androidx.compose.runtime.Stable public interface SwitchColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> thumbColor(boolean enabled, boolean checked);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trackColor(boolean enabled, boolean checked);
+ }
+
+ public final class SwitchDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.SwitchColors colors(optional long checkedThumbColor, optional long checkedTrackColor, optional float checkedTrackAlpha, optional long uncheckedThumbColor, optional long uncheckedTrackColor, optional float uncheckedTrackAlpha, optional long disabledCheckedThumbColor, optional long disabledCheckedTrackColor, optional long disabledUncheckedThumbColor, optional long disabledUncheckedTrackColor);
+ field public static final androidx.compose.material.SwitchDefaults INSTANCE;
+ }
+
+ public final class SwitchKt {
+ method @androidx.compose.runtime.Composable public static void Switch(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.SwitchColors colors);
+ }
+
+ public final class TabKt {
+ method @androidx.compose.runtime.Composable public static void LeadingIconTab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TabPosition {
+ method public float getLeft();
+ method public float getRight();
+ method public float getWidth();
+ property public final float left;
+ property public final float right;
+ property public final float width;
+ }
+
+ public final class TabRowDefaults {
+ method @androidx.compose.runtime.Composable public void Divider(optional androidx.compose.ui.Modifier modifier, optional float thickness, optional long color);
+ method @androidx.compose.runtime.Composable public void Indicator(optional androidx.compose.ui.Modifier modifier, optional float height, optional long color);
+ method public float getDividerThickness();
+ method public float getIndicatorHeight();
+ method public float getScrollableTabRowPadding();
+ method public androidx.compose.ui.Modifier tabIndicatorOffset(androidx.compose.ui.Modifier, androidx.compose.material.TabPosition currentTabPosition);
+ property public final float DividerThickness;
+ property public final float IndicatorHeight;
+ property public final float ScrollableTabRowPadding;
+ field public static final float DividerOpacity = 0.12f;
+ field public static final androidx.compose.material.TabRowDefaults INSTANCE;
+ }
+
+ public final class TabRowKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void ScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void TabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ }
+
+ @androidx.compose.runtime.Stable public interface TextFieldColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> cursorColor(boolean isError);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> indicatorColor(boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> labelColor(boolean enabled, boolean error, androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> leadingIconColor(boolean enabled, boolean isError);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> placeholderColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> textColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trailingIconColor(boolean enabled, boolean isError);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextFieldDefaults {
+ method public float getFocusedBorderThickness();
+ method public float getMinHeight();
+ method public float getMinWidth();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.ui.graphics.Shape getOutlinedTextFieldShape();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.ui.graphics.Shape getTextFieldShape();
+ method public float getUnfocusedBorderThickness();
+ method @androidx.compose.runtime.Composable public androidx.compose.material.TextFieldColors outlinedTextFieldColors(optional long textColor, optional long disabledTextColor, optional long backgroundColor, optional long cursorColor, optional long errorCursorColor, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long leadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long trailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.TextFieldColors textFieldColors(optional long textColor, optional long disabledTextColor, optional long backgroundColor, optional long cursorColor, optional long errorCursorColor, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long leadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long trailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor);
+ property public final float FocusedBorderThickness;
+ property public final float MinHeight;
+ property public final float MinWidth;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.ui.graphics.Shape OutlinedTextFieldShape;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.ui.graphics.Shape TextFieldShape;
+ property public final float UnfocusedBorderThickness;
+ field public static final float BackgroundOpacity = 0.12f;
+ field public static final androidx.compose.material.TextFieldDefaults INSTANCE;
+ field public static final float IconOpacity = 0.54f;
+ field public static final float UnfocusedIndicatorLineOpacity = 0.42f;
+ }
+
+ public final class TextFieldKt {
+ method @androidx.compose.runtime.Composable public static void TextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void TextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ }
+
+ public final class TextKt {
+ method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
+ }
+
+ @androidx.compose.runtime.Immutable public final class Typography {
+ ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
+ method public androidx.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
+ method public androidx.compose.ui.text.TextStyle getBody1();
+ method public androidx.compose.ui.text.TextStyle getBody2();
+ method public androidx.compose.ui.text.TextStyle getButton();
+ method public androidx.compose.ui.text.TextStyle getCaption();
+ method public androidx.compose.ui.text.TextStyle getH1();
+ method public androidx.compose.ui.text.TextStyle getH2();
+ method public androidx.compose.ui.text.TextStyle getH3();
+ method public androidx.compose.ui.text.TextStyle getH4();
+ method public androidx.compose.ui.text.TextStyle getH5();
+ method public androidx.compose.ui.text.TextStyle getH6();
+ method public androidx.compose.ui.text.TextStyle getOverline();
+ method public androidx.compose.ui.text.TextStyle getSubtitle1();
+ method public androidx.compose.ui.text.TextStyle getSubtitle2();
+ property public final androidx.compose.ui.text.TextStyle body1;
+ property public final androidx.compose.ui.text.TextStyle body2;
+ property public final androidx.compose.ui.text.TextStyle button;
+ property public final androidx.compose.ui.text.TextStyle caption;
+ property public final androidx.compose.ui.text.TextStyle h1;
+ property public final androidx.compose.ui.text.TextStyle h2;
+ property public final androidx.compose.ui.text.TextStyle h3;
+ property public final androidx.compose.ui.text.TextStyle h4;
+ property public final androidx.compose.ui.text.TextStyle h5;
+ property public final androidx.compose.ui.text.TextStyle h6;
+ property public final androidx.compose.ui.text.TextStyle overline;
+ property public final androidx.compose.ui.text.TextStyle subtitle1;
+ property public final androidx.compose.ui.text.TextStyle subtitle2;
+ }
+
+}
+
diff --git a/compose/material/material/api/current.ignore b/compose/material/material/api/current.ignore
deleted file mode 100644
index d24bb34..0000000
--- a/compose/material/material/api/current.ignore
+++ /dev/null
@@ -1,49 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.material.AlertDialogKt:
- Removed class androidx.compose.material.AlertDialogKt
-RemovedClass: androidx.compose.material.BackdropScaffoldKt:
- Removed class androidx.compose.material.BackdropScaffoldKt
-RemovedClass: androidx.compose.material.BottomSheetScaffoldKt:
- Removed class androidx.compose.material.BottomSheetScaffoldKt
-RemovedClass: androidx.compose.material.ChipKt:
- Removed class androidx.compose.material.ChipKt
-RemovedClass: androidx.compose.material.DragGestureDetectorCopyKt:
- Removed class androidx.compose.material.DragGestureDetectorCopyKt
-RemovedClass: androidx.compose.material.ElevationKt:
- Removed class androidx.compose.material.ElevationKt
-RemovedClass: androidx.compose.material.ExposedDropdownMenuKt:
- Removed class androidx.compose.material.ExposedDropdownMenuKt
-RemovedClass: androidx.compose.material.ListItemKt:
- Removed class androidx.compose.material.ListItemKt
-RemovedClass: androidx.compose.material.MaterialTextSelectionColorsKt:
- Removed class androidx.compose.material.MaterialTextSelectionColorsKt
-RemovedClass: androidx.compose.material.MaterialTheme_androidKt:
- Removed class androidx.compose.material.MaterialTheme_androidKt
-RemovedClass: androidx.compose.material.MenuKt:
- Removed class androidx.compose.material.MenuKt
-RemovedClass: androidx.compose.material.ModalBottomSheetKt:
- Removed class androidx.compose.material.ModalBottomSheetKt
-RemovedClass: androidx.compose.material.ShapesKt:
- Removed class androidx.compose.material.ShapesKt
-RemovedClass: androidx.compose.material.Strings_androidKt:
- Removed class androidx.compose.material.Strings_androidKt
-RemovedClass: androidx.compose.material.SwipeToDismissKt:
- Removed class androidx.compose.material.SwipeToDismissKt
-RemovedClass: androidx.compose.material.SwipeableKt:
- Removed class androidx.compose.material.SwipeableKt
-RemovedClass: androidx.compose.material.SwipeableV2Kt:
- Removed class androidx.compose.material.SwipeableV2Kt
-RemovedClass: androidx.compose.material.TextFieldDefaultsKt:
- Removed class androidx.compose.material.TextFieldDefaultsKt
-RemovedClass: androidx.compose.material.TextFieldImplKt:
- Removed class androidx.compose.material.TextFieldImplKt
-RemovedClass: androidx.compose.material.TouchTargetKt:
- Removed class androidx.compose.material.TouchTargetKt
-RemovedClass: androidx.compose.material.TypographyKt:
- Removed class androidx.compose.material.TypographyKt
-
-
-RemovedPackage: androidx.compose.material.internal:
- Removed package androidx.compose.material.internal
-RemovedPackage: androidx.compose.material.pullrefresh:
- Removed package androidx.compose.material.pullrefresh
diff --git a/compose/material/material/api/public_plus_experimental_1.4.0-beta02.txt b/compose/material/material/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..9ae0deb
--- /dev/null
+++ b/compose/material/material/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,966 @@
+// Signature format: 4.0
+package androidx.compose.material {
+
+ public final class AndroidAlertDialog_androidKt {
+ method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
+ method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
+ }
+
+ public final class AndroidMenu_androidKt {
+ method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ public final class AppBarDefaults {
+ method public float getBottomAppBarElevation();
+ method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+ method public float getTopAppBarElevation();
+ property public final float BottomAppBarElevation;
+ property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+ property public final float TopAppBarElevation;
+ field public static final androidx.compose.material.AppBarDefaults INSTANCE;
+ }
+
+ public final class AppBarKt {
+ method @androidx.compose.runtime.Composable public static void BottomAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.graphics.Shape? cutoutShape, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void TopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional long backgroundColor, optional long contentColor, optional float elevation);
+ method @androidx.compose.runtime.Composable public static void TopAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ public final class BackdropScaffoldDefaults {
+ method public float getFrontLayerElevation();
+ method @androidx.compose.runtime.Composable public long getFrontLayerScrimColor();
+ method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getFrontLayerShape();
+ method public float getHeaderHeight();
+ method public float getPeekHeight();
+ property public final float FrontLayerElevation;
+ property public final float HeaderHeight;
+ property public final float PeekHeight;
+ property @androidx.compose.runtime.Composable public final long frontLayerScrimColor;
+ property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape frontLayerShape;
+ field public static final androidx.compose.material.BackdropScaffoldDefaults INSTANCE;
+ }
+
+ public final class BackdropScaffoldKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void BackdropScaffold(kotlin.jvm.functions.Function0<kotlin.Unit> appBar, kotlin.jvm.functions.Function0<kotlin.Unit> backLayerContent, kotlin.jvm.functions.Function0<kotlin.Unit> frontLayerContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.BackdropScaffoldState scaffoldState, optional boolean gesturesEnabled, optional float peekHeight, optional float headerHeight, optional boolean persistentAppBar, optional boolean stickyFrontLayer, optional long backLayerBackgroundColor, optional long backLayerContentColor, optional androidx.compose.ui.graphics.Shape frontLayerShape, optional float frontLayerElevation, optional long frontLayerBackgroundColor, optional long frontLayerContentColor, optional long frontLayerScrimColor, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.SnackbarHostState,kotlin.Unit> snackbarHost);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.BackdropScaffoldState rememberBackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, optional androidx.compose.material.SnackbarHostState snackbarHostState);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BackdropScaffoldState extends androidx.compose.material.SwipeableState<androidx.compose.material.BackdropValue> {
+ ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, optional androidx.compose.material.SnackbarHostState snackbarHostState);
+ method public suspend Object? conceal(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.material.SnackbarHostState getSnackbarHostState();
+ method public boolean isConcealed();
+ method public boolean isRevealed();
+ method public suspend Object? reveal(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public final boolean isConcealed;
+ property public final boolean isRevealed;
+ property public final androidx.compose.material.SnackbarHostState snackbarHostState;
+ field public static final androidx.compose.material.BackdropScaffoldState.Companion Companion;
+ }
+
+ public static final class BackdropScaffoldState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.BackdropScaffoldState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, androidx.compose.material.SnackbarHostState snackbarHostState);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi public enum BackdropValue {
+ method public static androidx.compose.material.BackdropValue valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.BackdropValue[] values();
+ enum_constant public static final androidx.compose.material.BackdropValue Concealed;
+ enum_constant public static final androidx.compose.material.BackdropValue Revealed;
+ }
+
+ public final class BadgeKt {
+ method @androidx.compose.runtime.Composable public static void Badge(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? content);
+ method @androidx.compose.runtime.Composable public static void BadgedBox(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> badge, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi public final class BottomDrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomDrawerValue> {
+ ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
+ method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public boolean isClosed();
+ method public boolean isExpanded();
+ method public boolean isOpen();
+ method public suspend Object? open(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public final boolean isClosed;
+ property public final boolean isExpanded;
+ property public final boolean isOpen;
+ field public static final androidx.compose.material.BottomDrawerState.Companion Companion;
+ }
+
+ public static final class BottomDrawerState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.BottomDrawerState,androidx.compose.material.BottomDrawerValue> Saver(kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi public enum BottomDrawerValue {
+ method public static androidx.compose.material.BottomDrawerValue valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.BottomDrawerValue[] values();
+ enum_constant public static final androidx.compose.material.BottomDrawerValue Closed;
+ enum_constant public static final androidx.compose.material.BottomDrawerValue Expanded;
+ enum_constant public static final androidx.compose.material.BottomDrawerValue Open;
+ }
+
+ public final class BottomNavigationDefaults {
+ method public float getElevation();
+ property public final float Elevation;
+ field public static final androidx.compose.material.BottomNavigationDefaults INSTANCE;
+ }
+
+ public final class BottomNavigationKt {
+ method @androidx.compose.runtime.Composable public static void BottomNavigation(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void BottomNavigationItem(androidx.compose.foundation.layout.RowScope, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional boolean alwaysShowLabel, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ }
+
+ public final class BottomSheetScaffoldDefaults {
+ method public float getSheetElevation();
+ method public float getSheetPeekHeight();
+ property public final float SheetElevation;
+ property public final float SheetPeekHeight;
+ field public static final androidx.compose.material.BottomSheetScaffoldDefaults INSTANCE;
+ }
+
+ public final class BottomSheetScaffoldKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void BottomSheetScaffold(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> sheetContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.BottomSheetScaffoldState scaffoldState, optional kotlin.jvm.functions.Function0<kotlin.Unit>? topBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.SnackbarHostState,kotlin.Unit> snackbarHost, optional kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton, optional int floatingActionButtonPosition, optional boolean sheetGesturesEnabled, optional androidx.compose.ui.graphics.Shape sheetShape, optional float sheetElevation, optional long sheetBackgroundColor, optional long sheetContentColor, optional float sheetPeekHeight, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? drawerContent, optional boolean drawerGesturesEnabled, optional androidx.compose.ui.graphics.Shape drawerShape, optional float drawerElevation, optional long drawerBackgroundColor, optional long drawerContentColor, optional long drawerScrimColor, optional long backgroundColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.material.ExperimentalMaterialApi public static androidx.compose.material.BottomSheetState BottomSheetScaffoldState(androidx.compose.material.BottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.BottomSheetScaffoldState rememberBottomSheetScaffoldState(optional androidx.compose.material.DrawerState drawerState, optional androidx.compose.material.BottomSheetState bottomSheetState, optional androidx.compose.material.SnackbarHostState snackbarHostState);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.BottomSheetState rememberBottomSheetState(androidx.compose.material.BottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BottomSheetScaffoldState {
+ ctor public BottomSheetScaffoldState(androidx.compose.material.DrawerState drawerState, androidx.compose.material.BottomSheetState bottomSheetState, androidx.compose.material.SnackbarHostState snackbarHostState);
+ method public androidx.compose.material.BottomSheetState getBottomSheetState();
+ method public androidx.compose.material.DrawerState getDrawerState();
+ method public androidx.compose.material.SnackbarHostState getSnackbarHostState();
+ property public final androidx.compose.material.BottomSheetState bottomSheetState;
+ property public final androidx.compose.material.DrawerState drawerState;
+ property public final androidx.compose.material.SnackbarHostState snackbarHostState;
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BottomSheetState {
+ ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmValueChange);
+ method public suspend Object? collapse(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.material.BottomSheetValue getCurrentValue();
+ method @Deprecated public float getOffset();
+ method public float getProgress();
+ method public boolean isCollapsed();
+ method public boolean isExpanded();
+ method public float requireOffset();
+ property public final androidx.compose.material.BottomSheetValue currentValue;
+ property public final boolean isCollapsed;
+ property public final boolean isExpanded;
+ property @Deprecated public final float offset;
+ property public final float progress;
+ field public static final androidx.compose.material.BottomSheetState.Companion Companion;
+ }
+
+ public static final class BottomSheetState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.BottomSheetState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi public enum BottomSheetValue {
+ method public static androidx.compose.material.BottomSheetValue valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.BottomSheetValue[] values();
+ enum_constant public static final androidx.compose.material.BottomSheetValue Collapsed;
+ enum_constant public static final androidx.compose.material.BottomSheetValue Expanded;
+ }
+
+ @androidx.compose.runtime.Stable public interface ButtonColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+ }
+
+ public final class ButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors buttonColors(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation, optional float hoveredElevation, optional float focusedElevation);
+ method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation);
+ method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+ method public float getIconSize();
+ method public float getIconSpacing();
+ method public float getMinHeight();
+ method public float getMinWidth();
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke getOutlinedBorder();
+ method public float getOutlinedBorderSize();
+ method public androidx.compose.foundation.layout.PaddingValues getTextButtonContentPadding();
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors outlinedButtonColors(optional long backgroundColor, optional long contentColor, optional long disabledContentColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors textButtonColors(optional long backgroundColor, optional long contentColor, optional long disabledContentColor);
+ property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+ property public final float IconSize;
+ property public final float IconSpacing;
+ property public final float MinHeight;
+ property public final float MinWidth;
+ property public final float OutlinedBorderSize;
+ property public final androidx.compose.foundation.layout.PaddingValues TextButtonContentPadding;
+ property @androidx.compose.runtime.Composable public final androidx.compose.foundation.BorderStroke outlinedBorder;
+ field public static final androidx.compose.material.ButtonDefaults INSTANCE;
+ field public static final float OutlinedBorderOpacity = 0.12f;
+ }
+
+ @androidx.compose.runtime.Stable public interface ButtonElevation {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> elevation(boolean enabled, androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ }
+
+ public final class ButtonKt {
+ method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.ButtonElevation? elevation, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material.ButtonColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.ButtonElevation? elevation, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material.ButtonColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void TextButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.ButtonElevation? elevation, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material.ButtonColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ public final class CardKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Card(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @Deprecated @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Stable public interface CheckboxColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> borderColor(boolean enabled, androidx.compose.ui.state.ToggleableState state);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> boxColor(boolean enabled, androidx.compose.ui.state.ToggleableState state);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> checkmarkColor(androidx.compose.ui.state.ToggleableState state);
+ }
+
+ public final class CheckboxDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.CheckboxColors colors(optional long checkedColor, optional long uncheckedColor, optional long checkmarkColor, optional long disabledColor, optional long disabledIndeterminateColor);
+ field public static final androidx.compose.material.CheckboxDefaults INSTANCE;
+ }
+
+ public final class CheckboxKt {
+ method @androidx.compose.runtime.Composable public static void Checkbox(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.CheckboxColors colors);
+ method @androidx.compose.runtime.Composable public static void TriStateCheckbox(androidx.compose.ui.state.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.CheckboxColors colors);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public interface ChipColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> leadingIconContentColor(boolean enabled);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi public final class ChipDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ChipColors chipColors(optional long backgroundColor, optional long contentColor, optional long leadingIconContentColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledLeadingIconContentColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.SelectableChipColors filterChipColors(optional long backgroundColor, optional long contentColor, optional long leadingIconColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledLeadingIconColor, optional long selectedBackgroundColor, optional long selectedContentColor, optional long selectedLeadingIconColor);
+ method public float getLeadingIconSize();
+ method public float getMinHeight();
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke getOutlinedBorder();
+ method public float getOutlinedBorderSize();
+ method public float getSelectedIconSize();
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ChipColors outlinedChipColors(optional long backgroundColor, optional long contentColor, optional long leadingIconContentColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledLeadingIconContentColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.SelectableChipColors outlinedFilterChipColors(optional long backgroundColor, optional long contentColor, optional long leadingIconColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledLeadingIconColor, optional long selectedBackgroundColor, optional long selectedContentColor, optional long selectedLeadingIconColor);
+ property public final float LeadingIconSize;
+ property public final float MinHeight;
+ property public final float OutlinedBorderSize;
+ property public final float SelectedIconSize;
+ property @androidx.compose.runtime.Composable public final androidx.compose.foundation.BorderStroke outlinedBorder;
+ field public static final float ContentOpacity = 0.87f;
+ field public static final androidx.compose.material.ChipDefaults INSTANCE;
+ field public static final float LeadingIconOpacity = 0.54f;
+ field public static final float OutlinedBorderOpacity = 0.12f;
+ }
+
+ public final class ChipKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material.ChipColors colors, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void FilterChip(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material.SelectableChipColors colors, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? selectedIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Stable public final class Colors {
+ ctor public Colors(long primary, long primaryVariant, long secondary, long secondaryVariant, long background, long surface, long error, long onPrimary, long onSecondary, long onBackground, long onSurface, long onError, boolean isLight);
+ method public androidx.compose.material.Colors copy(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onError, optional boolean isLight);
+ method public long getBackground();
+ method public long getError();
+ method public long getOnBackground();
+ method public long getOnError();
+ method public long getOnPrimary();
+ method public long getOnSecondary();
+ method public long getOnSurface();
+ method public long getPrimary();
+ method public long getPrimaryVariant();
+ method public long getSecondary();
+ method public long getSecondaryVariant();
+ method public long getSurface();
+ method public boolean isLight();
+ property public final long background;
+ property public final long error;
+ property public final boolean isLight;
+ property public final long onBackground;
+ property public final long onError;
+ property public final long onPrimary;
+ property public final long onSecondary;
+ property public final long onSurface;
+ property public final long primary;
+ property public final long primaryVariant;
+ property public final long secondary;
+ property public final long secondaryVariant;
+ property public final long surface;
+ }
+
+ public final class ColorsKt {
+ method public static long contentColorFor(androidx.compose.material.Colors, long backgroundColor);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long contentColorFor(long backgroundColor);
+ method public static androidx.compose.material.Colors darkColors(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onError);
+ method public static long getPrimarySurface(androidx.compose.material.Colors);
+ method public static androidx.compose.material.Colors lightColors(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onError);
+ }
+
+ public final class ContentAlpha {
+ method @androidx.compose.runtime.Composable public float getDisabled();
+ method @androidx.compose.runtime.Composable public float getHigh();
+ method @androidx.compose.runtime.Composable public float getMedium();
+ property @androidx.compose.runtime.Composable public final float disabled;
+ property @androidx.compose.runtime.Composable public final float high;
+ property @androidx.compose.runtime.Composable public final float medium;
+ field public static final androidx.compose.material.ContentAlpha INSTANCE;
+ }
+
+ public final class ContentAlphaKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> getLocalContentAlpha();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> LocalContentAlpha;
+ }
+
+ public final class ContentColorKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> getLocalContentColor();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> LocalContentColor;
+ }
+
+ public enum DismissDirection {
+ method public static androidx.compose.material.DismissDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.DismissDirection[] values();
+ enum_constant public static final androidx.compose.material.DismissDirection EndToStart;
+ enum_constant public static final androidx.compose.material.DismissDirection StartToEnd;
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi public final class DismissState extends androidx.compose.material.SwipeableState<androidx.compose.material.DismissValue> {
+ ctor public DismissState(androidx.compose.material.DismissValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
+ method public suspend Object? dismiss(androidx.compose.material.DismissDirection direction, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.material.DismissDirection? getDismissDirection();
+ method public boolean isDismissed(androidx.compose.material.DismissDirection direction);
+ method public suspend Object? reset(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public final androidx.compose.material.DismissDirection? dismissDirection;
+ field public static final androidx.compose.material.DismissState.Companion Companion;
+ }
+
+ public static final class DismissState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.DismissState,androidx.compose.material.DismissValue> Saver(kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ public enum DismissValue {
+ method public static androidx.compose.material.DismissValue valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.DismissValue[] values();
+ enum_constant public static final androidx.compose.material.DismissValue Default;
+ enum_constant public static final androidx.compose.material.DismissValue DismissedToEnd;
+ enum_constant public static final androidx.compose.material.DismissValue DismissedToStart;
+ }
+
+ public final class DividerKt {
+ method @androidx.compose.runtime.Composable public static void Divider(optional androidx.compose.ui.Modifier modifier, optional long color, optional float thickness, optional float startIndent);
+ }
+
+ public final class DrawerDefaults {
+ method public float getElevation();
+ method @androidx.compose.runtime.Composable public long getScrimColor();
+ property public final float Elevation;
+ property @androidx.compose.runtime.Composable public final long scrimColor;
+ field public static final androidx.compose.material.DrawerDefaults INSTANCE;
+ field public static final float ScrimOpacity = 0.32f;
+ }
+
+ public final class DrawerKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void BottomDrawer(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> drawerContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.BottomDrawerState drawerState, optional boolean gesturesEnabled, optional androidx.compose.ui.graphics.Shape drawerShape, optional float drawerElevation, optional long drawerBackgroundColor, optional long drawerContentColor, optional long scrimColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void ModalDrawer(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> drawerContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.DrawerState drawerState, optional boolean gesturesEnabled, optional androidx.compose.ui.graphics.Shape drawerShape, optional float drawerElevation, optional long drawerBackgroundColor, optional long drawerContentColor, optional long scrimColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.BottomDrawerState rememberBottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
+ method @androidx.compose.runtime.Composable public static androidx.compose.material.DrawerState rememberDrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ @androidx.compose.runtime.Stable public final class DrawerState {
+ ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+ method @Deprecated @androidx.compose.material.ExperimentalMaterialApi public suspend Object? animateTo(androidx.compose.material.DrawerValue targetValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.material.DrawerValue getCurrentValue();
+ method @androidx.compose.material.ExperimentalMaterialApi public Float? getOffset();
+ method @androidx.compose.material.ExperimentalMaterialApi public androidx.compose.material.DrawerValue getTargetValue();
+ method public boolean isAnimationRunning();
+ method public boolean isClosed();
+ method public boolean isOpen();
+ method public suspend Object? open(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? snapTo(androidx.compose.material.DrawerValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public final androidx.compose.material.DrawerValue currentValue;
+ property public final boolean isAnimationRunning;
+ property public final boolean isClosed;
+ property public final boolean isOpen;
+ property @androidx.compose.material.ExperimentalMaterialApi public final Float? offset;
+ property @androidx.compose.material.ExperimentalMaterialApi public final androidx.compose.material.DrawerValue targetValue;
+ field public static final androidx.compose.material.DrawerState.Companion Companion;
+ }
+
+ public static final class DrawerState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.DrawerState,androidx.compose.material.DrawerValue> Saver(kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ public enum DrawerValue {
+ method public static androidx.compose.material.DrawerValue valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.DrawerValue[] values();
+ enum_constant public static final androidx.compose.material.DrawerValue Closed;
+ enum_constant public static final androidx.compose.material.DrawerValue Open;
+ }
+
+ public interface ElevationOverlay {
+ method @androidx.compose.runtime.Composable public long apply(long color, float elevation);
+ }
+
+ public final class ElevationOverlayKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> getLocalAbsoluteElevation();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ElevationOverlay> getLocalElevationOverlay();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> LocalAbsoluteElevation;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ElevationOverlay> LocalElevationOverlay;
+ }
+
+ @kotlin.RequiresOptIn(message="This material API is experimental and is likely to change or to be removed in" + " the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalMaterialApi {
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi @kotlin.jvm.JvmDefaultWithCompatibility public interface ExposedDropdownMenuBoxScope {
+ method @androidx.compose.runtime.Composable public default void ExposedDropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method public androidx.compose.ui.Modifier exposedDropdownSize(androidx.compose.ui.Modifier, optional boolean matchTextFieldWidth);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi public final class ExposedDropdownMenuDefaults {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public void TrailingIcon(boolean expanded, optional kotlin.jvm.functions.Function0<kotlin.Unit> onIconClick);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.TextFieldColors outlinedTextFieldColors(optional long textColor, optional long disabledTextColor, optional long backgroundColor, optional long cursorColor, optional long errorCursorColor, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long leadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long trailingIconColor, optional long focusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.TextFieldColors textFieldColors(optional long textColor, optional long disabledTextColor, optional long backgroundColor, optional long cursorColor, optional long errorCursorColor, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long leadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long trailingIconColor, optional long focusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor);
+ field public static final androidx.compose.material.ExposedDropdownMenuDefaults INSTANCE;
+ }
+
+ public final class ExposedDropdownMenuKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void ExposedDropdownMenuBox(boolean expanded, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onExpandedChange, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.material.ExposedDropdownMenuBoxScope,kotlin.Unit> content);
+ }
+
+ @kotlin.jvm.JvmInline public final value class FabPosition {
+ field public static final androidx.compose.material.FabPosition.Companion Companion;
+ }
+
+ public static final class FabPosition.Companion {
+ method public int getCenter();
+ method public int getEnd();
+ property public final int Center;
+ property public final int End;
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Immutable public final class FixedThreshold implements androidx.compose.material.ThresholdConfig {
+ ctor public FixedThreshold(float offset);
+ method public float computeThreshold(androidx.compose.ui.unit.Density, float fromValue, float toValue);
+ method public androidx.compose.material.FixedThreshold copy-0680j_4(float offset);
+ }
+
+ public final class FloatingActionButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float hoveredElevation, optional float focusedElevation);
+ method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation);
+ field public static final androidx.compose.material.FloatingActionButtonDefaults INSTANCE;
+ }
+
+ @androidx.compose.runtime.Stable public interface FloatingActionButtonElevation {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> elevation(androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ }
+
+ public final class FloatingActionButtonKt {
+ method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.material.FloatingActionButtonElevation elevation);
+ method @androidx.compose.runtime.Composable public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.material.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Immutable public final class FractionalThreshold implements androidx.compose.material.ThresholdConfig {
+ ctor public FractionalThreshold(float fraction);
+ method public float computeThreshold(androidx.compose.ui.unit.Density, float fromValue, float toValue);
+ method public androidx.compose.material.FractionalThreshold copy(float fraction);
+ }
+
+ public final class IconButtonKt {
+ method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class IconKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ }
+
+ public final class InteractiveComponentSizeKt {
+ method @androidx.compose.material.ExperimentalMaterialApi public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Boolean> getLocalMinimumInteractiveComponentEnforcement();
+ method @Deprecated @androidx.compose.material.ExperimentalMaterialApi public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Boolean> getLocalMinimumTouchTargetEnforcement();
+ method public static androidx.compose.ui.Modifier minimumInteractiveComponentSize(androidx.compose.ui.Modifier);
+ property @androidx.compose.material.ExperimentalMaterialApi public static final androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Boolean> LocalMinimumInteractiveComponentEnforcement;
+ property @Deprecated @androidx.compose.material.ExperimentalMaterialApi public static final androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Boolean> LocalMinimumTouchTargetEnforcement;
+ }
+
+ public final class ListItemKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void ListItem(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText, optional boolean singleLineSecondaryText, optional kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailing, kotlin.jvm.functions.Function0<kotlin.Unit> text);
+ }
+
+ public final class MaterialTheme {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.material.Colors getColors();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.material.Shapes getShapes();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.material.Typography getTypography();
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.material.Colors colors;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.material.Shapes shapes;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.material.Typography typography;
+ field public static final androidx.compose.material.MaterialTheme INSTANCE;
+ }
+
+ public final class MaterialThemeKt {
+ method @androidx.compose.runtime.Composable public static void MaterialTheme(optional androidx.compose.material.Colors colors, optional androidx.compose.material.Typography typography, optional androidx.compose.material.Shapes shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class MenuDefaults {
+ method public androidx.compose.foundation.layout.PaddingValues getDropdownMenuItemContentPadding();
+ property public final androidx.compose.foundation.layout.PaddingValues DropdownMenuItemContentPadding;
+ field public static final androidx.compose.material.MenuDefaults INSTANCE;
+ }
+
+ public final class ModalBottomSheetDefaults {
+ method public float getElevation();
+ method @androidx.compose.runtime.Composable public long getScrimColor();
+ property public final float Elevation;
+ property @androidx.compose.runtime.Composable public final long scrimColor;
+ field public static final androidx.compose.material.ModalBottomSheetDefaults INSTANCE;
+ }
+
+ public final class ModalBottomSheetKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void ModalBottomSheetLayout(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> sheetContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.ModalBottomSheetState sheetState, optional androidx.compose.ui.graphics.Shape sheetShape, optional float sheetElevation, optional long sheetBackgroundColor, optional long sheetContentColor, optional long scrimColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.material.ExperimentalMaterialApi public static androidx.compose.material.ModalBottomSheetState ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, optional boolean isSkipHalfExpanded);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.ModalBottomSheetState rememberModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, optional boolean skipHalfExpanded);
+ method @Deprecated @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.ModalBottomSheetState rememberModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, boolean skipHalfExpanded, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+ method @Deprecated @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.ModalBottomSheetState rememberModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi public final class ModalBottomSheetState {
+ ctor @Deprecated public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional boolean isSkipHalfExpanded, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+ ctor @Deprecated public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+ method public androidx.compose.material.ModalBottomSheetValue getCurrentValue();
+ method public androidx.compose.material.ModalBottomSheetValue getTargetValue();
+ method public suspend Object? hide(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public boolean isVisible();
+ method public suspend Object? show(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public final androidx.compose.material.ModalBottomSheetValue currentValue;
+ property public final boolean isVisible;
+ property public final androidx.compose.material.ModalBottomSheetValue targetValue;
+ field public static final androidx.compose.material.ModalBottomSheetState.Companion Companion;
+ }
+
+ public static final class ModalBottomSheetState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.ModalBottomSheetState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, boolean skipHalfExpanded);
+ method @Deprecated public androidx.compose.runtime.saveable.Saver<androidx.compose.material.ModalBottomSheetState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, boolean skipHalfExpanded, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi public enum ModalBottomSheetValue {
+ method public static androidx.compose.material.ModalBottomSheetValue valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.ModalBottomSheetValue[] values();
+ enum_constant public static final androidx.compose.material.ModalBottomSheetValue Expanded;
+ enum_constant public static final androidx.compose.material.ModalBottomSheetValue HalfExpanded;
+ enum_constant public static final androidx.compose.material.ModalBottomSheetValue Hidden;
+ }
+
+ public final class NavigationRailDefaults {
+ method public float getElevation();
+ property public final float Elevation;
+ field public static final androidx.compose.material.NavigationRailDefaults INSTANCE;
+ }
+
+ public final class NavigationRailKt {
+ method @androidx.compose.runtime.Composable public static void NavigationRail(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? header, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void NavigationRailItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional boolean alwaysShowLabel, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ }
+
+ public final class OutlinedTextFieldKt {
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ }
+
+ public final class ProgressIndicatorDefaults {
+ method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getProgressAnimationSpec();
+ method public float getStrokeWidth();
+ property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> ProgressAnimationSpec;
+ property public final float StrokeWidth;
+ field public static final androidx.compose.material.ProgressIndicatorDefaults INSTANCE;
+ field public static final float IndicatorBackgroundOpacity = 0.24f;
+ }
+
+ public final class ProgressIndicatorKt {
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
+ }
+
+ @androidx.compose.runtime.Stable public interface RadioButtonColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> radioColor(boolean enabled, boolean selected);
+ }
+
+ public final class RadioButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.RadioButtonColors colors(optional long selectedColor, optional long unselectedColor, optional long disabledColor);
+ field public static final androidx.compose.material.RadioButtonDefaults INSTANCE;
+ }
+
+ public final class RadioButtonKt {
+ method @androidx.compose.runtime.Composable public static void RadioButton(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.RadioButtonColors colors);
+ }
+
+ @androidx.compose.runtime.Immutable public final class ResistanceConfig {
+ ctor public ResistanceConfig(float basis, optional float factorAtMin, optional float factorAtMax);
+ method public float computeResistance(float overflow);
+ method public float getBasis();
+ method public float getFactorAtMax();
+ method public float getFactorAtMin();
+ property public final float basis;
+ property public final float factorAtMax;
+ property public final float factorAtMin;
+ }
+
+ public final class ScaffoldKt {
+ method @androidx.compose.runtime.Composable public static void Scaffold(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.ScaffoldState scaffoldState, optional kotlin.jvm.functions.Function0<kotlin.Unit> topBar, optional kotlin.jvm.functions.Function0<kotlin.Unit> bottomBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.SnackbarHostState,kotlin.Unit> snackbarHost, optional kotlin.jvm.functions.Function0<kotlin.Unit> floatingActionButton, optional int floatingActionButtonPosition, optional boolean isFloatingActionButtonDocked, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? drawerContent, optional boolean drawerGesturesEnabled, optional androidx.compose.ui.graphics.Shape drawerShape, optional float drawerElevation, optional long drawerBackgroundColor, optional long drawerContentColor, optional long drawerScrimColor, optional long backgroundColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static androidx.compose.material.ScaffoldState rememberScaffoldState(optional androidx.compose.material.DrawerState drawerState, optional androidx.compose.material.SnackbarHostState snackbarHostState);
+ }
+
+ @androidx.compose.runtime.Stable public final class ScaffoldState {
+ ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, androidx.compose.material.SnackbarHostState snackbarHostState);
+ method public androidx.compose.material.DrawerState getDrawerState();
+ method public androidx.compose.material.SnackbarHostState getSnackbarHostState();
+ property public final androidx.compose.material.DrawerState drawerState;
+ property public final androidx.compose.material.SnackbarHostState snackbarHostState;
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi public interface SelectableChipColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled, boolean selected);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean selected);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> leadingIconColor(boolean enabled, boolean selected);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Shapes {
+ ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+ method public androidx.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+ method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
+ method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
+ method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
+ property public final androidx.compose.foundation.shape.CornerBasedShape large;
+ property public final androidx.compose.foundation.shape.CornerBasedShape medium;
+ property public final androidx.compose.foundation.shape.CornerBasedShape small;
+ }
+
+ @androidx.compose.runtime.Stable public interface SliderColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> thumbColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> tickColor(boolean enabled, boolean active);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trackColor(boolean enabled, boolean active);
+ }
+
+ public final class SliderDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.SliderColors colors(optional long thumbColor, optional long disabledThumbColor, optional long activeTrackColor, optional long inactiveTrackColor, optional long disabledActiveTrackColor, optional long disabledInactiveTrackColor, optional long activeTickColor, optional long inactiveTickColor, optional long disabledActiveTickColor, optional long disabledInactiveTickColor);
+ field public static final float DisabledActiveTrackAlpha = 0.32f;
+ field public static final float DisabledInactiveTrackAlpha = 0.12f;
+ field public static final float DisabledTickAlpha = 0.12f;
+ field public static final androidx.compose.material.SliderDefaults INSTANCE;
+ field public static final float InactiveTrackAlpha = 0.24f;
+ field public static final float TickAlpha = 0.54f;
+ }
+
+ public final class SliderKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void RangeSlider(kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> value, kotlin.jvm.functions.Function1<? super kotlin.ranges.ClosedFloatingPointRange<java.lang.Float>,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onValueChangeFinished, optional androidx.compose.material.SliderColors colors);
+ method @androidx.compose.runtime.Composable public static void Slider(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onValueChangeFinished, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.SliderColors colors);
+ }
+
+ public interface SnackbarData {
+ method public void dismiss();
+ method public String? getActionLabel();
+ method public androidx.compose.material.SnackbarDuration getDuration();
+ method public String getMessage();
+ method public void performAction();
+ property public abstract String? actionLabel;
+ property public abstract androidx.compose.material.SnackbarDuration duration;
+ property public abstract String message;
+ }
+
+ public final class SnackbarDefaults {
+ method @androidx.compose.runtime.Composable public long getBackgroundColor();
+ method @androidx.compose.runtime.Composable public long getPrimaryActionColor();
+ property @androidx.compose.runtime.Composable public final long backgroundColor;
+ property @androidx.compose.runtime.Composable public final long primaryActionColor;
+ field public static final androidx.compose.material.SnackbarDefaults INSTANCE;
+ }
+
+ public enum SnackbarDuration {
+ method public static androidx.compose.material.SnackbarDuration valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.SnackbarDuration[] values();
+ enum_constant public static final androidx.compose.material.SnackbarDuration Indefinite;
+ enum_constant public static final androidx.compose.material.SnackbarDuration Long;
+ enum_constant public static final androidx.compose.material.SnackbarDuration Short;
+ }
+
+ public final class SnackbarHostKt {
+ method @androidx.compose.runtime.Composable public static void SnackbarHost(androidx.compose.material.SnackbarHostState hostState, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.SnackbarData,kotlin.Unit> snackbar);
+ }
+
+ @androidx.compose.runtime.Stable public final class SnackbarHostState {
+ ctor public SnackbarHostState();
+ method public androidx.compose.material.SnackbarData? getCurrentSnackbarData();
+ method public suspend Object? showSnackbar(String message, optional String? actionLabel, optional androidx.compose.material.SnackbarDuration duration, optional kotlin.coroutines.Continuation<? super androidx.compose.material.SnackbarResult>);
+ property public final androidx.compose.material.SnackbarData? currentSnackbarData;
+ }
+
+ public final class SnackbarKt {
+ method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Snackbar(androidx.compose.material.SnackbarData snackbarData, optional androidx.compose.ui.Modifier modifier, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional long actionColor, optional float elevation);
+ }
+
+ public enum SnackbarResult {
+ method public static androidx.compose.material.SnackbarResult valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.SnackbarResult[] values();
+ enum_constant public static final androidx.compose.material.SnackbarResult ActionPerformed;
+ enum_constant public static final androidx.compose.material.SnackbarResult Dismissed;
+ }
+
+ public final class SurfaceKt {
+ method @androidx.compose.runtime.Composable public static void Surface(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void Surface(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void Surface(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @Deprecated @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Immutable public final class SwipeProgress<T> {
+ ctor public SwipeProgress(T? from, T? to, float fraction);
+ method public float getFraction();
+ method public T! getFrom();
+ method public T! getTo();
+ property public final float fraction;
+ property public final T! from;
+ property public final T! to;
+ }
+
+ public final class SwipeToDismissKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void SwipeToDismiss(androidx.compose.material.DismissState state, optional androidx.compose.ui.Modifier modifier, optional java.util.Set<? extends androidx.compose.material.DismissDirection> directions, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissDirection,? extends androidx.compose.material.ThresholdConfig> dismissThresholds, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> dismissContent);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.DismissState rememberDismissState(optional androidx.compose.material.DismissValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ public final class SwipeableDefaults {
+ method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getAnimationSpec();
+ method public float getVelocityThreshold();
+ method public androidx.compose.material.ResistanceConfig? resistanceConfig(java.util.Set<java.lang.Float> anchors, optional float factorAtMin, optional float factorAtMax);
+ property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> AnimationSpec;
+ property public final float VelocityThreshold;
+ field public static final androidx.compose.material.SwipeableDefaults INSTANCE;
+ field public static final float StandardResistanceFactor = 10.0f;
+ field public static final float StiffResistanceFactor = 20.0f;
+ }
+
+ public final class SwipeableKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static <T> androidx.compose.material.SwipeableState<T> rememberSwipeableState(T initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+ method @androidx.compose.material.ExperimentalMaterialApi public static <T> androidx.compose.ui.Modifier swipeable(androidx.compose.ui.Modifier, androidx.compose.material.SwipeableState<T> state, java.util.Map<java.lang.Float,? extends T> anchors, androidx.compose.foundation.gestures.Orientation orientation, optional boolean enabled, optional boolean reverseDirection, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional kotlin.jvm.functions.Function2<? super T,? super T,? extends androidx.compose.material.ThresholdConfig> thresholds, optional androidx.compose.material.ResistanceConfig? resistance, optional float velocityThreshold);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public class SwipeableState<T> {
+ ctor public SwipeableState(T? initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+ method @androidx.compose.material.ExperimentalMaterialApi public final suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public final T! getCurrentValue();
+ method public final float getDirection();
+ method public final androidx.compose.runtime.State<java.lang.Float> getOffset();
+ method public final androidx.compose.runtime.State<java.lang.Float> getOverflow();
+ method public final androidx.compose.material.SwipeProgress<T> getProgress();
+ method public final T! getTargetValue();
+ method public final boolean isAnimationRunning();
+ method public final float performDrag(float delta);
+ method public final suspend Object? performFling(float velocity, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @androidx.compose.material.ExperimentalMaterialApi public final suspend Object? snapTo(T? targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public final T! currentValue;
+ property @androidx.compose.material.ExperimentalMaterialApi public final float direction;
+ property public final boolean isAnimationRunning;
+ property public final androidx.compose.runtime.State<java.lang.Float> offset;
+ property public final androidx.compose.runtime.State<java.lang.Float> overflow;
+ property @androidx.compose.material.ExperimentalMaterialApi public final androidx.compose.material.SwipeProgress<T> progress;
+ property @androidx.compose.material.ExperimentalMaterialApi public final T! targetValue;
+ field public static final androidx.compose.material.SwipeableState.Companion Companion;
+ }
+
+ public static final class SwipeableState.Companion {
+ method public <T> androidx.compose.runtime.saveable.Saver<androidx.compose.material.SwipeableState<T>,T> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+ }
+
+ @androidx.compose.runtime.Stable public interface SwitchColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> thumbColor(boolean enabled, boolean checked);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trackColor(boolean enabled, boolean checked);
+ }
+
+ public final class SwitchDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.SwitchColors colors(optional long checkedThumbColor, optional long checkedTrackColor, optional float checkedTrackAlpha, optional long uncheckedThumbColor, optional long uncheckedTrackColor, optional float uncheckedTrackAlpha, optional long disabledCheckedThumbColor, optional long disabledCheckedTrackColor, optional long disabledUncheckedThumbColor, optional long disabledUncheckedTrackColor);
+ field public static final androidx.compose.material.SwitchDefaults INSTANCE;
+ }
+
+ public final class SwitchKt {
+ method @androidx.compose.runtime.Composable public static void Switch(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.SwitchColors colors);
+ }
+
+ public final class TabKt {
+ method @androidx.compose.runtime.Composable public static void LeadingIconTab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TabPosition {
+ method public float getLeft();
+ method public float getRight();
+ method public float getWidth();
+ property public final float left;
+ property public final float right;
+ property public final float width;
+ }
+
+ public final class TabRowDefaults {
+ method @androidx.compose.runtime.Composable public void Divider(optional androidx.compose.ui.Modifier modifier, optional float thickness, optional long color);
+ method @androidx.compose.runtime.Composable public void Indicator(optional androidx.compose.ui.Modifier modifier, optional float height, optional long color);
+ method public float getDividerThickness();
+ method public float getIndicatorHeight();
+ method public float getScrollableTabRowPadding();
+ method public androidx.compose.ui.Modifier tabIndicatorOffset(androidx.compose.ui.Modifier, androidx.compose.material.TabPosition currentTabPosition);
+ property public final float DividerThickness;
+ property public final float IndicatorHeight;
+ property public final float ScrollableTabRowPadding;
+ field public static final float DividerOpacity = 0.12f;
+ field public static final androidx.compose.material.TabRowDefaults INSTANCE;
+ }
+
+ public final class TabRowKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void ScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void TabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ }
+
+ @androidx.compose.runtime.Stable public interface TextFieldColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> cursorColor(boolean isError);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> indicatorColor(boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> labelColor(boolean enabled, boolean error, androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> leadingIconColor(boolean enabled, boolean isError);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> placeholderColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> textColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trailingIconColor(boolean enabled, boolean isError);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi @kotlin.jvm.JvmDefaultWithCompatibility public interface TextFieldColorsWithIcons extends androidx.compose.material.TextFieldColors {
+ method @androidx.compose.runtime.Composable public default androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> leadingIconColor(boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ method @androidx.compose.runtime.Composable public default androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trailingIconColor(boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextFieldDefaults {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public void BorderBox(boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource, androidx.compose.material.TextFieldColors colors, optional androidx.compose.ui.graphics.Shape shape, optional float focusedBorderThickness, optional float unfocusedBorderThickness);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public void OutlinedTextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional androidx.compose.material.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit> border);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public void TextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional androidx.compose.material.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+ method public float getFocusedBorderThickness();
+ method public float getMinHeight();
+ method public float getMinWidth();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.ui.graphics.Shape getOutlinedTextFieldShape();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.ui.graphics.Shape getTextFieldShape();
+ method public float getUnfocusedBorderThickness();
+ method @androidx.compose.material.ExperimentalMaterialApi public androidx.compose.ui.Modifier indicatorLine(androidx.compose.ui.Modifier, boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource, androidx.compose.material.TextFieldColors colors, optional float focusedIndicatorLineThickness, optional float unfocusedIndicatorLineThickness);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.TextFieldColors outlinedTextFieldColors(optional long textColor, optional long disabledTextColor, optional long backgroundColor, optional long cursorColor, optional long errorCursorColor, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long leadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long trailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor);
+ method @androidx.compose.material.ExperimentalMaterialApi public androidx.compose.foundation.layout.PaddingValues outlinedTextFieldPadding(optional float start, optional float top, optional float end, optional float bottom);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.TextFieldColors textFieldColors(optional long textColor, optional long disabledTextColor, optional long backgroundColor, optional long cursorColor, optional long errorCursorColor, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long leadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long trailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor);
+ method @androidx.compose.material.ExperimentalMaterialApi public androidx.compose.foundation.layout.PaddingValues textFieldWithLabelPadding(optional float start, optional float end, optional float top, optional float bottom);
+ method @androidx.compose.material.ExperimentalMaterialApi public androidx.compose.foundation.layout.PaddingValues textFieldWithoutLabelPadding(optional float start, optional float top, optional float end, optional float bottom);
+ property public final float FocusedBorderThickness;
+ property public final float MinHeight;
+ property public final float MinWidth;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.ui.graphics.Shape OutlinedTextFieldShape;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.ui.graphics.Shape TextFieldShape;
+ property public final float UnfocusedBorderThickness;
+ field public static final float BackgroundOpacity = 0.12f;
+ field public static final androidx.compose.material.TextFieldDefaults INSTANCE;
+ field public static final float IconOpacity = 0.54f;
+ field public static final float UnfocusedIndicatorLineOpacity = 0.42f;
+ }
+
+ public final class TextFieldKt {
+ method @androidx.compose.runtime.Composable public static void TextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void TextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ }
+
+ public final class TextKt {
+ method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public interface ThresholdConfig {
+ method public float computeThreshold(androidx.compose.ui.unit.Density, float fromValue, float toValue);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Typography {
+ ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
+ method public androidx.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
+ method public androidx.compose.ui.text.TextStyle getBody1();
+ method public androidx.compose.ui.text.TextStyle getBody2();
+ method public androidx.compose.ui.text.TextStyle getButton();
+ method public androidx.compose.ui.text.TextStyle getCaption();
+ method public androidx.compose.ui.text.TextStyle getH1();
+ method public androidx.compose.ui.text.TextStyle getH2();
+ method public androidx.compose.ui.text.TextStyle getH3();
+ method public androidx.compose.ui.text.TextStyle getH4();
+ method public androidx.compose.ui.text.TextStyle getH5();
+ method public androidx.compose.ui.text.TextStyle getH6();
+ method public androidx.compose.ui.text.TextStyle getOverline();
+ method public androidx.compose.ui.text.TextStyle getSubtitle1();
+ method public androidx.compose.ui.text.TextStyle getSubtitle2();
+ property public final androidx.compose.ui.text.TextStyle body1;
+ property public final androidx.compose.ui.text.TextStyle body2;
+ property public final androidx.compose.ui.text.TextStyle button;
+ property public final androidx.compose.ui.text.TextStyle caption;
+ property public final androidx.compose.ui.text.TextStyle h1;
+ property public final androidx.compose.ui.text.TextStyle h2;
+ property public final androidx.compose.ui.text.TextStyle h3;
+ property public final androidx.compose.ui.text.TextStyle h4;
+ property public final androidx.compose.ui.text.TextStyle h5;
+ property public final androidx.compose.ui.text.TextStyle h6;
+ property public final androidx.compose.ui.text.TextStyle overline;
+ property public final androidx.compose.ui.text.TextStyle subtitle1;
+ property public final androidx.compose.ui.text.TextStyle subtitle2;
+ }
+
+}
+
+package androidx.compose.material.pullrefresh {
+
+ @androidx.compose.material.ExperimentalMaterialApi public final class PullRefreshDefaults {
+ method public float getRefreshThreshold();
+ method public float getRefreshingOffset();
+ property public final float RefreshThreshold;
+ property public final float RefreshingOffset;
+ field public static final androidx.compose.material.pullrefresh.PullRefreshDefaults INSTANCE;
+ }
+
+ public final class PullRefreshIndicatorKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void PullRefreshIndicator(boolean refreshing, androidx.compose.material.pullrefresh.PullRefreshState state, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional boolean scale);
+ }
+
+ public final class PullRefreshIndicatorTransformKt {
+ method @androidx.compose.material.ExperimentalMaterialApi public static androidx.compose.ui.Modifier pullRefreshIndicatorTransform(androidx.compose.ui.Modifier, androidx.compose.material.pullrefresh.PullRefreshState state, optional boolean scale);
+ }
+
+ public final class PullRefreshKt {
+ method @androidx.compose.material.ExperimentalMaterialApi public static androidx.compose.ui.Modifier pullRefresh(androidx.compose.ui.Modifier, androidx.compose.material.pullrefresh.PullRefreshState state, optional boolean enabled);
+ method @androidx.compose.material.ExperimentalMaterialApi public static androidx.compose.ui.Modifier pullRefresh(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> onPull, kotlin.jvm.functions.Function2<? super java.lang.Float,? super kotlin.coroutines.Continuation<? super java.lang.Float>,?> onRelease, optional boolean enabled);
+ }
+
+ @androidx.compose.material.ExperimentalMaterialApi public final class PullRefreshState {
+ method public float getProgress();
+ property public final float progress;
+ }
+
+ public final class PullRefreshStateKt {
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.pullrefresh.PullRefreshState rememberPullRefreshState(boolean refreshing, kotlin.jvm.functions.Function0<kotlin.Unit> onRefresh, optional float refreshThreshold, optional float refreshingOffset);
+ }
+
+}
+
diff --git a/compose/material/material/api/res-1.4.0-beta02.txt b/compose/material/material/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/material/material/api/res-1.4.0-beta02.txt
diff --git a/compose/material/material/api/restricted_1.4.0-beta02.txt b/compose/material/material/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..a8f3f39
--- /dev/null
+++ b/compose/material/material/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,628 @@
+// Signature format: 4.0
+package androidx.compose.material {
+
+ public final class AndroidAlertDialog_androidKt {
+ method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
+ method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
+ }
+
+ public final class AndroidMenu_androidKt {
+ method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ public final class AppBarDefaults {
+ method public float getBottomAppBarElevation();
+ method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+ method public float getTopAppBarElevation();
+ property public final float BottomAppBarElevation;
+ property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+ property public final float TopAppBarElevation;
+ field public static final androidx.compose.material.AppBarDefaults INSTANCE;
+ }
+
+ public final class AppBarKt {
+ method @androidx.compose.runtime.Composable public static void BottomAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.graphics.Shape? cutoutShape, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void TopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional long backgroundColor, optional long contentColor, optional float elevation);
+ method @androidx.compose.runtime.Composable public static void TopAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ public final class BackdropScaffoldDefaults {
+ method public float getFrontLayerElevation();
+ method @androidx.compose.runtime.Composable public long getFrontLayerScrimColor();
+ method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getFrontLayerShape();
+ method public float getHeaderHeight();
+ method public float getPeekHeight();
+ property public final float FrontLayerElevation;
+ property public final float HeaderHeight;
+ property public final float PeekHeight;
+ property @androidx.compose.runtime.Composable public final long frontLayerScrimColor;
+ property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape frontLayerShape;
+ field public static final androidx.compose.material.BackdropScaffoldDefaults INSTANCE;
+ }
+
+ public final class BadgeKt {
+ method @androidx.compose.runtime.Composable public static void Badge(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? content);
+ method @androidx.compose.runtime.Composable public static void BadgedBox(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> badge, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ }
+
+ public final class BottomNavigationDefaults {
+ method public float getElevation();
+ property public final float Elevation;
+ field public static final androidx.compose.material.BottomNavigationDefaults INSTANCE;
+ }
+
+ public final class BottomNavigationKt {
+ method @androidx.compose.runtime.Composable public static void BottomNavigation(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void BottomNavigationItem(androidx.compose.foundation.layout.RowScope, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional boolean alwaysShowLabel, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ }
+
+ public final class BottomSheetScaffoldDefaults {
+ method public float getSheetElevation();
+ method public float getSheetPeekHeight();
+ property public final float SheetElevation;
+ property public final float SheetPeekHeight;
+ field public static final androidx.compose.material.BottomSheetScaffoldDefaults INSTANCE;
+ }
+
+ @androidx.compose.runtime.Stable public interface ButtonColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+ }
+
+ public final class ButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors buttonColors(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation, optional float hoveredElevation, optional float focusedElevation);
+ method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation);
+ method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+ method public float getIconSize();
+ method public float getIconSpacing();
+ method public float getMinHeight();
+ method public float getMinWidth();
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke getOutlinedBorder();
+ method public float getOutlinedBorderSize();
+ method public androidx.compose.foundation.layout.PaddingValues getTextButtonContentPadding();
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors outlinedButtonColors(optional long backgroundColor, optional long contentColor, optional long disabledContentColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors textButtonColors(optional long backgroundColor, optional long contentColor, optional long disabledContentColor);
+ property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+ property public final float IconSize;
+ property public final float IconSpacing;
+ property public final float MinHeight;
+ property public final float MinWidth;
+ property public final float OutlinedBorderSize;
+ property public final androidx.compose.foundation.layout.PaddingValues TextButtonContentPadding;
+ property @androidx.compose.runtime.Composable public final androidx.compose.foundation.BorderStroke outlinedBorder;
+ field public static final androidx.compose.material.ButtonDefaults INSTANCE;
+ field public static final float OutlinedBorderOpacity = 0.12f;
+ }
+
+ @androidx.compose.runtime.Stable public interface ButtonElevation {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> elevation(boolean enabled, androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ }
+
+ public final class ButtonKt {
+ method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.ButtonElevation? elevation, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material.ButtonColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.ButtonElevation? elevation, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material.ButtonColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void TextButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.ButtonElevation? elevation, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material.ButtonColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ }
+
+ public final class CardKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Card(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Stable public interface CheckboxColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> borderColor(boolean enabled, androidx.compose.ui.state.ToggleableState state);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> boxColor(boolean enabled, androidx.compose.ui.state.ToggleableState state);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> checkmarkColor(androidx.compose.ui.state.ToggleableState state);
+ }
+
+ public final class CheckboxDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.CheckboxColors colors(optional long checkedColor, optional long uncheckedColor, optional long checkmarkColor, optional long disabledColor, optional long disabledIndeterminateColor);
+ field public static final androidx.compose.material.CheckboxDefaults INSTANCE;
+ }
+
+ public final class CheckboxKt {
+ method @androidx.compose.runtime.Composable public static void Checkbox(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.CheckboxColors colors);
+ method @androidx.compose.runtime.Composable public static void TriStateCheckbox(androidx.compose.ui.state.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.CheckboxColors colors);
+ }
+
+ @androidx.compose.runtime.Stable public final class Colors {
+ ctor public Colors(long primary, long primaryVariant, long secondary, long secondaryVariant, long background, long surface, long error, long onPrimary, long onSecondary, long onBackground, long onSurface, long onError, boolean isLight);
+ method public androidx.compose.material.Colors copy(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onError, optional boolean isLight);
+ method public long getBackground();
+ method public long getError();
+ method public long getOnBackground();
+ method public long getOnError();
+ method public long getOnPrimary();
+ method public long getOnSecondary();
+ method public long getOnSurface();
+ method public long getPrimary();
+ method public long getPrimaryVariant();
+ method public long getSecondary();
+ method public long getSecondaryVariant();
+ method public long getSurface();
+ method public boolean isLight();
+ property public final long background;
+ property public final long error;
+ property public final boolean isLight;
+ property public final long onBackground;
+ property public final long onError;
+ property public final long onPrimary;
+ property public final long onSecondary;
+ property public final long onSurface;
+ property public final long primary;
+ property public final long primaryVariant;
+ property public final long secondary;
+ property public final long secondaryVariant;
+ property public final long surface;
+ }
+
+ public final class ColorsKt {
+ method public static long contentColorFor(androidx.compose.material.Colors, long backgroundColor);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long contentColorFor(long backgroundColor);
+ method public static androidx.compose.material.Colors darkColors(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onError);
+ method public static long getPrimarySurface(androidx.compose.material.Colors);
+ method public static androidx.compose.material.Colors lightColors(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onError);
+ }
+
+ public final class ContentAlpha {
+ method @androidx.compose.runtime.Composable public float getDisabled();
+ method @androidx.compose.runtime.Composable public float getHigh();
+ method @androidx.compose.runtime.Composable public float getMedium();
+ property @androidx.compose.runtime.Composable public final float disabled;
+ property @androidx.compose.runtime.Composable public final float high;
+ property @androidx.compose.runtime.Composable public final float medium;
+ field public static final androidx.compose.material.ContentAlpha INSTANCE;
+ }
+
+ public final class ContentAlphaKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> getLocalContentAlpha();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> LocalContentAlpha;
+ }
+
+ public final class ContentColorKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> getLocalContentColor();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> LocalContentColor;
+ }
+
+ public enum DismissDirection {
+ method public static androidx.compose.material.DismissDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.DismissDirection[] values();
+ enum_constant public static final androidx.compose.material.DismissDirection EndToStart;
+ enum_constant public static final androidx.compose.material.DismissDirection StartToEnd;
+ }
+
+ public enum DismissValue {
+ method public static androidx.compose.material.DismissValue valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.DismissValue[] values();
+ enum_constant public static final androidx.compose.material.DismissValue Default;
+ enum_constant public static final androidx.compose.material.DismissValue DismissedToEnd;
+ enum_constant public static final androidx.compose.material.DismissValue DismissedToStart;
+ }
+
+ public final class DividerKt {
+ method @androidx.compose.runtime.Composable public static void Divider(optional androidx.compose.ui.Modifier modifier, optional long color, optional float thickness, optional float startIndent);
+ }
+
+ public final class DrawerDefaults {
+ method public float getElevation();
+ method @androidx.compose.runtime.Composable public long getScrimColor();
+ property public final float Elevation;
+ property @androidx.compose.runtime.Composable public final long scrimColor;
+ field public static final androidx.compose.material.DrawerDefaults INSTANCE;
+ field public static final float ScrimOpacity = 0.32f;
+ }
+
+ public final class DrawerKt {
+ method @androidx.compose.runtime.Composable public static void ModalDrawer(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> drawerContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.DrawerState drawerState, optional boolean gesturesEnabled, optional androidx.compose.ui.graphics.Shape drawerShape, optional float drawerElevation, optional long drawerBackgroundColor, optional long drawerContentColor, optional long scrimColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static androidx.compose.material.DrawerState rememberDrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ @androidx.compose.runtime.Stable public final class DrawerState {
+ ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+ method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.material.DrawerValue getCurrentValue();
+ method public boolean isAnimationRunning();
+ method public boolean isClosed();
+ method public boolean isOpen();
+ method public suspend Object? open(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? snapTo(androidx.compose.material.DrawerValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public final androidx.compose.material.DrawerValue currentValue;
+ property public final boolean isAnimationRunning;
+ property public final boolean isClosed;
+ property public final boolean isOpen;
+ field public static final androidx.compose.material.DrawerState.Companion Companion;
+ }
+
+ public static final class DrawerState.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.DrawerState,androidx.compose.material.DrawerValue> Saver(kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+ }
+
+ public enum DrawerValue {
+ method public static androidx.compose.material.DrawerValue valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.DrawerValue[] values();
+ enum_constant public static final androidx.compose.material.DrawerValue Closed;
+ enum_constant public static final androidx.compose.material.DrawerValue Open;
+ }
+
+ public interface ElevationOverlay {
+ method @androidx.compose.runtime.Composable public long apply(long color, float elevation);
+ }
+
+ public final class ElevationOverlayKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> getLocalAbsoluteElevation();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ElevationOverlay> getLocalElevationOverlay();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> LocalAbsoluteElevation;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material.ElevationOverlay> LocalElevationOverlay;
+ }
+
+ @kotlin.jvm.JvmInline public final value class FabPosition {
+ field public static final androidx.compose.material.FabPosition.Companion Companion;
+ }
+
+ public static final class FabPosition.Companion {
+ method public int getCenter();
+ method public int getEnd();
+ property public final int Center;
+ property public final int End;
+ }
+
+ public final class FloatingActionButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float hoveredElevation, optional float focusedElevation);
+ method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation);
+ field public static final androidx.compose.material.FloatingActionButtonDefaults INSTANCE;
+ }
+
+ @androidx.compose.runtime.Stable public interface FloatingActionButtonElevation {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.unit.Dp> elevation(androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ }
+
+ public final class FloatingActionButtonKt {
+ method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.material.FloatingActionButtonElevation elevation);
+ method @androidx.compose.runtime.Composable public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.material.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class IconButtonKt {
+ method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class IconKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ }
+
+ public final class InteractiveComponentSizeKt {
+ method public static androidx.compose.ui.Modifier minimumInteractiveComponentSize(androidx.compose.ui.Modifier);
+ }
+
+ public final class MaterialTheme {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.material.Colors getColors();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.material.Shapes getShapes();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.material.Typography getTypography();
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.material.Colors colors;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.material.Shapes shapes;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.material.Typography typography;
+ field public static final androidx.compose.material.MaterialTheme INSTANCE;
+ }
+
+ public final class MaterialThemeKt {
+ method @androidx.compose.runtime.Composable public static void MaterialTheme(optional androidx.compose.material.Colors colors, optional androidx.compose.material.Typography typography, optional androidx.compose.material.Shapes shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class MenuDefaults {
+ method public androidx.compose.foundation.layout.PaddingValues getDropdownMenuItemContentPadding();
+ property public final androidx.compose.foundation.layout.PaddingValues DropdownMenuItemContentPadding;
+ field public static final androidx.compose.material.MenuDefaults INSTANCE;
+ }
+
+ public final class ModalBottomSheetDefaults {
+ method public float getElevation();
+ method @androidx.compose.runtime.Composable public long getScrimColor();
+ property public final float Elevation;
+ property @androidx.compose.runtime.Composable public final long scrimColor;
+ field public static final androidx.compose.material.ModalBottomSheetDefaults INSTANCE;
+ }
+
+ public final class NavigationRailDefaults {
+ method public float getElevation();
+ property public final float Elevation;
+ field public static final androidx.compose.material.NavigationRailDefaults INSTANCE;
+ }
+
+ public final class NavigationRailKt {
+ method @androidx.compose.runtime.Composable public static void NavigationRail(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? header, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void NavigationRailItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional boolean alwaysShowLabel, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ }
+
+ public final class OutlinedTextFieldKt {
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ }
+
+ public final class ProgressIndicatorDefaults {
+ method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getProgressAnimationSpec();
+ method public float getStrokeWidth();
+ property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> ProgressAnimationSpec;
+ property public final float StrokeWidth;
+ field public static final androidx.compose.material.ProgressIndicatorDefaults INSTANCE;
+ field public static final float IndicatorBackgroundOpacity = 0.24f;
+ }
+
+ public final class ProgressIndicatorKt {
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
+ }
+
+ @androidx.compose.runtime.Stable public interface RadioButtonColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> radioColor(boolean enabled, boolean selected);
+ }
+
+ public final class RadioButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.RadioButtonColors colors(optional long selectedColor, optional long unselectedColor, optional long disabledColor);
+ field public static final androidx.compose.material.RadioButtonDefaults INSTANCE;
+ }
+
+ public final class RadioButtonKt {
+ method @androidx.compose.runtime.Composable public static void RadioButton(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.RadioButtonColors colors);
+ }
+
+ @androidx.compose.runtime.Immutable public final class ResistanceConfig {
+ ctor public ResistanceConfig(float basis, optional float factorAtMin, optional float factorAtMax);
+ method public float computeResistance(float overflow);
+ method public float getBasis();
+ method public float getFactorAtMax();
+ method public float getFactorAtMin();
+ property public final float basis;
+ property public final float factorAtMax;
+ property public final float factorAtMin;
+ }
+
+ public final class ScaffoldKt {
+ method @androidx.compose.runtime.Composable public static void Scaffold(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.ScaffoldState scaffoldState, optional kotlin.jvm.functions.Function0<kotlin.Unit> topBar, optional kotlin.jvm.functions.Function0<kotlin.Unit> bottomBar, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.SnackbarHostState,kotlin.Unit> snackbarHost, optional kotlin.jvm.functions.Function0<kotlin.Unit> floatingActionButton, optional int floatingActionButtonPosition, optional boolean isFloatingActionButtonDocked, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? drawerContent, optional boolean drawerGesturesEnabled, optional androidx.compose.ui.graphics.Shape drawerShape, optional float drawerElevation, optional long drawerBackgroundColor, optional long drawerContentColor, optional long drawerScrimColor, optional long backgroundColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.PaddingValues,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static androidx.compose.material.ScaffoldState rememberScaffoldState(optional androidx.compose.material.DrawerState drawerState, optional androidx.compose.material.SnackbarHostState snackbarHostState);
+ }
+
+ @androidx.compose.runtime.Stable public final class ScaffoldState {
+ ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, androidx.compose.material.SnackbarHostState snackbarHostState);
+ method public androidx.compose.material.DrawerState getDrawerState();
+ method public androidx.compose.material.SnackbarHostState getSnackbarHostState();
+ property public final androidx.compose.material.DrawerState drawerState;
+ property public final androidx.compose.material.SnackbarHostState snackbarHostState;
+ }
+
+ @androidx.compose.runtime.Immutable public final class Shapes {
+ ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+ method public androidx.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+ method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
+ method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
+ method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
+ property public final androidx.compose.foundation.shape.CornerBasedShape large;
+ property public final androidx.compose.foundation.shape.CornerBasedShape medium;
+ property public final androidx.compose.foundation.shape.CornerBasedShape small;
+ }
+
+ @androidx.compose.runtime.Stable public interface SliderColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> thumbColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> tickColor(boolean enabled, boolean active);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trackColor(boolean enabled, boolean active);
+ }
+
+ public final class SliderDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.SliderColors colors(optional long thumbColor, optional long disabledThumbColor, optional long activeTrackColor, optional long inactiveTrackColor, optional long disabledActiveTrackColor, optional long disabledInactiveTrackColor, optional long activeTickColor, optional long inactiveTickColor, optional long disabledActiveTickColor, optional long disabledInactiveTickColor);
+ field public static final float DisabledActiveTrackAlpha = 0.32f;
+ field public static final float DisabledInactiveTrackAlpha = 0.12f;
+ field public static final float DisabledTickAlpha = 0.12f;
+ field public static final androidx.compose.material.SliderDefaults INSTANCE;
+ field public static final float InactiveTrackAlpha = 0.24f;
+ field public static final float TickAlpha = 0.54f;
+ }
+
+ public final class SliderKt {
+ method @androidx.compose.runtime.Composable public static void Slider(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onValueChangeFinished, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.SliderColors colors);
+ }
+
+ public interface SnackbarData {
+ method public void dismiss();
+ method public String? getActionLabel();
+ method public androidx.compose.material.SnackbarDuration getDuration();
+ method public String getMessage();
+ method public void performAction();
+ property public abstract String? actionLabel;
+ property public abstract androidx.compose.material.SnackbarDuration duration;
+ property public abstract String message;
+ }
+
+ public final class SnackbarDefaults {
+ method @androidx.compose.runtime.Composable public long getBackgroundColor();
+ method @androidx.compose.runtime.Composable public long getPrimaryActionColor();
+ property @androidx.compose.runtime.Composable public final long backgroundColor;
+ property @androidx.compose.runtime.Composable public final long primaryActionColor;
+ field public static final androidx.compose.material.SnackbarDefaults INSTANCE;
+ }
+
+ public enum SnackbarDuration {
+ method public static androidx.compose.material.SnackbarDuration valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.SnackbarDuration[] values();
+ enum_constant public static final androidx.compose.material.SnackbarDuration Indefinite;
+ enum_constant public static final androidx.compose.material.SnackbarDuration Long;
+ enum_constant public static final androidx.compose.material.SnackbarDuration Short;
+ }
+
+ public final class SnackbarHostKt {
+ method @androidx.compose.runtime.Composable public static void SnackbarHost(androidx.compose.material.SnackbarHostState hostState, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.SnackbarData,kotlin.Unit> snackbar);
+ }
+
+ @androidx.compose.runtime.Stable public final class SnackbarHostState {
+ ctor public SnackbarHostState();
+ method public androidx.compose.material.SnackbarData? getCurrentSnackbarData();
+ method public suspend Object? showSnackbar(String message, optional String? actionLabel, optional androidx.compose.material.SnackbarDuration duration, optional kotlin.coroutines.Continuation<? super androidx.compose.material.SnackbarResult>);
+ property public final androidx.compose.material.SnackbarData? currentSnackbarData;
+ }
+
+ public final class SnackbarKt {
+ method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Snackbar(androidx.compose.material.SnackbarData snackbarData, optional androidx.compose.ui.Modifier modifier, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional long actionColor, optional float elevation);
+ }
+
+ public enum SnackbarResult {
+ method public static androidx.compose.material.SnackbarResult valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.material.SnackbarResult[] values();
+ enum_constant public static final androidx.compose.material.SnackbarResult ActionPerformed;
+ enum_constant public static final androidx.compose.material.SnackbarResult Dismissed;
+ }
+
+ public final class SurfaceKt {
+ method @androidx.compose.runtime.Composable public static void Surface(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class SwipeableDefaults {
+ method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getAnimationSpec();
+ method public float getVelocityThreshold();
+ method public androidx.compose.material.ResistanceConfig? resistanceConfig(java.util.Set<java.lang.Float> anchors, optional float factorAtMin, optional float factorAtMax);
+ property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> AnimationSpec;
+ property public final float VelocityThreshold;
+ field public static final androidx.compose.material.SwipeableDefaults INSTANCE;
+ field public static final float StandardResistanceFactor = 10.0f;
+ field public static final float StiffResistanceFactor = 20.0f;
+ }
+
+ @androidx.compose.runtime.Stable public interface SwitchColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> thumbColor(boolean enabled, boolean checked);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trackColor(boolean enabled, boolean checked);
+ }
+
+ public final class SwitchDefaults {
+ method @androidx.compose.runtime.Composable public androidx.compose.material.SwitchColors colors(optional long checkedThumbColor, optional long checkedTrackColor, optional float checkedTrackAlpha, optional long uncheckedThumbColor, optional long uncheckedTrackColor, optional float uncheckedTrackAlpha, optional long disabledCheckedThumbColor, optional long disabledCheckedTrackColor, optional long disabledUncheckedThumbColor, optional long disabledUncheckedTrackColor);
+ field public static final androidx.compose.material.SwitchDefaults INSTANCE;
+ }
+
+ public final class SwitchKt {
+ method @androidx.compose.runtime.Composable public static void Switch(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material.SwitchColors colors);
+ }
+
+ public final class TabKt {
+ method @androidx.compose.runtime.Composable public static void LeadingIconTab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
+ method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TabPosition {
+ method public float getLeft();
+ method public float getRight();
+ method public float getWidth();
+ property public final float left;
+ property public final float right;
+ property public final float width;
+ }
+
+ public final class TabRowDefaults {
+ method @androidx.compose.runtime.Composable public void Divider(optional androidx.compose.ui.Modifier modifier, optional float thickness, optional long color);
+ method @androidx.compose.runtime.Composable public void Indicator(optional androidx.compose.ui.Modifier modifier, optional float height, optional long color);
+ method public float getDividerThickness();
+ method public float getIndicatorHeight();
+ method public float getScrollableTabRowPadding();
+ method public androidx.compose.ui.Modifier tabIndicatorOffset(androidx.compose.ui.Modifier, androidx.compose.material.TabPosition currentTabPosition);
+ property public final float DividerThickness;
+ property public final float IndicatorHeight;
+ property public final float ScrollableTabRowPadding;
+ field public static final float DividerOpacity = 0.12f;
+ field public static final androidx.compose.material.TabRowDefaults INSTANCE;
+ }
+
+ public final class TabRowKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void ScrollableTabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float edgePadding, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void TabRow(int selectedTabIndex, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabPosition>,kotlin.Unit> indicator, optional kotlin.jvm.functions.Function0<kotlin.Unit> divider, kotlin.jvm.functions.Function0<kotlin.Unit> tabs);
+ }
+
+ @androidx.compose.runtime.Stable public interface TextFieldColors {
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> cursorColor(boolean isError);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> indicatorColor(boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> labelColor(boolean enabled, boolean error, androidx.compose.foundation.interaction.InteractionSource interactionSource);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> leadingIconColor(boolean enabled, boolean isError);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> placeholderColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> textColor(boolean enabled);
+ method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trailingIconColor(boolean enabled, boolean isError);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextFieldDefaults {
+ method public float getFocusedBorderThickness();
+ method public float getMinHeight();
+ method public float getMinWidth();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.ui.graphics.Shape getOutlinedTextFieldShape();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.compose.ui.graphics.Shape getTextFieldShape();
+ method public float getUnfocusedBorderThickness();
+ method @androidx.compose.runtime.Composable public androidx.compose.material.TextFieldColors outlinedTextFieldColors(optional long textColor, optional long disabledTextColor, optional long backgroundColor, optional long cursorColor, optional long errorCursorColor, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long leadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long trailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.TextFieldColors textFieldColors(optional long textColor, optional long disabledTextColor, optional long backgroundColor, optional long cursorColor, optional long errorCursorColor, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long leadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long trailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor);
+ property public final float FocusedBorderThickness;
+ property public final float MinHeight;
+ property public final float MinWidth;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.ui.graphics.Shape OutlinedTextFieldShape;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.compose.ui.graphics.Shape TextFieldShape;
+ property public final float UnfocusedBorderThickness;
+ field public static final float BackgroundOpacity = 0.12f;
+ field public static final androidx.compose.material.TextFieldDefaults INSTANCE;
+ field public static final float IconOpacity = 0.54f;
+ field public static final float UnfocusedIndicatorLineOpacity = 0.42f;
+ }
+
+ public final class TextFieldKt {
+ method @androidx.compose.runtime.Composable public static void TextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void TextField(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.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ }
+
+ public final class TextKt {
+ method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
+ }
+
+ @androidx.compose.runtime.Immutable public final class Typography {
+ ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
+ method public androidx.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
+ method public androidx.compose.ui.text.TextStyle getBody1();
+ method public androidx.compose.ui.text.TextStyle getBody2();
+ method public androidx.compose.ui.text.TextStyle getButton();
+ method public androidx.compose.ui.text.TextStyle getCaption();
+ method public androidx.compose.ui.text.TextStyle getH1();
+ method public androidx.compose.ui.text.TextStyle getH2();
+ method public androidx.compose.ui.text.TextStyle getH3();
+ method public androidx.compose.ui.text.TextStyle getH4();
+ method public androidx.compose.ui.text.TextStyle getH5();
+ method public androidx.compose.ui.text.TextStyle getH6();
+ method public androidx.compose.ui.text.TextStyle getOverline();
+ method public androidx.compose.ui.text.TextStyle getSubtitle1();
+ method public androidx.compose.ui.text.TextStyle getSubtitle2();
+ property public final androidx.compose.ui.text.TextStyle body1;
+ property public final androidx.compose.ui.text.TextStyle body2;
+ property public final androidx.compose.ui.text.TextStyle button;
+ property public final androidx.compose.ui.text.TextStyle caption;
+ property public final androidx.compose.ui.text.TextStyle h1;
+ property public final androidx.compose.ui.text.TextStyle h2;
+ property public final androidx.compose.ui.text.TextStyle h3;
+ property public final androidx.compose.ui.text.TextStyle h4;
+ property public final androidx.compose.ui.text.TextStyle h5;
+ property public final androidx.compose.ui.text.TextStyle h6;
+ property public final androidx.compose.ui.text.TextStyle overline;
+ property public final androidx.compose.ui.text.TextStyle subtitle1;
+ property public final androidx.compose.ui.text.TextStyle subtitle2;
+ }
+
+}
+
diff --git a/compose/material/material/api/restricted_current.ignore b/compose/material/material/api/restricted_current.ignore
deleted file mode 100644
index d24bb34..0000000
--- a/compose/material/material/api/restricted_current.ignore
+++ /dev/null
@@ -1,49 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.material.AlertDialogKt:
- Removed class androidx.compose.material.AlertDialogKt
-RemovedClass: androidx.compose.material.BackdropScaffoldKt:
- Removed class androidx.compose.material.BackdropScaffoldKt
-RemovedClass: androidx.compose.material.BottomSheetScaffoldKt:
- Removed class androidx.compose.material.BottomSheetScaffoldKt
-RemovedClass: androidx.compose.material.ChipKt:
- Removed class androidx.compose.material.ChipKt
-RemovedClass: androidx.compose.material.DragGestureDetectorCopyKt:
- Removed class androidx.compose.material.DragGestureDetectorCopyKt
-RemovedClass: androidx.compose.material.ElevationKt:
- Removed class androidx.compose.material.ElevationKt
-RemovedClass: androidx.compose.material.ExposedDropdownMenuKt:
- Removed class androidx.compose.material.ExposedDropdownMenuKt
-RemovedClass: androidx.compose.material.ListItemKt:
- Removed class androidx.compose.material.ListItemKt
-RemovedClass: androidx.compose.material.MaterialTextSelectionColorsKt:
- Removed class androidx.compose.material.MaterialTextSelectionColorsKt
-RemovedClass: androidx.compose.material.MaterialTheme_androidKt:
- Removed class androidx.compose.material.MaterialTheme_androidKt
-RemovedClass: androidx.compose.material.MenuKt:
- Removed class androidx.compose.material.MenuKt
-RemovedClass: androidx.compose.material.ModalBottomSheetKt:
- Removed class androidx.compose.material.ModalBottomSheetKt
-RemovedClass: androidx.compose.material.ShapesKt:
- Removed class androidx.compose.material.ShapesKt
-RemovedClass: androidx.compose.material.Strings_androidKt:
- Removed class androidx.compose.material.Strings_androidKt
-RemovedClass: androidx.compose.material.SwipeToDismissKt:
- Removed class androidx.compose.material.SwipeToDismissKt
-RemovedClass: androidx.compose.material.SwipeableKt:
- Removed class androidx.compose.material.SwipeableKt
-RemovedClass: androidx.compose.material.SwipeableV2Kt:
- Removed class androidx.compose.material.SwipeableV2Kt
-RemovedClass: androidx.compose.material.TextFieldDefaultsKt:
- Removed class androidx.compose.material.TextFieldDefaultsKt
-RemovedClass: androidx.compose.material.TextFieldImplKt:
- Removed class androidx.compose.material.TextFieldImplKt
-RemovedClass: androidx.compose.material.TouchTargetKt:
- Removed class androidx.compose.material.TouchTargetKt
-RemovedClass: androidx.compose.material.TypographyKt:
- Removed class androidx.compose.material.TypographyKt
-
-
-RemovedPackage: androidx.compose.material.internal:
- Removed package androidx.compose.material.internal
-RemovedPackage: androidx.compose.material.pullrefresh:
- Removed package androidx.compose.material.pullrefresh
diff --git a/compose/material/material/build.gradle b/compose/material/material/build.gradle
index 53e8375..e2da821 100644
--- a/compose/material/material/build.gradle
+++ b/compose/material/material/build.gradle
@@ -21,6 +21,7 @@
id("AndroidXPlugin")
id("com.android.library")
id("AndroidXComposePlugin")
+ id("AndroidXPaparazziPlugin")
}
AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project)
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarHostTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarHostTest.kt
index 3c60de2..7918bcb 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarHostTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarHostTest.kt
@@ -139,7 +139,8 @@
Truth.assertThat(result).isEqualTo(SnackbarResult.Dismissed)
}
- rule.waitUntil(timeoutMillis = 7_000) { job2.isCompleted }
+ rule.mainClock.advanceTimeBy(5_000)
+ rule.waitUntil { job2.isCompleted }
}
@Test
diff --git a/compose/material/material/src/test/kotlin/androidx/compose/material/ButtonPaparazziScreenshotTest.kt b/compose/material/material/src/test/kotlin/androidx/compose/material/ButtonPaparazziScreenshotTest.kt
new file mode 100644
index 0000000..8f6e548
--- /dev/null
+++ b/compose/material/material/src/test/kotlin/androidx/compose/material/ButtonPaparazziScreenshotTest.kt
@@ -0,0 +1,42 @@
+/*
+ * 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.material
+
+import androidx.testutils.paparazzi.androidxPaparazzi
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(JUnit4::class)
+class ButtonPaparazziScreenshotTest {
+ @get:Rule
+ val paparazzi = androidxPaparazzi()
+
+ @Test
+ fun default_button() {
+ paparazzi.snapshot {
+ MaterialTheme {
+ Surface {
+ Button(onClick = { }) {
+ Text("Button")
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/compose/material3/material3/samples/build.gradle b/compose/material3/material3/samples/build.gradle
index ae744c3..b2707cf 100644
--- a/compose/material3/material3/samples/build.gradle
+++ b/compose/material3/material3/samples/build.gradle
@@ -41,8 +41,6 @@
implementation("androidx.compose.ui:ui-text:1.2.1")
implementation("androidx.savedstate:savedstate-ktx:1.2.0")
implementation(project(":compose:ui:ui-tooling-preview"))
- implementation(project(":lifecycle:lifecycle-runtime-ktx"))
- implementation(project(":lifecycle:lifecycle-common-java8"))
debugImplementation(project(":compose:ui:ui-tooling"))
}
@@ -57,3 +55,11 @@
android {
namespace "androidx.compose.material3.samples"
}
+
+// Workaround for https://github.com/gradle/gradle/issues/19882
+configurations.all {
+ resolutionStrategy.dependencySubstitution {
+ substitute(module("androidx.lifecycle:lifecycle-common-java8:")).
+ using project(":lifecycle:lifecycle-common-java8")
+ }
+}
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/SearchBarSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/SearchBarSamples.kt
index a04f822..174afb1 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/SearchBarSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/SearchBarSamples.kt
@@ -20,7 +20,6 @@
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
@@ -30,7 +29,6 @@
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.filled.Search
import androidx.compose.material.icons.filled.Star
-import androidx.compose.material3.Divider
import androidx.compose.material3.DockedSearchBar
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
@@ -45,8 +43,11 @@
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.semantics.isContainer
+import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import androidx.compose.ui.zIndex
@OptIn(ExperimentalMaterial3Api::class)
@Preview
@@ -63,38 +64,41 @@
}
Box(Modifier.fillMaxSize()) {
- // This is okay to put first because search bars by default have zIndex = 1f.
- SearchBar(
- modifier = Modifier.align(Alignment.TopCenter),
- query = text,
- onQueryChange = { text = it },
- onSearch = { closeSearchBar() },
- active = active,
- onActiveChange = {
- active = it
- if (!active) focusManager.clearFocus()
- },
- placeholder = { Text("Hinted search text") },
- leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) },
- trailingIcon = { Icon(Icons.Default.MoreVert, contentDescription = null) },
- ) {
- Column(
- modifier = Modifier.padding(16.dp).fillMaxWidth(),
- verticalArrangement = Arrangement.spacedBy(4.dp)
+ // Talkback focus order sorts based on x and y position before considering z-index. The
+ // extra Box with fillMaxWidth is a workaround to get the search bar to focus before the
+ // content.
+ Box(Modifier.semantics { isContainer = true }.zIndex(1f).fillMaxWidth()) {
+ SearchBar(
+ modifier = Modifier.align(Alignment.TopCenter),
+ query = text,
+ onQueryChange = { text = it },
+ onSearch = { closeSearchBar() },
+ active = active,
+ onActiveChange = {
+ active = it
+ if (!active) focusManager.clearFocus()
+ },
+ placeholder = { Text("Hinted search text") },
+ leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) },
+ trailingIcon = { Icon(Icons.Default.MoreVert, contentDescription = null) },
) {
- repeat(4) { idx ->
- val resultText = "Suggestion $idx"
- @OptIn(ExperimentalMaterial3Api::class)
- ListItem(
- headlineText = { Text(resultText) },
- supportingText = { Text("Additional info") },
- leadingContent = { Icon(Icons.Filled.Star, contentDescription = null) },
- modifier = Modifier.clickable {
- text = resultText
- closeSearchBar()
- }
- )
- if (idx != 3) { Divider() }
+ LazyColumn(
+ modifier = Modifier.fillMaxWidth(),
+ contentPadding = PaddingValues(16.dp),
+ verticalArrangement = Arrangement.spacedBy(4.dp)
+ ) {
+ items(4) { idx ->
+ val resultText = "Suggestion $idx"
+ ListItem(
+ headlineText = { Text(resultText) },
+ supportingText = { Text("Additional info") },
+ leadingContent = { Icon(Icons.Filled.Star, contentDescription = null) },
+ modifier = Modifier.clickable {
+ text = resultText
+ closeSearchBar()
+ }
+ )
+ }
}
}
}
@@ -126,38 +130,41 @@
}
Box(Modifier.fillMaxSize()) {
- // This is okay to put first because search bars by default have zIndex = 1f.
- DockedSearchBar(
- modifier = Modifier.align(Alignment.TopCenter).padding(top = 8.dp),
- query = text,
- onQueryChange = { text = it },
- onSearch = { closeSearchBar() },
- active = active,
- onActiveChange = {
- active = it
- if (!active) focusManager.clearFocus()
- },
- placeholder = { Text("Hinted search text") },
- leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) },
- trailingIcon = { Icon(Icons.Default.MoreVert, contentDescription = null) },
- ) {
- Column(
- modifier = Modifier.padding(16.dp).fillMaxWidth(),
- verticalArrangement = Arrangement.spacedBy(4.dp)
+ // Talkback focus order sorts based on x and y position before considering z-index. The
+ // extra Box with fillMaxWidth is a workaround to get the search bar to focus before the
+ // content.
+ Box(Modifier.semantics { isContainer = true }.zIndex(1f).fillMaxWidth()) {
+ DockedSearchBar(
+ modifier = Modifier.align(Alignment.TopCenter).padding(top = 8.dp),
+ query = text,
+ onQueryChange = { text = it },
+ onSearch = { closeSearchBar() },
+ active = active,
+ onActiveChange = {
+ active = it
+ if (!active) focusManager.clearFocus()
+ },
+ placeholder = { Text("Hinted search text") },
+ leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) },
+ trailingIcon = { Icon(Icons.Default.MoreVert, contentDescription = null) },
) {
- repeat(4) { idx ->
- val resultText = "Suggestion $idx"
- @OptIn(ExperimentalMaterial3Api::class)
- ListItem(
- headlineText = { Text(resultText) },
- supportingText = { Text("Additional info") },
- leadingContent = { Icon(Icons.Filled.Star, contentDescription = null) },
- modifier = Modifier.clickable {
- text = resultText
- closeSearchBar()
- }
- )
- if (idx != 3) { Divider() }
+ LazyColumn(
+ modifier = Modifier.fillMaxWidth(),
+ contentPadding = PaddingValues(16.dp),
+ verticalArrangement = Arrangement.spacedBy(4.dp)
+ ) {
+ items(4) { idx ->
+ val resultText = "Suggestion $idx"
+ ListItem(
+ headlineText = { Text(resultText) },
+ supportingText = { Text("Additional info") },
+ leadingContent = { Icon(Icons.Filled.Star, contentDescription = null) },
+ modifier = Modifier.clickable {
+ text = resultText
+ closeSearchBar()
+ }
+ )
+ }
}
}
}
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt
index 8201b0a..14e22c4 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt
@@ -141,7 +141,8 @@
Truth.assertThat(result).isEqualTo(SnackbarResult.Dismissed)
}
- rule.waitUntil(timeoutMillis = 10_000) { job2.isCompleted }
+ rule.mainClock.advanceTimeBy(5_000)
+ rule.waitUntil { job2.isCompleted }
}
@Test
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipScreenshotTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipScreenshotTest.kt
index eafc433..bbffc0f5 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipScreenshotTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipScreenshotTest.kt
@@ -17,20 +17,22 @@
package androidx.compose.material3
import android.os.Build
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.testutils.assertAgainstGolden
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.captureToImage
import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.longClick
import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.performTouchInput
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import androidx.test.screenshot.AndroidXScreenshotTestRule
-import kotlinx.coroutines.launch
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -48,44 +50,98 @@
@Test
fun plainTooltip_lightTheme() {
- rule.setMaterialContent(lightColorScheme()) { TestPlainTooltips() }
+ rule.setMaterialContent(lightColorScheme()) { PlainTooltipTest() }
+
+ // Stop auto advance for test consistency
+ rule.mainClock.autoAdvance = false
+
+ rule.onNodeWithTag(AnchorTestTag)
+ .performTouchInput { longClick() }
+
+ // Advance by the fade in time
+ rule.mainClock.advanceTimeBy(TooltipFadeInDuration.toLong())
+
+ rule.waitForIdle()
assertAgainstGolden("plainTooltip_lightTheme")
}
@Test
fun plainTooltip_darkTheme() {
- rule.setMaterialContent(darkColorScheme()) { TestPlainTooltips() }
+ rule.setMaterialContent(darkColorScheme()) { PlainTooltipTest() }
+
+ // Stop auto advance for test consistency
+ rule.mainClock.autoAdvance = false
+
+ rule.onNodeWithTag(AnchorTestTag)
+ .performTouchInput { longClick() }
+
+ // Advance by the fade in time
+ rule.mainClock.advanceTimeBy(TooltipFadeInDuration.toLong())
+
+ rule.waitForIdle()
assertAgainstGolden("plainTooltip_darkTheme")
}
@Test
fun richTooltip_lightTheme() {
- rule.setMaterialContent(lightColorScheme()) { TestRichTooltips() }
+ rule.setMaterialContent(lightColorScheme()) { RichTooltipTest() }
+
+ // Stop auto advance for test consistency
+ rule.mainClock.autoAdvance = false
+
+ rule.onNodeWithTag(AnchorTestTag)
+ .performTouchInput { longClick() }
+
+ // Advance by the fade in time
+ rule.mainClock.advanceTimeBy(TooltipFadeInDuration.toLong())
+
+ rule.waitForIdle()
assertAgainstGolden("richTooltip_lightTheme")
}
@Test
fun richTooltip_darkTheme() {
- rule.setMaterialContent(darkColorScheme()) { TestRichTooltips() }
+ rule.setMaterialContent(darkColorScheme()) { RichTooltipTest() }
+
+ // Stop auto advance for test consistency
+ rule.mainClock.autoAdvance = false
+
+ rule.onNodeWithTag(AnchorTestTag)
+ .performTouchInput { longClick() }
+
+ // Advance by the fade in time
+ rule.mainClock.advanceTimeBy(TooltipFadeInDuration.toLong())
+
+ rule.waitForIdle()
assertAgainstGolden("richTooltip_darkTheme")
}
+ private fun assertAgainstGolden(goldenName: String) {
+ rule.onNodeWithTag(TooltipTestTag)
+ .captureToImage()
+ .assertAgainstGolden(screenshotRule, goldenName)
+ }
+
@Composable
- private fun TestPlainTooltips() {
- val scope = rememberCoroutineScope()
+ private fun PlainTooltipTest() {
val tooltipState = remember { PlainTooltipState() }
PlainTooltipBox(
tooltip = { Text("Tooltip Text") },
modifier = Modifier.testTag(TooltipTestTag),
tooltipState = tooltipState
- ) {}
-
- scope.launch { tooltipState.show() }
+ ) {
+ Icon(
+ Icons.Filled.Favorite,
+ contentDescription = null,
+ modifier = Modifier
+ .testTag(AnchorTestTag)
+ .tooltipAnchor()
+ )
+ }
}
@Composable
- private fun TestRichTooltips() {
- val scope = rememberCoroutineScope()
+ private fun RichTooltipTest() {
val tooltipState = remember { RichTooltipState() }
RichTooltipBox(
title = { Text("Title") },
@@ -98,16 +154,17 @@
action = { Text("Action Text") },
tooltipState = tooltipState,
modifier = Modifier.testTag(TooltipTestTag)
- ) {}
-
- scope.launch { tooltipState.show() }
- }
-
- private fun assertAgainstGolden(goldenName: String) {
- rule.onNodeWithTag(TooltipTestTag)
- .captureToImage()
- .assertAgainstGolden(screenshotRule, goldenName)
+ ) {
+ Icon(
+ Icons.Filled.Favorite,
+ contentDescription = null,
+ modifier = Modifier
+ .testTag(AnchorTestTag)
+ .tooltipAnchor()
+ )
+ }
}
}
+private const val AnchorTestTag = "Anchor"
private const val TooltipTestTag = "tooltip"
\ No newline at end of file
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipTest.kt
index 666507d..a25e85f 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipTest.kt
@@ -16,8 +16,6 @@
package androidx.compose.material3
-import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
@@ -56,8 +54,15 @@
@Test
fun plainTooltip_noContent_size() {
- rule.setMaterialContent(lightColorScheme()) { TestPlainTooltip() }
+ rule.setMaterialContent(lightColorScheme()) { PlainTooltipTest() }
+ // Stop auto advance for test consistency
+ rule.mainClock.autoAdvance = false
+
+ rule.onNodeWithTag(AnchorTestTag)
+ .performTouchInput { longClick() }
+
+ rule.waitForIdle()
rule.onNodeWithTag(ContainerTestTag)
.assertHeightIsEqualTo(TooltipMinHeight)
.assertWidthIsEqualTo(TooltipMinWidth)
@@ -65,7 +70,15 @@
@Test
fun richTooltip_noContent_size() {
- rule.setMaterialContent(lightColorScheme()) { TestRichTooltip() }
+ rule.setMaterialContent(lightColorScheme()) { RichTooltipTest() }
+
+ // Stop auto advance for test consistency
+ rule.mainClock.autoAdvance = false
+
+ rule.onNodeWithTag(AnchorTestTag)
+ .performTouchInput { longClick() }
+
+ rule.waitForIdle()
rule.onNodeWithTag(ContainerTestTag)
.assertHeightIsEqualTo(TooltipMinHeight)
.assertWidthIsEqualTo(TooltipMinWidth)
@@ -75,11 +88,19 @@
fun plainTooltip_customSize_size() {
val customWidth = 100.dp
val customHeight = 100.dp
-
rule.setMaterialContent(lightColorScheme()) {
- TestPlainTooltip(modifier = Modifier.size(customWidth, customHeight))
+ PlainTooltipTest(
+ modifier = Modifier.size(customWidth, customHeight)
+ )
}
+ // Stop auto advance for test consistency
+ rule.mainClock.autoAdvance = false
+
+ rule.onNodeWithTag(AnchorTestTag)
+ .performTouchInput { longClick() }
+
+ rule.waitForIdle()
rule.onNodeWithTag(ContainerTestTag)
.assertHeightIsEqualTo(customHeight)
.assertWidthIsEqualTo(customWidth)
@@ -89,11 +110,19 @@
fun richTooltip_customSize_size() {
val customWidth = 100.dp
val customHeight = 100.dp
-
rule.setMaterialContent(lightColorScheme()) {
- TestRichTooltip(modifier = Modifier.size(customWidth, customHeight))
+ RichTooltipTest(
+ modifier = Modifier.size(customWidth, customHeight)
+ )
}
+ // Stop auto advance for test consistency
+ rule.mainClock.autoAdvance = false
+
+ rule.onNodeWithTag(AnchorTestTag)
+ .performTouchInput { longClick() }
+
+ rule.waitForIdle()
rule.onNodeWithTag(ContainerTestTag)
.assertHeightIsEqualTo(customHeight)
.assertWidthIsEqualTo(customWidth)
@@ -103,7 +132,7 @@
@Test
fun plainTooltip_content_padding() {
rule.setMaterialContent(lightColorScheme()) {
- TestPlainTooltip(
+ PlainTooltipTest(
tooltipContent = {
Text(
text = "Test",
@@ -113,6 +142,13 @@
)
}
+ // Stop auto advance for test consistency
+ rule.mainClock.autoAdvance = false
+
+ rule.onNodeWithTag(AnchorTestTag)
+ .performTouchInput { longClick() }
+
+ rule.waitForIdle()
rule.onNodeWithTag(TextTestTag)
.assertLeftPositionInRootIsEqualTo(8.dp)
.assertTopPositionInRootIsEqualTo(4.dp)
@@ -121,13 +157,20 @@
@Test
fun richTooltip_content_padding() {
rule.setMaterialContent(lightColorScheme()) {
- TestRichTooltip(
+ RichTooltipTest(
title = { Text(text = "Subhead", modifier = Modifier.testTag(SubheadTestTag)) },
text = { Text(text = "Text", modifier = Modifier.testTag(TextTestTag)) },
- action = { Text(text = "Action", modifier = Modifier.testTag(ActionTestTag)) },
+ action = { Text(text = "Action", modifier = Modifier.testTag(ActionTestTag)) }
)
}
+ // Stop auto advance for test consistency
+ rule.mainClock.autoAdvance = false
+
+ rule.onNodeWithTag(AnchorTestTag)
+ .performTouchInput { longClick() }
+
+ rule.waitForIdle()
val subhead = rule.onNodeWithTag(SubheadTestTag)
val text = rule.onNodeWithTag(TextTestTag)
@@ -154,19 +197,18 @@
fun plainTooltip_behavior() {
val tooltipState = PlainTooltipState()
rule.setMaterialContent(lightColorScheme()) {
- PlainTooltipBox(
- tooltip = { Text(text = "Test", modifier = Modifier.testTag(TextTestTag)) },
- tooltipState = tooltipState,
- modifier = Modifier.testTag(ContainerTestTag)
- ) { Anchor(tooltipState) }
+ PlainTooltipTest(
+ tooltipContent = { Text(text = "Test", modifier = Modifier.testTag(TextTestTag)) },
+ tooltipState = tooltipState
+ )
}
- // Tooltip should initially be not visible
- assertThat(tooltipState.isVisible).isFalse()
-
// Test will manually advance the time to check the timeout
rule.mainClock.autoAdvance = false
+ // Tooltip should initially be not visible
+ assertThat(tooltipState.isVisible).isFalse()
+
// Long press the icon
rule.onNodeWithTag(AnchorTestTag)
.performTouchInput { longClick() }
@@ -185,20 +227,19 @@
fun richTooltip_behavior_noAction() {
val tooltipState = RichTooltipState()
rule.setMaterialContent(lightColorScheme()) {
- RichTooltipBox(
+ RichTooltipTest(
title = { Text(text = "Subhead", modifier = Modifier.testTag(SubheadTestTag)) },
text = { Text(text = "Text", modifier = Modifier.testTag(TextTestTag)) },
- tooltipState = tooltipState,
- modifier = Modifier.testTag(ContainerTestTag)
- ) { Anchor(tooltipState) }
+ tooltipState = tooltipState
+ )
}
- // Tooltip should initially be not visible
- assertThat(tooltipState.isVisible).isFalse()
-
// Test will manually advance the time to check the timeout
rule.mainClock.autoAdvance = false
+ // Tooltip should initially be not visible
+ assertThat(tooltipState.isVisible).isFalse()
+
// Long press the icon
rule.onNodeWithTag(AnchorTestTag)
.performTouchInput { longClick() }
@@ -218,7 +259,7 @@
val tooltipState = RichTooltipState()
rule.setMaterialContent(lightColorScheme()) {
val scope = rememberCoroutineScope()
- RichTooltipBox(
+ RichTooltipTest(
title = { Text(text = "Subhead", modifier = Modifier.testTag(SubheadTestTag)) },
text = { Text(text = "Text", modifier = Modifier.testTag(TextTestTag)) },
action = {
@@ -227,17 +268,16 @@
modifier = Modifier.testTag(ActionTestTag)
) { Text(text = "Action") }
},
- tooltipState = tooltipState,
- modifier = Modifier.testTag(ContainerTestTag)
- ) { Anchor(tooltipState) }
+ tooltipState = tooltipState
+ )
}
- // Tooltip should initially be not visible
- assertThat(tooltipState.isVisible).isFalse()
-
// Test will manually advance the time to check the timeout
rule.mainClock.autoAdvance = false
+ // Tooltip should initially be not visible
+ assertThat(tooltipState.isVisible).isFalse()
+
// Long press the icon
rule.onNodeWithTag(AnchorTestTag)
.performTouchInput { longClick() }
@@ -258,64 +298,49 @@
}
@Composable
- private fun TestPlainTooltip(
+ private fun PlainTooltipTest(
modifier: Modifier = Modifier,
+ tooltipContent: @Composable () -> Unit = {},
tooltipState: PlainTooltipState = remember { PlainTooltipState() },
- tooltipContent: @Composable () -> Unit = {}
) {
- val scope = rememberCoroutineScope()
-
PlainTooltipBox(
tooltip = tooltipContent,
- modifier = modifier.testTag(ContainerTestTag),
- tooltipState = tooltipState
- ) {}
-
- scope.launch { tooltipState.show() }
+ tooltipState = tooltipState,
+ modifier = modifier.testTag(ContainerTestTag)
+ ) {
+ Icon(
+ Icons.Filled.Favorite,
+ contentDescription = null,
+ modifier = Modifier
+ .testTag(AnchorTestTag)
+ .tooltipAnchor()
+ )
+ }
}
@Composable
- private fun TestRichTooltip(
+ private fun RichTooltipTest(
modifier: Modifier = Modifier,
tooltipState: RichTooltipState = remember { RichTooltipState() },
text: @Composable () -> Unit = {},
- action: (@Composable () -> Unit)? = null,
- title: (@Composable () -> Unit)? = null
+ title: (@Composable () -> Unit)? = null,
+ action: (@Composable () -> Unit)? = null
) {
- val scope = rememberCoroutineScope()
-
RichTooltipBox(
text = text,
- action = action,
title = title,
- modifier = modifier.testTag(ContainerTestTag),
- tooltipState = tooltipState
- ) {}
-
- scope.launch { tooltipState.show() }
- }
-
- @OptIn(ExperimentalFoundationApi::class)
- @Composable
- private fun Anchor(
- tooltipState: TooltipState
- ) {
- val scope = rememberCoroutineScope()
-
- Icon(
- Icons.Filled.Favorite,
- contentDescription = null,
- modifier = Modifier
- .testTag(AnchorTestTag)
- .combinedClickable(
- onClick = {},
- onLongClick = {
- scope.launch {
- tooltipState.show()
- }
- }
- )
- )
+ action = action,
+ tooltipState = tooltipState,
+ modifier = modifier.testTag(ContainerTestTag)
+ ) {
+ Icon(
+ Icons.Filled.Favorite,
+ contentDescription = null,
+ modifier = Modifier
+ .testTag(AnchorTestTag)
+ .tooltipAnchor()
+ )
+ }
}
}
@@ -323,4 +348,4 @@
private const val TextTestTag = "Text"
private const val SubheadTestTag = "Subhead"
private const val ActionTestTag = "Action"
-private const val AnchorTestTag = "Anchor'"
\ No newline at end of file
+private const val AnchorTestTag = "Anchor"
\ No newline at end of file
diff --git a/compose/material3/material3/src/androidMain/res/values-af/strings.xml b/compose/material3/material3/src/androidMain/res/values-af/strings.xml
index 96bb70c..ed3609f 100644
--- a/compose/material3/material3/src/androidMain/res/values-af/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-af/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datum val buite die omvang van die verwagte jaartal %1$s-%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Skakel oor na kalenderinvoermodus"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Skakel oor na teksinvoermodus"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Wys nutswenk"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"nm."</string>
<string name="time_picker_am" msgid="5096144640014509074">"vm."</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-am/strings.xml b/compose/material3/material3/src/androidMain/res/values-am/strings.xml
index 9a4df26..0bacfb0 100644
--- a/compose/material3/material3/src/androidMain/res/values-am/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-am/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"ቀን ከተጠበቀው የዓመት ክልል ውጪ ነው %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ወደ የቀን መቁጠሪያ ግቤት ሁነታ ቀይር"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"ወደ የጽሁፍ ግቤት ሁነታ ቀይር"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"መሣሪያ ጥቆማን አሳይ"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"ከሰዓት"</string>
<string name="time_picker_am" msgid="5096144640014509074">"ጠዋት"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ar/strings.xml b/compose/material3/material3/src/androidMain/res/values-ar/strings.xml
index 0832f50..220c465 100644
--- a/compose/material3/material3/src/androidMain/res/values-ar/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ar/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"التاريخ خارج نطاق الأعوام المتوقَّع: %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"التبديل إلى وضع \"الإدخال في التقويم\""</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"التبديل إلى وضع \"إدخال النص\""</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"إظهار التلميح"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"م"</string>
<string name="time_picker_am" msgid="5096144640014509074">"ص"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-as/strings.xml b/compose/material3/material3/src/androidMain/res/values-as/strings.xml
index 77e8396..33a6285 100644
--- a/compose/material3/material3/src/androidMain/res/values-as/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-as/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"তাৰিখটো প্ৰত্যাশিত বছৰৰ পৰিসৰ %1$s - %2$sৰ বাহিৰৰ"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"কেলেণ্ডাৰ ইনপুট ম’ডলৈ সলনি কৰক"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"পাঠ ইনপুট ম’ডলৈ সলনি কৰক"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"টুলটিপ দেখুৱাওক"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"পৰাহ্ন"</string>
<string name="time_picker_am" msgid="5096144640014509074">"পুৱা"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-az/strings.xml b/compose/material3/material3/src/androidMain/res/values-az/strings.xml
index 242fc3c..071c433 100644
--- a/compose/material3/material3/src/androidMain/res/values-az/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-az/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Tarix gözlənilən il aralığından kənardır: %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Təqvim daxiletmə rejiminə keçin"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Mətn daxiletmə rejiminə keçin"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"İpucu göstərin"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-b+sr+Latn/strings.xml b/compose/material3/material3/src/androidMain/res/values-b+sr+Latn/strings.xml
index 2d43968..2deaf42 100644
--- a/compose/material3/material3/src/androidMain/res/values-b+sr+Latn/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-b+sr+Latn/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datum je izvan očekivanog opsega godina %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Pređite na režim unosa u Kalendaru"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Pređite na režim unosa teksta"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Prikaži objašnjenje"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"po"</string>
<string name="time_picker_am" msgid="5096144640014509074">"pr"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-be/strings.xml b/compose/material3/material3/src/androidMain/res/values-be/strings.xml
index ee3326d..16e3b60 100644
--- a/compose/material3/material3/src/androidMain/res/values-be/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-be/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Дата выходзіць за дазволены дыяпазон гадоў %1$s-%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Пераключыцца ў рэжым уводу \"Каляндар\""</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Пераключыцца ў рэжым уводу \"Тэкст\""</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Паказваць усплывальную падказку"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"пасля паўдня"</string>
<string name="time_picker_am" msgid="5096144640014509074">"да паўдня"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-bg/strings.xml b/compose/material3/material3/src/androidMain/res/values-bg/strings.xml
index 86d6179..2ddcdc6 100644
--- a/compose/material3/material3/src/androidMain/res/values-bg/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-bg/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Датата е извън очаквания годишен диапазон: %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Превключване към режим за въвеждане в календар"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Превключване към режим за въвеждане на текст"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Показване на подсказка"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-bn/strings.xml b/compose/material3/material3/src/androidMain/res/values-bn/strings.xml
index 639d1bb..940a923 100644
--- a/compose/material3/material3/src/androidMain/res/values-bn/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-bn/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"প্রত্যাশিত বছরের রেঞ্জের বাইরের তারিখ %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"\'ক্যালেন্ডার ইনপুট\' মোডে বদল করুন"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"\'টেক্সট ইনপুট\' মোডে বদল করুন"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"টুলটিপ দেখান"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-bs/strings.xml b/compose/material3/material3/src/androidMain/res/values-bs/strings.xml
index 087095c..f6560a7 100644
--- a/compose/material3/material3/src/androidMain/res/values-bs/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-bs/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datum je izvan očekivanog raspona %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Prebacivanje na način rada unosa kalendara"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Prebacivanje na način rada unosa teksta"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Prikaži skočni opis"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"poslijepodne"</string>
<string name="time_picker_am" msgid="5096144640014509074">"prijepodne"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ca/strings.xml b/compose/material3/material3/src/androidMain/res/values-ca/strings.xml
index 2789ab2..5014277 100644
--- a/compose/material3/material3/src/androidMain/res/values-ca/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ca/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"La data no es troba dins de l\'interval d\'anys esperat: %1$s-%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Canvia al mode d\'introducció de dades del calendari"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Canvia al mode d\'introducció de text"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Mostra la descripció emergent"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-cs/strings.xml b/compose/material3/material3/src/androidMain/res/values-cs/strings.xml
index b92fbfc..6164acc 100644
--- a/compose/material3/material3/src/androidMain/res/values-cs/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-cs/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datum mimo očekávaný rozsah roků %1$s–%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Přepnout na režim zadávání do kalendáře"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Přepnout na režim zadávání textu"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Zobrazit popisek"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-da/strings.xml b/compose/material3/material3/src/androidMain/res/values-da/strings.xml
index 847d46c..f31181f 100644
--- a/compose/material3/material3/src/androidMain/res/values-da/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-da/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datoen er uden for det forventede årsinterval: %1$s-%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Skift til input-tilstand for kalender"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Skift til input-tilstand for tekst"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Se værktøjstip"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-de/strings.xml b/compose/material3/material3/src/androidMain/res/values-de/strings.xml
index d902afe..718b72d 100644
--- a/compose/material3/material3/src/androidMain/res/values-de/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-de/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datum liegt außerhalb des erwarteten Jahresbereichs (%1$s–%2$s)"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"In den Kalendereingabemodus wechseln"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"In den Texteingabemodus wechseln"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Kurzinfo anzeigen"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-el/strings.xml b/compose/material3/material3/src/androidMain/res/values-el/strings.xml
index 126035d..9599926 100644
--- a/compose/material3/material3/src/androidMain/res/values-el/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-el/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Η ημερομηνία είναι εκτός του αναμενόμενου εύρους ετών %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Εναλλαγή στη λειτουργία εισαγωγής ημερολογίου"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Εναλλαγή στη λειτουργία εισαγωγής κειμένου"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Προβολή επεξήγησης"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"ΜΜ"</string>
<string name="time_picker_am" msgid="5096144640014509074">"ΠΜ"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-en-rAU/strings.xml b/compose/material3/material3/src/androidMain/res/values-en-rAU/strings.xml
index e982706..644dfdc 100644
--- a/compose/material3/material3/src/androidMain/res/values-en-rAU/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-en-rAU/strings.xml
@@ -44,6 +44,10 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Date out of expected year range %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Switch to calendar input mode"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Switch to text input mode"</string>
+ <string name="date_range_picker_title" msgid="690080476639943577">"Select dates"</string>
+ <string name="date_range_picker_start_headline" msgid="5759491386723090559">"Start date"</string>
+ <string name="date_range_picker_end_headline" msgid="4766270708882012148">"End date"</string>
+ <string name="date_range_input_title" msgid="2366412111888449406">"Enter dates"</string>
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Show tooltip"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-en-rCA/strings.xml b/compose/material3/material3/src/androidMain/res/values-en-rCA/strings.xml
index adb11ab..a1e39c2 100644
--- a/compose/material3/material3/src/androidMain/res/values-en-rCA/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-en-rCA/strings.xml
@@ -44,6 +44,10 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Date out of expected year range %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Switch to calendar input mode"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Switch to text input mode"</string>
+ <string name="date_range_picker_title" msgid="690080476639943577">"Select dates"</string>
+ <string name="date_range_picker_start_headline" msgid="5759491386723090559">"Start date"</string>
+ <string name="date_range_picker_end_headline" msgid="4766270708882012148">"End date"</string>
+ <string name="date_range_input_title" msgid="2366412111888449406">"Enter dates"</string>
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Show tooltip"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-en-rGB/strings.xml b/compose/material3/material3/src/androidMain/res/values-en-rGB/strings.xml
index e982706..644dfdc 100644
--- a/compose/material3/material3/src/androidMain/res/values-en-rGB/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-en-rGB/strings.xml
@@ -44,6 +44,10 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Date out of expected year range %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Switch to calendar input mode"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Switch to text input mode"</string>
+ <string name="date_range_picker_title" msgid="690080476639943577">"Select dates"</string>
+ <string name="date_range_picker_start_headline" msgid="5759491386723090559">"Start date"</string>
+ <string name="date_range_picker_end_headline" msgid="4766270708882012148">"End date"</string>
+ <string name="date_range_input_title" msgid="2366412111888449406">"Enter dates"</string>
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Show tooltip"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-en-rIN/strings.xml b/compose/material3/material3/src/androidMain/res/values-en-rIN/strings.xml
index e982706..644dfdc 100644
--- a/compose/material3/material3/src/androidMain/res/values-en-rIN/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-en-rIN/strings.xml
@@ -44,6 +44,10 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Date out of expected year range %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Switch to calendar input mode"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Switch to text input mode"</string>
+ <string name="date_range_picker_title" msgid="690080476639943577">"Select dates"</string>
+ <string name="date_range_picker_start_headline" msgid="5759491386723090559">"Start date"</string>
+ <string name="date_range_picker_end_headline" msgid="4766270708882012148">"End date"</string>
+ <string name="date_range_input_title" msgid="2366412111888449406">"Enter dates"</string>
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Show tooltip"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-en-rXC/strings.xml b/compose/material3/material3/src/androidMain/res/values-en-rXC/strings.xml
index 64b9538..5d19ba5 100644
--- a/compose/material3/material3/src/androidMain/res/values-en-rXC/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-en-rXC/strings.xml
@@ -44,6 +44,10 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Date out of expected year range %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Switch to calendar input mode"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Switch to text input mode"</string>
+ <string name="date_range_picker_title" msgid="690080476639943577">"Select dates"</string>
+ <string name="date_range_picker_start_headline" msgid="5759491386723090559">"Start date"</string>
+ <string name="date_range_picker_end_headline" msgid="4766270708882012148">"End date"</string>
+ <string name="date_range_input_title" msgid="2366412111888449406">"Enter dates"</string>
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Show tooltip"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-es-rUS/strings.xml b/compose/material3/material3/src/androidMain/res/values-es-rUS/strings.xml
index e04242d..c88157d 100644
--- a/compose/material3/material3/src/androidMain/res/values-es-rUS/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-es-rUS/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"La fecha está fuera del rango de años esperado: %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Cambiar al modo de entrada de calendario"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Cambiar al modo de entrada de texto"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Mostrar información"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"p.m."</string>
<string name="time_picker_am" msgid="5096144640014509074">"a.m."</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-es/strings.xml b/compose/material3/material3/src/androidMain/res/values-es/strings.xml
index 7157343..fb5408b 100644
--- a/compose/material3/material3/src/androidMain/res/values-es/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-es/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Fecha fuera del intervalo de años previsto: %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Cambiar al modo de introducción de calendario"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Cambiar al modo de escritura"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Mostrar descripción emergente"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-et/strings.xml b/compose/material3/material3/src/androidMain/res/values-et/strings.xml
index 105abf2..91b5077 100644
--- a/compose/material3/material3/src/androidMain/res/values-et/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-et/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Kuupäev on väljaspool eeldatud aastavahemikku %1$s–%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Lülitu kalendrisisestusrežiimile"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Lülitu tekstisisestusrežiimile"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Kuva kohtspikker"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-eu/strings.xml b/compose/material3/material3/src/androidMain/res/values-eu/strings.xml
index 71b0385..0eb3a36 100644
--- a/compose/material3/material3/src/androidMain/res/values-eu/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-eu/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Espero den urte tartetik (%1$s-%2$s) kanpo dago data"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Aldatu egutegiaren idazketa-metodora"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Aldatu testua idazteko modura"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Erakutsi aholkua"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-fa/strings.xml b/compose/material3/material3/src/androidMain/res/values-fa/strings.xml
index 7ce35cc..70e1133 100644
--- a/compose/material3/material3/src/androidMain/res/values-fa/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-fa/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"تاریخ خارج از بازه زمانی %1$s تا %2$s است"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"رفتن به روش ورودی تقویم"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"رفتن به حالت ورودی نوشتاری"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"نمایش نکتهابزار"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"ب.ظ."</string>
<string name="time_picker_am" msgid="5096144640014509074">"ق.ظ."</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-fi/strings.xml b/compose/material3/material3/src/androidMain/res/values-fi/strings.xml
index 03cf22d..31235bd 100644
--- a/compose/material3/material3/src/androidMain/res/values-fi/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-fi/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Päivämäärä ei sisälly odotettuun vuosiaikaväliin: %1$s–%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Vaihda syöttötavaksi kalenteri"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Vaihda tekstinsyöttötilaan"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Näytä vihjeteksti"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"IP"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AP"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-fr-rCA/strings.xml b/compose/material3/material3/src/androidMain/res/values-fr-rCA/strings.xml
index 2abd019..4ebb547 100644
--- a/compose/material3/material3/src/androidMain/res/values-fr-rCA/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-fr-rCA/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Date non comprise dans la fourchette prévue des années %1$s à %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Passer au mode d\'entrée de l\'Agenda"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Passer au mode d\'entrée de texte"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Afficher une infobulle"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-fr/strings.xml b/compose/material3/material3/src/androidMain/res/values-fr/strings.xml
index 37c55cc..f7898bc 100644
--- a/compose/material3/material3/src/androidMain/res/values-fr/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-fr/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Date hors de la plage d\'années attendue : %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Passer au mode de saisie Agenda"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Passer au mode de saisie Texte"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Afficher l\'info-bulle"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-gl/strings.xml b/compose/material3/material3/src/androidMain/res/values-gl/strings.xml
index a2fa6f8..f738e38 100644
--- a/compose/material3/material3/src/androidMain/res/values-gl/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-gl/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"A data está fóra do intervalo de anos esperado (%1$s - %2$s)"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Cambiar ao modo de entrada de calendario"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Cambiar ao modo de introdución de texto"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Mostrar cadro de información"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"pm"</string>
<string name="time_picker_am" msgid="5096144640014509074">"am"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-gu/strings.xml b/compose/material3/material3/src/androidMain/res/values-gu/strings.xml
index ff7f383..b481443 100644
--- a/compose/material3/material3/src/androidMain/res/values-gu/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-gu/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"અપેક્ષિત વર્ષની શ્રેણી %1$s - %2$sની બહારની તારીખ"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"કૅલેન્ડર ઇનપુટ મોડ પર સ્વિચ કરો"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"ટેક્સ્ટ ઇનપુટ મોડ પર સ્વિચ કરો"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"ટૂલટિપ બતાવો"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-hi/strings.xml b/compose/material3/material3/src/androidMain/res/values-hi/strings.xml
index 38d0eca..20b942a 100644
--- a/compose/material3/material3/src/androidMain/res/values-hi/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-hi/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"तारीख को साल के सही फ़ॉर्मैट में नहीं डाला गया है %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"कैलेंडर इनपुट मोड पर स्विच करें"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"टेक्स्ट इनपुट मोड पर स्विच करें"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"टूलटिप देखें"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-hr/strings.xml b/compose/material3/material3/src/androidMain/res/values-hr/strings.xml
index 12709b5..6bfe1fa 100644
--- a/compose/material3/material3/src/androidMain/res/values-hr/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-hr/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datum je izvan očekivanog raspona godine %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Prijelaz na način unosa u Kalendaru"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Prijelaz na način unosa teksta"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Prikaži opis"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"Poslijepodne"</string>
<string name="time_picker_am" msgid="5096144640014509074">"Prijepodne"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-hu/strings.xml b/compose/material3/material3/src/androidMain/res/values-hu/strings.xml
index 722c0f8..a4edfc2 100644
--- a/compose/material3/material3/src/androidMain/res/values-hu/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-hu/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"A dátum a várt időtartományon (%1$s – %2$s) kívül esik"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Váltás naptárbeviteli módra"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Váltás szövegbeviteli módra"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Elemleírás megjelenítése"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"du."</string>
<string name="time_picker_am" msgid="5096144640014509074">"de."</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-hy/strings.xml b/compose/material3/material3/src/androidMain/res/values-hy/strings.xml
index 1ce72fd..baa28ae 100644
--- a/compose/material3/material3/src/androidMain/res/values-hy/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-hy/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Ամսաթիվը տարեթվերի թույլատրելի միջակայքից (%1$s – %2$s) դուրս է"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Անցնել օրացույցի մուտքագրման ռեժիմ"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Անցնել տեքստի մուտքագրման ռեժիմին"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Ցուցադրել հուշում"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-in/strings.xml b/compose/material3/material3/src/androidMain/res/values-in/strings.xml
index c9a3335..ee7ee872 100644
--- a/compose/material3/material3/src/androidMain/res/values-in/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-in/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Tanggal di luar rentang tahun yang diharapkan %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Beralih ke mode input kalender"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Beralih ke mode input teks"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Tampilkan tooltip"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-is/strings.xml b/compose/material3/material3/src/androidMain/res/values-is/strings.xml
index 748dfa4..c947319 100644
--- a/compose/material3/material3/src/androidMain/res/values-is/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-is/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Dagsetning er utan áætlaðra ára: %1$s–%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Skipta yfir í innfærsluaðferð fyrir dagatal"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Skipta yfir í textainnslátt"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Sýna ábendingu"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"eh"</string>
<string name="time_picker_am" msgid="5096144640014509074">"fh"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-it/strings.xml b/compose/material3/material3/src/androidMain/res/values-it/strings.xml
index b0c19d2..7c4f5d0 100644
--- a/compose/material3/material3/src/androidMain/res/values-it/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-it/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"La data non rientra nell\'intervallo di anni previsto (%1$s-%2$s)"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Passa alla modalità di immissione Calendario"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Passa alla modalità di immissione Testo"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Mostra descrizione comando"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-iw/strings.xml b/compose/material3/material3/src/androidMain/res/values-iw/strings.xml
index 73a6c27..8d7d421 100644
--- a/compose/material3/material3/src/androidMain/res/values-iw/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-iw/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"התאריך נמצא מחוץ לטווח השנים הצפוי %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"מעבר לשיטת קלט של יומן"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"מעבר לשיטת קלט של טקסט"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"הצגת הסבר קצר"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ja/strings.xml b/compose/material3/material3/src/androidMain/res/values-ja/strings.xml
index 5e74684..fe24ddd 100644
--- a/compose/material3/material3/src/androidMain/res/values-ja/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ja/strings.xml
@@ -44,6 +44,10 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"想定される年の範囲(%1$s~%2$s)から日付が外れています"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"カレンダー入力モードに切り替え"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"テキスト入力モードに切り替え"</string>
+ <string name="date_range_picker_title" msgid="690080476639943577">"日付の選択"</string>
+ <string name="date_range_picker_start_headline" msgid="5759491386723090559">"開始日"</string>
+ <string name="date_range_picker_end_headline" msgid="4766270708882012148">"終了日"</string>
+ <string name="date_range_input_title" msgid="2366412111888449406">"日付の入力"</string>
<string name="tooltip_long_press_label" msgid="2732804537909054941">"ツールチップを表示します"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ka/strings.xml b/compose/material3/material3/src/androidMain/res/values-ka/strings.xml
index 88eb89c..6690c91 100644
--- a/compose/material3/material3/src/androidMain/res/values-ka/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ka/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"თარიღი არ არის წლების მოსალოდნელ დიაპაზონში %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"კალენდარში შეყვანის რეჟიმზე გადართვა"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"ტექსტის შეყვანის რეჟიმზე გადართვა"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"მინიშნების ჩვენება"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-kk/strings.xml b/compose/material3/material3/src/androidMain/res/values-kk/strings.xml
index cbf6ed3..3f027ba 100644
--- a/compose/material3/material3/src/androidMain/res/values-kk/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-kk/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Күтілетін жыл аралығы: %1$s–%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Күнтізбенің енгізу режиміне ауысу"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Мәтін енгізу режиміне ауысу"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Қалқыма көмекті көрсету"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"түстен кейін"</string>
<string name="time_picker_am" msgid="5096144640014509074">"түске дейін"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-km/strings.xml b/compose/material3/material3/src/androidMain/res/values-km/strings.xml
index b8356e3..0aa12f9 100644
--- a/compose/material3/material3/src/androidMain/res/values-km/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-km/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"កាលបរិច្ឆេទដែលស្ថិតនៅក្រៅចន្លោះឆ្នាំដែលរំពឹងទុក %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ប្ដូរទៅមុខងារបញ្ចូលប្រតិទិន"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"ប្ដូរទៅមុខងារបញ្ចូលអក្សរ"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"បង្ហាញកំណត់ពន្យល់"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-kn/strings.xml b/compose/material3/material3/src/androidMain/res/values-kn/strings.xml
index cd54c71..0554682 100644
--- a/compose/material3/material3/src/androidMain/res/values-kn/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-kn/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"ದಿನಾಂಕವು ನಿರೀಕ್ಷಿಸಿದ ವರ್ಷದ ವ್ಯಾಪ್ತಿಯನ್ನು ಮೀರಿದೆ %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ಕ್ಯಾಲೆಂಡರ್ ಇನ್ಪುಟ್ ಮೋಡ್ಗೆ ಬದಲಿಸಿ"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"ಪಠ್ಯ ಇನ್ಪುಟ್ ಮೋಡ್ಗೆ ಬದಲಿಸಿ"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"ಟೂಲ್ಟಿಪ್ ಅನ್ನು ತೋರಿಸಿ"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ko/strings.xml b/compose/material3/material3/src/androidMain/res/values-ko/strings.xml
index 2f628531..b519b03 100644
--- a/compose/material3/material3/src/androidMain/res/values-ko/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ko/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"데이터가 예상 연도 범위(%1$s~%2$s)를 벗어남"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"캘린더 입력 모드로 전환"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"텍스트 입력 모드로 전환"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"도움말 표시"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"오후"</string>
<string name="time_picker_am" msgid="5096144640014509074">"오전"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ky/strings.xml b/compose/material3/material3/src/androidMain/res/values-ky/strings.xml
index 3e6e538..c81e52c 100644
--- a/compose/material3/material3/src/androidMain/res/values-ky/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ky/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Күн %1$s — %2$s деп белгиленген жылдар диапазонуна кирбей калды"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Жылнаамага киргизүү режимине которулуу"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Текст киргизүү режимине которулуу"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Калкып чыгуучу кеңешти көрсөтүү"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"түштөн кийин"</string>
<string name="time_picker_am" msgid="5096144640014509074">"түшкө чейин"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-lo/strings.xml b/compose/material3/material3/src/androidMain/res/values-lo/strings.xml
index 2c6017a..8590323 100644
--- a/compose/material3/material3/src/androidMain/res/values-lo/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-lo/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"ວັນທີຢູ່ນອກໄລຍະປີທີ່ຄາດໄວ້ %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ສະຫຼັບໄປໃຊ້ໂໝດປ້ອນຂໍ້ມູນປະຕິທິນ"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"ສະຫຼັບໄປໃຊ້ໂໝດປ້ອນຂໍ້ຄວາມ"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"ສະແດງຄຳແນະນຳ"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"ຫຼັງທ່ຽງ"</string>
<string name="time_picker_am" msgid="5096144640014509074">"ກ່ອນທ່ຽງ"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-lt/strings.xml b/compose/material3/material3/src/androidMain/res/values-lt/strings.xml
index 3ab33d0..191d797 100644
--- a/compose/material3/material3/src/androidMain/res/values-lt/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-lt/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Data nepatenka į numatytų metų diapazoną: %1$s–%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Perjungti į kalendoriaus įvesties režimą"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Perjungti į teksto įvesties režimą"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Rodyti patarimą"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"popiet"</string>
<string name="time_picker_am" msgid="5096144640014509074">"priešpiet"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-lv/strings.xml b/compose/material3/material3/src/androidMain/res/values-lv/strings.xml
index a8c4312..156ea67 100644
--- a/compose/material3/material3/src/androidMain/res/values-lv/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-lv/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datums nav paredzētajā gadu diapazonā (%1$s.–%2$s. g.)"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Pārslēgties uz kalendāra ievades režīmu"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Pārslēgties uz teksta ievades režīmu"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Rādīt rīka padomu"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-mk/strings.xml b/compose/material3/material3/src/androidMain/res/values-mk/strings.xml
index 0b872f6..2b2bced 100644
--- a/compose/material3/material3/src/androidMain/res/values-mk/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-mk/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Датумот не е во очекуваниот опсег на години %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Префрли на режим за внесување во календарот"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Префрли на режим за внесување текст"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Прикажи совет за алатка"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"попладне"</string>
<string name="time_picker_am" msgid="5096144640014509074">"претпладне"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ml/strings.xml b/compose/material3/material3/src/androidMain/res/values-ml/strings.xml
index 104f0a3..6a60c97 100644
--- a/compose/material3/material3/src/androidMain/res/values-ml/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ml/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"പ്രതീക്ഷിക്കുന്ന കാലയളവിലെ വർഷമല്ല നൽകിയ തീയതിയുടേത് %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"കലണ്ടർ ഇൻപുട്ട് മോഡിലേക്ക് മാറുക"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"ടെക്സ്റ്റ് ഇൻപുട്ട് മോഡിലേക്ക് മാറുക"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"ടൂൾടിപ്പ് കാണിക്കുക"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-mn/strings.xml b/compose/material3/material3/src/androidMain/res/values-mn/strings.xml
index 216cd28..ebca4e7 100644
--- a/compose/material3/material3/src/androidMain/res/values-mn/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-mn/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Тооцоолсон оны %1$s - %2$s мужаас гарсан огноо"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Календарийн орох горим руу сэлгэх"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Текст оруулах горим руу сэлгэх"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Зөвлөмж харуулах"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"ҮХ"</string>
<string name="time_picker_am" msgid="5096144640014509074">"ҮӨ"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-mr/strings.xml b/compose/material3/material3/src/androidMain/res/values-mr/strings.xml
index 09284b8..e95c9a6 100644
--- a/compose/material3/material3/src/androidMain/res/values-mr/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-mr/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"तारीख ही %1$s - %2$s या अपेक्षित रेंजच्या बाहेरची आहे"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"कॅलेंडर इनपुट मोडवर स्विच करा"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"टेक्स्ट इनपुट मोडवर स्विच करा"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"टूलटिप दाखवा"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ms/strings.xml b/compose/material3/material3/src/androidMain/res/values-ms/strings.xml
index 7acd62b..1bef8e7 100644
--- a/compose/material3/material3/src/androidMain/res/values-ms/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ms/strings.xml
@@ -44,6 +44,10 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Tarikh di luar julat tahun yang dijangkakan %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Beralih kepada mod input kalendar"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Beralih kepada mod input teks"</string>
+ <string name="date_range_picker_title" msgid="690080476639943577">"Pilih tarikh"</string>
+ <string name="date_range_picker_start_headline" msgid="5759491386723090559">"Tarikh mula"</string>
+ <string name="date_range_picker_end_headline" msgid="4766270708882012148">"Tarikh tamat"</string>
+ <string name="date_range_input_title" msgid="2366412111888449406">"Masukkan tarikh"</string>
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Tunjukkan tip alat"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"P/M"</string>
<string name="time_picker_am" msgid="5096144640014509074">"PG"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-my/strings.xml b/compose/material3/material3/src/androidMain/res/values-my/strings.xml
index 5aec28b..a029227 100644
--- a/compose/material3/material3/src/androidMain/res/values-my/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-my/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"ရက်စွဲသည် မျှော်မှန်းထားသော နှစ်အပိုင်းအခြား %1$s - %2$s တွင် မပါဝင်ပါ"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ပြက္ခဒိန် လက်ကွက်ထည့်သွင်းနည်းသို့ ပြောင်းရန်"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"စာရိုက်နည်းသို့ ပြောင်းရန်"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"အကြံပြုချက်ပြ ပေါ့အပ်ဝင်းဒိုး ပြရန်"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-nb/strings.xml b/compose/material3/material3/src/androidMain/res/values-nb/strings.xml
index 85768f3..dfe1686 100644
--- a/compose/material3/material3/src/androidMain/res/values-nb/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-nb/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datoen er utenfor det forventede årsintervallet %1$s–%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Bytt til kalendermodus for inndata"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Bytt til tekstmodus for inndata"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Vis verktøytips"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ne/strings.xml b/compose/material3/material3/src/androidMain/res/values-ne/strings.xml
index c820f95..dd24118 100644
--- a/compose/material3/material3/src/androidMain/res/values-ne/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ne/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"हालिएको मिति सालको अपेक्षित दायरा (%1$s - %2$s) भित्र पर्दैन"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"पात्रोको इनपुट मोड प्रयोग गर्नुहोस्"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"टेक्स्ट इनपुट मोड प्रयोग गर्नुहोस्"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"टुलटिप देखाइयोस्"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-nl/strings.xml b/compose/material3/material3/src/androidMain/res/values-nl/strings.xml
index 051711b..9572e68 100644
--- a/compose/material3/material3/src/androidMain/res/values-nl/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-nl/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datum buiten het verwachte jaarbereik %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Overschakelen naar agenda-invoermodus"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Overschakelen naar tekstinvoermodus"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Tooltip tonen"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-or/strings.xml b/compose/material3/material3/src/androidMain/res/values-or/strings.xml
index 35c0b41..c502a61 100644
--- a/compose/material3/material3/src/androidMain/res/values-or/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-or/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"ତାରିଖଟି ଆଶା କରାଯାଉଥିବା ବର୍ଷ ରେଞ୍ଜ %1$s - %2$sରୁ ବାହାରେ ଅଛି"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"କେଲେଣ୍ଡର ଇନପୁଟ ମୋଡକୁ ସ୍ୱିଚ କରନ୍ତୁ"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"ଟେକ୍ସଟ ଇନପୁଟ ମୋଡକୁ ସ୍ୱିଚ କରନ୍ତୁ"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"ଟୁଲଟିପ ଦେଖାନ୍ତୁ"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-pa/strings.xml b/compose/material3/material3/src/androidMain/res/values-pa/strings.xml
index 09646c0..e69c389 100644
--- a/compose/material3/material3/src/androidMain/res/values-pa/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-pa/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"ਤਾਰੀਖ ਸੰਭਾਵਿਤ ਸਾਲ ਦੀ ਰੇਂਜ ਤੋਂ ਬਾਹਰ ਹੈ %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ਕੈਲੰਡਰ ਇਨਪੁੱਟ ਮੋਡ \'ਤੇ ਸਵਿੱਚ ਕਰੋ"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"ਲਿਖਤ ਇਨਪੁੱਟ ਮੋਡ \'ਤੇ ਸਵਿੱਚ ਕਰੋ"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"ਟੂਲ-ਟਿੱਪ ਦਿਖਾਓ"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-pl/strings.xml b/compose/material3/material3/src/androidMain/res/values-pl/strings.xml
index 5bb9101..64844da 100644
--- a/compose/material3/material3/src/androidMain/res/values-pl/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-pl/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Data poza oczekiwanym zakresem lat %1$s–%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Włącz tryb wprowadzania danych kalendarzowych"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Włącz tryb wprowadzania tekstu"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Pokaż etykietkę"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-pt-rBR/strings.xml b/compose/material3/material3/src/androidMain/res/values-pt-rBR/strings.xml
index cfd5be4..31bb3519 100644
--- a/compose/material3/material3/src/androidMain/res/values-pt-rBR/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-pt-rBR/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"A data está fora do intervalo de anos esperado %1$s a %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Alternar para o modo de entrada da agenda"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Alternar para o modo de entrada de texto"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Mostrar dica"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-pt-rPT/strings.xml b/compose/material3/material3/src/androidMain/res/values-pt-rPT/strings.xml
index e61dd37..90e5529 100644
--- a/compose/material3/material3/src/androidMain/res/values-pt-rPT/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-pt-rPT/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Data fora do intervalo de anos esperado: %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Mudar para o método de introdução de calendário"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Mudar para o método de introdução de texto"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Mostrar sugestão"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-pt/strings.xml b/compose/material3/material3/src/androidMain/res/values-pt/strings.xml
index cfd5be4..31bb3519 100644
--- a/compose/material3/material3/src/androidMain/res/values-pt/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-pt/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"A data está fora do intervalo de anos esperado %1$s a %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Alternar para o modo de entrada da agenda"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Alternar para o modo de entrada de texto"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Mostrar dica"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ro/strings.xml b/compose/material3/material3/src/androidMain/res/values-ro/strings.xml
index 421aadf..0469dac 100644
--- a/compose/material3/material3/src/androidMain/res/values-ro/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ro/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Data este în afara intervalului de ani %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Comută la modul de introducere în calendar"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Comută la modul de introducere a textului"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Afișează balonul explicativ"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"p.m."</string>
<string name="time_picker_am" msgid="5096144640014509074">"a.m."</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ru/strings.xml b/compose/material3/material3/src/androidMain/res/values-ru/strings.xml
index 4fd933b..68ed943 100644
--- a/compose/material3/material3/src/androidMain/res/values-ru/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ru/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Дата не входит в допустимый диапазон: %1$s–%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Перейти в режим выбора даты"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Перейти в режим ввода текста"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Показать подсказку"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-si/strings.xml b/compose/material3/material3/src/androidMain/res/values-si/strings.xml
index 372c4d0..2a722e7 100644
--- a/compose/material3/material3/src/androidMain/res/values-si/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-si/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"දිනය අපේක්ෂිත වසර පරාසයෙන් පිටත වේ %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"දින දර්ශන ආදාන ප්රකාරයට මාරු වන්න"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"පෙළ ආදාන ප්රකාරයට මාරු වන්න"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"මෙවලම් ඉඟිය පෙන්වන්න"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"ප.ව."</string>
<string name="time_picker_am" msgid="5096144640014509074">"පෙ.ව."</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-sk/strings.xml b/compose/material3/material3/src/androidMain/res/values-sk/strings.xml
index d83ef09..c149822 100644
--- a/compose/material3/material3/src/androidMain/res/values-sk/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-sk/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Dátum sa nenachádza v očakávanom rozsahu rokov: %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Prepnúť na kalendárový režim vstupu"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Prepnúť na textový režim vstupu"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Zobraziť opis"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-sl/strings.xml b/compose/material3/material3/src/androidMain/res/values-sl/strings.xml
index 2e7235c..976a42e 100644
--- a/compose/material3/material3/src/androidMain/res/values-sl/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-sl/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datum je zunaj pričakovanega razpona let %1$s–%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Preklop na način vnosa v koledar"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Preklop na način vnosa besedila"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Pokaži opis orodja"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"pop."</string>
<string name="time_picker_am" msgid="5096144640014509074">"dop."</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-sq/strings.xml b/compose/material3/material3/src/androidMain/res/values-sq/strings.xml
index 17583c2..920735b 100644
--- a/compose/material3/material3/src/androidMain/res/values-sq/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-sq/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Data jashtë diapazonit të pritur të vitit %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Kalo te modaliteti i \"Hyrjes së kalendarit\""</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Kalo te modaliteti i \"Hyrjes së tekstit\""</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Shfaq këshillat për veglën"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"MD"</string>
<string name="time_picker_am" msgid="5096144640014509074">"PD"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-sr/strings.xml b/compose/material3/material3/src/androidMain/res/values-sr/strings.xml
index bcc4baa..4d19f41 100644
--- a/compose/material3/material3/src/androidMain/res/values-sr/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-sr/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Датум је изван очекиваног опсега година %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Пређите на режим уноса у Календару"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Пређите на режим уноса текста"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Прикажи објашњење"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"по"</string>
<string name="time_picker_am" msgid="5096144640014509074">"пр"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-sv/strings.xml b/compose/material3/material3/src/androidMain/res/values-sv/strings.xml
index 2b8233b..2e4ccf7 100644
--- a/compose/material3/material3/src/androidMain/res/values-sv/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-sv/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Datumet faller utanför det förväntade årsintervallet %1$s–%2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Byt till kalender som inmatningsläge"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Byt till text som inmatningsläge"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Visa beskrivning"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"EM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"FM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-sw/strings.xml b/compose/material3/material3/src/androidMain/res/values-sw/strings.xml
index eb057de..263dd67 100644
--- a/compose/material3/material3/src/androidMain/res/values-sw/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-sw/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Tarehe nje ya kipindi cha mwaka kilichotarajiwa %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Badilisha mipangilio ya kuingiza data ya kalenda"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Badilisha kwenda mipangilio ya kuingiza data ya maandishi"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Onyesha kidirisha cha vidokezo"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"Mchana"</string>
<string name="time_picker_am" msgid="5096144640014509074">"Asubuhi"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ta/strings.xml b/compose/material3/material3/src/androidMain/res/values-ta/strings.xml
index 59efd25..33a7922 100644
--- a/compose/material3/material3/src/androidMain/res/values-ta/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ta/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"இந்தத் தேதி %1$s - %2$s ஆண்டு வரம்பிற்குள் இல்லை"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"கேலெண்டர் உள்ளீட்டு முறைக்கு மாற்று"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"எழுத்து உள்ளீட்டு முறைக்கு மாற்று"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"உதவிக்குறிப்பைக் காட்டு"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-te/strings.xml b/compose/material3/material3/src/androidMain/res/values-te/strings.xml
index be8ceed..c49864c 100644
--- a/compose/material3/material3/src/androidMain/res/values-te/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-te/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"ఉండాల్సిన సంవత్సరాల పరిధి %1$s - %2$sలో తేదీ లేదు"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"క్యాలెండర్ ఇన్పుట్ మోడ్కు స్విచ్ అవ్వండి"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"టెక్స్ట్ ఇన్పుట్ మోడ్కు స్విచ్ అవ్వండి"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"టూల్టిప్ను చూపించు"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-th/strings.xml b/compose/material3/material3/src/androidMain/res/values-th/strings.xml
index 6aa0a32..12e1db9 100644
--- a/compose/material3/material3/src/androidMain/res/values-th/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-th/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"วันที่อยู่นอกเหนือจากช่วงปีที่คาดไว้ %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"สลับไปใช้โหมดป้อนข้อมูลปฏิทิน"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"สลับไปใช้โหมดการป้อนข้อความ"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"แสดงเคล็ดลับเครื่องมือ"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-tl/strings.xml b/compose/material3/material3/src/androidMain/res/values-tl/strings.xml
index c78a878..74f8d82 100644
--- a/compose/material3/material3/src/androidMain/res/values-tl/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-tl/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Wala ang petsa sa inaasahang hanay ng taon na %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Lumipat sa pamamaraan ng pag-input ng kalendaryo"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Lumipat sa pamamaraan ng pag-input ng text"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Ipakita ang tooltip"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-tr/strings.xml b/compose/material3/material3/src/androidMain/res/values-tr/strings.xml
index 48934fe..a43e55d 100644
--- a/compose/material3/material3/src/androidMain/res/values-tr/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-tr/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Tarih, istenen %1$s - %2$s yıl aralığının dışında"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Takvim giriş moduna geç"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Metin giriş moduna geç"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Araç ipucunu göster"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"ÖS"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-uk/strings.xml b/compose/material3/material3/src/androidMain/res/values-uk/strings.xml
index d73d220..f4525e9 100644
--- a/compose/material3/material3/src/androidMain/res/values-uk/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-uk/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Дата за межами очікуваного діапазону років %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Перейти в режим введення в календарі"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Перейти в режим введення тексту"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Показати підказку"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"ПП"</string>
<string name="time_picker_am" msgid="5096144640014509074">"ДП"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-ur/strings.xml b/compose/material3/material3/src/androidMain/res/values-ur/strings.xml
index 87423e7..471f334 100644
--- a/compose/material3/material3/src/androidMain/res/values-ur/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-ur/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"متوقع سال کی حد %1$s - %2$s سے باہر کی تاریخ"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"کیلنڈر اندراج کے طرز پر سوئچ کریں"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"ٹیکسٹ اندراج کے طرز پر سوئچ کریں"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"ٹول ٹپ دکھائیں"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"بعد از دوپہر"</string>
<string name="time_picker_am" msgid="5096144640014509074">"قبلاز دوپہر"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-uz/strings.xml b/compose/material3/material3/src/androidMain/res/values-uz/strings.xml
index 5e87b62..d7a21c0 100644
--- a/compose/material3/material3/src/androidMain/res/values-uz/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-uz/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Sana kutilgan yil oraligʻida emas: %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Taqvim kiritish rejimiga oʻtish"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Matn kiritish rejimiga oʻtish"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Maslahat oynasini koʻrsatish"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"TK"</string>
<string name="time_picker_am" msgid="5096144640014509074">"TO"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-vi/strings.xml b/compose/material3/material3/src/androidMain/res/values-vi/strings.xml
index 9ed82e5..54c032a 100644
--- a/compose/material3/material3/src/androidMain/res/values-vi/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-vi/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Ngày không thuộc phạm vi năm dự kiến %1$s – %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Chuyển sang chế độ nhập lịch"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Chuyển sang chế độ nhập văn bản"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Hiển thị chú giải công cụ"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"CH"</string>
<string name="time_picker_am" msgid="5096144640014509074">"SA"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-zh-rCN/strings.xml b/compose/material3/material3/src/androidMain/res/values-zh-rCN/strings.xml
index 34da824..ac3ebee4 100644
--- a/compose/material3/material3/src/androidMain/res/values-zh-rCN/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-zh-rCN/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"日期超出预期年份范围 %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"切换到日历输入模式"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"切换到文本字段输入模式"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"显示提示"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"下午"</string>
<string name="time_picker_am" msgid="5096144640014509074">"上午"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-zh-rHK/strings.xml b/compose/material3/material3/src/androidMain/res/values-zh-rHK/strings.xml
index cdc9f9d..841d091 100644
--- a/compose/material3/material3/src/androidMain/res/values-zh-rHK/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-zh-rHK/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"日期超出預期的年份範圍:%1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"切換至日曆輸入模式"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"切換至文字輸入模式"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"顯示提示"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"下午"</string>
<string name="time_picker_am" msgid="5096144640014509074">"上午"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-zh-rTW/strings.xml b/compose/material3/material3/src/androidMain/res/values-zh-rTW/strings.xml
index 087bbb0..6878480 100644
--- a/compose/material3/material3/src/androidMain/res/values-zh-rTW/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-zh-rTW/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"日期超出預期的年份範圍:%1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"切換至日曆輸入模式"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"切換至文字輸入模式"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"顯示工具提示"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"下午"</string>
<string name="time_picker_am" msgid="5096144640014509074">"上午"</string>
diff --git a/compose/material3/material3/src/androidMain/res/values-zu/strings.xml b/compose/material3/material3/src/androidMain/res/values-zu/strings.xml
index 6ed66b5..b59cfd0 100644
--- a/compose/material3/material3/src/androidMain/res/values-zu/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-zu/strings.xml
@@ -44,6 +44,14 @@
<string name="date_input_invalid_year_range" msgid="8434112129235255568">"Usuku lungaphandle kwebanga lonyaka elilindelekile %1$s - %2$s"</string>
<string name="date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Shintshela kwimodi yokufaka yekhalenda"</string>
<string name="date_picker_switch_to_input_mode" msgid="1496750567914156598">"Shintshela kwimodi yokufaka yombhalo"</string>
+ <!-- no translation found for date_range_picker_title (690080476639943577) -->
+ <skip />
+ <!-- no translation found for date_range_picker_start_headline (5759491386723090559) -->
+ <skip />
+ <!-- no translation found for date_range_picker_end_headline (4766270708882012148) -->
+ <skip />
+ <!-- no translation found for date_range_input_title (2366412111888449406) -->
+ <skip />
<string name="tooltip_long_press_label" msgid="2732804537909054941">"Bonisa ithulithiphu"</string>
<string name="time_picker_pm" msgid="2232702812657998674">"PM"</string>
<string name="time_picker_am" msgid="5096144640014509074">"AM"</string>
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tooltip.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tooltip.kt
index 302f4c8..841dd47 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tooltip.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tooltip.kt
@@ -18,6 +18,7 @@
import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.LinearOutSlowInEasing
+import androidx.compose.animation.core.Transition
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.tween
import androidx.compose.animation.core.updateTransition
@@ -46,6 +47,7 @@
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
import androidx.compose.ui.composed
import androidx.compose.ui.graphics.Color
@@ -245,30 +247,33 @@
}
}
- Box {
- Popup(
- popupPositionProvider = tooltipPositionProvider,
- onDismissRequest = {
- if (tooltipState.isVisible) {
- coroutineScope.launch { tooltipState.dismiss() }
+ Box(contentAlignment = Alignment.TopCenter) {
+ val transition = updateTransition(tooltipState.isVisible, label = "Tooltip transition")
+ if (transition.currentState || transition.targetState) {
+ Popup(
+ popupPositionProvider = tooltipPositionProvider,
+ onDismissRequest = {
+ if (tooltipState.isVisible) {
+ coroutineScope.launch { tooltipState.dismiss() }
+ }
}
+ ) {
+ Surface(
+ modifier = modifier
+ .sizeIn(
+ minWidth = TooltipMinWidth,
+ maxWidth = maxWidth,
+ minHeight = TooltipMinHeight
+ )
+ .animateTooltip(transition)
+ .focusable()
+ .semantics { liveRegion = LiveRegionMode.Polite },
+ shape = shape,
+ color = containerColor,
+ shadowElevation = elevation,
+ content = tooltipContent
+ )
}
- ) {
- Surface(
- modifier = modifier
- .sizeIn(
- minWidth = TooltipMinWidth,
- maxWidth = maxWidth,
- minHeight = TooltipMinHeight
- )
- .animateTooltip(tooltipState.isVisible)
- .focusable()
- .semantics { liveRegion = LiveRegionMode.Polite },
- shape = shape,
- color = containerColor,
- shadowElevation = elevation,
- content = tooltipContent
- )
}
scope.content()
@@ -484,15 +489,13 @@
}
private fun Modifier.animateTooltip(
- showTooltip: Boolean
+ transition: Transition<Boolean>
): Modifier = composed(
inspectorInfo = debugInspectorInfo {
name = "animateTooltip"
- properties["showTooltip"] = showTooltip
+ properties["transition"] = transition
}
) {
- val transition = updateTransition(showTooltip, label = "Tooltip transition")
-
val scale by transition.animateFloat(
transitionSpec = {
if (false isTransitioningTo true) {
@@ -760,5 +763,5 @@
private val ActionLabelBottomPadding = 8.dp
internal const val TooltipDuration = 1500L
// No specification for fade in and fade out duration, so aligning it with the behavior for snack bar
-private const val TooltipFadeInDuration = 150
+internal const val TooltipFadeInDuration = 150
private const val TooltipFadeOutDuration = 75
\ No newline at end of file
diff --git a/compose/material3/material3/src/test/kotlin/androidx/compose/material3/ButtonPaparazziTest.kt b/compose/material3/material3/src/test/kotlin/androidx/compose/material3/ButtonPaparazziTest.kt
index e4737d5..e386d4e 100644
--- a/compose/material3/material3/src/test/kotlin/androidx/compose/material3/ButtonPaparazziTest.kt
+++ b/compose/material3/material3/src/test/kotlin/androidx/compose/material3/ButtonPaparazziTest.kt
@@ -16,6 +16,16 @@
package androidx.compose.material3
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.requiredSize
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.unit.dp
import androidx.testutils.paparazzi.androidxPaparazzi
import org.junit.Rule
import org.junit.Test
@@ -52,4 +62,192 @@
}
}
}
-}
\ No newline at end of file
+
+ @Test
+ fun disabled_button_light_theme() {
+ paparazzi.snapshot {
+ MaterialTheme(lightColorScheme()) {
+ Surface {
+ Button(onClick = { }, enabled = false) {
+ Text("Button")
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ fun disabled_button_dark_theme() {
+ paparazzi.snapshot {
+ MaterialTheme(darkColorScheme()) {
+ Surface {
+ Button(onClick = { }, enabled = false) {
+ Text("Button")
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ fun elevated_button_light_theme() {
+ paparazzi.snapshot {
+ MaterialTheme(lightColorScheme()) {
+ Surface {
+ Box(
+ Modifier.requiredSize(
+ 200.dp,
+ 100.dp
+ ).wrapContentSize().testTag("elevated button")
+ ) {
+ ElevatedButton(onClick = {}) { Text("Elevated Button") }
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ fun elevated_button_dark_theme() {
+ paparazzi.snapshot {
+ MaterialTheme(darkColorScheme()) {
+ Surface {
+ Box(
+ Modifier.requiredSize(
+ 200.dp,
+ 100.dp
+ ).wrapContentSize().testTag("elevated button")
+ ) {
+ ElevatedButton(onClick = {}) { Text("Elevated Button") }
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ fun disabled_elevated_button_light_theme() {
+ paparazzi.snapshot {
+ MaterialTheme(lightColorScheme()) {
+ Surface {
+ Box(
+ Modifier.requiredSize(
+ 200.dp,
+ 100.dp
+ ).wrapContentSize().testTag("elevated button")
+ ) {
+ ElevatedButton(onClick = {}, enabled = false) { Text("Elevated Button") }
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ fun disabled_elevated_button_dark_theme() {
+ paparazzi.snapshot {
+ MaterialTheme(darkColorScheme()) {
+ Surface {
+ Box(
+ Modifier.requiredSize(
+ 200.dp,
+ 100.dp
+ ).wrapContentSize().testTag("elevated button")
+ ) {
+ ElevatedButton(onClick = {}, enabled = false) { Text("Elevated Button") }
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ fun button_with_icon_light_theme() {
+ paparazzi.snapshot {
+ MaterialTheme(lightColorScheme()) {
+ Surface {
+ Button(
+ onClick = { /* Do something! */ },
+ contentPadding = ButtonDefaults.ButtonWithIconContentPadding
+ ) {
+ Icon(
+ Icons.Filled.Favorite,
+ contentDescription = "Localized description",
+ modifier = Modifier.size(ButtonDefaults.IconSize)
+ )
+ Spacer(Modifier.size(ButtonDefaults.IconSpacing))
+ Text("Like")
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ fun button_with_icon_dark_theme() {
+ paparazzi.snapshot {
+ MaterialTheme(darkColorScheme()) {
+ Surface {
+ Button(
+ onClick = { /* Do something! */ },
+ contentPadding = ButtonDefaults.ButtonWithIconContentPadding
+ ) {
+ Icon(
+ Icons.Filled.Favorite,
+ contentDescription = "Localized description",
+ modifier = Modifier.size(ButtonDefaults.IconSize)
+ )
+ Spacer(Modifier.size(ButtonDefaults.IconSpacing))
+ Text("Like")
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ fun disabled_button_with_icon_light_theme() {
+ paparazzi.snapshot {
+ MaterialTheme(lightColorScheme()) {
+ Surface {
+ Button(
+ onClick = { /* Do something! */ },
+ contentPadding = ButtonDefaults.ButtonWithIconContentPadding,
+ enabled = false,
+ ) {
+ Icon(
+ Icons.Filled.Favorite,
+ contentDescription = "Localized description",
+ modifier = Modifier.size(ButtonDefaults.IconSize)
+ )
+ Spacer(Modifier.size(ButtonDefaults.IconSpacing))
+ Text("Like")
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ fun disabled_button_with_icon_dark_theme() {
+ paparazzi.snapshot {
+ MaterialTheme(darkColorScheme()) {
+ Surface {
+ Button(
+ onClick = { /* Do something! */ },
+ contentPadding = ButtonDefaults.ButtonWithIconContentPadding,
+ enabled = false,
+ ) {
+ Icon(
+ Icons.Filled.Favorite,
+ contentDescription = "Localized description",
+ modifier = Modifier.size(ButtonDefaults.IconSize)
+ )
+ Spacer(Modifier.size(ButtonDefaults.IconSpacing))
+ Text("Like")
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/compose/runtime/runtime-livedata/api/1.4.0-beta02.txt b/compose/runtime/runtime-livedata/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..e004a29
--- /dev/null
+++ b/compose/runtime/runtime-livedata/api/1.4.0-beta02.txt
@@ -0,0 +1,10 @@
+// Signature format: 4.0
+package androidx.compose.runtime.livedata {
+
+ public final class LiveDataAdapterKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
+ }
+
+}
+
diff --git a/compose/runtime/runtime-livedata/api/public_plus_experimental_1.4.0-beta02.txt b/compose/runtime/runtime-livedata/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..e004a29
--- /dev/null
+++ b/compose/runtime/runtime-livedata/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,10 @@
+// Signature format: 4.0
+package androidx.compose.runtime.livedata {
+
+ public final class LiveDataAdapterKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
+ }
+
+}
+
diff --git a/compose/runtime/runtime-livedata/api/res-1.4.0-beta02.txt b/compose/runtime/runtime-livedata/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/runtime/runtime-livedata/api/res-1.4.0-beta02.txt
diff --git a/compose/runtime/runtime-livedata/api/restricted_1.4.0-beta02.txt b/compose/runtime/runtime-livedata/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..e004a29
--- /dev/null
+++ b/compose/runtime/runtime-livedata/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,10 @@
+// Signature format: 4.0
+package androidx.compose.runtime.livedata {
+
+ public final class LiveDataAdapterKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
+ }
+
+}
+
diff --git a/compose/runtime/runtime-rxjava2/api/1.4.0-beta02.txt b/compose/runtime/runtime-rxjava2/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..fb30f38
--- /dev/null
+++ b/compose/runtime/runtime-rxjava2/api/1.4.0-beta02.txt
@@ -0,0 +1,13 @@
+// Signature format: 4.0
+package androidx.compose.runtime.rxjava2 {
+
+ public final class RxJava2AdapterKt {
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+ }
+
+}
+
diff --git a/compose/runtime/runtime-rxjava2/api/public_plus_experimental_1.4.0-beta02.txt b/compose/runtime/runtime-rxjava2/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..fb30f38
--- /dev/null
+++ b/compose/runtime/runtime-rxjava2/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,13 @@
+// Signature format: 4.0
+package androidx.compose.runtime.rxjava2 {
+
+ public final class RxJava2AdapterKt {
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+ }
+
+}
+
diff --git a/compose/runtime/runtime-rxjava2/api/res-1.4.0-beta02.txt b/compose/runtime/runtime-rxjava2/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/runtime/runtime-rxjava2/api/res-1.4.0-beta02.txt
diff --git a/compose/runtime/runtime-rxjava2/api/restricted_1.4.0-beta02.txt b/compose/runtime/runtime-rxjava2/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..fb30f38
--- /dev/null
+++ b/compose/runtime/runtime-rxjava2/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,13 @@
+// Signature format: 4.0
+package androidx.compose.runtime.rxjava2 {
+
+ public final class RxJava2AdapterKt {
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+ }
+
+}
+
diff --git a/compose/runtime/runtime-rxjava3/api/1.4.0-beta02.txt b/compose/runtime/runtime-rxjava3/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..1930cc8
--- /dev/null
+++ b/compose/runtime/runtime-rxjava3/api/1.4.0-beta02.txt
@@ -0,0 +1,13 @@
+// Signature format: 4.0
+package androidx.compose.runtime.rxjava3 {
+
+ public final class RxJava3AdapterKt {
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Observable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Flowable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Single<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Maybe<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.rxjava3.core.Completable);
+ }
+
+}
+
diff --git a/compose/runtime/runtime-rxjava3/api/public_plus_experimental_1.4.0-beta02.txt b/compose/runtime/runtime-rxjava3/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..1930cc8
--- /dev/null
+++ b/compose/runtime/runtime-rxjava3/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,13 @@
+// Signature format: 4.0
+package androidx.compose.runtime.rxjava3 {
+
+ public final class RxJava3AdapterKt {
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Observable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Flowable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Single<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Maybe<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.rxjava3.core.Completable);
+ }
+
+}
+
diff --git a/compose/runtime/runtime-rxjava3/api/res-1.4.0-beta02.txt b/compose/runtime/runtime-rxjava3/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/runtime/runtime-rxjava3/api/res-1.4.0-beta02.txt
diff --git a/compose/runtime/runtime-rxjava3/api/restricted_1.4.0-beta02.txt b/compose/runtime/runtime-rxjava3/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..1930cc8
--- /dev/null
+++ b/compose/runtime/runtime-rxjava3/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,13 @@
+// Signature format: 4.0
+package androidx.compose.runtime.rxjava3 {
+
+ public final class RxJava3AdapterKt {
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Observable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Flowable<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Single<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Maybe<T>, R? initial);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.rxjava3.core.Completable);
+ }
+
+}
+
diff --git a/compose/runtime/runtime-saveable/api/1.4.0-beta02.txt b/compose/runtime/runtime-saveable/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..ce5d51b
--- /dev/null
+++ b/compose/runtime/runtime-saveable/api/1.4.0-beta02.txt
@@ -0,0 +1,58 @@
+// Signature format: 4.0
+package androidx.compose.runtime.saveable {
+
+ public final class ListSaverKt {
+ method public static <Original, Saveable> androidx.compose.runtime.saveable.Saver<Original,java.lang.Object> listSaver(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.saveable.SaverScope,? super Original,? extends java.util.List<? extends Saveable>> save, kotlin.jvm.functions.Function1<? super java.util.List<? extends Saveable>,? extends Original> restore);
+ }
+
+ public final class MapSaverKt {
+ method public static <T> androidx.compose.runtime.saveable.Saver<T,java.lang.Object> mapSaver(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.saveable.SaverScope,? super T,? extends java.util.Map<java.lang.String,?>> save, kotlin.jvm.functions.Function1<? super java.util.Map<java.lang.String,?>,? extends T> restore);
+ }
+
+ public final class RememberSaveableKt {
+ method @androidx.compose.runtime.Composable public static <T> T rememberSaveable(Object![]? inputs, optional androidx.compose.runtime.saveable.Saver<T,?> saver, optional String? key, kotlin.jvm.functions.Function0<? extends T> init);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> rememberSaveable(Object![]? inputs, androidx.compose.runtime.saveable.Saver<T,?> stateSaver, optional String? key, kotlin.jvm.functions.Function0<? extends androidx.compose.runtime.MutableState<T>> init);
+ }
+
+ public interface SaveableStateHolder {
+ method @androidx.compose.runtime.Composable public void SaveableStateProvider(Object key, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public void removeState(Object key);
+ }
+
+ public final class SaveableStateHolderKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.saveable.SaveableStateHolder rememberSaveableStateHolder();
+ }
+
+ public interface SaveableStateRegistry {
+ method public boolean canBeSaved(Object value);
+ method public Object? consumeRestored(String key);
+ method public java.util.Map<java.lang.String,java.util.List<java.lang.Object>> performSave();
+ method public androidx.compose.runtime.saveable.SaveableStateRegistry.Entry registerProvider(String key, kotlin.jvm.functions.Function0<?> valueProvider);
+ }
+
+ public static interface SaveableStateRegistry.Entry {
+ method public void unregister();
+ }
+
+ public final class SaveableStateRegistryKt {
+ method public static androidx.compose.runtime.saveable.SaveableStateRegistry SaveableStateRegistry(java.util.Map<java.lang.String,? extends java.util.List<?>>? restoredValues, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> canBeSaved);
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.runtime.saveable.SaveableStateRegistry> getLocalSaveableStateRegistry();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.runtime.saveable.SaveableStateRegistry> LocalSaveableStateRegistry;
+ }
+
+ public interface Saver<Original, Saveable> {
+ method public Original? restore(Saveable value);
+ method public Saveable? save(androidx.compose.runtime.saveable.SaverScope, Original? value);
+ }
+
+ public final class SaverKt {
+ method public static <Original, Saveable> androidx.compose.runtime.saveable.Saver<Original,Saveable> Saver(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.saveable.SaverScope,? super Original,? extends Saveable> save, kotlin.jvm.functions.Function1<? super Saveable,? extends Original> restore);
+ method public static <T> androidx.compose.runtime.saveable.Saver<T,java.lang.Object> autoSaver();
+ }
+
+ public fun interface SaverScope {
+ method public boolean canBeSaved(Object value);
+ }
+
+}
+
diff --git a/compose/runtime/runtime-saveable/api/public_plus_experimental_1.4.0-beta02.txt b/compose/runtime/runtime-saveable/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..ce5d51b
--- /dev/null
+++ b/compose/runtime/runtime-saveable/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,58 @@
+// Signature format: 4.0
+package androidx.compose.runtime.saveable {
+
+ public final class ListSaverKt {
+ method public static <Original, Saveable> androidx.compose.runtime.saveable.Saver<Original,java.lang.Object> listSaver(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.saveable.SaverScope,? super Original,? extends java.util.List<? extends Saveable>> save, kotlin.jvm.functions.Function1<? super java.util.List<? extends Saveable>,? extends Original> restore);
+ }
+
+ public final class MapSaverKt {
+ method public static <T> androidx.compose.runtime.saveable.Saver<T,java.lang.Object> mapSaver(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.saveable.SaverScope,? super T,? extends java.util.Map<java.lang.String,?>> save, kotlin.jvm.functions.Function1<? super java.util.Map<java.lang.String,?>,? extends T> restore);
+ }
+
+ public final class RememberSaveableKt {
+ method @androidx.compose.runtime.Composable public static <T> T rememberSaveable(Object![]? inputs, optional androidx.compose.runtime.saveable.Saver<T,?> saver, optional String? key, kotlin.jvm.functions.Function0<? extends T> init);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> rememberSaveable(Object![]? inputs, androidx.compose.runtime.saveable.Saver<T,?> stateSaver, optional String? key, kotlin.jvm.functions.Function0<? extends androidx.compose.runtime.MutableState<T>> init);
+ }
+
+ public interface SaveableStateHolder {
+ method @androidx.compose.runtime.Composable public void SaveableStateProvider(Object key, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public void removeState(Object key);
+ }
+
+ public final class SaveableStateHolderKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.saveable.SaveableStateHolder rememberSaveableStateHolder();
+ }
+
+ public interface SaveableStateRegistry {
+ method public boolean canBeSaved(Object value);
+ method public Object? consumeRestored(String key);
+ method public java.util.Map<java.lang.String,java.util.List<java.lang.Object>> performSave();
+ method public androidx.compose.runtime.saveable.SaveableStateRegistry.Entry registerProvider(String key, kotlin.jvm.functions.Function0<?> valueProvider);
+ }
+
+ public static interface SaveableStateRegistry.Entry {
+ method public void unregister();
+ }
+
+ public final class SaveableStateRegistryKt {
+ method public static androidx.compose.runtime.saveable.SaveableStateRegistry SaveableStateRegistry(java.util.Map<java.lang.String,? extends java.util.List<?>>? restoredValues, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> canBeSaved);
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.runtime.saveable.SaveableStateRegistry> getLocalSaveableStateRegistry();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.runtime.saveable.SaveableStateRegistry> LocalSaveableStateRegistry;
+ }
+
+ public interface Saver<Original, Saveable> {
+ method public Original? restore(Saveable value);
+ method public Saveable? save(androidx.compose.runtime.saveable.SaverScope, Original? value);
+ }
+
+ public final class SaverKt {
+ method public static <Original, Saveable> androidx.compose.runtime.saveable.Saver<Original,Saveable> Saver(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.saveable.SaverScope,? super Original,? extends Saveable> save, kotlin.jvm.functions.Function1<? super Saveable,? extends Original> restore);
+ method public static <T> androidx.compose.runtime.saveable.Saver<T,java.lang.Object> autoSaver();
+ }
+
+ public fun interface SaverScope {
+ method public boolean canBeSaved(Object value);
+ }
+
+}
+
diff --git a/compose/runtime/runtime-saveable/api/res-1.4.0-beta02.txt b/compose/runtime/runtime-saveable/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/runtime/runtime-saveable/api/res-1.4.0-beta02.txt
diff --git a/compose/runtime/runtime-saveable/api/restricted_1.4.0-beta02.txt b/compose/runtime/runtime-saveable/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..ce5d51b
--- /dev/null
+++ b/compose/runtime/runtime-saveable/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,58 @@
+// Signature format: 4.0
+package androidx.compose.runtime.saveable {
+
+ public final class ListSaverKt {
+ method public static <Original, Saveable> androidx.compose.runtime.saveable.Saver<Original,java.lang.Object> listSaver(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.saveable.SaverScope,? super Original,? extends java.util.List<? extends Saveable>> save, kotlin.jvm.functions.Function1<? super java.util.List<? extends Saveable>,? extends Original> restore);
+ }
+
+ public final class MapSaverKt {
+ method public static <T> androidx.compose.runtime.saveable.Saver<T,java.lang.Object> mapSaver(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.saveable.SaverScope,? super T,? extends java.util.Map<java.lang.String,?>> save, kotlin.jvm.functions.Function1<? super java.util.Map<java.lang.String,?>,? extends T> restore);
+ }
+
+ public final class RememberSaveableKt {
+ method @androidx.compose.runtime.Composable public static <T> T rememberSaveable(Object![]? inputs, optional androidx.compose.runtime.saveable.Saver<T,?> saver, optional String? key, kotlin.jvm.functions.Function0<? extends T> init);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> rememberSaveable(Object![]? inputs, androidx.compose.runtime.saveable.Saver<T,?> stateSaver, optional String? key, kotlin.jvm.functions.Function0<? extends androidx.compose.runtime.MutableState<T>> init);
+ }
+
+ public interface SaveableStateHolder {
+ method @androidx.compose.runtime.Composable public void SaveableStateProvider(Object key, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public void removeState(Object key);
+ }
+
+ public final class SaveableStateHolderKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.saveable.SaveableStateHolder rememberSaveableStateHolder();
+ }
+
+ public interface SaveableStateRegistry {
+ method public boolean canBeSaved(Object value);
+ method public Object? consumeRestored(String key);
+ method public java.util.Map<java.lang.String,java.util.List<java.lang.Object>> performSave();
+ method public androidx.compose.runtime.saveable.SaveableStateRegistry.Entry registerProvider(String key, kotlin.jvm.functions.Function0<?> valueProvider);
+ }
+
+ public static interface SaveableStateRegistry.Entry {
+ method public void unregister();
+ }
+
+ public final class SaveableStateRegistryKt {
+ method public static androidx.compose.runtime.saveable.SaveableStateRegistry SaveableStateRegistry(java.util.Map<java.lang.String,? extends java.util.List<?>>? restoredValues, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> canBeSaved);
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.runtime.saveable.SaveableStateRegistry> getLocalSaveableStateRegistry();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.runtime.saveable.SaveableStateRegistry> LocalSaveableStateRegistry;
+ }
+
+ public interface Saver<Original, Saveable> {
+ method public Original? restore(Saveable value);
+ method public Saveable? save(androidx.compose.runtime.saveable.SaverScope, Original? value);
+ }
+
+ public final class SaverKt {
+ method public static <Original, Saveable> androidx.compose.runtime.saveable.Saver<Original,Saveable> Saver(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.saveable.SaverScope,? super Original,? extends Saveable> save, kotlin.jvm.functions.Function1<? super Saveable,? extends Original> restore);
+ method public static <T> androidx.compose.runtime.saveable.Saver<T,java.lang.Object> autoSaver();
+ }
+
+ public fun interface SaverScope {
+ method public boolean canBeSaved(Object value);
+ }
+
+}
+
diff --git a/compose/runtime/runtime/api/1.4.0-beta02.txt b/compose/runtime/runtime/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..1cb90ed
--- /dev/null
+++ b/compose/runtime/runtime/api/1.4.0-beta02.txt
@@ -0,0 +1,930 @@
+// Signature format: 4.0
+package androidx.compose.runtime {
+
+ public abstract class AbstractApplier<T> implements androidx.compose.runtime.Applier<T> {
+ ctor public AbstractApplier(T? root);
+ method public final void clear();
+ method public void down(T? node);
+ method public T! getCurrent();
+ method public final T! getRoot();
+ method protected final void move(java.util.List<T>, int from, int to, int count);
+ method protected abstract void onClear();
+ method protected final void remove(java.util.List<T>, int index, int count);
+ method protected void setCurrent(T!);
+ method public void up();
+ property public T! current;
+ property public final T! root;
+ }
+
+ public final class ActualAndroid_androidKt {
+ method @Deprecated public static androidx.compose.runtime.MonotonicFrameClock getDefaultMonotonicFrameClock();
+ property @Deprecated public static final androidx.compose.runtime.MonotonicFrameClock DefaultMonotonicFrameClock;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Applier<N> {
+ method public void clear();
+ method public void down(N? node);
+ method public N! getCurrent();
+ method public void insertBottomUp(int index, N? instance);
+ method public void insertTopDown(int index, N? instance);
+ method public void move(int from, int to, int count);
+ method public default void onBeginChanges();
+ method public default void onEndChanges();
+ method public void remove(int index, int count);
+ method public void up();
+ property public abstract N! current;
+ }
+
+ public final class BroadcastFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
+ ctor public BroadcastFrameClock(optional kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
+ method public void cancel(optional java.util.concurrent.CancellationException cancellationException);
+ method public boolean getHasAwaiters();
+ method public void sendFrame(long timeNanos);
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public final boolean hasAwaiters;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface Composable {
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface ComposableOpenTarget {
+ method public abstract int index();
+ property public abstract int index;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface ComposableTarget {
+ method public abstract String applier();
+ property public abstract String applier;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS) public @interface ComposableTargetMarker {
+ method public abstract String description() default "";
+ property public abstract String description;
+ }
+
+ public final class ComposablesKt {
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static inline void ReusableContent(Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline void ReusableContentHost(boolean active, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.Composer getCurrentComposer();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static int getCurrentCompositeKeyHash();
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionLocalContext getCurrentCompositionLocalContext();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.RecomposeScope getCurrentRecomposeScope();
+ method @androidx.compose.runtime.Composable public static inline <T> T! key(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> block);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object? key1, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object? key1, Object? key2, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionContext rememberCompositionContext();
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static final androidx.compose.runtime.Composer currentComposer;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static final int currentCompositeKeyHash;
+ property @androidx.compose.runtime.Composable public static final androidx.compose.runtime.CompositionLocalContext currentCompositionLocalContext;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static final androidx.compose.runtime.RecomposeScope currentRecomposeScope;
+ }
+
+ @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.TYPEALIAS}) public @interface ComposeCompilerApi {
+ }
+
+ public interface ComposeNodeLifecycleCallback {
+ method public void onDeactivate();
+ method public void onRelease();
+ method public void onReuse();
+ }
+
+ public sealed interface Composer {
+ method @androidx.compose.runtime.ComposeCompilerApi public <V, T> void apply(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+ method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(boolean value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(char value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(byte value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(short value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(int value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(float value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(long value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(double value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changedInstance(Object? value);
+ method public void collectParameterInformation();
+ method @androidx.compose.runtime.ComposeCompilerApi public <T> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+ method @androidx.compose.runtime.ComposeCompilerApi public void deactivateToEndGroup(boolean changed);
+ method @androidx.compose.runtime.ComposeCompilerApi public void disableReusing();
+ method @org.jetbrains.annotations.TestOnly public void disableSourceInformation();
+ method @androidx.compose.runtime.ComposeCompilerApi public void enableReusing();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endDefaults();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endMovableGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endNode();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endReplaceableGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.ScopeUpdateScope? endRestartGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endReusableGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endToMarker(int marker);
+ method public androidx.compose.runtime.Applier<?> getApplier();
+ method @org.jetbrains.annotations.TestOnly public kotlin.coroutines.CoroutineContext getApplyCoroutineContext();
+ method @org.jetbrains.annotations.TestOnly public androidx.compose.runtime.ControlledComposition getComposition();
+ method public androidx.compose.runtime.tooling.CompositionData getCompositionData();
+ method public int getCompoundKeyHash();
+ method public int getCurrentMarker();
+ method public boolean getDefaultsInvalid();
+ method public boolean getInserting();
+ method public androidx.compose.runtime.RecomposeScope? getRecomposeScope();
+ method public Object? getRecomposeScopeIdentity();
+ method public boolean getSkipping();
+ method @androidx.compose.runtime.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
+ method @androidx.compose.runtime.ComposeCompilerApi public Object? rememberedValue();
+ method @androidx.compose.runtime.ComposeCompilerApi public void skipCurrentGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void skipToGroupEnd();
+ method public void sourceInformation(String sourceInformation);
+ method public void sourceInformationMarkerEnd();
+ method public void sourceInformationMarkerStart(int key, String sourceInformation);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startDefaults();
+ method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startNode();
+ method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key);
+ method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.Composer startRestartGroup(int key);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startReusableGroup(int key, Object? dataKey);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startReusableNode();
+ method @androidx.compose.runtime.ComposeCompilerApi public void updateRememberedValue(Object? value);
+ method @androidx.compose.runtime.ComposeCompilerApi public void useNode();
+ property public abstract androidx.compose.runtime.Applier<?> applier;
+ property @org.jetbrains.annotations.TestOnly public abstract androidx.compose.runtime.ControlledComposition composition;
+ property public abstract androidx.compose.runtime.tooling.CompositionData compositionData;
+ property public abstract int compoundKeyHash;
+ property public abstract int currentMarker;
+ property public abstract boolean defaultsInvalid;
+ property public abstract boolean inserting;
+ property public abstract androidx.compose.runtime.RecomposeScope? recomposeScope;
+ property public abstract Object? recomposeScopeIdentity;
+ property public abstract boolean skipping;
+ field public static final androidx.compose.runtime.Composer.Companion Companion;
+ }
+
+ public static final class Composer.Companion {
+ method public Object getEmpty();
+ property public final Object Empty;
+ }
+
+ public final class ComposerKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static inline <T> T! cache(androidx.compose.runtime.Composer, boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
+ method @androidx.compose.runtime.ComposeCompilerApi public static boolean isTraceInProgress();
+ method @androidx.compose.runtime.ComposeCompilerApi public static void sourceInformation(androidx.compose.runtime.Composer composer, String sourceInformation);
+ method @androidx.compose.runtime.ComposeCompilerApi public static void sourceInformationMarkerEnd(androidx.compose.runtime.Composer composer);
+ method @androidx.compose.runtime.ComposeCompilerApi public static void sourceInformationMarkerStart(androidx.compose.runtime.Composer composer, int key, String sourceInformation);
+ method @androidx.compose.runtime.ComposeCompilerApi public static void traceEventEnd();
+ method @androidx.compose.runtime.ComposeCompilerApi public static void traceEventStart(int key, int dirty1, int dirty2, String info);
+ method @Deprecated @androidx.compose.runtime.ComposeCompilerApi public static void traceEventStart(int key, String info);
+ }
+
+ public interface Composition {
+ method public void dispose();
+ method public boolean getHasInvalidations();
+ method public boolean isDisposed();
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ property public abstract boolean hasInvalidations;
+ property public abstract boolean isDisposed;
+ }
+
+ public abstract class CompositionContext {
+ }
+
+ public final class CompositionKt {
+ method public static androidx.compose.runtime.Composition Composition(androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.CompositionContext parent);
+ method @org.jetbrains.annotations.TestOnly public static androidx.compose.runtime.ControlledComposition ControlledComposition(androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.CompositionContext parent);
+ }
+
+ @androidx.compose.runtime.Stable public abstract sealed class CompositionLocal<T> {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final inline T! getCurrent();
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final inline T! current;
+ }
+
+ @androidx.compose.runtime.Stable public final class CompositionLocalContext {
+ }
+
+ public final class CompositionLocalKt {
+ method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.CompositionLocalContext context, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> compositionLocalOf(optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> staticCompositionLocalOf(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ }
+
+ public sealed interface ControlledComposition extends androidx.compose.runtime.Composition {
+ method public void applyChanges();
+ method public void applyLateChanges();
+ method public void changesApplied();
+ method public void composeContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public <R> R! delegateInvalidations(androidx.compose.runtime.ControlledComposition? to, int groupIndex, kotlin.jvm.functions.Function0<? extends R> block);
+ method public boolean getHasPendingChanges();
+ method public void invalidateAll();
+ method public boolean isComposing();
+ method public boolean observesAnyOf(java.util.Set<?> values);
+ method public void prepareCompose(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public boolean recompose();
+ method public void recordModificationsOf(java.util.Set<?> values);
+ method public void recordReadOf(Object value);
+ method public void recordWriteOf(Object value);
+ property public abstract boolean hasPendingChanges;
+ property public abstract boolean isComposing;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.TYPE) public @interface DisallowComposableCalls {
+ }
+
+ public interface DisposableEffectResult {
+ method public void dispose();
+ }
+
+ public final class DisposableEffectScope {
+ ctor public DisposableEffectScope();
+ method public inline androidx.compose.runtime.DisposableEffectResult onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> onDisposeEffect);
+ }
+
+ public final class EffectsKt {
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object![]? keys, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LaunchedEffect(kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object![]? keys, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void SideEffect(kotlin.jvm.functions.Function0<kotlin.Unit> effect);
+ method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(optional kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext);
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface ExplicitGroupsComposable {
+ }
+
+ @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface Immutable {
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface MonotonicFrameClock extends kotlin.coroutines.CoroutineContext.Element {
+ method public default kotlin.coroutines.CoroutineContext.Key<?> getKey();
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public default kotlin.coroutines.CoroutineContext.Key<?> key;
+ field public static final androidx.compose.runtime.MonotonicFrameClock.Key Key;
+ }
+
+ public static final class MonotonicFrameClock.Key implements kotlin.coroutines.CoroutineContext.Key<androidx.compose.runtime.MonotonicFrameClock> {
+ }
+
+ public final class MonotonicFrameClockKt {
+ method public static androidx.compose.runtime.MonotonicFrameClock getMonotonicFrameClock(kotlin.coroutines.CoroutineContext);
+ method public static suspend inline <R> Object? withFrameMillis(androidx.compose.runtime.MonotonicFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend <R> Object? withFrameMillis(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public final class MovableContentKt {
+ method public static kotlin.jvm.functions.Function0<kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public static <P> kotlin.jvm.functions.Function1<P,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function1<? super P,kotlin.Unit> content);
+ method public static <P1, P2> kotlin.jvm.functions.Function2<P1,P2,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function2<? super P1,? super P2,kotlin.Unit> content);
+ method public static <P1, P2, P3> kotlin.jvm.functions.Function3<P1,P2,P3,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function3<? super P1,? super P2,? super P3,kotlin.Unit> content);
+ method public static <P1, P2, P3, P4> kotlin.jvm.functions.Function4<P1,P2,P3,P4,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function4<? super P1,? super P2,? super P3,? super P4,kotlin.Unit> content);
+ method public static <R> kotlin.jvm.functions.Function1<R,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function1<? super R,kotlin.Unit> content);
+ method public static <R, P> kotlin.jvm.functions.Function2<R,P,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function2<? super R,? super P,kotlin.Unit> content);
+ method public static <R, P1, P2> kotlin.jvm.functions.Function3<R,P1,P2,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function3<? super R,? super P1,? super P2,kotlin.Unit> content);
+ method public static <R, P1, P2, P3> kotlin.jvm.functions.Function4<R,P1,P2,P3,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function4<? super R,? super P1,? super P2,? super P3,kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Stable public interface MutableState<T> extends androidx.compose.runtime.State<T> {
+ method public operator T! component1();
+ method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
+ method public void setValue(T!);
+ property public abstract T! value;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FILE}) public @interface NoLiveLiterals {
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface NonRestartableComposable {
+ }
+
+ public final class PausableMonotonicFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
+ ctor public PausableMonotonicFrameClock(androidx.compose.runtime.MonotonicFrameClock frameClock);
+ method public boolean isPaused();
+ method public void pause();
+ method public void resume();
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public final boolean isPaused;
+ }
+
+ public interface ProduceStateScope<T> extends androidx.compose.runtime.MutableState<T> kotlinx.coroutines.CoroutineScope {
+ method public suspend Object? awaitDispose(kotlin.jvm.functions.Function0<kotlin.Unit> onDispose, kotlin.coroutines.Continuation<?>);
+ }
+
+ @androidx.compose.runtime.Stable public abstract class ProvidableCompositionLocal<T> extends androidx.compose.runtime.CompositionLocal<T> {
+ method public final infix androidx.compose.runtime.ProvidedValue<T> provides(T? value);
+ method public final infix androidx.compose.runtime.ProvidedValue<T> providesDefault(T? value);
+ }
+
+ public final class ProvidedValue<T> {
+ method public boolean getCanOverride();
+ method public androidx.compose.runtime.CompositionLocal<T> getCompositionLocal();
+ method public T! getValue();
+ property public final boolean canOverride;
+ property public final androidx.compose.runtime.CompositionLocal<T> compositionLocal;
+ property public final T! value;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface ReadOnlyComposable {
+ }
+
+ public interface RecomposeScope {
+ method public void invalidate();
+ }
+
+ public final class Recomposer extends androidx.compose.runtime.CompositionContext {
+ ctor public Recomposer(kotlin.coroutines.CoroutineContext effectCoroutineContext);
+ method public androidx.compose.runtime.RecomposerInfo asRecomposerInfo();
+ method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public void cancel();
+ method public void close();
+ method public long getChangeCount();
+ method public kotlinx.coroutines.flow.StateFlow<androidx.compose.runtime.Recomposer.State> getCurrentState();
+ method public boolean getHasPendingWork();
+ method @Deprecated public kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> getState();
+ method public suspend Object? join(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? runRecomposeAndApplyChanges(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public final long changeCount;
+ property public final kotlinx.coroutines.flow.StateFlow<androidx.compose.runtime.Recomposer.State> currentState;
+ property public final boolean hasPendingWork;
+ property @Deprecated public final kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> state;
+ field public static final androidx.compose.runtime.Recomposer.Companion Companion;
+ }
+
+ public static final class Recomposer.Companion {
+ method public kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.compose.runtime.RecomposerInfo>> getRunningRecomposers();
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.compose.runtime.RecomposerInfo>> runningRecomposers;
+ }
+
+ public enum Recomposer.State {
+ method public static androidx.compose.runtime.Recomposer.State valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.runtime.Recomposer.State[] values();
+ enum_constant public static final androidx.compose.runtime.Recomposer.State Idle;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State Inactive;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State InactivePendingWork;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State PendingWork;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State ShutDown;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State ShuttingDown;
+ }
+
+ public interface RecomposerInfo {
+ method public long getChangeCount();
+ method public boolean getHasPendingWork();
+ method public kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> getState();
+ property public abstract long changeCount;
+ property public abstract boolean hasPendingWork;
+ property public abstract kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> state;
+ }
+
+ public final class RecomposerKt {
+ method public static suspend <R> Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.runtime.Recomposer,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public interface RememberObserver {
+ method public void onAbandoned();
+ method public void onForgotten();
+ method public void onRemembered();
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi public interface ScopeUpdateScope {
+ method public void updateScope(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.Composer,? super java.lang.Integer,kotlin.Unit> block);
+ }
+
+ @kotlin.jvm.JvmInline public final value class SkippableUpdater<T> {
+ ctor public SkippableUpdater(@kotlin.PublishedApi androidx.compose.runtime.Composer composer);
+ method public inline void update(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> block);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface SnapshotMutationPolicy<T> {
+ method public boolean equivalent(T? a, T? b);
+ method public default T? merge(T? previous, T? current, T? applied);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY}) public @interface Stable {
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public @interface StableMarker {
+ }
+
+ @androidx.compose.runtime.Stable public interface State<T> {
+ method public T! getValue();
+ property public abstract T! value;
+ }
+
+ @kotlin.jvm.JvmInline public final value class Updater<T> {
+ ctor public Updater(@kotlin.PublishedApi androidx.compose.runtime.Composer composer);
+ method public void init(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public void reconcile(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+ method public <V> void set(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+ method public inline void update(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+ method public <V> void update(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+ }
+
+}
+
+package androidx.compose.runtime.collection {
+
+ public final class MutableVector<T> implements java.util.RandomAccess {
+ method public boolean add(T? element);
+ method public void add(int index, T? element);
+ method public boolean addAll(int index, java.util.List<? extends T> elements);
+ method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public inline boolean addAll(java.util.List<? extends T> elements);
+ method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean addAll(T![] elements);
+ method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+ method public boolean addAll(java.util.Collection<? extends T> elements);
+ method public inline boolean any(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public java.util.List<T> asMutableList();
+ method public void clear();
+ method public operator boolean contains(T? element);
+ method public boolean containsAll(java.util.List<? extends T> elements);
+ method public boolean containsAll(java.util.Collection<? extends T> elements);
+ method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
+ method public void ensureCapacity(int capacity);
+ method public T! first();
+ method public inline T! first(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline T? firstOrNull();
+ method public inline T? firstOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline <R> R! fold(R? initial, kotlin.jvm.functions.Function2<? super R,? super T,? extends R> operation);
+ method public inline <R> R! foldIndexed(R? initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super R,? super T,? extends R> operation);
+ method public inline <R> R! foldRight(R? initial, kotlin.jvm.functions.Function2<? super T,? super R,? extends R> operation);
+ method public inline <R> R! foldRightIndexed(R? initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super T,? super R,? extends R> operation);
+ method public inline void forEach(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public inline void forEachIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> block);
+ method public inline void forEachReversed(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public inline void forEachReversedIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> block);
+ method public inline operator T! get(int index);
+ method public inline kotlin.ranges.IntRange getIndices();
+ method public inline int getLastIndex();
+ method public int getSize();
+ method public int indexOf(T? element);
+ method public inline int indexOfFirst(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline int indexOfLast(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public boolean isEmpty();
+ method public boolean isNotEmpty();
+ method public T! last();
+ method public inline T! last(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public int lastIndexOf(T? element);
+ method public inline T? lastOrNull();
+ method public inline T? lastOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline <reified R> R![] map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public inline <reified R> R![] mapIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+ method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R> mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+ method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R> mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public inline operator void minusAssign(T? element);
+ method public inline operator void plusAssign(T? element);
+ method public boolean remove(T? element);
+ method public boolean removeAll(java.util.List<? extends T> elements);
+ method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean removeAll(java.util.Collection<? extends T> elements);
+ method public T! removeAt(int index);
+ method public void removeRange(int start, int end);
+ method public boolean retainAll(java.util.Collection<? extends T> elements);
+ method public inline boolean reversedAny(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public operator T! set(int index, T? element);
+ method public void sortWith(java.util.Comparator<T> comparator);
+ method public inline int sumBy(kotlin.jvm.functions.Function1<? super T,java.lang.Integer> selector);
+ property public final inline kotlin.ranges.IntRange indices;
+ property public final inline int lastIndex;
+ property public final int size;
+ }
+
+ public final class MutableVectorKt {
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(optional int capacity);
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> mutableVectorOf(T?... elements);
+ }
+
+}
+
+package androidx.compose.runtime.internal {
+
+ @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public interface ComposableLambda extends kotlin.jvm.functions.Function2<androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function10<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function11<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function13<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function14<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function15<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function16<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function17<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function18<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function19<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function20<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function21<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function3<java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function4<java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function5<java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function6<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function7<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function8<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function9<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> {
+ }
+
+ public final class ComposableLambdaKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda composableLambda(androidx.compose.runtime.Composer composer, int key, boolean tracked, Object block);
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda composableLambdaInstance(int key, boolean tracked, Object block);
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public interface ComposableLambdaN extends kotlin.jvm.functions.FunctionN<java.lang.Object> {
+ }
+
+ public final class ComposableLambdaN_jvmKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN composableLambdaN(androidx.compose.runtime.Composer composer, int key, boolean tracked, int arity, Object block);
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
+ }
+
+ public final class DecoyKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static Void illegalDecoyCallException(String fName);
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface FunctionKeyMeta {
+ method public abstract int endOffset();
+ method public abstract int key();
+ method public abstract int startOffset();
+ property public abstract int endOffset;
+ property public abstract int key;
+ property public abstract int startOffset;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public static @interface FunctionKeyMeta.Container {
+ method public abstract androidx.compose.runtime.internal.FunctionKeyMeta[] value();
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface FunctionKeyMetaClass {
+ method public abstract String file();
+ property public abstract String file;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface LiveLiteralFileInfo {
+ method public abstract String file();
+ property public abstract String file;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface LiveLiteralInfo {
+ method public abstract String key();
+ method public abstract int offset();
+ property public abstract String key;
+ property public abstract int offset;
+ }
+
+ public final class LiveLiteralKt {
+ method public static boolean isLiveLiteralsEnabled();
+ property public static final boolean isLiveLiteralsEnabled;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface StabilityInferred {
+ method public abstract int parameters();
+ property public abstract int parameters;
+ }
+
+}
+
+package androidx.compose.runtime.reflect {
+
+ public final class ComposableMethod {
+ method public java.lang.reflect.Method asMethod();
+ method public int getParameterCount();
+ method public Class<?>![] getParameterTypes();
+ method public java.lang.reflect.Parameter![] getParameters();
+ method public operator Object? invoke(androidx.compose.runtime.Composer composer, Object? instance, java.lang.Object?... args);
+ property public final int parameterCount;
+ property public final Class<?>![] parameterTypes;
+ property public final java.lang.reflect.Parameter![] parameters;
+ }
+
+ public final class ComposableMethodKt {
+ method public static androidx.compose.runtime.reflect.ComposableMethod? asComposableMethod(java.lang.reflect.Method);
+ method @kotlin.jvm.Throws(exceptionClasses=NoSuchMethodException::class) public static androidx.compose.runtime.reflect.ComposableMethod getDeclaredComposableMethod(Class<?>, String methodName, Class<?>... args) throws java.lang.NoSuchMethodException;
+ }
+
+}
+
+package androidx.compose.runtime.snapshots {
+
+ public class MutableSnapshot extends androidx.compose.runtime.snapshots.Snapshot {
+ method public androidx.compose.runtime.snapshots.SnapshotApplyResult apply();
+ method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getReadObserver();
+ method public boolean getReadOnly();
+ method public androidx.compose.runtime.snapshots.Snapshot getRoot();
+ method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getWriteObserver();
+ method public boolean hasPendingChanges();
+ method public androidx.compose.runtime.snapshots.MutableSnapshot takeNestedMutableSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver, optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver);
+ method public androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+ property public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver;
+ property public boolean readOnly;
+ property public androidx.compose.runtime.snapshots.Snapshot root;
+ property public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver;
+ }
+
+ public fun interface ObserverHandle {
+ method public void dispose();
+ }
+
+ public abstract sealed class Snapshot {
+ method public void dispose();
+ method public final inline <T> T! enter(kotlin.jvm.functions.Function0<? extends T> block);
+ method public int getId();
+ method public abstract boolean getReadOnly();
+ method public abstract androidx.compose.runtime.snapshots.Snapshot getRoot();
+ method public abstract boolean hasPendingChanges();
+ method public abstract androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+ property public int id;
+ property public abstract boolean readOnly;
+ property public abstract androidx.compose.runtime.snapshots.Snapshot root;
+ field public static final androidx.compose.runtime.snapshots.Snapshot.Companion Companion;
+ }
+
+ public static final class Snapshot.Companion {
+ method public androidx.compose.runtime.snapshots.Snapshot getCurrent();
+ method public inline <T> T! global(kotlin.jvm.functions.Function0<? extends T> block);
+ method public void notifyObjectsInitialized();
+ method public <T> T! observe(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver, optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver, kotlin.jvm.functions.Function0<? extends T> block);
+ method public androidx.compose.runtime.snapshots.ObserverHandle registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.snapshots.Snapshot,kotlin.Unit> observer);
+ method public androidx.compose.runtime.snapshots.ObserverHandle registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
+ method public void sendApplyNotifications();
+ method public androidx.compose.runtime.snapshots.MutableSnapshot takeMutableSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver, optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver);
+ method public androidx.compose.runtime.snapshots.Snapshot takeSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+ method public inline <R> R! withMutableSnapshot(kotlin.jvm.functions.Function0<? extends R> block);
+ method public inline <T> T! withoutReadObservation(kotlin.jvm.functions.Function0<? extends T> block);
+ property public final androidx.compose.runtime.snapshots.Snapshot current;
+ }
+
+ public final class SnapshotApplyConflictException extends java.lang.Exception {
+ ctor public SnapshotApplyConflictException(androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
+ property public final androidx.compose.runtime.snapshots.Snapshot snapshot;
+ }
+
+ public abstract sealed class SnapshotApplyResult {
+ method public abstract void check();
+ method public abstract boolean getSucceeded();
+ property public abstract boolean succeeded;
+ }
+
+ public static final class SnapshotApplyResult.Failure extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+ ctor public SnapshotApplyResult.Failure(androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method public void check();
+ method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
+ method public boolean getSucceeded();
+ property public final androidx.compose.runtime.snapshots.Snapshot snapshot;
+ property public boolean succeeded;
+ }
+
+ public static final class SnapshotApplyResult.Success extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+ method public void check();
+ method public boolean getSucceeded();
+ property public boolean succeeded;
+ field public static final androidx.compose.runtime.snapshots.SnapshotApplyResult.Success INSTANCE;
+ }
+
+ public final class SnapshotKt {
+ method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state);
+ method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+ method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+ method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+ }
+
+ public interface SnapshotMutableState<T> extends androidx.compose.runtime.MutableState<T> {
+ method public androidx.compose.runtime.SnapshotMutationPolicy<T> getPolicy();
+ property public abstract androidx.compose.runtime.SnapshotMutationPolicy<T> policy;
+ }
+
+ @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
+ ctor public SnapshotStateList();
+ method public boolean add(T? element);
+ method public void add(int index, T? element);
+ method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+ method public boolean addAll(java.util.Collection<? extends T> elements);
+ method public void clear();
+ method public boolean contains(T? element);
+ method public boolean containsAll(java.util.Collection<E!> elements);
+ method public T! get(int index);
+ method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+ method public int getSize();
+ method public int indexOf(T? element);
+ method public boolean isEmpty();
+ method public java.util.Iterator<T> iterator();
+ method public int lastIndexOf(T? element);
+ method public java.util.ListIterator<T> listIterator();
+ method public java.util.ListIterator<T> listIterator(int index);
+ method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+ method public boolean remove(T? element);
+ method public boolean removeAll(java.util.Collection<E!> elements);
+ method public T! removeAt(int index);
+ method public void removeRange(int fromIndex, int toIndex);
+ method public boolean retainAll(java.util.Collection<E!> elements);
+ method public T! set(int index, T? element);
+ method public java.util.List<T> subList(int fromIndex, int toIndex);
+ method public java.util.List<T> toList();
+ property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
+ property public int size;
+ }
+
+ @androidx.compose.runtime.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.runtime.snapshots.StateObject {
+ ctor public SnapshotStateMap();
+ method public void clear();
+ method public boolean containsKey(K? key);
+ method public boolean containsValue(V? value);
+ method public V? get(Object? key);
+ method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
+ method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+ method public java.util.Set<K> getKeys();
+ method public int getSize();
+ method public java.util.Collection<V> getValues();
+ method public boolean isEmpty();
+ method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+ method public V? put(K? key, V? value);
+ method public void putAll(java.util.Map<? extends K,? extends V> from);
+ method public V? remove(Object? key);
+ method public java.util.Map<K,V> toMap();
+ property public java.util.Set<java.util.Map.Entry<K,V>> entries;
+ property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
+ property public java.util.Set<K> keys;
+ property public int size;
+ property public java.util.Collection<V> values;
+ }
+
+ public final class SnapshotStateObserver {
+ ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
+ method public void clear(Object scope);
+ method public void clear();
+ method public void clearIf(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
+ method @org.jetbrains.annotations.TestOnly public void notifyChanges(java.util.Set<?> changes, androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method public <T> void observeReads(T scope, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> onValueChangedForScope, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void start();
+ method public void stop();
+ method @Deprecated public void withNoObservations(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface StateObject {
+ method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+ method public default androidx.compose.runtime.snapshots.StateRecord? mergeRecords(androidx.compose.runtime.snapshots.StateRecord previous, androidx.compose.runtime.snapshots.StateRecord current, androidx.compose.runtime.snapshots.StateRecord applied);
+ method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+ property public abstract androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
+ }
+
+ public abstract class StateRecord {
+ ctor public StateRecord();
+ method public abstract void assign(androidx.compose.runtime.snapshots.StateRecord value);
+ method public abstract androidx.compose.runtime.snapshots.StateRecord create();
+ }
+
+}
+
+package androidx.compose.runtime.tooling {
+
+ public interface CompositionData {
+ method public default androidx.compose.runtime.tooling.CompositionGroup? find(Object identityToFind);
+ method public Iterable<androidx.compose.runtime.tooling.CompositionGroup> getCompositionGroups();
+ method public boolean isEmpty();
+ property public abstract Iterable<androidx.compose.runtime.tooling.CompositionGroup> compositionGroups;
+ property public abstract boolean isEmpty;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface CompositionGroup extends androidx.compose.runtime.tooling.CompositionData {
+ method public Iterable<java.lang.Object> getData();
+ method public default int getGroupSize();
+ method public default Object? getIdentity();
+ method public Object getKey();
+ method public Object? getNode();
+ method public default int getSlotsSize();
+ method public String? getSourceInfo();
+ property public abstract Iterable<java.lang.Object> data;
+ property public default int groupSize;
+ property public default Object? identity;
+ property public abstract Object key;
+ property public abstract Object? node;
+ property public default int slotsSize;
+ property public abstract String? sourceInfo;
+ }
+
+ public final class InspectionTablesKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<java.util.Set<androidx.compose.runtime.tooling.CompositionData>> getLocalInspectionTables();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.util.Set<androidx.compose.runtime.tooling.CompositionData>> LocalInspectionTables;
+ }
+
+}
+
diff --git a/compose/runtime/runtime/api/current.ignore b/compose/runtime/runtime/api/current.ignore
deleted file mode 100644
index 22c8270..0000000
--- a/compose/runtime/runtime/api/current.ignore
+++ /dev/null
@@ -1,55 +0,0 @@
-// Baseline format: 1.0
-AddedAbstractMethod: androidx.compose.runtime.Composer#disableSourceInformation():
- Added method androidx.compose.runtime.Composer.disableSourceInformation()
-AddedAbstractMethod: androidx.compose.runtime.Composer#endToMarker(int):
- Added method androidx.compose.runtime.Composer.endToMarker(int)
-AddedAbstractMethod: androidx.compose.runtime.Composer#getCurrentMarker():
- Added method androidx.compose.runtime.Composer.getCurrentMarker()
-
-
-RemovedClass: androidx.compose.runtime.ActualJvm_jvmKt:
- Removed class androidx.compose.runtime.ActualJvm_jvmKt
-RemovedClass: androidx.compose.runtime.BitwiseOperatorsKt:
- Removed class androidx.compose.runtime.BitwiseOperatorsKt
-RemovedClass: androidx.compose.runtime.CompositionContextKt:
- Removed class androidx.compose.runtime.CompositionContextKt
-RemovedClass: androidx.compose.runtime.ExpectKt:
- Removed class androidx.compose.runtime.ExpectKt
-RemovedClass: androidx.compose.runtime.RecomposeScopeImplKt:
- Removed class androidx.compose.runtime.RecomposeScopeImplKt
-RemovedClass: androidx.compose.runtime.SlotTableKt:
- Removed class androidx.compose.runtime.SlotTableKt
-RemovedClass: androidx.compose.runtime.TraceKt:
- Removed class androidx.compose.runtime.TraceKt
-RemovedClass: androidx.compose.runtime.internal.JvmDefaultWithCompatibility_jvmKt:
- Removed class androidx.compose.runtime.internal.JvmDefaultWithCompatibility_jvmKt
-RemovedClass: androidx.compose.runtime.internal.ThreadMapKt:
- Removed class androidx.compose.runtime.internal.ThreadMapKt
-RemovedClass: androidx.compose.runtime.snapshots.ListUtilsKt:
- Removed class androidx.compose.runtime.snapshots.ListUtilsKt
-RemovedClass: androidx.compose.runtime.snapshots.SnapshotContextElementKt:
- Removed class androidx.compose.runtime.snapshots.SnapshotContextElementKt
-RemovedClass: androidx.compose.runtime.snapshots.SnapshotDoubleIndexHeapKt:
- Removed class androidx.compose.runtime.snapshots.SnapshotDoubleIndexHeapKt
-RemovedClass: androidx.compose.runtime.snapshots.SnapshotIdSetKt:
- Removed class androidx.compose.runtime.snapshots.SnapshotIdSetKt
-RemovedClass: androidx.compose.runtime.snapshots.SnapshotStateListKt:
- Removed class androidx.compose.runtime.snapshots.SnapshotStateListKt
-RemovedClass: androidx.compose.runtime.snapshots.SnapshotStateMapKt:
- Removed class androidx.compose.runtime.snapshots.SnapshotStateMapKt
-
-
-RemovedMethod: androidx.compose.runtime.collection.MutableVectorKt#mutableVectorOf(T):
- Removed method androidx.compose.runtime.collection.MutableVectorKt.mutableVectorOf(T)
-
-
-RemovedPackage: androidx.compose.runtime.external.kotlinx.collections.immutable:
- Removed package androidx.compose.runtime.external.kotlinx.collections.immutable
-RemovedPackage: androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableList:
- Removed package androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableList
-RemovedPackage: androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableMap:
- Removed package androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableMap
-RemovedPackage: androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableSet:
- Removed package androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableSet
-RemovedPackage: androidx.compose.runtime.external.kotlinx.collections.immutable.internal:
- Removed package androidx.compose.runtime.external.kotlinx.collections.immutable.internal
diff --git a/compose/runtime/runtime/api/public_plus_experimental_1.4.0-beta02.txt b/compose/runtime/runtime/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..ef1101e
--- /dev/null
+++ b/compose/runtime/runtime/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,1010 @@
+// Signature format: 4.0
+package androidx.compose.runtime {
+
+ public abstract class AbstractApplier<T> implements androidx.compose.runtime.Applier<T> {
+ ctor public AbstractApplier(T? root);
+ method public final void clear();
+ method public void down(T? node);
+ method public T! getCurrent();
+ method public final T! getRoot();
+ method protected final void move(java.util.List<T>, int from, int to, int count);
+ method protected abstract void onClear();
+ method protected final void remove(java.util.List<T>, int index, int count);
+ method protected void setCurrent(T!);
+ method public void up();
+ property public T! current;
+ property public final T! root;
+ }
+
+ public final class ActualAndroid_androidKt {
+ method @Deprecated public static androidx.compose.runtime.MonotonicFrameClock getDefaultMonotonicFrameClock();
+ property @Deprecated public static final androidx.compose.runtime.MonotonicFrameClock DefaultMonotonicFrameClock;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Applier<N> {
+ method public void clear();
+ method public void down(N? node);
+ method public N! getCurrent();
+ method public void insertBottomUp(int index, N? instance);
+ method public void insertTopDown(int index, N? instance);
+ method public void move(int from, int to, int count);
+ method public default void onBeginChanges();
+ method public default void onEndChanges();
+ method public void remove(int index, int count);
+ method public void up();
+ property public abstract N! current;
+ }
+
+ public final class BroadcastFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
+ ctor public BroadcastFrameClock(optional kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
+ method public void cancel(optional java.util.concurrent.CancellationException cancellationException);
+ method public boolean getHasAwaiters();
+ method public void sendFrame(long timeNanos);
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public final boolean hasAwaiters;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface Composable {
+ }
+
+ @androidx.compose.runtime.InternalComposeApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface ComposableInferredTarget {
+ method public abstract String scheme();
+ property public abstract String scheme;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface ComposableOpenTarget {
+ method public abstract int index();
+ property public abstract int index;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface ComposableTarget {
+ method public abstract String applier();
+ property public abstract String applier;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS) public @interface ComposableTargetMarker {
+ method public abstract String description() default "";
+ property public abstract String description;
+ }
+
+ public final class ComposablesKt {
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static inline void ReusableContent(Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline void ReusableContentHost(boolean active, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.Composer getCurrentComposer();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static int getCurrentCompositeKeyHash();
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionLocalContext getCurrentCompositionLocalContext();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.RecomposeScope getCurrentRecomposeScope();
+ method @androidx.compose.runtime.Composable public static inline <T> T! key(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> block);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object? key1, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object? key1, Object? key2, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionContext rememberCompositionContext();
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static final androidx.compose.runtime.Composer currentComposer;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static final int currentCompositeKeyHash;
+ property @androidx.compose.runtime.Composable public static final androidx.compose.runtime.CompositionLocalContext currentCompositionLocalContext;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static final androidx.compose.runtime.RecomposeScope currentRecomposeScope;
+ }
+
+ @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.TYPEALIAS}) public @interface ComposeCompilerApi {
+ }
+
+ public interface ComposeNodeLifecycleCallback {
+ method public void onDeactivate();
+ method public void onRelease();
+ method public void onReuse();
+ }
+
+ public sealed interface Composer {
+ method @androidx.compose.runtime.ComposeCompilerApi public <V, T> void apply(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+ method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.CompositionContext buildContext();
+ method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(boolean value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(char value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(byte value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(short value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(int value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(float value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(long value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(double value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changedInstance(Object? value);
+ method public void collectParameterInformation();
+ method @androidx.compose.runtime.InternalComposeApi public <T> T! consume(androidx.compose.runtime.CompositionLocal<T> key);
+ method @androidx.compose.runtime.ComposeCompilerApi public <T> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+ method @androidx.compose.runtime.ComposeCompilerApi public void deactivateToEndGroup(boolean changed);
+ method @androidx.compose.runtime.ComposeCompilerApi public void disableReusing();
+ method @org.jetbrains.annotations.TestOnly public void disableSourceInformation();
+ method @androidx.compose.runtime.ComposeCompilerApi public void enableReusing();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endDefaults();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endMovableGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endNode();
+ method @androidx.compose.runtime.InternalComposeApi public void endProviders();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endReplaceableGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.ScopeUpdateScope? endRestartGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endReusableGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endToMarker(int marker);
+ method public androidx.compose.runtime.Applier<?> getApplier();
+ method @org.jetbrains.annotations.TestOnly public kotlin.coroutines.CoroutineContext getApplyCoroutineContext();
+ method @org.jetbrains.annotations.TestOnly public androidx.compose.runtime.ControlledComposition getComposition();
+ method public androidx.compose.runtime.tooling.CompositionData getCompositionData();
+ method public int getCompoundKeyHash();
+ method public int getCurrentMarker();
+ method public boolean getDefaultsInvalid();
+ method public boolean getInserting();
+ method public androidx.compose.runtime.RecomposeScope? getRecomposeScope();
+ method public Object? getRecomposeScopeIdentity();
+ method public boolean getSkipping();
+ method @androidx.compose.runtime.InternalComposeApi public void insertMovableContent(androidx.compose.runtime.MovableContent<?> value, Object? parameter);
+ method @androidx.compose.runtime.InternalComposeApi public void insertMovableContentReferences(java.util.List<kotlin.Pair<androidx.compose.runtime.MovableContentStateReference,androidx.compose.runtime.MovableContentStateReference>> references);
+ method @androidx.compose.runtime.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
+ method @androidx.compose.runtime.InternalComposeApi public void recordSideEffect(kotlin.jvm.functions.Function0<kotlin.Unit> effect);
+ method @androidx.compose.runtime.InternalComposeApi public void recordUsed(androidx.compose.runtime.RecomposeScope scope);
+ method @androidx.compose.runtime.ComposeCompilerApi public Object? rememberedValue();
+ method @androidx.compose.runtime.ComposeCompilerApi public void skipCurrentGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void skipToGroupEnd();
+ method public void sourceInformation(String sourceInformation);
+ method public void sourceInformationMarkerEnd();
+ method public void sourceInformationMarkerStart(int key, String sourceInformation);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startDefaults();
+ method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startNode();
+ method @androidx.compose.runtime.InternalComposeApi public void startProviders(androidx.compose.runtime.ProvidedValue<?>![] values);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key);
+ method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.Composer startRestartGroup(int key);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startReusableGroup(int key, Object? dataKey);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startReusableNode();
+ method @androidx.compose.runtime.ComposeCompilerApi public void updateRememberedValue(Object? value);
+ method @androidx.compose.runtime.ComposeCompilerApi public void useNode();
+ property public abstract androidx.compose.runtime.Applier<?> applier;
+ property @androidx.compose.runtime.InternalComposeApi @org.jetbrains.annotations.TestOnly public abstract kotlin.coroutines.CoroutineContext applyCoroutineContext;
+ property @org.jetbrains.annotations.TestOnly public abstract androidx.compose.runtime.ControlledComposition composition;
+ property public abstract androidx.compose.runtime.tooling.CompositionData compositionData;
+ property public abstract int compoundKeyHash;
+ property public abstract int currentMarker;
+ property public abstract boolean defaultsInvalid;
+ property public abstract boolean inserting;
+ property public abstract androidx.compose.runtime.RecomposeScope? recomposeScope;
+ property public abstract Object? recomposeScopeIdentity;
+ property public abstract boolean skipping;
+ field public static final androidx.compose.runtime.Composer.Companion Companion;
+ }
+
+ public static final class Composer.Companion {
+ method public Object getEmpty();
+ method @androidx.compose.runtime.InternalComposeTracingApi public void setTracer(androidx.compose.runtime.CompositionTracer tracer);
+ property public final Object Empty;
+ }
+
+ public final class ComposerKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static inline <T> T! cache(androidx.compose.runtime.Composer, boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
+ method @androidx.compose.runtime.ComposeCompilerApi public static boolean isTraceInProgress();
+ method @androidx.compose.runtime.ComposeCompilerApi public static void sourceInformation(androidx.compose.runtime.Composer composer, String sourceInformation);
+ method @androidx.compose.runtime.ComposeCompilerApi public static void sourceInformationMarkerEnd(androidx.compose.runtime.Composer composer);
+ method @androidx.compose.runtime.ComposeCompilerApi public static void sourceInformationMarkerStart(androidx.compose.runtime.Composer composer, int key, String sourceInformation);
+ method @androidx.compose.runtime.ComposeCompilerApi public static void traceEventEnd();
+ method @androidx.compose.runtime.ComposeCompilerApi public static void traceEventStart(int key, int dirty1, int dirty2, String info);
+ method @Deprecated @androidx.compose.runtime.ComposeCompilerApi public static void traceEventStart(int key, String info);
+ }
+
+ public interface Composition {
+ method public void dispose();
+ method public boolean getHasInvalidations();
+ method public boolean isDisposed();
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ property public abstract boolean hasInvalidations;
+ property public abstract boolean isDisposed;
+ }
+
+ public abstract class CompositionContext {
+ }
+
+ public final class CompositionKt {
+ method public static androidx.compose.runtime.Composition Composition(androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.CompositionContext parent);
+ method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.Composition Composition(androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.CompositionContext parent, kotlin.coroutines.CoroutineContext recomposeCoroutineContext);
+ method @org.jetbrains.annotations.TestOnly public static androidx.compose.runtime.ControlledComposition ControlledComposition(androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.CompositionContext parent);
+ method @androidx.compose.runtime.ExperimentalComposeApi @org.jetbrains.annotations.TestOnly public static androidx.compose.runtime.ControlledComposition ControlledComposition(androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.CompositionContext parent, kotlin.coroutines.CoroutineContext recomposeCoroutineContext);
+ method @androidx.compose.runtime.ExperimentalComposeApi public static kotlin.coroutines.CoroutineContext getRecomposeCoroutineContext(androidx.compose.runtime.ControlledComposition);
+ }
+
+ @androidx.compose.runtime.Stable public abstract sealed class CompositionLocal<T> {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final inline T! getCurrent();
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final inline T! current;
+ }
+
+ @androidx.compose.runtime.Stable public final class CompositionLocalContext {
+ }
+
+ public final class CompositionLocalKt {
+ method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.CompositionLocalContext context, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> compositionLocalOf(optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> staticCompositionLocalOf(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ }
+
+ @androidx.compose.runtime.InternalComposeTracingApi public interface CompositionTracer {
+ method public boolean isTraceInProgress();
+ method public void traceEventEnd();
+ method public void traceEventStart(int key, int dirty1, int dirty2, String info);
+ }
+
+ public sealed interface ControlledComposition extends androidx.compose.runtime.Composition {
+ method public void applyChanges();
+ method public void applyLateChanges();
+ method public void changesApplied();
+ method public void composeContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public <R> R! delegateInvalidations(androidx.compose.runtime.ControlledComposition? to, int groupIndex, kotlin.jvm.functions.Function0<? extends R> block);
+ method @androidx.compose.runtime.InternalComposeApi public void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState state);
+ method public boolean getHasPendingChanges();
+ method @androidx.compose.runtime.InternalComposeApi public void insertMovableContent(java.util.List<kotlin.Pair<androidx.compose.runtime.MovableContentStateReference,androidx.compose.runtime.MovableContentStateReference>> references);
+ method public void invalidateAll();
+ method public boolean isComposing();
+ method public boolean observesAnyOf(java.util.Set<?> values);
+ method public void prepareCompose(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public boolean recompose();
+ method public void recordModificationsOf(java.util.Set<?> values);
+ method public void recordReadOf(Object value);
+ method public void recordWriteOf(Object value);
+ method @androidx.compose.runtime.InternalComposeApi public void verifyConsistent();
+ property public abstract boolean hasPendingChanges;
+ property public abstract boolean isComposing;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.TYPE) public @interface DisallowComposableCalls {
+ }
+
+ public interface DisposableEffectResult {
+ method public void dispose();
+ }
+
+ public final class DisposableEffectScope {
+ ctor public DisposableEffectScope();
+ method public inline androidx.compose.runtime.DisposableEffectResult onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> onDisposeEffect);
+ }
+
+ public final class EffectsKt {
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object![]? keys, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LaunchedEffect(kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object![]? keys, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void SideEffect(kotlin.jvm.functions.Function0<kotlin.Unit> effect);
+ method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(optional kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext);
+ }
+
+ @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose and is likely to change before becoming " + "stable.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface ExperimentalComposeApi {
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface ExplicitGroupsComposable {
+ }
+
+ @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface Immutable {
+ }
+
+ @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.ERROR, message="This is internal API for Compose modules 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 InternalComposeApi {
+ }
+
+ @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) public @interface InternalComposeTracingApi {
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface MonotonicFrameClock extends kotlin.coroutines.CoroutineContext.Element {
+ method public default kotlin.coroutines.CoroutineContext.Key<?> getKey();
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public default kotlin.coroutines.CoroutineContext.Key<?> key;
+ field public static final androidx.compose.runtime.MonotonicFrameClock.Key Key;
+ }
+
+ public static final class MonotonicFrameClock.Key implements kotlin.coroutines.CoroutineContext.Key<androidx.compose.runtime.MonotonicFrameClock> {
+ }
+
+ public final class MonotonicFrameClockKt {
+ method public static androidx.compose.runtime.MonotonicFrameClock getMonotonicFrameClock(kotlin.coroutines.CoroutineContext);
+ method public static suspend inline <R> Object? withFrameMillis(androidx.compose.runtime.MonotonicFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend <R> Object? withFrameMillis(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ @androidx.compose.runtime.InternalComposeApi public final class MovableContent<P> {
+ ctor public MovableContent(kotlin.jvm.functions.Function1<? super P,kotlin.Unit> content);
+ method public kotlin.jvm.functions.Function1<P,kotlin.Unit> getContent();
+ property public final kotlin.jvm.functions.Function1<P,kotlin.Unit> content;
+ }
+
+ public final class MovableContentKt {
+ method public static kotlin.jvm.functions.Function0<kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public static <P> kotlin.jvm.functions.Function1<P,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function1<? super P,kotlin.Unit> content);
+ method public static <P1, P2> kotlin.jvm.functions.Function2<P1,P2,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function2<? super P1,? super P2,kotlin.Unit> content);
+ method public static <P1, P2, P3> kotlin.jvm.functions.Function3<P1,P2,P3,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function3<? super P1,? super P2,? super P3,kotlin.Unit> content);
+ method public static <P1, P2, P3, P4> kotlin.jvm.functions.Function4<P1,P2,P3,P4,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function4<? super P1,? super P2,? super P3,? super P4,kotlin.Unit> content);
+ method public static <R> kotlin.jvm.functions.Function1<R,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function1<? super R,kotlin.Unit> content);
+ method public static <R, P> kotlin.jvm.functions.Function2<R,P,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function2<? super R,? super P,kotlin.Unit> content);
+ method public static <R, P1, P2> kotlin.jvm.functions.Function3<R,P1,P2,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function3<? super R,? super P1,? super P2,kotlin.Unit> content);
+ method public static <R, P1, P2, P3> kotlin.jvm.functions.Function4<R,P1,P2,P3,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function4<? super R,? super P1,? super P2,? super P3,kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.InternalComposeApi public final class MovableContentState {
+ }
+
+ @androidx.compose.runtime.InternalComposeApi public final class MovableContentStateReference {
+ }
+
+ @androidx.compose.runtime.Stable public interface MutableState<T> extends androidx.compose.runtime.State<T> {
+ method public operator T! component1();
+ method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
+ method public void setValue(T!);
+ property public abstract T! value;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FILE}) public @interface NoLiveLiterals {
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface NonRestartableComposable {
+ }
+
+ public final class PausableMonotonicFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
+ ctor public PausableMonotonicFrameClock(androidx.compose.runtime.MonotonicFrameClock frameClock);
+ method public boolean isPaused();
+ method public void pause();
+ method public void resume();
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public final boolean isPaused;
+ }
+
+ public interface ProduceStateScope<T> extends androidx.compose.runtime.MutableState<T> kotlinx.coroutines.CoroutineScope {
+ method public suspend Object? awaitDispose(kotlin.jvm.functions.Function0<kotlin.Unit> onDispose, kotlin.coroutines.Continuation<?>);
+ }
+
+ @androidx.compose.runtime.Stable public abstract class ProvidableCompositionLocal<T> extends androidx.compose.runtime.CompositionLocal<T> {
+ method public final infix androidx.compose.runtime.ProvidedValue<T> provides(T? value);
+ method public final infix androidx.compose.runtime.ProvidedValue<T> providesDefault(T? value);
+ }
+
+ public final class ProvidedValue<T> {
+ method public boolean getCanOverride();
+ method public androidx.compose.runtime.CompositionLocal<T> getCompositionLocal();
+ method public T! getValue();
+ property public final boolean canOverride;
+ property public final androidx.compose.runtime.CompositionLocal<T> compositionLocal;
+ property public final T! value;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface ReadOnlyComposable {
+ }
+
+ public interface RecomposeScope {
+ method public void invalidate();
+ }
+
+ public final class Recomposer extends androidx.compose.runtime.CompositionContext {
+ ctor public Recomposer(kotlin.coroutines.CoroutineContext effectCoroutineContext);
+ method public androidx.compose.runtime.RecomposerInfo asRecomposerInfo();
+ method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public void cancel();
+ method public void close();
+ method public long getChangeCount();
+ method public kotlinx.coroutines.flow.StateFlow<androidx.compose.runtime.Recomposer.State> getCurrentState();
+ method public boolean getHasPendingWork();
+ method @Deprecated public kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> getState();
+ method public suspend Object? join(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? runRecomposeAndApplyChanges(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @androidx.compose.runtime.ExperimentalComposeApi public suspend Object? runRecomposeConcurrentlyAndApplyChanges(kotlin.coroutines.CoroutineContext recomposeCoroutineContext, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public final long changeCount;
+ property public final kotlinx.coroutines.flow.StateFlow<androidx.compose.runtime.Recomposer.State> currentState;
+ property public final boolean hasPendingWork;
+ property @Deprecated public final kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> state;
+ field public static final androidx.compose.runtime.Recomposer.Companion Companion;
+ }
+
+ public static final class Recomposer.Companion {
+ method public kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.compose.runtime.RecomposerInfo>> getRunningRecomposers();
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.compose.runtime.RecomposerInfo>> runningRecomposers;
+ }
+
+ public enum Recomposer.State {
+ method public static androidx.compose.runtime.Recomposer.State valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.runtime.Recomposer.State[] values();
+ enum_constant public static final androidx.compose.runtime.Recomposer.State Idle;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State Inactive;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State InactivePendingWork;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State PendingWork;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State ShutDown;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State ShuttingDown;
+ }
+
+ public interface RecomposerInfo {
+ method public long getChangeCount();
+ method public boolean getHasPendingWork();
+ method public kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> getState();
+ property public abstract long changeCount;
+ property public abstract boolean hasPendingWork;
+ property public abstract kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> state;
+ }
+
+ public final class RecomposerKt {
+ method public static suspend <R> Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.runtime.Recomposer,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public interface RememberObserver {
+ method public void onAbandoned();
+ method public void onForgotten();
+ method public void onRemembered();
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi public interface ScopeUpdateScope {
+ method public void updateScope(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.Composer,? super java.lang.Integer,kotlin.Unit> block);
+ }
+
+ @kotlin.jvm.JvmInline public final value class SkippableUpdater<T> {
+ ctor public SkippableUpdater(@kotlin.PublishedApi androidx.compose.runtime.Composer composer);
+ method public inline void update(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> block);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface SnapshotMutationPolicy<T> {
+ method public boolean equivalent(T? a, T? b);
+ method public default T? merge(T? previous, T? current, T? applied);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY}) public @interface Stable {
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public @interface StableMarker {
+ }
+
+ @androidx.compose.runtime.Stable public interface State<T> {
+ method public T! getValue();
+ property public abstract T! value;
+ }
+
+ @kotlin.jvm.JvmInline public final value class Updater<T> {
+ ctor public Updater(@kotlin.PublishedApi androidx.compose.runtime.Composer composer);
+ method public void init(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public void reconcile(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+ method public <V> void set(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+ method public inline void update(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+ method public <V> void update(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+ }
+
+}
+
+package androidx.compose.runtime.collection {
+
+ public final class MutableVector<T> implements java.util.RandomAccess {
+ method public boolean add(T? element);
+ method public void add(int index, T? element);
+ method public boolean addAll(int index, java.util.List<? extends T> elements);
+ method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public inline boolean addAll(java.util.List<? extends T> elements);
+ method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean addAll(T![] elements);
+ method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+ method public boolean addAll(java.util.Collection<? extends T> elements);
+ method public inline boolean any(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public java.util.List<T> asMutableList();
+ method public void clear();
+ method public operator boolean contains(T? element);
+ method public boolean containsAll(java.util.List<? extends T> elements);
+ method public boolean containsAll(java.util.Collection<? extends T> elements);
+ method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
+ method public void ensureCapacity(int capacity);
+ method public T! first();
+ method public inline T! first(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline T? firstOrNull();
+ method public inline T? firstOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline <R> R! fold(R? initial, kotlin.jvm.functions.Function2<? super R,? super T,? extends R> operation);
+ method public inline <R> R! foldIndexed(R? initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super R,? super T,? extends R> operation);
+ method public inline <R> R! foldRight(R? initial, kotlin.jvm.functions.Function2<? super T,? super R,? extends R> operation);
+ method public inline <R> R! foldRightIndexed(R? initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super T,? super R,? extends R> operation);
+ method public inline void forEach(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public inline void forEachIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> block);
+ method public inline void forEachReversed(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public inline void forEachReversedIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> block);
+ method public inline operator T! get(int index);
+ method public inline kotlin.ranges.IntRange getIndices();
+ method public inline int getLastIndex();
+ method public int getSize();
+ method public int indexOf(T? element);
+ method public inline int indexOfFirst(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline int indexOfLast(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public boolean isEmpty();
+ method public boolean isNotEmpty();
+ method public T! last();
+ method public inline T! last(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public int lastIndexOf(T? element);
+ method public inline T? lastOrNull();
+ method public inline T? lastOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline <reified R> R![] map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public inline <reified R> R![] mapIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+ method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R> mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+ method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R> mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public inline operator void minusAssign(T? element);
+ method public inline operator void plusAssign(T? element);
+ method public boolean remove(T? element);
+ method public boolean removeAll(java.util.List<? extends T> elements);
+ method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean removeAll(java.util.Collection<? extends T> elements);
+ method public T! removeAt(int index);
+ method public void removeRange(int start, int end);
+ method public boolean retainAll(java.util.Collection<? extends T> elements);
+ method public inline boolean reversedAny(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public operator T! set(int index, T? element);
+ method public void sortWith(java.util.Comparator<T> comparator);
+ method public inline int sumBy(kotlin.jvm.functions.Function1<? super T,java.lang.Integer> selector);
+ property public final inline kotlin.ranges.IntRange indices;
+ property public final inline int lastIndex;
+ property public final int size;
+ }
+
+ public final class MutableVectorKt {
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(optional int capacity);
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> mutableVectorOf(T?... elements);
+ }
+
+}
+
+package androidx.compose.runtime.internal {
+
+ @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public interface ComposableLambda extends kotlin.jvm.functions.Function2<androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function10<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function11<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function13<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function14<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function15<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function16<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function17<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function18<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function19<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function20<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function21<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function3<java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function4<java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function5<java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function6<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function7<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function8<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function9<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> {
+ }
+
+ public final class ComposableLambdaKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda composableLambda(androidx.compose.runtime.Composer composer, int key, boolean tracked, Object block);
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda composableLambdaInstance(int key, boolean tracked, Object block);
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public interface ComposableLambdaN extends kotlin.jvm.functions.FunctionN<java.lang.Object> {
+ }
+
+ public final class ComposableLambdaN_jvmKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN composableLambdaN(androidx.compose.runtime.Composer composer, int key, boolean tracked, int arity, Object block);
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
+ }
+
+ @androidx.compose.runtime.ExperimentalComposeApi @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.CONSTRUCTOR}) public @interface Decoy {
+ method public abstract String[] signature();
+ method public abstract String targetName();
+ property public abstract String[] signature;
+ property public abstract String targetName;
+ }
+
+ @androidx.compose.runtime.ExperimentalComposeApi @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.CONSTRUCTOR}) public @interface DecoyImplementation {
+ method public abstract long id();
+ method public abstract String name();
+ property public abstract long id;
+ property public abstract String name;
+ }
+
+ public final class DecoyKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static Void illegalDecoyCallException(String fName);
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface FunctionKeyMeta {
+ method public abstract int endOffset();
+ method public abstract int key();
+ method public abstract int startOffset();
+ property public abstract int endOffset;
+ property public abstract int key;
+ property public abstract int startOffset;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public static @interface FunctionKeyMeta.Container {
+ method public abstract androidx.compose.runtime.internal.FunctionKeyMeta[] value();
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface FunctionKeyMetaClass {
+ method public abstract String file();
+ property public abstract String file;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface LiveLiteralFileInfo {
+ method public abstract String file();
+ property public abstract String file;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface LiveLiteralInfo {
+ method public abstract String key();
+ method public abstract int offset();
+ property public abstract String key;
+ property public abstract int offset;
+ }
+
+ public final class LiveLiteralKt {
+ method @androidx.compose.runtime.InternalComposeApi public static void enableLiveLiterals();
+ method public static boolean isLiveLiteralsEnabled();
+ method @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.InternalComposeApi public static <T> androidx.compose.runtime.State<T> liveLiteral(String key, T? value);
+ method @androidx.compose.runtime.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
+ property public static final boolean isLiveLiteralsEnabled;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface StabilityInferred {
+ method public abstract int parameters();
+ property public abstract int parameters;
+ }
+
+}
+
+package androidx.compose.runtime.reflect {
+
+ public final class ComposableMethod {
+ method public java.lang.reflect.Method asMethod();
+ method public int getParameterCount();
+ method public Class<?>![] getParameterTypes();
+ method public java.lang.reflect.Parameter![] getParameters();
+ method public operator Object? invoke(androidx.compose.runtime.Composer composer, Object? instance, java.lang.Object?... args);
+ property public final int parameterCount;
+ property public final Class<?>![] parameterTypes;
+ property public final java.lang.reflect.Parameter![] parameters;
+ }
+
+ public final class ComposableMethodKt {
+ method public static androidx.compose.runtime.reflect.ComposableMethod? asComposableMethod(java.lang.reflect.Method);
+ method @kotlin.jvm.Throws(exceptionClasses=NoSuchMethodException::class) public static androidx.compose.runtime.reflect.ComposableMethod getDeclaredComposableMethod(Class<?>, String methodName, Class<?>... args) throws java.lang.NoSuchMethodException;
+ }
+
+}
+
+package androidx.compose.runtime.snapshots {
+
+ public class MutableSnapshot extends androidx.compose.runtime.snapshots.Snapshot {
+ method public androidx.compose.runtime.snapshots.SnapshotApplyResult apply();
+ method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getReadObserver();
+ method public boolean getReadOnly();
+ method public androidx.compose.runtime.snapshots.Snapshot getRoot();
+ method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getWriteObserver();
+ method public boolean hasPendingChanges();
+ method public androidx.compose.runtime.snapshots.MutableSnapshot takeNestedMutableSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver, optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver);
+ method public androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+ property public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver;
+ property public boolean readOnly;
+ property public androidx.compose.runtime.snapshots.Snapshot root;
+ property public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver;
+ }
+
+ public fun interface ObserverHandle {
+ method public void dispose();
+ }
+
+ public abstract sealed class Snapshot {
+ method public void dispose();
+ method public final inline <T> T! enter(kotlin.jvm.functions.Function0<? extends T> block);
+ method public int getId();
+ method public abstract boolean getReadOnly();
+ method public abstract androidx.compose.runtime.snapshots.Snapshot getRoot();
+ method public abstract boolean hasPendingChanges();
+ method public abstract androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+ method @androidx.compose.runtime.ExperimentalComposeApi public final androidx.compose.runtime.snapshots.Snapshot? unsafeEnter();
+ method @androidx.compose.runtime.ExperimentalComposeApi public final void unsafeLeave(androidx.compose.runtime.snapshots.Snapshot? oldSnapshot);
+ property public int id;
+ property public abstract boolean readOnly;
+ property public abstract androidx.compose.runtime.snapshots.Snapshot root;
+ field public static final androidx.compose.runtime.snapshots.Snapshot.Companion Companion;
+ }
+
+ public static final class Snapshot.Companion {
+ method public androidx.compose.runtime.snapshots.Snapshot getCurrent();
+ method public inline <T> T! global(kotlin.jvm.functions.Function0<? extends T> block);
+ method public void notifyObjectsInitialized();
+ method public <T> T! observe(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver, optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver, kotlin.jvm.functions.Function0<? extends T> block);
+ method @androidx.compose.runtime.InternalComposeApi public int openSnapshotCount();
+ method public androidx.compose.runtime.snapshots.ObserverHandle registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.snapshots.Snapshot,kotlin.Unit> observer);
+ method public androidx.compose.runtime.snapshots.ObserverHandle registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
+ method public void sendApplyNotifications();
+ method public androidx.compose.runtime.snapshots.MutableSnapshot takeMutableSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver, optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver);
+ method public androidx.compose.runtime.snapshots.Snapshot takeSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+ method public inline <R> R! withMutableSnapshot(kotlin.jvm.functions.Function0<? extends R> block);
+ method public inline <T> T! withoutReadObservation(kotlin.jvm.functions.Function0<? extends T> block);
+ property public final androidx.compose.runtime.snapshots.Snapshot current;
+ }
+
+ public final class SnapshotApplyConflictException extends java.lang.Exception {
+ ctor public SnapshotApplyConflictException(androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
+ property public final androidx.compose.runtime.snapshots.Snapshot snapshot;
+ }
+
+ public abstract sealed class SnapshotApplyResult {
+ method public abstract void check();
+ method public abstract boolean getSucceeded();
+ property public abstract boolean succeeded;
+ }
+
+ public static final class SnapshotApplyResult.Failure extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+ ctor public SnapshotApplyResult.Failure(androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method public void check();
+ method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
+ method public boolean getSucceeded();
+ property public final androidx.compose.runtime.snapshots.Snapshot snapshot;
+ property public boolean succeeded;
+ }
+
+ public static final class SnapshotApplyResult.Success extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+ method public void check();
+ method public boolean getSucceeded();
+ property public boolean succeeded;
+ field public static final androidx.compose.runtime.snapshots.SnapshotApplyResult.Success INSTANCE;
+ }
+
+ @androidx.compose.runtime.ExperimentalComposeApi public interface SnapshotContextElement extends kotlin.coroutines.CoroutineContext.Element {
+ field public static final androidx.compose.runtime.snapshots.SnapshotContextElement.Key Key;
+ }
+
+ public static final class SnapshotContextElement.Key implements kotlin.coroutines.CoroutineContext.Key<androidx.compose.runtime.snapshots.SnapshotContextElement> {
+ }
+
+ public final class SnapshotContextElementKt {
+ method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.snapshots.SnapshotContextElement asContextElement(androidx.compose.runtime.snapshots.Snapshot);
+ }
+
+ public final class SnapshotKt {
+ method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state);
+ method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+ method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+ method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+ }
+
+ public interface SnapshotMutableState<T> extends androidx.compose.runtime.MutableState<T> {
+ method public androidx.compose.runtime.SnapshotMutationPolicy<T> getPolicy();
+ property public abstract androidx.compose.runtime.SnapshotMutationPolicy<T> policy;
+ }
+
+ @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
+ ctor public SnapshotStateList();
+ method public boolean add(T? element);
+ method public void add(int index, T? element);
+ method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+ method public boolean addAll(java.util.Collection<? extends T> elements);
+ method public void clear();
+ method public boolean contains(T? element);
+ method public boolean containsAll(java.util.Collection<E!> elements);
+ method public T! get(int index);
+ method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+ method public int getSize();
+ method public int indexOf(T? element);
+ method public boolean isEmpty();
+ method public java.util.Iterator<T> iterator();
+ method public int lastIndexOf(T? element);
+ method public java.util.ListIterator<T> listIterator();
+ method public java.util.ListIterator<T> listIterator(int index);
+ method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+ method public boolean remove(T? element);
+ method public boolean removeAll(java.util.Collection<E!> elements);
+ method public T! removeAt(int index);
+ method public void removeRange(int fromIndex, int toIndex);
+ method public boolean retainAll(java.util.Collection<E!> elements);
+ method public T! set(int index, T? element);
+ method public java.util.List<T> subList(int fromIndex, int toIndex);
+ method public java.util.List<T> toList();
+ property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
+ property public int size;
+ }
+
+ @androidx.compose.runtime.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.runtime.snapshots.StateObject {
+ ctor public SnapshotStateMap();
+ method public void clear();
+ method public boolean containsKey(K? key);
+ method public boolean containsValue(V? value);
+ method public V? get(Object? key);
+ method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
+ method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+ method public java.util.Set<K> getKeys();
+ method public int getSize();
+ method public java.util.Collection<V> getValues();
+ method public boolean isEmpty();
+ method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+ method public V? put(K? key, V? value);
+ method public void putAll(java.util.Map<? extends K,? extends V> from);
+ method public V? remove(Object? key);
+ method public java.util.Map<K,V> toMap();
+ property public java.util.Set<java.util.Map.Entry<K,V>> entries;
+ property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
+ property public java.util.Set<K> keys;
+ property public int size;
+ property public java.util.Collection<V> values;
+ }
+
+ public final class SnapshotStateObserver {
+ ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
+ method public void clear(Object scope);
+ method public void clear();
+ method public void clearIf(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
+ method @org.jetbrains.annotations.TestOnly public void notifyChanges(java.util.Set<?> changes, androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method public <T> void observeReads(T scope, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> onValueChangedForScope, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void start();
+ method public void stop();
+ method @Deprecated public void withNoObservations(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface StateObject {
+ method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+ method public default androidx.compose.runtime.snapshots.StateRecord? mergeRecords(androidx.compose.runtime.snapshots.StateRecord previous, androidx.compose.runtime.snapshots.StateRecord current, androidx.compose.runtime.snapshots.StateRecord applied);
+ method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+ property public abstract androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
+ }
+
+ public abstract class StateRecord {
+ ctor public StateRecord();
+ method public abstract void assign(androidx.compose.runtime.snapshots.StateRecord value);
+ method public abstract androidx.compose.runtime.snapshots.StateRecord create();
+ }
+
+}
+
+package androidx.compose.runtime.tooling {
+
+ public interface CompositionData {
+ method public default androidx.compose.runtime.tooling.CompositionGroup? find(Object identityToFind);
+ method public Iterable<androidx.compose.runtime.tooling.CompositionGroup> getCompositionGroups();
+ method public boolean isEmpty();
+ property public abstract Iterable<androidx.compose.runtime.tooling.CompositionGroup> compositionGroups;
+ property public abstract boolean isEmpty;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface CompositionGroup extends androidx.compose.runtime.tooling.CompositionData {
+ method public Iterable<java.lang.Object> getData();
+ method public default int getGroupSize();
+ method public default Object? getIdentity();
+ method public Object getKey();
+ method public Object? getNode();
+ method public default int getSlotsSize();
+ method public String? getSourceInfo();
+ property public abstract Iterable<java.lang.Object> data;
+ property public default int groupSize;
+ property public default Object? identity;
+ property public abstract Object key;
+ property public abstract Object? node;
+ property public default int slotsSize;
+ property public abstract String? sourceInfo;
+ }
+
+ public final class InspectionTablesKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<java.util.Set<androidx.compose.runtime.tooling.CompositionData>> getLocalInspectionTables();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.util.Set<androidx.compose.runtime.tooling.CompositionData>> LocalInspectionTables;
+ }
+
+}
+
diff --git a/compose/runtime/runtime/api/res-1.4.0-beta02.txt b/compose/runtime/runtime/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/runtime/runtime/api/res-1.4.0-beta02.txt
diff --git a/compose/runtime/runtime/api/restricted_1.4.0-beta02.txt b/compose/runtime/runtime/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..5006380
--- /dev/null
+++ b/compose/runtime/runtime/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,980 @@
+// Signature format: 4.0
+package androidx.compose.runtime {
+
+ public abstract class AbstractApplier<T> implements androidx.compose.runtime.Applier<T> {
+ ctor public AbstractApplier(T? root);
+ method public final void clear();
+ method public void down(T? node);
+ method public T! getCurrent();
+ method public final T! getRoot();
+ method protected final void move(java.util.List<T>, int from, int to, int count);
+ method protected abstract void onClear();
+ method protected final void remove(java.util.List<T>, int index, int count);
+ method protected void setCurrent(T!);
+ method public void up();
+ property public T! current;
+ property public final T! root;
+ }
+
+ public final class ActualAndroid_androidKt {
+ method @Deprecated public static androidx.compose.runtime.MonotonicFrameClock getDefaultMonotonicFrameClock();
+ property @Deprecated public static final androidx.compose.runtime.MonotonicFrameClock DefaultMonotonicFrameClock;
+ }
+
+ public final class ActualJvm_jvmKt {
+ method @kotlin.PublishedApi internal static inline <R> R! synchronized(Object lock, kotlin.jvm.functions.Function0<? extends R> block);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Applier<N> {
+ method public void clear();
+ method public void down(N? node);
+ method public N! getCurrent();
+ method public void insertBottomUp(int index, N? instance);
+ method public void insertTopDown(int index, N? instance);
+ method public void move(int from, int to, int count);
+ method public default void onBeginChanges();
+ method public default void onEndChanges();
+ method public void remove(int index, int count);
+ method public void up();
+ property public abstract N! current;
+ }
+
+ public final class BroadcastFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
+ ctor public BroadcastFrameClock(optional kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
+ method public void cancel(optional java.util.concurrent.CancellationException cancellationException);
+ method public boolean getHasAwaiters();
+ method public void sendFrame(long timeNanos);
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public final boolean hasAwaiters;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface Composable {
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface ComposableOpenTarget {
+ method public abstract int index();
+ property public abstract int index;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface ComposableTarget {
+ method public abstract String applier();
+ property public abstract String applier;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS) public @interface ComposableTargetMarker {
+ method public abstract String description() default "";
+ property public abstract String description;
+ }
+
+ public final class ComposablesKt {
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+ method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline <T, reified E extends androidx.compose.runtime.Applier<?>> void ReusableComposeNode(kotlin.jvm.functions.Function0<? extends T> factory, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SkippableUpdater<T>,? extends kotlin.Unit> skippableUpdate, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static inline void ReusableContent(Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static inline void ReusableContentHost(boolean active, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.Composer getCurrentComposer();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static int getCurrentCompositeKeyHash();
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionLocalContext getCurrentCompositionLocalContext();
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.RecomposeScope getCurrentRecomposeScope();
+ method @kotlin.PublishedApi internal static void invalidApplier();
+ method @androidx.compose.runtime.Composable public static inline <T> T! key(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> block);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object? key1, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object? key1, Object? key2, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T! remember(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionContext rememberCompositionContext();
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static final androidx.compose.runtime.Composer currentComposer;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static final int currentCompositeKeyHash;
+ property @androidx.compose.runtime.Composable public static final androidx.compose.runtime.CompositionLocalContext currentCompositionLocalContext;
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static final androidx.compose.runtime.RecomposeScope currentRecomposeScope;
+ }
+
+ @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.TYPEALIAS}) public @interface ComposeCompilerApi {
+ }
+
+ public interface ComposeNodeLifecycleCallback {
+ method public void onDeactivate();
+ method public void onRelease();
+ method public void onReuse();
+ }
+
+ public sealed interface Composer {
+ method @androidx.compose.runtime.ComposeCompilerApi public <V, T> void apply(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+ method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(boolean value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(char value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(byte value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(short value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(int value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(float value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(long value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(double value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changedInstance(Object? value);
+ method public void collectParameterInformation();
+ method @androidx.compose.runtime.ComposeCompilerApi public <T> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+ method @androidx.compose.runtime.ComposeCompilerApi public void deactivateToEndGroup(boolean changed);
+ method @androidx.compose.runtime.ComposeCompilerApi public void disableReusing();
+ method @org.jetbrains.annotations.TestOnly public void disableSourceInformation();
+ method @androidx.compose.runtime.ComposeCompilerApi public void enableReusing();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endDefaults();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endMovableGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endNode();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endReplaceableGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.ScopeUpdateScope? endRestartGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endReusableGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void endToMarker(int marker);
+ method public androidx.compose.runtime.Applier<?> getApplier();
+ method @org.jetbrains.annotations.TestOnly public kotlin.coroutines.CoroutineContext getApplyCoroutineContext();
+ method @org.jetbrains.annotations.TestOnly public androidx.compose.runtime.ControlledComposition getComposition();
+ method public androidx.compose.runtime.tooling.CompositionData getCompositionData();
+ method public int getCompoundKeyHash();
+ method public int getCurrentMarker();
+ method public boolean getDefaultsInvalid();
+ method public boolean getInserting();
+ method public androidx.compose.runtime.RecomposeScope? getRecomposeScope();
+ method public Object? getRecomposeScopeIdentity();
+ method public boolean getSkipping();
+ method @androidx.compose.runtime.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
+ method @androidx.compose.runtime.ComposeCompilerApi public Object? rememberedValue();
+ method @androidx.compose.runtime.ComposeCompilerApi public void skipCurrentGroup();
+ method @androidx.compose.runtime.ComposeCompilerApi public void skipToGroupEnd();
+ method public void sourceInformation(String sourceInformation);
+ method public void sourceInformationMarkerEnd();
+ method public void sourceInformationMarkerStart(int key, String sourceInformation);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startDefaults();
+ method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startNode();
+ method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key);
+ method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.Composer startRestartGroup(int key);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startReusableGroup(int key, Object? dataKey);
+ method @androidx.compose.runtime.ComposeCompilerApi public void startReusableNode();
+ method @androidx.compose.runtime.ComposeCompilerApi public void updateRememberedValue(Object? value);
+ method @androidx.compose.runtime.ComposeCompilerApi public void useNode();
+ property public abstract androidx.compose.runtime.Applier<?> applier;
+ property @org.jetbrains.annotations.TestOnly public abstract androidx.compose.runtime.ControlledComposition composition;
+ property public abstract androidx.compose.runtime.tooling.CompositionData compositionData;
+ property public abstract int compoundKeyHash;
+ property public abstract int currentMarker;
+ property public abstract boolean defaultsInvalid;
+ property public abstract boolean inserting;
+ property public abstract androidx.compose.runtime.RecomposeScope? recomposeScope;
+ property public abstract Object? recomposeScopeIdentity;
+ property public abstract boolean skipping;
+ field public static final androidx.compose.runtime.Composer.Companion Companion;
+ }
+
+ public static final class Composer.Companion {
+ method public Object getEmpty();
+ property public final Object Empty;
+ }
+
+ public final class ComposerKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static inline <T> T! cache(androidx.compose.runtime.Composer, boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
+ method @androidx.compose.runtime.ComposeCompilerApi public static boolean isTraceInProgress();
+ method @androidx.compose.runtime.ComposeCompilerApi public static void sourceInformation(androidx.compose.runtime.Composer composer, String sourceInformation);
+ method @androidx.compose.runtime.ComposeCompilerApi public static void sourceInformationMarkerEnd(androidx.compose.runtime.Composer composer);
+ method @androidx.compose.runtime.ComposeCompilerApi public static void sourceInformationMarkerStart(androidx.compose.runtime.Composer composer, int key, String sourceInformation);
+ method @androidx.compose.runtime.ComposeCompilerApi public static void traceEventEnd();
+ method @androidx.compose.runtime.ComposeCompilerApi public static void traceEventStart(int key, int dirty1, int dirty2, String info);
+ method @Deprecated @androidx.compose.runtime.ComposeCompilerApi public static void traceEventStart(int key, String info);
+ field @kotlin.PublishedApi internal static final Object compositionLocalMap;
+ field @kotlin.PublishedApi internal static final int compositionLocalMapKey = 202; // 0xca
+ field @kotlin.PublishedApi internal static final Object invocation;
+ field @kotlin.PublishedApi internal static final int invocationKey = 200; // 0xc8
+ field @kotlin.PublishedApi internal static final Object provider;
+ field @kotlin.PublishedApi internal static final int providerKey = 201; // 0xc9
+ field @kotlin.PublishedApi internal static final Object providerMaps;
+ field @kotlin.PublishedApi internal static final int providerMapsKey = 204; // 0xcc
+ field @kotlin.PublishedApi internal static final Object providerValues;
+ field @kotlin.PublishedApi internal static final int providerValuesKey = 203; // 0xcb
+ field @kotlin.PublishedApi internal static final Object reference;
+ field @kotlin.PublishedApi internal static final int referenceKey = 206; // 0xce
+ field @kotlin.PublishedApi internal static final int reuseKey = 207; // 0xcf
+ }
+
+ public interface Composition {
+ method public void dispose();
+ method public boolean getHasInvalidations();
+ method public boolean isDisposed();
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ property public abstract boolean hasInvalidations;
+ property public abstract boolean isDisposed;
+ }
+
+ public abstract class CompositionContext {
+ }
+
+ public final class CompositionKt {
+ method public static androidx.compose.runtime.Composition Composition(androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.CompositionContext parent);
+ method @org.jetbrains.annotations.TestOnly public static androidx.compose.runtime.ControlledComposition ControlledComposition(androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.CompositionContext parent);
+ }
+
+ @androidx.compose.runtime.Stable public abstract sealed class CompositionLocal<T> {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final inline T! getCurrent();
+ property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final inline T! current;
+ }
+
+ @androidx.compose.runtime.Stable public final class CompositionLocalContext {
+ }
+
+ public final class CompositionLocalKt {
+ method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.CompositionLocalContext context, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> compositionLocalOf(optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> staticCompositionLocalOf(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ }
+
+ @kotlin.PublishedApi internal final class CompositionScopedCoroutineScopeCanceller implements androidx.compose.runtime.RememberObserver {
+ ctor public CompositionScopedCoroutineScopeCanceller(kotlinx.coroutines.CoroutineScope coroutineScope);
+ method public kotlinx.coroutines.CoroutineScope getCoroutineScope();
+ method public void onAbandoned();
+ method public void onForgotten();
+ method public void onRemembered();
+ property public final kotlinx.coroutines.CoroutineScope coroutineScope;
+ }
+
+ public sealed interface ControlledComposition extends androidx.compose.runtime.Composition {
+ method public void applyChanges();
+ method public void applyLateChanges();
+ method public void changesApplied();
+ method public void composeContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public <R> R! delegateInvalidations(androidx.compose.runtime.ControlledComposition? to, int groupIndex, kotlin.jvm.functions.Function0<? extends R> block);
+ method public boolean getHasPendingChanges();
+ method public void invalidateAll();
+ method public boolean isComposing();
+ method public boolean observesAnyOf(java.util.Set<?> values);
+ method public void prepareCompose(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public boolean recompose();
+ method public void recordModificationsOf(java.util.Set<?> values);
+ method public void recordReadOf(Object value);
+ method public void recordWriteOf(Object value);
+ property public abstract boolean hasPendingChanges;
+ property public abstract boolean isComposing;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.TYPE) public @interface DisallowComposableCalls {
+ }
+
+ public interface DisposableEffectResult {
+ method public void dispose();
+ }
+
+ public final class DisposableEffectScope {
+ ctor public DisposableEffectScope();
+ method public inline androidx.compose.runtime.DisposableEffectResult onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> onDisposeEffect);
+ }
+
+ public final class EffectsKt {
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object![]? keys, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LaunchedEffect(kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object![]? keys, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void SideEffect(kotlin.jvm.functions.Function0<kotlin.Unit> effect);
+ method @kotlin.PublishedApi internal static kotlinx.coroutines.CoroutineScope createCompositionCoroutineScope(kotlin.coroutines.CoroutineContext coroutineContext, androidx.compose.runtime.Composer composer);
+ method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(optional kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext);
+ }
+
+ public final class ExpectKt {
+ method @kotlin.PublishedApi internal static inline <R> R? synchronized(Object lock, kotlin.jvm.functions.Function0<? extends R> block);
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface ExplicitGroupsComposable {
+ }
+
+ @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface Immutable {
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface MonotonicFrameClock extends kotlin.coroutines.CoroutineContext.Element {
+ method public default kotlin.coroutines.CoroutineContext.Key<?> getKey();
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public default kotlin.coroutines.CoroutineContext.Key<?> key;
+ field public static final androidx.compose.runtime.MonotonicFrameClock.Key Key;
+ }
+
+ public static final class MonotonicFrameClock.Key implements kotlin.coroutines.CoroutineContext.Key<androidx.compose.runtime.MonotonicFrameClock> {
+ }
+
+ public final class MonotonicFrameClockKt {
+ method public static androidx.compose.runtime.MonotonicFrameClock getMonotonicFrameClock(kotlin.coroutines.CoroutineContext);
+ method public static suspend inline <R> Object? withFrameMillis(androidx.compose.runtime.MonotonicFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend <R> Object? withFrameMillis(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public final class MovableContentKt {
+ method public static kotlin.jvm.functions.Function0<kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method public static <P> kotlin.jvm.functions.Function1<P,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function1<? super P,kotlin.Unit> content);
+ method public static <P1, P2> kotlin.jvm.functions.Function2<P1,P2,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function2<? super P1,? super P2,kotlin.Unit> content);
+ method public static <P1, P2, P3> kotlin.jvm.functions.Function3<P1,P2,P3,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function3<? super P1,? super P2,? super P3,kotlin.Unit> content);
+ method public static <P1, P2, P3, P4> kotlin.jvm.functions.Function4<P1,P2,P3,P4,kotlin.Unit> movableContentOf(kotlin.jvm.functions.Function4<? super P1,? super P2,? super P3,? super P4,kotlin.Unit> content);
+ method public static <R> kotlin.jvm.functions.Function1<R,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function1<? super R,kotlin.Unit> content);
+ method public static <R, P> kotlin.jvm.functions.Function2<R,P,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function2<? super R,? super P,kotlin.Unit> content);
+ method public static <R, P1, P2> kotlin.jvm.functions.Function3<R,P1,P2,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function3<? super R,? super P1,? super P2,kotlin.Unit> content);
+ method public static <R, P1, P2, P3> kotlin.jvm.functions.Function4<R,P1,P2,P3,kotlin.Unit> movableContentWithReceiverOf(kotlin.jvm.functions.Function4<? super R,? super P1,? super P2,? super P3,kotlin.Unit> content);
+ }
+
+ @androidx.compose.runtime.Stable public interface MutableState<T> extends androidx.compose.runtime.State<T> {
+ method public operator T! component1();
+ method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
+ method public void setValue(T!);
+ property public abstract T! value;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FILE}) public @interface NoLiveLiterals {
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface NonRestartableComposable {
+ }
+
+ public final class PausableMonotonicFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
+ ctor public PausableMonotonicFrameClock(androidx.compose.runtime.MonotonicFrameClock frameClock);
+ method public boolean isPaused();
+ method public void pause();
+ method public void resume();
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public final boolean isPaused;
+ }
+
+ public interface ProduceStateScope<T> extends androidx.compose.runtime.MutableState<T> kotlinx.coroutines.CoroutineScope {
+ method public suspend Object? awaitDispose(kotlin.jvm.functions.Function0<kotlin.Unit> onDispose, kotlin.coroutines.Continuation<?>);
+ }
+
+ @androidx.compose.runtime.Stable public abstract class ProvidableCompositionLocal<T> extends androidx.compose.runtime.CompositionLocal<T> {
+ method public final infix androidx.compose.runtime.ProvidedValue<T> provides(T? value);
+ method public final infix androidx.compose.runtime.ProvidedValue<T> providesDefault(T? value);
+ }
+
+ public final class ProvidedValue<T> {
+ method public boolean getCanOverride();
+ method public androidx.compose.runtime.CompositionLocal<T> getCompositionLocal();
+ method public T! getValue();
+ property public final boolean canOverride;
+ property public final androidx.compose.runtime.CompositionLocal<T> compositionLocal;
+ property public final T! value;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface ReadOnlyComposable {
+ }
+
+ public interface RecomposeScope {
+ method public void invalidate();
+ }
+
+ public final class RecomposeScopeImplKt {
+ method @kotlin.PublishedApi internal static int updateChangedFlags(int flags);
+ }
+
+ public final class Recomposer extends androidx.compose.runtime.CompositionContext {
+ ctor public Recomposer(kotlin.coroutines.CoroutineContext effectCoroutineContext);
+ method public androidx.compose.runtime.RecomposerInfo asRecomposerInfo();
+ method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public void cancel();
+ method public void close();
+ method public long getChangeCount();
+ method public kotlinx.coroutines.flow.StateFlow<androidx.compose.runtime.Recomposer.State> getCurrentState();
+ method public boolean getHasPendingWork();
+ method @Deprecated public kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> getState();
+ method public suspend Object? join(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? runRecomposeAndApplyChanges(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public final long changeCount;
+ property public final kotlinx.coroutines.flow.StateFlow<androidx.compose.runtime.Recomposer.State> currentState;
+ property public final boolean hasPendingWork;
+ property @Deprecated public final kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> state;
+ field public static final androidx.compose.runtime.Recomposer.Companion Companion;
+ }
+
+ public static final class Recomposer.Companion {
+ method public kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.compose.runtime.RecomposerInfo>> getRunningRecomposers();
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.compose.runtime.RecomposerInfo>> runningRecomposers;
+ }
+
+ public enum Recomposer.State {
+ method public static androidx.compose.runtime.Recomposer.State valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.runtime.Recomposer.State[] values();
+ enum_constant public static final androidx.compose.runtime.Recomposer.State Idle;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State Inactive;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State InactivePendingWork;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State PendingWork;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State ShutDown;
+ enum_constant public static final androidx.compose.runtime.Recomposer.State ShuttingDown;
+ }
+
+ public interface RecomposerInfo {
+ method public long getChangeCount();
+ method public boolean getHasPendingWork();
+ method public kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> getState();
+ property public abstract long changeCount;
+ property public abstract boolean hasPendingWork;
+ property public abstract kotlinx.coroutines.flow.Flow<androidx.compose.runtime.Recomposer.State> state;
+ }
+
+ public final class RecomposerKt {
+ method public static suspend <R> Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.runtime.Recomposer,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public interface RememberObserver {
+ method public void onAbandoned();
+ method public void onForgotten();
+ method public void onRemembered();
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi public interface ScopeUpdateScope {
+ method public void updateScope(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.Composer,? super java.lang.Integer,kotlin.Unit> block);
+ }
+
+ @kotlin.jvm.JvmInline public final value class SkippableUpdater<T> {
+ ctor public SkippableUpdater(@kotlin.PublishedApi androidx.compose.runtime.Composer composer);
+ method public inline void update(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,kotlin.Unit> block);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface SnapshotMutationPolicy<T> {
+ method public boolean equivalent(T? a, T? b);
+ method public default T? merge(T? previous, T? current, T? applied);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ public final class SnapshotStateKt {
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, optional kotlin.coroutines.CoroutineContext context);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method public static inline operator <T> T! getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
+ method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+ method public static <T> kotlinx.coroutines.flow.Flow<T> snapshotFlow(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+ method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+ method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+ }
+
+ @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY}) public @interface Stable {
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public @interface StableMarker {
+ }
+
+ @androidx.compose.runtime.Stable public interface State<T> {
+ method public T! getValue();
+ property public abstract T! value;
+ }
+
+ @kotlin.jvm.JvmInline public final value class Updater<T> {
+ ctor public Updater(@kotlin.PublishedApi androidx.compose.runtime.Composer composer);
+ method public void init(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public void reconcile(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+ method public <V> void set(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+ method public inline void update(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+ method public <V> void update(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+ }
+
+}
+
+package androidx.compose.runtime.collection {
+
+ public final class MutableVector<T> implements java.util.RandomAccess {
+ ctor @kotlin.PublishedApi internal MutableVector(@kotlin.PublishedApi T![] content, int size);
+ method public boolean add(T? element);
+ method public void add(int index, T? element);
+ method public boolean addAll(int index, java.util.List<? extends T> elements);
+ method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public inline boolean addAll(java.util.List<? extends T> elements);
+ method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean addAll(T![] elements);
+ method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+ method public boolean addAll(java.util.Collection<? extends T> elements);
+ method public inline boolean any(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public java.util.List<T> asMutableList();
+ method public void clear();
+ method public operator boolean contains(T? element);
+ method public boolean containsAll(java.util.List<? extends T> elements);
+ method public boolean containsAll(java.util.Collection<? extends T> elements);
+ method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
+ method public void ensureCapacity(int capacity);
+ method public T! first();
+ method public inline T! first(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline T? firstOrNull();
+ method public inline T? firstOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline <R> R! fold(R? initial, kotlin.jvm.functions.Function2<? super R,? super T,? extends R> operation);
+ method public inline <R> R! foldIndexed(R? initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super R,? super T,? extends R> operation);
+ method public inline <R> R! foldRight(R? initial, kotlin.jvm.functions.Function2<? super T,? super R,? extends R> operation);
+ method public inline <R> R! foldRightIndexed(R? initial, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super T,? super R,? extends R> operation);
+ method public inline void forEach(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public inline void forEachIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> block);
+ method public inline void forEachReversed(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public inline void forEachReversedIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> block);
+ method public inline operator T! get(int index);
+ method public inline kotlin.ranges.IntRange getIndices();
+ method public inline int getLastIndex();
+ method public int getSize();
+ method public int indexOf(T? element);
+ method public inline int indexOfFirst(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline int indexOfLast(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public boolean isEmpty();
+ method public boolean isNotEmpty();
+ method public T! last();
+ method public inline T! last(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public int lastIndexOf(T? element);
+ method public inline T? lastOrNull();
+ method public inline T? lastOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public inline <reified R> R![] map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public inline <reified R> R![] mapIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+ method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R> mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+ method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R> mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public inline operator void minusAssign(T? element);
+ method public inline operator void plusAssign(T? element);
+ method public boolean remove(T? element);
+ method public boolean removeAll(java.util.List<? extends T> elements);
+ method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean removeAll(java.util.Collection<? extends T> elements);
+ method public T! removeAt(int index);
+ method public void removeRange(int start, int end);
+ method public boolean retainAll(java.util.Collection<? extends T> elements);
+ method public inline boolean reversedAny(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public operator T! set(int index, T? element);
+ method public void sortWith(java.util.Comparator<T> comparator);
+ method public inline int sumBy(kotlin.jvm.functions.Function1<? super T,java.lang.Integer> selector);
+ method @kotlin.PublishedApi internal Void throwNoSuchElementException();
+ property public final inline kotlin.ranges.IntRange indices;
+ property public final inline int lastIndex;
+ property public final int size;
+ }
+
+ public final class MutableVectorKt {
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(optional int capacity);
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+ method public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T> mutableVectorOf(T?... elements);
+ }
+
+}
+
+package androidx.compose.runtime.internal {
+
+ @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public interface ComposableLambda extends kotlin.jvm.functions.Function2<androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function10<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function11<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function13<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function14<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function15<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function16<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function17<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function18<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function19<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function20<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function21<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function3<java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function4<java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function5<java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function6<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function7<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function8<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> kotlin.jvm.functions.Function9<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,androidx.compose.runtime.Composer,java.lang.Integer,java.lang.Object> {
+ }
+
+ public final class ComposableLambdaKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda composableLambda(androidx.compose.runtime.Composer composer, int key, boolean tracked, Object block);
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda composableLambdaInstance(int key, boolean tracked, Object block);
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public interface ComposableLambdaN extends kotlin.jvm.functions.FunctionN<java.lang.Object> {
+ }
+
+ public final class ComposableLambdaN_jvmKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN composableLambdaN(androidx.compose.runtime.Composer composer, int key, boolean tracked, int arity, Object block);
+ method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
+ }
+
+ public final class DecoyKt {
+ method @androidx.compose.runtime.ComposeCompilerApi public static Void illegalDecoyCallException(String fName);
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface FunctionKeyMeta {
+ method public abstract int endOffset();
+ method public abstract int key();
+ method public abstract int startOffset();
+ property public abstract int endOffset;
+ property public abstract int key;
+ property public abstract int startOffset;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public static @interface FunctionKeyMeta.Container {
+ method public abstract androidx.compose.runtime.internal.FunctionKeyMeta[] value();
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface FunctionKeyMetaClass {
+ method public abstract String file();
+ property public abstract String file;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface LiveLiteralFileInfo {
+ method public abstract String file();
+ property public abstract String file;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface LiveLiteralInfo {
+ method public abstract String key();
+ method public abstract int offset();
+ property public abstract String key;
+ property public abstract int offset;
+ }
+
+ public final class LiveLiteralKt {
+ method public static boolean isLiveLiteralsEnabled();
+ property public static final boolean isLiveLiteralsEnabled;
+ }
+
+ @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface StabilityInferred {
+ method public abstract int parameters();
+ property public abstract int parameters;
+ }
+
+}
+
+package androidx.compose.runtime.reflect {
+
+ public final class ComposableMethod {
+ method public java.lang.reflect.Method asMethod();
+ method public int getParameterCount();
+ method public Class<?>![] getParameterTypes();
+ method public java.lang.reflect.Parameter![] getParameters();
+ method public operator Object? invoke(androidx.compose.runtime.Composer composer, Object? instance, java.lang.Object?... args);
+ property public final int parameterCount;
+ property public final Class<?>![] parameterTypes;
+ property public final java.lang.reflect.Parameter![] parameters;
+ }
+
+ public final class ComposableMethodKt {
+ method public static androidx.compose.runtime.reflect.ComposableMethod? asComposableMethod(java.lang.reflect.Method);
+ method @kotlin.jvm.Throws(exceptionClasses=NoSuchMethodException::class) public static androidx.compose.runtime.reflect.ComposableMethod getDeclaredComposableMethod(Class<?>, String methodName, Class<?>... args) throws java.lang.NoSuchMethodException;
+ }
+
+}
+
+package androidx.compose.runtime.snapshots {
+
+ public class MutableSnapshot extends androidx.compose.runtime.snapshots.Snapshot {
+ method public androidx.compose.runtime.snapshots.SnapshotApplyResult apply();
+ method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getReadObserver();
+ method public boolean getReadOnly();
+ method public androidx.compose.runtime.snapshots.Snapshot getRoot();
+ method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getWriteObserver();
+ method public boolean hasPendingChanges();
+ method public androidx.compose.runtime.snapshots.MutableSnapshot takeNestedMutableSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver, optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver);
+ method public androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+ property public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver;
+ property public boolean readOnly;
+ property public androidx.compose.runtime.snapshots.Snapshot root;
+ property public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver;
+ }
+
+ public fun interface ObserverHandle {
+ method public void dispose();
+ }
+
+ public abstract sealed class Snapshot {
+ method public void dispose();
+ method public final inline <T> T! enter(kotlin.jvm.functions.Function0<? extends T> block);
+ method public int getId();
+ method public abstract boolean getReadOnly();
+ method public abstract androidx.compose.runtime.snapshots.Snapshot getRoot();
+ method public abstract boolean hasPendingChanges();
+ method @kotlin.PublishedApi internal androidx.compose.runtime.snapshots.Snapshot? makeCurrent();
+ method @kotlin.PublishedApi internal void restoreCurrent(androidx.compose.runtime.snapshots.Snapshot? snapshot);
+ method public abstract androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+ property public int id;
+ property public abstract boolean readOnly;
+ property public abstract androidx.compose.runtime.snapshots.Snapshot root;
+ field public static final androidx.compose.runtime.snapshots.Snapshot.Companion Companion;
+ }
+
+ public static final class Snapshot.Companion {
+ method @kotlin.PublishedApi internal androidx.compose.runtime.snapshots.Snapshot createNonObservableSnapshot();
+ method public androidx.compose.runtime.snapshots.Snapshot getCurrent();
+ method public inline <T> T! global(kotlin.jvm.functions.Function0<? extends T> block);
+ method public void notifyObjectsInitialized();
+ method public <T> T! observe(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver, optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver, kotlin.jvm.functions.Function0<? extends T> block);
+ method public androidx.compose.runtime.snapshots.ObserverHandle registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.snapshots.Snapshot,kotlin.Unit> observer);
+ method public androidx.compose.runtime.snapshots.ObserverHandle registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
+ method @kotlin.PublishedApi internal androidx.compose.runtime.snapshots.Snapshot? removeCurrent();
+ method @kotlin.PublishedApi internal void restoreCurrent(androidx.compose.runtime.snapshots.Snapshot? previous);
+ method public void sendApplyNotifications();
+ method public androidx.compose.runtime.snapshots.MutableSnapshot takeMutableSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver, optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver);
+ method public androidx.compose.runtime.snapshots.Snapshot takeSnapshot(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+ method public inline <R> R! withMutableSnapshot(kotlin.jvm.functions.Function0<? extends R> block);
+ method public inline <T> T! withoutReadObservation(kotlin.jvm.functions.Function0<? extends T> block);
+ property public final androidx.compose.runtime.snapshots.Snapshot current;
+ }
+
+ public final class SnapshotApplyConflictException extends java.lang.Exception {
+ ctor public SnapshotApplyConflictException(androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
+ property public final androidx.compose.runtime.snapshots.Snapshot snapshot;
+ }
+
+ public abstract sealed class SnapshotApplyResult {
+ method public abstract void check();
+ method public abstract boolean getSucceeded();
+ property public abstract boolean succeeded;
+ }
+
+ public static final class SnapshotApplyResult.Failure extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+ ctor public SnapshotApplyResult.Failure(androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method public void check();
+ method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
+ method public boolean getSucceeded();
+ property public final androidx.compose.runtime.snapshots.Snapshot snapshot;
+ property public boolean succeeded;
+ }
+
+ public static final class SnapshotApplyResult.Success extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+ method public void check();
+ method public boolean getSucceeded();
+ property public boolean succeeded;
+ field public static final androidx.compose.runtime.snapshots.SnapshotApplyResult.Success INSTANCE;
+ }
+
+ public final class SnapshotKt {
+ method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.snapshots.StateRecord> T current(T r, androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.snapshots.StateRecord> T current(T r);
+ method @kotlin.PublishedApi internal static void notifyWrite(androidx.compose.runtime.snapshots.Snapshot snapshot, androidx.compose.runtime.snapshots.StateObject state);
+ method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state);
+ method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method @kotlin.PublishedApi internal static inline <T> T! sync(kotlin.jvm.functions.Function0<? extends T> block);
+ method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+ method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+ method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+ method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.snapshots.StateRecord> T writableRecord(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
+ field @kotlin.PublishedApi internal static final Object lock;
+ field @kotlin.PublishedApi internal static final androidx.compose.runtime.snapshots.Snapshot snapshotInitializer;
+ }
+
+ public interface SnapshotMutableState<T> extends androidx.compose.runtime.MutableState<T> {
+ method public androidx.compose.runtime.SnapshotMutationPolicy<T> getPolicy();
+ property public abstract androidx.compose.runtime.SnapshotMutationPolicy<T> policy;
+ }
+
+ @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
+ ctor public SnapshotStateList();
+ method public boolean add(T? element);
+ method public void add(int index, T? element);
+ method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+ method public boolean addAll(java.util.Collection<? extends T> elements);
+ method public void clear();
+ method public boolean contains(T? element);
+ method public boolean containsAll(java.util.Collection<E!> elements);
+ method public T! get(int index);
+ method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+ method public int getSize();
+ method public int indexOf(T? element);
+ method public boolean isEmpty();
+ method public java.util.Iterator<T> iterator();
+ method public int lastIndexOf(T? element);
+ method public java.util.ListIterator<T> listIterator();
+ method public java.util.ListIterator<T> listIterator(int index);
+ method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+ method public boolean remove(T? element);
+ method public boolean removeAll(java.util.Collection<E!> elements);
+ method public T! removeAt(int index);
+ method public void removeRange(int fromIndex, int toIndex);
+ method public boolean retainAll(java.util.Collection<E!> elements);
+ method public T! set(int index, T? element);
+ method public java.util.List<T> subList(int fromIndex, int toIndex);
+ method public java.util.List<T> toList();
+ property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
+ property public int size;
+ }
+
+ @androidx.compose.runtime.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.runtime.snapshots.StateObject {
+ ctor public SnapshotStateMap();
+ method public void clear();
+ method public boolean containsKey(K? key);
+ method public boolean containsValue(V? value);
+ method public V? get(Object? key);
+ method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
+ method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+ method public java.util.Set<K> getKeys();
+ method public int getSize();
+ method public java.util.Collection<V> getValues();
+ method public boolean isEmpty();
+ method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+ method public V? put(K? key, V? value);
+ method public void putAll(java.util.Map<? extends K,? extends V> from);
+ method public V? remove(Object? key);
+ method public java.util.Map<K,V> toMap();
+ property public java.util.Set<java.util.Map.Entry<K,V>> entries;
+ property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
+ property public java.util.Set<K> keys;
+ property public int size;
+ property public java.util.Collection<V> values;
+ }
+
+ public final class SnapshotStateObserver {
+ ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
+ method public void clear(Object scope);
+ method public void clear();
+ method public void clearIf(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
+ method @org.jetbrains.annotations.TestOnly public void notifyChanges(java.util.Set<?> changes, androidx.compose.runtime.snapshots.Snapshot snapshot);
+ method public <T> void observeReads(T scope, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> onValueChangedForScope, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void start();
+ method public void stop();
+ method @Deprecated public void withNoObservations(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface StateObject {
+ method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+ method public default androidx.compose.runtime.snapshots.StateRecord? mergeRecords(androidx.compose.runtime.snapshots.StateRecord previous, androidx.compose.runtime.snapshots.StateRecord current, androidx.compose.runtime.snapshots.StateRecord applied);
+ method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+ property public abstract androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
+ }
+
+ public abstract class StateRecord {
+ ctor public StateRecord();
+ method public abstract void assign(androidx.compose.runtime.snapshots.StateRecord value);
+ method public abstract androidx.compose.runtime.snapshots.StateRecord create();
+ }
+
+}
+
+package androidx.compose.runtime.tooling {
+
+ public interface CompositionData {
+ method public default androidx.compose.runtime.tooling.CompositionGroup? find(Object identityToFind);
+ method public Iterable<androidx.compose.runtime.tooling.CompositionGroup> getCompositionGroups();
+ method public boolean isEmpty();
+ property public abstract Iterable<androidx.compose.runtime.tooling.CompositionGroup> compositionGroups;
+ property public abstract boolean isEmpty;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface CompositionGroup extends androidx.compose.runtime.tooling.CompositionData {
+ method public Iterable<java.lang.Object> getData();
+ method public default int getGroupSize();
+ method public default Object? getIdentity();
+ method public Object getKey();
+ method public Object? getNode();
+ method public default int getSlotsSize();
+ method public String? getSourceInfo();
+ property public abstract Iterable<java.lang.Object> data;
+ property public default int groupSize;
+ property public default Object? identity;
+ property public abstract Object key;
+ property public abstract Object? node;
+ property public default int slotsSize;
+ property public abstract String? sourceInfo;
+ }
+
+ public final class InspectionTablesKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<java.util.Set<androidx.compose.runtime.tooling.CompositionData>> getLocalInspectionTables();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.util.Set<androidx.compose.runtime.tooling.CompositionData>> LocalInspectionTables;
+ }
+
+}
+
diff --git a/compose/runtime/runtime/api/restricted_current.ignore b/compose/runtime/runtime/api/restricted_current.ignore
deleted file mode 100644
index 7c5ea36..0000000
--- a/compose/runtime/runtime/api/restricted_current.ignore
+++ /dev/null
@@ -1,49 +0,0 @@
-// Baseline format: 1.0
-AddedAbstractMethod: androidx.compose.runtime.Composer#disableSourceInformation():
- Added method androidx.compose.runtime.Composer.disableSourceInformation()
-AddedAbstractMethod: androidx.compose.runtime.Composer#endToMarker(int):
- Added method androidx.compose.runtime.Composer.endToMarker(int)
-AddedAbstractMethod: androidx.compose.runtime.Composer#getCurrentMarker():
- Added method androidx.compose.runtime.Composer.getCurrentMarker()
-
-
-RemovedClass: androidx.compose.runtime.BitwiseOperatorsKt:
- Removed class androidx.compose.runtime.BitwiseOperatorsKt
-RemovedClass: androidx.compose.runtime.CompositionContextKt:
- Removed class androidx.compose.runtime.CompositionContextKt
-RemovedClass: androidx.compose.runtime.SlotTableKt:
- Removed class androidx.compose.runtime.SlotTableKt
-RemovedClass: androidx.compose.runtime.TraceKt:
- Removed class androidx.compose.runtime.TraceKt
-RemovedClass: androidx.compose.runtime.internal.JvmDefaultWithCompatibility_jvmKt:
- Removed class androidx.compose.runtime.internal.JvmDefaultWithCompatibility_jvmKt
-RemovedClass: androidx.compose.runtime.internal.ThreadMapKt:
- Removed class androidx.compose.runtime.internal.ThreadMapKt
-RemovedClass: androidx.compose.runtime.snapshots.ListUtilsKt:
- Removed class androidx.compose.runtime.snapshots.ListUtilsKt
-RemovedClass: androidx.compose.runtime.snapshots.SnapshotContextElementKt:
- Removed class androidx.compose.runtime.snapshots.SnapshotContextElementKt
-RemovedClass: androidx.compose.runtime.snapshots.SnapshotDoubleIndexHeapKt:
- Removed class androidx.compose.runtime.snapshots.SnapshotDoubleIndexHeapKt
-RemovedClass: androidx.compose.runtime.snapshots.SnapshotIdSetKt:
- Removed class androidx.compose.runtime.snapshots.SnapshotIdSetKt
-RemovedClass: androidx.compose.runtime.snapshots.SnapshotStateListKt:
- Removed class androidx.compose.runtime.snapshots.SnapshotStateListKt
-RemovedClass: androidx.compose.runtime.snapshots.SnapshotStateMapKt:
- Removed class androidx.compose.runtime.snapshots.SnapshotStateMapKt
-
-
-RemovedMethod: androidx.compose.runtime.collection.MutableVectorKt#mutableVectorOf(T):
- Removed method androidx.compose.runtime.collection.MutableVectorKt.mutableVectorOf(T)
-
-
-RemovedPackage: androidx.compose.runtime.external.kotlinx.collections.immutable:
- Removed package androidx.compose.runtime.external.kotlinx.collections.immutable
-RemovedPackage: androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableList:
- Removed package androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableList
-RemovedPackage: androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableMap:
- Removed package androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableMap
-RemovedPackage: androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableSet:
- Removed package androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableSet
-RemovedPackage: androidx.compose.runtime.external.kotlinx.collections.immutable.internal:
- Removed package androidx.compose.runtime.external.kotlinx.collections.immutable.internal
diff --git a/compose/ui/ui-android-stubs/api/1.4.0-beta02.txt b/compose/ui/ui-android-stubs/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..8e22228
--- /dev/null
+++ b/compose/ui/ui-android-stubs/api/1.4.0-beta02.txt
@@ -0,0 +1,78 @@
+// Signature format: 4.0
+package android.view {
+
+ public final class DisplayListCanvas extends android.graphics.Canvas {
+ ctor public DisplayListCanvas();
+ method public void drawRenderNode(android.view.RenderNode);
+ }
+
+ public class RenderNode {
+ method public static android.view.RenderNode create(String?, android.view.View?);
+ method public void destroy();
+ method public void destroyDisplayListData();
+ method public void discardDisplayList();
+ method public void end(android.view.DisplayListCanvas);
+ method public float getAlpha();
+ method public int getAmbientShadowColor();
+ method public float getCameraDistance();
+ method public boolean getClipToOutline();
+ method public float getElevation();
+ method public void getInverseMatrix(android.graphics.Matrix);
+ method public void getMatrix(android.graphics.Matrix);
+ method public float getPivotX();
+ method public float getPivotY();
+ method public float getRotation();
+ method public float getRotationX();
+ method public float getRotationY();
+ method public float getScaleX();
+ method public float getScaleY();
+ method public int getSpotShadowColor();
+ method public float getTranslationX();
+ method public float getTranslationY();
+ method public float getTranslationZ();
+ method public boolean hasIdentityMatrix();
+ method public boolean hasOverlappingRendering();
+ method public boolean hasShadow();
+ method public boolean isAttached();
+ method public boolean isPivotExplicitlySet();
+ method public boolean isValid();
+ method public boolean offsetLeftAndRight(int);
+ method public boolean offsetTopAndBottom(int);
+ method public void output();
+ method public boolean setAlpha(float);
+ method public boolean setAmbientShadowColor(int);
+ method public boolean setAnimationMatrix(android.graphics.Matrix);
+ method public boolean setBottom(int);
+ method public boolean setCameraDistance(float);
+ method public boolean setClipBounds(android.graphics.Rect?);
+ method public boolean setClipToBounds(boolean);
+ method public boolean setClipToOutline(boolean);
+ method public boolean setElevation(float);
+ method public boolean setHasOverlappingRendering(boolean);
+ method public boolean setLayerPaint(android.graphics.Paint?);
+ method public boolean setLayerType(int);
+ method public boolean setLeft(int);
+ method public boolean setLeftTopRightBottom(int, int, int, int);
+ method public boolean setOutline(android.graphics.Outline?);
+ method public boolean setPivotX(float);
+ method public boolean setPivotY(float);
+ method public boolean setProjectBackwards(boolean);
+ method public boolean setProjectionReceiver(boolean);
+ method public boolean setRevealClip(boolean, float, float, float);
+ method public boolean setRight(int);
+ method public boolean setRotation(float);
+ method public boolean setRotationX(float);
+ method public boolean setRotationY(float);
+ method public boolean setScaleX(float);
+ method public boolean setScaleY(float);
+ method public boolean setSpotShadowColor(int);
+ method public boolean setStaticMatrix(android.graphics.Matrix);
+ method public boolean setTop(int);
+ method public boolean setTranslationX(float);
+ method public boolean setTranslationY(float);
+ method public boolean setTranslationZ(float);
+ method public android.view.DisplayListCanvas start(int, int);
+ }
+
+}
+
diff --git a/compose/ui/ui-android-stubs/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-android-stubs/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..8e22228
--- /dev/null
+++ b/compose/ui/ui-android-stubs/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,78 @@
+// Signature format: 4.0
+package android.view {
+
+ public final class DisplayListCanvas extends android.graphics.Canvas {
+ ctor public DisplayListCanvas();
+ method public void drawRenderNode(android.view.RenderNode);
+ }
+
+ public class RenderNode {
+ method public static android.view.RenderNode create(String?, android.view.View?);
+ method public void destroy();
+ method public void destroyDisplayListData();
+ method public void discardDisplayList();
+ method public void end(android.view.DisplayListCanvas);
+ method public float getAlpha();
+ method public int getAmbientShadowColor();
+ method public float getCameraDistance();
+ method public boolean getClipToOutline();
+ method public float getElevation();
+ method public void getInverseMatrix(android.graphics.Matrix);
+ method public void getMatrix(android.graphics.Matrix);
+ method public float getPivotX();
+ method public float getPivotY();
+ method public float getRotation();
+ method public float getRotationX();
+ method public float getRotationY();
+ method public float getScaleX();
+ method public float getScaleY();
+ method public int getSpotShadowColor();
+ method public float getTranslationX();
+ method public float getTranslationY();
+ method public float getTranslationZ();
+ method public boolean hasIdentityMatrix();
+ method public boolean hasOverlappingRendering();
+ method public boolean hasShadow();
+ method public boolean isAttached();
+ method public boolean isPivotExplicitlySet();
+ method public boolean isValid();
+ method public boolean offsetLeftAndRight(int);
+ method public boolean offsetTopAndBottom(int);
+ method public void output();
+ method public boolean setAlpha(float);
+ method public boolean setAmbientShadowColor(int);
+ method public boolean setAnimationMatrix(android.graphics.Matrix);
+ method public boolean setBottom(int);
+ method public boolean setCameraDistance(float);
+ method public boolean setClipBounds(android.graphics.Rect?);
+ method public boolean setClipToBounds(boolean);
+ method public boolean setClipToOutline(boolean);
+ method public boolean setElevation(float);
+ method public boolean setHasOverlappingRendering(boolean);
+ method public boolean setLayerPaint(android.graphics.Paint?);
+ method public boolean setLayerType(int);
+ method public boolean setLeft(int);
+ method public boolean setLeftTopRightBottom(int, int, int, int);
+ method public boolean setOutline(android.graphics.Outline?);
+ method public boolean setPivotX(float);
+ method public boolean setPivotY(float);
+ method public boolean setProjectBackwards(boolean);
+ method public boolean setProjectionReceiver(boolean);
+ method public boolean setRevealClip(boolean, float, float, float);
+ method public boolean setRight(int);
+ method public boolean setRotation(float);
+ method public boolean setRotationX(float);
+ method public boolean setRotationY(float);
+ method public boolean setScaleX(float);
+ method public boolean setScaleY(float);
+ method public boolean setSpotShadowColor(int);
+ method public boolean setStaticMatrix(android.graphics.Matrix);
+ method public boolean setTop(int);
+ method public boolean setTranslationX(float);
+ method public boolean setTranslationY(float);
+ method public boolean setTranslationZ(float);
+ method public android.view.DisplayListCanvas start(int, int);
+ }
+
+}
+
diff --git a/compose/ui/ui-android-stubs/api/res-1.4.0-beta02.txt b/compose/ui/ui-android-stubs/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-android-stubs/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-android-stubs/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-android-stubs/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..8e22228
--- /dev/null
+++ b/compose/ui/ui-android-stubs/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,78 @@
+// Signature format: 4.0
+package android.view {
+
+ public final class DisplayListCanvas extends android.graphics.Canvas {
+ ctor public DisplayListCanvas();
+ method public void drawRenderNode(android.view.RenderNode);
+ }
+
+ public class RenderNode {
+ method public static android.view.RenderNode create(String?, android.view.View?);
+ method public void destroy();
+ method public void destroyDisplayListData();
+ method public void discardDisplayList();
+ method public void end(android.view.DisplayListCanvas);
+ method public float getAlpha();
+ method public int getAmbientShadowColor();
+ method public float getCameraDistance();
+ method public boolean getClipToOutline();
+ method public float getElevation();
+ method public void getInverseMatrix(android.graphics.Matrix);
+ method public void getMatrix(android.graphics.Matrix);
+ method public float getPivotX();
+ method public float getPivotY();
+ method public float getRotation();
+ method public float getRotationX();
+ method public float getRotationY();
+ method public float getScaleX();
+ method public float getScaleY();
+ method public int getSpotShadowColor();
+ method public float getTranslationX();
+ method public float getTranslationY();
+ method public float getTranslationZ();
+ method public boolean hasIdentityMatrix();
+ method public boolean hasOverlappingRendering();
+ method public boolean hasShadow();
+ method public boolean isAttached();
+ method public boolean isPivotExplicitlySet();
+ method public boolean isValid();
+ method public boolean offsetLeftAndRight(int);
+ method public boolean offsetTopAndBottom(int);
+ method public void output();
+ method public boolean setAlpha(float);
+ method public boolean setAmbientShadowColor(int);
+ method public boolean setAnimationMatrix(android.graphics.Matrix);
+ method public boolean setBottom(int);
+ method public boolean setCameraDistance(float);
+ method public boolean setClipBounds(android.graphics.Rect?);
+ method public boolean setClipToBounds(boolean);
+ method public boolean setClipToOutline(boolean);
+ method public boolean setElevation(float);
+ method public boolean setHasOverlappingRendering(boolean);
+ method public boolean setLayerPaint(android.graphics.Paint?);
+ method public boolean setLayerType(int);
+ method public boolean setLeft(int);
+ method public boolean setLeftTopRightBottom(int, int, int, int);
+ method public boolean setOutline(android.graphics.Outline?);
+ method public boolean setPivotX(float);
+ method public boolean setPivotY(float);
+ method public boolean setProjectBackwards(boolean);
+ method public boolean setProjectionReceiver(boolean);
+ method public boolean setRevealClip(boolean, float, float, float);
+ method public boolean setRight(int);
+ method public boolean setRotation(float);
+ method public boolean setRotationX(float);
+ method public boolean setRotationY(float);
+ method public boolean setScaleX(float);
+ method public boolean setScaleY(float);
+ method public boolean setSpotShadowColor(int);
+ method public boolean setStaticMatrix(android.graphics.Matrix);
+ method public boolean setTop(int);
+ method public boolean setTranslationX(float);
+ method public boolean setTranslationY(float);
+ method public boolean setTranslationZ(float);
+ method public android.view.DisplayListCanvas start(int, int);
+ }
+
+}
+
diff --git a/compose/ui/ui-geometry/api/1.4.0-beta02.txt b/compose/ui/ui-geometry/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..50b3067
--- /dev/null
+++ b/compose/ui/ui-geometry/api/1.4.0-beta02.txt
@@ -0,0 +1,272 @@
+// Signature format: 4.0
+package androidx.compose.ui.geometry {
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class CornerRadius {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float x, optional float y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public operator long minus(long other);
+ method @androidx.compose.runtime.Stable public operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.geometry.CornerRadius.Companion Companion;
+ }
+
+ public static final class CornerRadius.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class CornerRadiusKt {
+ method @androidx.compose.runtime.Stable public static long CornerRadius(float x, optional float y);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ }
+
+ public final class MutableRect {
+ ctor public MutableRect(float left, float top, float right, float bottom);
+ method public operator boolean contains(long offset);
+ method public float getBottom();
+ method public inline float getHeight();
+ method public float getLeft();
+ method public float getRight();
+ method public long getSize();
+ method public float getTop();
+ method public inline float getWidth();
+ method @androidx.compose.runtime.Stable public void intersect(float left, float top, float right, float bottom);
+ method public boolean isEmpty();
+ method public void set(float left, float top, float right, float bottom);
+ method public void setBottom(float);
+ method public void setLeft(float);
+ method public void setRight(float);
+ method public void setTop(float);
+ property public final float bottom;
+ property public final inline float height;
+ property public final boolean isEmpty;
+ property public final float left;
+ property public final float right;
+ property public final long size;
+ property public final float top;
+ property public final inline float width;
+ }
+
+ public final class MutableRectKt {
+ method public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.geometry.MutableRect);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Offset {
+ method @androidx.compose.runtime.Stable public operator float component1();
+ method @androidx.compose.runtime.Stable public operator float component2();
+ method public long copy(optional float x, optional float y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method @androidx.compose.runtime.Stable public float getDistance();
+ method @androidx.compose.runtime.Stable public float getDistanceSquared();
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public boolean isValid();
+ method @androidx.compose.runtime.Stable public operator long minus(long other);
+ method @androidx.compose.runtime.Stable public operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long rem(float operand);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
+ }
+
+ public static final class Offset.Companion {
+ method public long getInfinite();
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Infinite;
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ public final class OffsetKt {
+ method @androidx.compose.runtime.Stable public static long Offset(float x, float y);
+ method public static boolean isFinite(long);
+ method public static boolean isSpecified(long);
+ method public static boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.geometry.Offset> block);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Rect {
+ ctor public Rect(@androidx.compose.runtime.Stable float left, @androidx.compose.runtime.Stable float top, @androidx.compose.runtime.Stable float right, @androidx.compose.runtime.Stable float bottom);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public operator boolean contains(long offset);
+ method public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+ method public float getBottom();
+ method public long getBottomCenter();
+ method public long getBottomLeft();
+ method public long getBottomRight();
+ method public long getCenter();
+ method public long getCenterLeft();
+ method public long getCenterRight();
+ method public float getHeight();
+ method public float getLeft();
+ method public float getMaxDimension();
+ method public float getMinDimension();
+ method public float getRight();
+ method public long getSize();
+ method public float getTop();
+ method public long getTopCenter();
+ method public long getTopLeft();
+ method public long getTopRight();
+ method public float getWidth();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
+ method public boolean isEmpty();
+ method public boolean isFinite();
+ method public boolean isInfinite();
+ method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(long offset);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+ property public final float bottom;
+ property public final long bottomCenter;
+ property public final long bottomLeft;
+ property public final long bottomRight;
+ property public final long center;
+ property public final long centerLeft;
+ property public final long centerRight;
+ property @androidx.compose.runtime.Stable public final float height;
+ property @androidx.compose.runtime.Stable public final boolean isEmpty;
+ property @androidx.compose.runtime.Stable public final boolean isFinite;
+ property @androidx.compose.runtime.Stable public final boolean isInfinite;
+ property public final float left;
+ property public final float maxDimension;
+ property public final float minDimension;
+ property public final float right;
+ property @androidx.compose.runtime.Stable public final long size;
+ property public final float top;
+ property public final long topCenter;
+ property public final long topLeft;
+ property public final long topRight;
+ property @androidx.compose.runtime.Stable public final float width;
+ field public static final androidx.compose.ui.geometry.Rect.Companion Companion;
+ }
+
+ public static final class Rect.Companion {
+ method public androidx.compose.ui.geometry.Rect getZero();
+ property public final androidx.compose.ui.geometry.Rect Zero;
+ }
+
+ public final class RectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long offset, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long topLeft, long bottomRight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long center, float radius);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class RoundRect {
+ ctor public RoundRect(float left, float top, float right, float bottom, optional long topLeftCornerRadius, optional long topRightCornerRadius, optional long bottomRightCornerRadius, optional long bottomLeftCornerRadius);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public long component5-kKHJgLs();
+ method public long component6-kKHJgLs();
+ method public long component7-kKHJgLs();
+ method public long component8-kKHJgLs();
+ method public operator boolean contains(long point);
+ method public androidx.compose.ui.geometry.RoundRect copy-MDFrsts(float left, float top, float right, float bottom, long topLeftCornerRadius, long topRightCornerRadius, long bottomRightCornerRadius, long bottomLeftCornerRadius);
+ method public float getBottom();
+ method public long getBottomLeftCornerRadius();
+ method public long getBottomRightCornerRadius();
+ method public float getHeight();
+ method public float getLeft();
+ method public float getRight();
+ method public float getTop();
+ method public long getTopLeftCornerRadius();
+ method public long getTopRightCornerRadius();
+ method public float getWidth();
+ method public static androidx.compose.ui.geometry.RoundRect getZero();
+ property public static final androidx.compose.ui.geometry.RoundRect Zero;
+ property public final float bottom;
+ property public final long bottomLeftCornerRadius;
+ property public final long bottomRightCornerRadius;
+ property public final float height;
+ property public final float left;
+ property public final float right;
+ property public final float top;
+ property public final long topLeftCornerRadius;
+ property public final long topRightCornerRadius;
+ property public final float width;
+ field public static final androidx.compose.ui.geometry.RoundRect.Companion Companion;
+ }
+
+ public static final class RoundRect.Companion {
+ method public androidx.compose.ui.geometry.RoundRect getZero();
+ property public final androidx.compose.ui.geometry.RoundRect Zero;
+ }
+
+ public final class RoundRectKt {
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, long cornerRadius);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, long cornerRadius);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, optional long topLeft, optional long topRight, optional long bottomRight, optional long bottomLeft);
+ method public static androidx.compose.ui.geometry.Rect getBoundingRect(androidx.compose.ui.geometry.RoundRect);
+ method public static long getCenter(androidx.compose.ui.geometry.RoundRect);
+ method public static float getMaxDimension(androidx.compose.ui.geometry.RoundRect);
+ method public static float getMinDimension(androidx.compose.ui.geometry.RoundRect);
+ method public static androidx.compose.ui.geometry.Rect getSafeInnerRect(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isCircle(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isEllipse(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isEmpty(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isFinite(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isRect(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isSimple(androidx.compose.ui.geometry.RoundRect);
+ method public static androidx.compose.ui.geometry.RoundRect lerp(androidx.compose.ui.geometry.RoundRect start, androidx.compose.ui.geometry.RoundRect stop, float fraction);
+ method public static androidx.compose.ui.geometry.RoundRect translate(androidx.compose.ui.geometry.RoundRect, long offset);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Size {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float width, optional float height);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getHeight();
+ method public float getMaxDimension();
+ method public float getMinDimension();
+ method public float getWidth();
+ method @androidx.compose.runtime.Stable public boolean isEmpty();
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ property @androidx.compose.runtime.Stable public final float height;
+ property @androidx.compose.runtime.Stable public final float maxDimension;
+ property @androidx.compose.runtime.Stable public final float minDimension;
+ property @androidx.compose.runtime.Stable public final float width;
+ field public static final androidx.compose.ui.geometry.Size.Companion Companion;
+ }
+
+ public static final class Size.Companion {
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ public final class SizeKt {
+ method @androidx.compose.runtime.Stable public static long Size(float width, float height);
+ method public static long getCenter(long);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.geometry.Size> block);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(double, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(long);
+ }
+
+}
+
diff --git a/compose/ui/ui-geometry/api/current.ignore b/compose/ui/ui-geometry/api/current.ignore
deleted file mode 100644
index c27b9c61..0000000
--- a/compose/ui/ui-geometry/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.geometry.GeometryUtilsKt:
- Removed class androidx.compose.ui.geometry.GeometryUtilsKt
diff --git a/compose/ui/ui-geometry/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-geometry/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..50b3067
--- /dev/null
+++ b/compose/ui/ui-geometry/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,272 @@
+// Signature format: 4.0
+package androidx.compose.ui.geometry {
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class CornerRadius {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float x, optional float y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public operator long minus(long other);
+ method @androidx.compose.runtime.Stable public operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.geometry.CornerRadius.Companion Companion;
+ }
+
+ public static final class CornerRadius.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class CornerRadiusKt {
+ method @androidx.compose.runtime.Stable public static long CornerRadius(float x, optional float y);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ }
+
+ public final class MutableRect {
+ ctor public MutableRect(float left, float top, float right, float bottom);
+ method public operator boolean contains(long offset);
+ method public float getBottom();
+ method public inline float getHeight();
+ method public float getLeft();
+ method public float getRight();
+ method public long getSize();
+ method public float getTop();
+ method public inline float getWidth();
+ method @androidx.compose.runtime.Stable public void intersect(float left, float top, float right, float bottom);
+ method public boolean isEmpty();
+ method public void set(float left, float top, float right, float bottom);
+ method public void setBottom(float);
+ method public void setLeft(float);
+ method public void setRight(float);
+ method public void setTop(float);
+ property public final float bottom;
+ property public final inline float height;
+ property public final boolean isEmpty;
+ property public final float left;
+ property public final float right;
+ property public final long size;
+ property public final float top;
+ property public final inline float width;
+ }
+
+ public final class MutableRectKt {
+ method public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.geometry.MutableRect);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Offset {
+ method @androidx.compose.runtime.Stable public operator float component1();
+ method @androidx.compose.runtime.Stable public operator float component2();
+ method public long copy(optional float x, optional float y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method @androidx.compose.runtime.Stable public float getDistance();
+ method @androidx.compose.runtime.Stable public float getDistanceSquared();
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public boolean isValid();
+ method @androidx.compose.runtime.Stable public operator long minus(long other);
+ method @androidx.compose.runtime.Stable public operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long rem(float operand);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
+ }
+
+ public static final class Offset.Companion {
+ method public long getInfinite();
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Infinite;
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ public final class OffsetKt {
+ method @androidx.compose.runtime.Stable public static long Offset(float x, float y);
+ method public static boolean isFinite(long);
+ method public static boolean isSpecified(long);
+ method public static boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.geometry.Offset> block);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Rect {
+ ctor public Rect(@androidx.compose.runtime.Stable float left, @androidx.compose.runtime.Stable float top, @androidx.compose.runtime.Stable float right, @androidx.compose.runtime.Stable float bottom);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public operator boolean contains(long offset);
+ method public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+ method public float getBottom();
+ method public long getBottomCenter();
+ method public long getBottomLeft();
+ method public long getBottomRight();
+ method public long getCenter();
+ method public long getCenterLeft();
+ method public long getCenterRight();
+ method public float getHeight();
+ method public float getLeft();
+ method public float getMaxDimension();
+ method public float getMinDimension();
+ method public float getRight();
+ method public long getSize();
+ method public float getTop();
+ method public long getTopCenter();
+ method public long getTopLeft();
+ method public long getTopRight();
+ method public float getWidth();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
+ method public boolean isEmpty();
+ method public boolean isFinite();
+ method public boolean isInfinite();
+ method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(long offset);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+ property public final float bottom;
+ property public final long bottomCenter;
+ property public final long bottomLeft;
+ property public final long bottomRight;
+ property public final long center;
+ property public final long centerLeft;
+ property public final long centerRight;
+ property @androidx.compose.runtime.Stable public final float height;
+ property @androidx.compose.runtime.Stable public final boolean isEmpty;
+ property @androidx.compose.runtime.Stable public final boolean isFinite;
+ property @androidx.compose.runtime.Stable public final boolean isInfinite;
+ property public final float left;
+ property public final float maxDimension;
+ property public final float minDimension;
+ property public final float right;
+ property @androidx.compose.runtime.Stable public final long size;
+ property public final float top;
+ property public final long topCenter;
+ property public final long topLeft;
+ property public final long topRight;
+ property @androidx.compose.runtime.Stable public final float width;
+ field public static final androidx.compose.ui.geometry.Rect.Companion Companion;
+ }
+
+ public static final class Rect.Companion {
+ method public androidx.compose.ui.geometry.Rect getZero();
+ property public final androidx.compose.ui.geometry.Rect Zero;
+ }
+
+ public final class RectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long offset, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long topLeft, long bottomRight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long center, float radius);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class RoundRect {
+ ctor public RoundRect(float left, float top, float right, float bottom, optional long topLeftCornerRadius, optional long topRightCornerRadius, optional long bottomRightCornerRadius, optional long bottomLeftCornerRadius);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public long component5-kKHJgLs();
+ method public long component6-kKHJgLs();
+ method public long component7-kKHJgLs();
+ method public long component8-kKHJgLs();
+ method public operator boolean contains(long point);
+ method public androidx.compose.ui.geometry.RoundRect copy-MDFrsts(float left, float top, float right, float bottom, long topLeftCornerRadius, long topRightCornerRadius, long bottomRightCornerRadius, long bottomLeftCornerRadius);
+ method public float getBottom();
+ method public long getBottomLeftCornerRadius();
+ method public long getBottomRightCornerRadius();
+ method public float getHeight();
+ method public float getLeft();
+ method public float getRight();
+ method public float getTop();
+ method public long getTopLeftCornerRadius();
+ method public long getTopRightCornerRadius();
+ method public float getWidth();
+ method public static androidx.compose.ui.geometry.RoundRect getZero();
+ property public static final androidx.compose.ui.geometry.RoundRect Zero;
+ property public final float bottom;
+ property public final long bottomLeftCornerRadius;
+ property public final long bottomRightCornerRadius;
+ property public final float height;
+ property public final float left;
+ property public final float right;
+ property public final float top;
+ property public final long topLeftCornerRadius;
+ property public final long topRightCornerRadius;
+ property public final float width;
+ field public static final androidx.compose.ui.geometry.RoundRect.Companion Companion;
+ }
+
+ public static final class RoundRect.Companion {
+ method public androidx.compose.ui.geometry.RoundRect getZero();
+ property public final androidx.compose.ui.geometry.RoundRect Zero;
+ }
+
+ public final class RoundRectKt {
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, long cornerRadius);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, long cornerRadius);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, optional long topLeft, optional long topRight, optional long bottomRight, optional long bottomLeft);
+ method public static androidx.compose.ui.geometry.Rect getBoundingRect(androidx.compose.ui.geometry.RoundRect);
+ method public static long getCenter(androidx.compose.ui.geometry.RoundRect);
+ method public static float getMaxDimension(androidx.compose.ui.geometry.RoundRect);
+ method public static float getMinDimension(androidx.compose.ui.geometry.RoundRect);
+ method public static androidx.compose.ui.geometry.Rect getSafeInnerRect(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isCircle(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isEllipse(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isEmpty(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isFinite(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isRect(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isSimple(androidx.compose.ui.geometry.RoundRect);
+ method public static androidx.compose.ui.geometry.RoundRect lerp(androidx.compose.ui.geometry.RoundRect start, androidx.compose.ui.geometry.RoundRect stop, float fraction);
+ method public static androidx.compose.ui.geometry.RoundRect translate(androidx.compose.ui.geometry.RoundRect, long offset);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Size {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float width, optional float height);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getHeight();
+ method public float getMaxDimension();
+ method public float getMinDimension();
+ method public float getWidth();
+ method @androidx.compose.runtime.Stable public boolean isEmpty();
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ property @androidx.compose.runtime.Stable public final float height;
+ property @androidx.compose.runtime.Stable public final float maxDimension;
+ property @androidx.compose.runtime.Stable public final float minDimension;
+ property @androidx.compose.runtime.Stable public final float width;
+ field public static final androidx.compose.ui.geometry.Size.Companion Companion;
+ }
+
+ public static final class Size.Companion {
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ public final class SizeKt {
+ method @androidx.compose.runtime.Stable public static long Size(float width, float height);
+ method public static long getCenter(long);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.geometry.Size> block);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(double, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(long);
+ }
+
+}
+
diff --git a/compose/ui/ui-geometry/api/res-1.4.0-beta02.txt b/compose/ui/ui-geometry/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-geometry/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-geometry/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-geometry/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..50b3067
--- /dev/null
+++ b/compose/ui/ui-geometry/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,272 @@
+// Signature format: 4.0
+package androidx.compose.ui.geometry {
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class CornerRadius {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float x, optional float y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public operator long minus(long other);
+ method @androidx.compose.runtime.Stable public operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.geometry.CornerRadius.Companion Companion;
+ }
+
+ public static final class CornerRadius.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class CornerRadiusKt {
+ method @androidx.compose.runtime.Stable public static long CornerRadius(float x, optional float y);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ }
+
+ public final class MutableRect {
+ ctor public MutableRect(float left, float top, float right, float bottom);
+ method public operator boolean contains(long offset);
+ method public float getBottom();
+ method public inline float getHeight();
+ method public float getLeft();
+ method public float getRight();
+ method public long getSize();
+ method public float getTop();
+ method public inline float getWidth();
+ method @androidx.compose.runtime.Stable public void intersect(float left, float top, float right, float bottom);
+ method public boolean isEmpty();
+ method public void set(float left, float top, float right, float bottom);
+ method public void setBottom(float);
+ method public void setLeft(float);
+ method public void setRight(float);
+ method public void setTop(float);
+ property public final float bottom;
+ property public final inline float height;
+ property public final boolean isEmpty;
+ property public final float left;
+ property public final float right;
+ property public final long size;
+ property public final float top;
+ property public final inline float width;
+ }
+
+ public final class MutableRectKt {
+ method public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.geometry.MutableRect);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Offset {
+ method @androidx.compose.runtime.Stable public operator float component1();
+ method @androidx.compose.runtime.Stable public operator float component2();
+ method public long copy(optional float x, optional float y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method @androidx.compose.runtime.Stable public float getDistance();
+ method @androidx.compose.runtime.Stable public float getDistanceSquared();
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public boolean isValid();
+ method @androidx.compose.runtime.Stable public operator long minus(long other);
+ method @androidx.compose.runtime.Stable public operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long rem(float operand);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
+ }
+
+ public static final class Offset.Companion {
+ method public long getInfinite();
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Infinite;
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ public final class OffsetKt {
+ method @androidx.compose.runtime.Stable public static long Offset(float x, float y);
+ method public static boolean isFinite(long);
+ method public static boolean isSpecified(long);
+ method public static boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.geometry.Offset> block);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Rect {
+ ctor public Rect(@androidx.compose.runtime.Stable float left, @androidx.compose.runtime.Stable float top, @androidx.compose.runtime.Stable float right, @androidx.compose.runtime.Stable float bottom);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public operator boolean contains(long offset);
+ method public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+ method public float getBottom();
+ method public long getBottomCenter();
+ method public long getBottomLeft();
+ method public long getBottomRight();
+ method public long getCenter();
+ method public long getCenterLeft();
+ method public long getCenterRight();
+ method public float getHeight();
+ method public float getLeft();
+ method public float getMaxDimension();
+ method public float getMinDimension();
+ method public float getRight();
+ method public long getSize();
+ method public float getTop();
+ method public long getTopCenter();
+ method public long getTopLeft();
+ method public long getTopRight();
+ method public float getWidth();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
+ method public boolean isEmpty();
+ method public boolean isFinite();
+ method public boolean isInfinite();
+ method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(long offset);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+ property public final float bottom;
+ property public final long bottomCenter;
+ property public final long bottomLeft;
+ property public final long bottomRight;
+ property public final long center;
+ property public final long centerLeft;
+ property public final long centerRight;
+ property @androidx.compose.runtime.Stable public final float height;
+ property @androidx.compose.runtime.Stable public final boolean isEmpty;
+ property @androidx.compose.runtime.Stable public final boolean isFinite;
+ property @androidx.compose.runtime.Stable public final boolean isInfinite;
+ property public final float left;
+ property public final float maxDimension;
+ property public final float minDimension;
+ property public final float right;
+ property @androidx.compose.runtime.Stable public final long size;
+ property public final float top;
+ property public final long topCenter;
+ property public final long topLeft;
+ property public final long topRight;
+ property @androidx.compose.runtime.Stable public final float width;
+ field public static final androidx.compose.ui.geometry.Rect.Companion Companion;
+ }
+
+ public static final class Rect.Companion {
+ method public androidx.compose.ui.geometry.Rect getZero();
+ property public final androidx.compose.ui.geometry.Rect Zero;
+ }
+
+ public final class RectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long offset, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long topLeft, long bottomRight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long center, float radius);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class RoundRect {
+ ctor public RoundRect(float left, float top, float right, float bottom, optional long topLeftCornerRadius, optional long topRightCornerRadius, optional long bottomRightCornerRadius, optional long bottomLeftCornerRadius);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public long component5-kKHJgLs();
+ method public long component6-kKHJgLs();
+ method public long component7-kKHJgLs();
+ method public long component8-kKHJgLs();
+ method public operator boolean contains(long point);
+ method public androidx.compose.ui.geometry.RoundRect copy-MDFrsts(float left, float top, float right, float bottom, long topLeftCornerRadius, long topRightCornerRadius, long bottomRightCornerRadius, long bottomLeftCornerRadius);
+ method public float getBottom();
+ method public long getBottomLeftCornerRadius();
+ method public long getBottomRightCornerRadius();
+ method public float getHeight();
+ method public float getLeft();
+ method public float getRight();
+ method public float getTop();
+ method public long getTopLeftCornerRadius();
+ method public long getTopRightCornerRadius();
+ method public float getWidth();
+ method public static androidx.compose.ui.geometry.RoundRect getZero();
+ property public static final androidx.compose.ui.geometry.RoundRect Zero;
+ property public final float bottom;
+ property public final long bottomLeftCornerRadius;
+ property public final long bottomRightCornerRadius;
+ property public final float height;
+ property public final float left;
+ property public final float right;
+ property public final float top;
+ property public final long topLeftCornerRadius;
+ property public final long topRightCornerRadius;
+ property public final float width;
+ field public static final androidx.compose.ui.geometry.RoundRect.Companion Companion;
+ }
+
+ public static final class RoundRect.Companion {
+ method public androidx.compose.ui.geometry.RoundRect getZero();
+ property public final androidx.compose.ui.geometry.RoundRect Zero;
+ }
+
+ public final class RoundRectKt {
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, long cornerRadius);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, long cornerRadius);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, optional long topLeft, optional long topRight, optional long bottomRight, optional long bottomLeft);
+ method public static androidx.compose.ui.geometry.Rect getBoundingRect(androidx.compose.ui.geometry.RoundRect);
+ method public static long getCenter(androidx.compose.ui.geometry.RoundRect);
+ method public static float getMaxDimension(androidx.compose.ui.geometry.RoundRect);
+ method public static float getMinDimension(androidx.compose.ui.geometry.RoundRect);
+ method public static androidx.compose.ui.geometry.Rect getSafeInnerRect(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isCircle(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isEllipse(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isEmpty(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isFinite(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isRect(androidx.compose.ui.geometry.RoundRect);
+ method public static boolean isSimple(androidx.compose.ui.geometry.RoundRect);
+ method public static androidx.compose.ui.geometry.RoundRect lerp(androidx.compose.ui.geometry.RoundRect start, androidx.compose.ui.geometry.RoundRect stop, float fraction);
+ method public static androidx.compose.ui.geometry.RoundRect translate(androidx.compose.ui.geometry.RoundRect, long offset);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Size {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float width, optional float height);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getHeight();
+ method public float getMaxDimension();
+ method public float getMinDimension();
+ method public float getWidth();
+ method @androidx.compose.runtime.Stable public boolean isEmpty();
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ property @androidx.compose.runtime.Stable public final float height;
+ property @androidx.compose.runtime.Stable public final float maxDimension;
+ property @androidx.compose.runtime.Stable public final float minDimension;
+ property @androidx.compose.runtime.Stable public final float width;
+ field public static final androidx.compose.ui.geometry.Size.Companion Companion;
+ }
+
+ public static final class Size.Companion {
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ public final class SizeKt {
+ method @androidx.compose.runtime.Stable public static long Size(float width, float height);
+ method public static long getCenter(long);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.geometry.Size> block);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(double, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(long);
+ }
+
+}
+
diff --git a/compose/ui/ui-geometry/api/restricted_current.ignore b/compose/ui/ui-geometry/api/restricted_current.ignore
deleted file mode 100644
index c27b9c61..0000000
--- a/compose/ui/ui-geometry/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.geometry.GeometryUtilsKt:
- Removed class androidx.compose.ui.geometry.GeometryUtilsKt
diff --git a/compose/ui/ui-graphics/api/1.4.0-beta02.txt b/compose/ui/ui-graphics/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..d818cd8
--- /dev/null
+++ b/compose/ui/ui-graphics/api/1.4.0-beta02.txt
@@ -0,0 +1,1614 @@
+// Signature format: 4.0
+package androidx.compose.ui.graphics {
+
+ public final class AndroidBlendMode_androidKt {
+ method public static boolean isSupported(int);
+ }
+
+ public final class AndroidCanvas_androidKt {
+ method public static androidx.compose.ui.graphics.Canvas Canvas(android.graphics.Canvas c);
+ method public static android.graphics.Canvas getNativeCanvas(androidx.compose.ui.graphics.Canvas);
+ }
+
+ public final class AndroidColorFilter_androidKt {
+ method public static android.graphics.ColorFilter asAndroidColorFilter(androidx.compose.ui.graphics.ColorFilter);
+ method public static androidx.compose.ui.graphics.ColorFilter asComposeColorFilter(android.graphics.ColorFilter);
+ }
+
+ public final class AndroidImageBitmap_androidKt {
+ method public static android.graphics.Bitmap asAndroidBitmap(androidx.compose.ui.graphics.ImageBitmap);
+ method public static androidx.compose.ui.graphics.ImageBitmap asImageBitmap(android.graphics.Bitmap);
+ }
+
+ public final class AndroidMatrixConversions_androidKt {
+ method public static void setFrom(float[], android.graphics.Matrix matrix);
+ method public static void setFrom(android.graphics.Matrix, float[] matrix);
+ }
+
+ public final class AndroidPaint implements androidx.compose.ui.graphics.Paint {
+ ctor public AndroidPaint(android.graphics.Paint internalPaint);
+ ctor public AndroidPaint();
+ method public android.graphics.Paint asFrameworkPaint();
+ method public float getAlpha();
+ method public int getBlendMode();
+ method public long getColor();
+ method public androidx.compose.ui.graphics.ColorFilter? getColorFilter();
+ method public int getFilterQuality();
+ method public androidx.compose.ui.graphics.PathEffect? getPathEffect();
+ method public android.graphics.Shader? getShader();
+ method public int getStrokeCap();
+ method public int getStrokeJoin();
+ method public float getStrokeMiterLimit();
+ method public float getStrokeWidth();
+ method public int getStyle();
+ method public boolean isAntiAlias();
+ method public void setAlpha(float);
+ method public void setAntiAlias(boolean);
+ method public void setBlendMode(int);
+ method public void setColor(long);
+ method public void setColorFilter(androidx.compose.ui.graphics.ColorFilter?);
+ method public void setFilterQuality(int);
+ method public void setPathEffect(androidx.compose.ui.graphics.PathEffect?);
+ method public void setShader(android.graphics.Shader?);
+ method public void setStrokeCap(int);
+ method public void setStrokeJoin(int);
+ method public void setStrokeMiterLimit(float);
+ method public void setStrokeWidth(float);
+ method public void setStyle(int);
+ property public float alpha;
+ property public int blendMode;
+ property public long color;
+ property public androidx.compose.ui.graphics.ColorFilter? colorFilter;
+ property public int filterQuality;
+ property public boolean isAntiAlias;
+ property public androidx.compose.ui.graphics.PathEffect? pathEffect;
+ property public android.graphics.Shader? shader;
+ property public int strokeCap;
+ property public int strokeJoin;
+ property public float strokeMiterLimit;
+ property public float strokeWidth;
+ property public int style;
+ }
+
+ public final class AndroidPaint_androidKt {
+ method public static androidx.compose.ui.graphics.Paint Paint();
+ method public static androidx.compose.ui.graphics.Paint toComposePaint(android.graphics.Paint);
+ }
+
+ public final class AndroidPath implements androidx.compose.ui.graphics.Path {
+ ctor public AndroidPath(optional android.graphics.Path internalPath);
+ method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+ method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+ method public void addOval(androidx.compose.ui.geometry.Rect oval);
+ method public void addPath(androidx.compose.ui.graphics.Path path, long offset);
+ method public void addRect(androidx.compose.ui.geometry.Rect rect);
+ method public void addRoundRect(androidx.compose.ui.geometry.RoundRect roundRect);
+ method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+ method public void close();
+ method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public int getFillType();
+ method public android.graphics.Path getInternalPath();
+ method public boolean isConvex();
+ method public boolean isEmpty();
+ method public void lineTo(float x, float y);
+ method public void moveTo(float x, float y);
+ method public boolean op(androidx.compose.ui.graphics.Path path1, androidx.compose.ui.graphics.Path path2, int operation);
+ method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+ method public void relativeCubicTo(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public void relativeLineTo(float dx, float dy);
+ method public void relativeMoveTo(float dx, float dy);
+ method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
+ method public void reset();
+ method public void setFillType(int);
+ method public void translate(long offset);
+ property public int fillType;
+ property public final android.graphics.Path internalPath;
+ property public boolean isConvex;
+ property public boolean isEmpty;
+ }
+
+ public final class AndroidPathEffect_androidKt {
+ method public static android.graphics.PathEffect asAndroidPathEffect(androidx.compose.ui.graphics.PathEffect);
+ method public static androidx.compose.ui.graphics.PathEffect toComposePathEffect(android.graphics.PathEffect);
+ }
+
+ public final class AndroidPathMeasure implements androidx.compose.ui.graphics.PathMeasure {
+ method public float getLength();
+ method public long getPosition(float distance);
+ method public boolean getSegment(float startDistance, float stopDistance, androidx.compose.ui.graphics.Path destination, boolean startWithMoveTo);
+ method public long getTangent(float distance);
+ method public void setPath(androidx.compose.ui.graphics.Path? path, boolean forceClosed);
+ property public float length;
+ }
+
+ public final class AndroidPathMeasure_androidKt {
+ method public static androidx.compose.ui.graphics.PathMeasure PathMeasure();
+ }
+
+ public final class AndroidPath_androidKt {
+ method public static androidx.compose.ui.graphics.Path Path();
+ method public static inline android.graphics.Path asAndroidPath(androidx.compose.ui.graphics.Path);
+ method public static androidx.compose.ui.graphics.Path asComposePath(android.graphics.Path);
+ }
+
+ public final class AndroidRenderEffect_androidKt {
+ method public static androidx.compose.ui.graphics.RenderEffect asComposeRenderEffect(android.graphics.RenderEffect);
+ }
+
+ public final class AndroidTileMode_androidKt {
+ method public static boolean isSupported(int);
+ method public static android.graphics.Shader.TileMode toAndroidTileMode(int);
+ method public static int toComposeTileMode(android.graphics.Shader.TileMode);
+ }
+
+ public final class AndroidVertexMode_androidKt {
+ method public static android.graphics.Canvas.VertexMode toAndroidVertexMode(int);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BlendMode {
+ field public static final androidx.compose.ui.graphics.BlendMode.Companion Companion;
+ }
+
+ public static final class BlendMode.Companion {
+ method public int getClear();
+ method public int getColor();
+ method public int getColorBurn();
+ method public int getColorDodge();
+ method public int getDarken();
+ method public int getDifference();
+ method public int getDst();
+ method public int getDstAtop();
+ method public int getDstIn();
+ method public int getDstOut();
+ method public int getDstOver();
+ method public int getExclusion();
+ method public int getHardlight();
+ method public int getHue();
+ method public int getLighten();
+ method public int getLuminosity();
+ method public int getModulate();
+ method public int getMultiply();
+ method public int getOverlay();
+ method public int getPlus();
+ method public int getSaturation();
+ method public int getScreen();
+ method public int getSoftlight();
+ method public int getSrc();
+ method public int getSrcAtop();
+ method public int getSrcIn();
+ method public int getSrcOut();
+ method public int getSrcOver();
+ method public int getXor();
+ property public final int Clear;
+ property public final int Color;
+ property public final int ColorBurn;
+ property public final int ColorDodge;
+ property public final int Darken;
+ property public final int Difference;
+ property public final int Dst;
+ property public final int DstAtop;
+ property public final int DstIn;
+ property public final int DstOut;
+ property public final int DstOver;
+ property public final int Exclusion;
+ property public final int Hardlight;
+ property public final int Hue;
+ property public final int Lighten;
+ property public final int Luminosity;
+ property public final int Modulate;
+ property public final int Multiply;
+ property public final int Overlay;
+ property public final int Plus;
+ property public final int Saturation;
+ property public final int Screen;
+ property public final int Softlight;
+ property public final int Src;
+ property public final int SrcAtop;
+ property public final int SrcIn;
+ property public final int SrcOut;
+ property public final int SrcOver;
+ property public final int Xor;
+ }
+
+ @androidx.compose.runtime.Immutable public final class BlurEffect extends androidx.compose.ui.graphics.RenderEffect {
+ ctor public BlurEffect(androidx.compose.ui.graphics.RenderEffect? renderEffect, float radiusX, float radiusY, int edgeTreatment);
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) protected android.graphics.RenderEffect createRenderEffect();
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class Brush {
+ method public abstract void applyTo(long size, androidx.compose.ui.graphics.Paint p, float alpha);
+ method public long getIntrinsicSize();
+ property public long intrinsicSize;
+ field public static final androidx.compose.ui.graphics.Brush.Companion Companion;
+ }
+
+ public static final class Brush.Companion {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startX, optional float endX, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startX, optional float endX, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long start, optional long end, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long start, optional long end, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center, optional float radius, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center, optional float radius, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startY, optional float endY, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startY, optional float endY, optional int tileMode);
+ }
+
+ public final class BrushKt {
+ method public static androidx.compose.ui.graphics.ShaderBrush ShaderBrush(android.graphics.Shader shader);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Canvas {
+ method public void clipPath(androidx.compose.ui.graphics.Path path, optional int clipOp);
+ method public default void clipRect(androidx.compose.ui.geometry.Rect rect, optional int clipOp);
+ method public void clipRect(float left, float top, float right, float bottom, optional int clipOp);
+ method public void concat(float[] matrix);
+ method public void disableZ();
+ method public default void drawArc(androidx.compose.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
+ method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
+ method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
+ method public void drawCircle(long center, float radius, androidx.compose.ui.graphics.Paint paint);
+ method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, long topLeftOffset, androidx.compose.ui.graphics.Paint paint);
+ method public void drawImageRect(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, androidx.compose.ui.graphics.Paint paint);
+ method public void drawLine(long p1, long p2, androidx.compose.ui.graphics.Paint paint);
+ method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
+ method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Paint paint);
+ method public void drawPoints(int pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRawPoints(int pointMode, float[] points, androidx.compose.ui.graphics.Paint paint);
+ method public default void drawRect(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRect(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.compose.ui.graphics.Paint paint);
+ method public void drawVertices(androidx.compose.ui.graphics.Vertices vertices, int blendMode, androidx.compose.ui.graphics.Paint paint);
+ method public void enableZ();
+ method public void restore();
+ method public void rotate(float degrees);
+ method public void save();
+ method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.compose.ui.graphics.Paint paint);
+ method public void scale(float sx, optional float sy);
+ method public void skew(float sx, float sy);
+ method public default void skewRad(float sxRad, float syRad);
+ method public void translate(float dx, float dy);
+ }
+
+ public final class CanvasHolder {
+ ctor public CanvasHolder();
+ method public inline void drawInto(android.graphics.Canvas targetCanvas, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class CanvasKt {
+ method public static androidx.compose.ui.graphics.Canvas Canvas(androidx.compose.ui.graphics.ImageBitmap image);
+ method public static void rotate(androidx.compose.ui.graphics.Canvas, float degrees, float pivotX, float pivotY);
+ method public static void rotateRad(androidx.compose.ui.graphics.Canvas, float radians, optional float pivotX, optional float pivotY);
+ method public static void scale(androidx.compose.ui.graphics.Canvas, float sx, optional float sy, float pivotX, float pivotY);
+ method public static inline void withSave(androidx.compose.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static inline void withSaveLayer(androidx.compose.ui.graphics.Canvas, androidx.compose.ui.geometry.Rect bounds, androidx.compose.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ClipOp {
+ field public static final androidx.compose.ui.graphics.ClipOp.Companion Companion;
+ }
+
+ public static final class ClipOp.Companion {
+ method public int getDifference();
+ method public int getIntersect();
+ property public final int Difference;
+ property public final int Intersect;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Color {
+ ctor public Color(long value);
+ method @androidx.compose.runtime.Stable public operator float component1();
+ method @androidx.compose.runtime.Stable public operator float component2();
+ method @androidx.compose.runtime.Stable public operator float component3();
+ method @androidx.compose.runtime.Stable public operator float component4();
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.graphics.colorspace.ColorSpace component5();
+ method public long convert(androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
+ method @androidx.compose.runtime.Stable public long copy(optional float alpha, optional float red, optional float green, optional float blue);
+ method public float getAlpha();
+ method public float getBlue();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getColorSpace();
+ method public float getGreen();
+ method public float getRed();
+ method public long getValue();
+ property @androidx.compose.runtime.Stable public final float alpha;
+ property @androidx.compose.runtime.Stable public final float blue;
+ property @androidx.compose.runtime.Stable public final androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace;
+ property @androidx.compose.runtime.Stable public final float green;
+ property @androidx.compose.runtime.Stable public final float red;
+ property public final long value;
+ field public static final androidx.compose.ui.graphics.Color.Companion Companion;
+ }
+
+ public static final class Color.Companion {
+ method public long getBlack();
+ method public long getBlue();
+ method public long getCyan();
+ method public long getDarkGray();
+ method public long getGray();
+ method public long getGreen();
+ method public long getLightGray();
+ method public long getMagenta();
+ method public long getRed();
+ method public long getTransparent();
+ method public long getUnspecified();
+ method public long getWhite();
+ method public long getYellow();
+ method public long hsl(float hue, float saturation, float lightness, optional float alpha, optional androidx.compose.ui.graphics.colorspace.Rgb colorSpace);
+ method public long hsv(float hue, float saturation, float value, optional float alpha, optional androidx.compose.ui.graphics.colorspace.Rgb colorSpace);
+ property public final long Black;
+ property public final long Blue;
+ property public final long Cyan;
+ property public final long DarkGray;
+ property public final long Gray;
+ property public final long Green;
+ property public final long LightGray;
+ property public final long Magenta;
+ property public final long Red;
+ property public final long Transparent;
+ property public final long Unspecified;
+ property public final long White;
+ property public final long Yellow;
+ }
+
+ @androidx.compose.runtime.Immutable public final class ColorFilter {
+ field public static final androidx.compose.ui.graphics.ColorFilter.Companion Companion;
+ }
+
+ public static final class ColorFilter.Companion {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter colorMatrix(float[] colorMatrix);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter lighting(long multiply, long add);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter tint(long color, optional int blendMode);
+ }
+
+ public final class ColorKt {
+ method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, optional float alpha, optional androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
+ method @androidx.compose.runtime.Stable public static long Color(int color);
+ method @androidx.compose.runtime.Stable public static long Color(long color);
+ method @androidx.compose.runtime.Stable public static long Color(int red, int green, int blue, optional int alpha);
+ method @androidx.compose.runtime.Stable public static long compositeOver(long, long background);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static float luminance(long);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.Color> block);
+ method @androidx.compose.runtime.Stable public static int toArgb(long);
+ }
+
+ @kotlin.jvm.JvmInline public final value class ColorMatrix {
+ ctor public ColorMatrix(optional float[] values);
+ method public void convertRgbToYuv();
+ method public void convertYuvToRgb();
+ method public inline operator float get(int row, int column);
+ method public float[] getValues();
+ method public void reset();
+ method public inline operator void set(int row, int column, float v);
+ method public void set(float[] src);
+ method public void setToRotateBlue(float degrees);
+ method public void setToRotateGreen(float degrees);
+ method public void setToRotateRed(float degrees);
+ method public void setToSaturation(float sat);
+ method public void setToScale(float redScale, float greenScale, float blueScale, float alphaScale);
+ method public operator void timesAssign(float[] colorMatrix);
+ property public final float[] values;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class FilterQuality {
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.graphics.FilterQuality.Companion Companion;
+ }
+
+ public static final class FilterQuality.Companion {
+ method public int getHigh();
+ method public int getLow();
+ method public int getMedium();
+ method public int getNone();
+ property public final int High;
+ property public final int Low;
+ property public final int Medium;
+ property public final int None;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ImageBitmap {
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getColorSpace();
+ method public int getConfig();
+ method public boolean getHasAlpha();
+ method public int getHeight();
+ method public int getWidth();
+ method public void prepareToDraw();
+ method public void readPixels(int[] buffer, optional int startX, optional int startY, optional int width, optional int height, optional int bufferOffset, optional int stride);
+ property public abstract androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace;
+ property public abstract int config;
+ property public abstract boolean hasAlpha;
+ property public abstract int height;
+ property public abstract int width;
+ field public static final androidx.compose.ui.graphics.ImageBitmap.Companion Companion;
+ }
+
+ public static final class ImageBitmap.Companion {
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ImageBitmapConfig {
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.graphics.ImageBitmapConfig.Companion Companion;
+ }
+
+ public static final class ImageBitmapConfig.Companion {
+ method public int getAlpha8();
+ method public int getArgb8888();
+ method public int getF16();
+ method public int getGpu();
+ method public int getRgb565();
+ property public final int Alpha8;
+ property public final int Argb8888;
+ property public final int F16;
+ property public final int Gpu;
+ property public final int Rgb565;
+ }
+
+ public final class ImageBitmapKt {
+ method public static androidx.compose.ui.graphics.ImageBitmap ImageBitmap(int width, int height, optional int config, optional boolean hasAlpha, optional androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
+ method public static androidx.compose.ui.graphics.PixelMap toPixelMap(androidx.compose.ui.graphics.ImageBitmap, optional int startX, optional int startY, optional int width, optional int height, optional int[] buffer, optional int bufferOffset, optional int stride);
+ }
+
+ @androidx.compose.runtime.Immutable public final class LinearGradient extends androidx.compose.ui.graphics.ShaderBrush {
+ method public android.graphics.Shader createShader(long size);
+ property public long intrinsicSize;
+ }
+
+ @kotlin.jvm.JvmInline public final value class Matrix {
+ ctor public Matrix(optional float[] values);
+ method public inline operator float get(int row, int column);
+ method public float[] getValues();
+ method public void invert();
+ method public long map(long point);
+ method public androidx.compose.ui.geometry.Rect map(androidx.compose.ui.geometry.Rect rect);
+ method public void map(androidx.compose.ui.geometry.MutableRect rect);
+ method public void reset();
+ method public void rotateX(float degrees);
+ method public void rotateY(float degrees);
+ method public void rotateZ(float degrees);
+ method public void scale(optional float x, optional float y, optional float z);
+ method public inline operator void set(int row, int column, float v);
+ method public void setFrom(float[] matrix);
+ method public operator void timesAssign(float[] m);
+ method public void translate(optional float x, optional float y, optional float z);
+ property public final float[] values;
+ field public static final androidx.compose.ui.graphics.Matrix.Companion Companion;
+ field public static final int Perspective0 = 3; // 0x3
+ field public static final int Perspective1 = 7; // 0x7
+ field public static final int Perspective2 = 15; // 0xf
+ field public static final int ScaleX = 0; // 0x0
+ field public static final int ScaleY = 5; // 0x5
+ field public static final int ScaleZ = 10; // 0xa
+ field public static final int SkewX = 4; // 0x4
+ field public static final int SkewY = 1; // 0x1
+ field public static final int TranslateX = 12; // 0xc
+ field public static final int TranslateY = 13; // 0xd
+ field public static final int TranslateZ = 14; // 0xe
+ }
+
+ public static final class Matrix.Companion {
+ }
+
+ public final class MatrixKt {
+ method public static boolean isIdentity(float[]);
+ }
+
+ @androidx.compose.runtime.Immutable public final class OffsetEffect extends androidx.compose.ui.graphics.RenderEffect {
+ ctor public OffsetEffect(androidx.compose.ui.graphics.RenderEffect? renderEffect, long offset);
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) protected android.graphics.RenderEffect createRenderEffect();
+ }
+
+ public abstract sealed class Outline {
+ method public abstract androidx.compose.ui.geometry.Rect getBounds();
+ property public abstract androidx.compose.ui.geometry.Rect bounds;
+ }
+
+ public static final class Outline.Generic extends androidx.compose.ui.graphics.Outline {
+ ctor public Outline.Generic(androidx.compose.ui.graphics.Path path);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public androidx.compose.ui.graphics.Path getPath();
+ property public androidx.compose.ui.geometry.Rect bounds;
+ property public final androidx.compose.ui.graphics.Path path;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class Outline.Rectangle extends androidx.compose.ui.graphics.Outline {
+ ctor public Outline.Rectangle(androidx.compose.ui.geometry.Rect rect);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public androidx.compose.ui.geometry.Rect getRect();
+ property public androidx.compose.ui.geometry.Rect bounds;
+ property public final androidx.compose.ui.geometry.Rect rect;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class Outline.Rounded extends androidx.compose.ui.graphics.Outline {
+ ctor public Outline.Rounded(androidx.compose.ui.geometry.RoundRect roundRect);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public androidx.compose.ui.geometry.RoundRect getRoundRect();
+ property public androidx.compose.ui.geometry.Rect bounds;
+ property public final androidx.compose.ui.geometry.RoundRect roundRect;
+ }
+
+ public final class OutlineKt {
+ method public static void addOutline(androidx.compose.ui.graphics.Path, androidx.compose.ui.graphics.Outline outline);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public static void drawOutline(androidx.compose.ui.graphics.Canvas, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Paint paint);
+ }
+
+ public interface Paint {
+ method public android.graphics.Paint asFrameworkPaint();
+ method public float getAlpha();
+ method public int getBlendMode();
+ method public long getColor();
+ method public androidx.compose.ui.graphics.ColorFilter? getColorFilter();
+ method public int getFilterQuality();
+ method public androidx.compose.ui.graphics.PathEffect? getPathEffect();
+ method public android.graphics.Shader? getShader();
+ method public int getStrokeCap();
+ method public int getStrokeJoin();
+ method public float getStrokeMiterLimit();
+ method public float getStrokeWidth();
+ method public int getStyle();
+ method public boolean isAntiAlias();
+ method public void setAlpha(float);
+ method public void setAntiAlias(boolean);
+ method public void setBlendMode(int);
+ method public void setColor(long);
+ method public void setColorFilter(androidx.compose.ui.graphics.ColorFilter?);
+ method public void setFilterQuality(int);
+ method public void setPathEffect(androidx.compose.ui.graphics.PathEffect?);
+ method public void setShader(android.graphics.Shader?);
+ method public void setStrokeCap(int);
+ method public void setStrokeJoin(int);
+ method public void setStrokeMiterLimit(float);
+ method public void setStrokeWidth(float);
+ method public void setStyle(int);
+ property public abstract float alpha;
+ property public abstract int blendMode;
+ property public abstract long color;
+ property public abstract androidx.compose.ui.graphics.ColorFilter? colorFilter;
+ property public abstract int filterQuality;
+ property public abstract boolean isAntiAlias;
+ property public abstract androidx.compose.ui.graphics.PathEffect? pathEffect;
+ property public abstract android.graphics.Shader? shader;
+ property public abstract int strokeCap;
+ property public abstract int strokeJoin;
+ property public abstract float strokeMiterLimit;
+ property public abstract float strokeWidth;
+ property public abstract int style;
+ }
+
+ public final class PaintKt {
+ method public static androidx.compose.ui.graphics.Paint Paint();
+ field public static final float DefaultAlpha = 1.0f;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PaintingStyle {
+ field public static final androidx.compose.ui.graphics.PaintingStyle.Companion Companion;
+ }
+
+ public static final class PaintingStyle.Companion {
+ method public int getFill();
+ method public int getStroke();
+ property public final int Fill;
+ property public final int Stroke;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Path {
+ method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+ method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+ method public void addOval(androidx.compose.ui.geometry.Rect oval);
+ method public void addPath(androidx.compose.ui.graphics.Path path, optional long offset);
+ method public void addRect(androidx.compose.ui.geometry.Rect rect);
+ method public void addRoundRect(androidx.compose.ui.geometry.RoundRect roundRect);
+ method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+ method public default void arcToRad(androidx.compose.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+ method public void close();
+ method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public int getFillType();
+ method public boolean isConvex();
+ method public boolean isEmpty();
+ method public void lineTo(float x, float y);
+ method public void moveTo(float x, float y);
+ method public boolean op(androidx.compose.ui.graphics.Path path1, androidx.compose.ui.graphics.Path path2, int operation);
+ method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+ method public void relativeCubicTo(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public void relativeLineTo(float dx, float dy);
+ method public void relativeMoveTo(float dx, float dy);
+ method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
+ method public void reset();
+ method public void setFillType(int);
+ method public void translate(long offset);
+ property public abstract int fillType;
+ property public abstract boolean isConvex;
+ property public abstract boolean isEmpty;
+ field public static final androidx.compose.ui.graphics.Path.Companion Companion;
+ }
+
+ public static final class Path.Companion {
+ method public androidx.compose.ui.graphics.Path combine(int operation, androidx.compose.ui.graphics.Path path1, androidx.compose.ui.graphics.Path path2);
+ }
+
+ public interface PathEffect {
+ field public static final androidx.compose.ui.graphics.PathEffect.Companion Companion;
+ }
+
+ public static final class PathEffect.Companion {
+ method public androidx.compose.ui.graphics.PathEffect chainPathEffect(androidx.compose.ui.graphics.PathEffect outer, androidx.compose.ui.graphics.PathEffect inner);
+ method public androidx.compose.ui.graphics.PathEffect cornerPathEffect(float radius);
+ method public androidx.compose.ui.graphics.PathEffect dashPathEffect(float[] intervals, optional float phase);
+ method public androidx.compose.ui.graphics.PathEffect stampedPathEffect(androidx.compose.ui.graphics.Path shape, float advance, float phase, int style);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PathFillType {
+ field public static final androidx.compose.ui.graphics.PathFillType.Companion Companion;
+ }
+
+ public static final class PathFillType.Companion {
+ method public int getEvenOdd();
+ method public int getNonZero();
+ property public final int EvenOdd;
+ property public final int NonZero;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PathMeasure {
+ method public float getLength();
+ method public long getPosition(float distance);
+ method public boolean getSegment(float startDistance, float stopDistance, androidx.compose.ui.graphics.Path destination, optional boolean startWithMoveTo);
+ method public long getTangent(float distance);
+ method public void setPath(androidx.compose.ui.graphics.Path? path, boolean forceClosed);
+ property public abstract float length;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PathOperation {
+ field public static final androidx.compose.ui.graphics.PathOperation.Companion Companion;
+ }
+
+ public static final class PathOperation.Companion {
+ method public int getDifference();
+ method public int getIntersect();
+ method public int getReverseDifference();
+ method public int getUnion();
+ method public int getXor();
+ property public final int Difference;
+ property public final int Intersect;
+ property public final int ReverseDifference;
+ property public final int Union;
+ property public final int Xor;
+ }
+
+ public final class PathOperationKt {
+ method @Deprecated public static int getDifference(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getIntersect(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getReverseDifference(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getUnion(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getXor(androidx.compose.ui.graphics.PathOperation.Companion);
+ }
+
+ public final class PixelMap {
+ ctor public PixelMap(int[] buffer, int width, int height, int bufferOffset, int stride);
+ method public operator long get(int x, int y);
+ method public int[] getBuffer();
+ method public int getBufferOffset();
+ method public int getHeight();
+ method public int getStride();
+ method public int getWidth();
+ property public final int[] buffer;
+ property public final int bufferOffset;
+ property public final int height;
+ property public final int stride;
+ property public final int width;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PointMode {
+ field public static final androidx.compose.ui.graphics.PointMode.Companion Companion;
+ }
+
+ public static final class PointMode.Companion {
+ method public int getLines();
+ method public int getPoints();
+ method public int getPolygon();
+ property public final int Lines;
+ property public final int Points;
+ property public final int Polygon;
+ }
+
+ @androidx.compose.runtime.Immutable public final class RadialGradient extends androidx.compose.ui.graphics.ShaderBrush {
+ method public android.graphics.Shader createShader(long size);
+ property public long intrinsicSize;
+ }
+
+ public final class RectHelper_androidKt {
+ method @Deprecated public static android.graphics.Rect toAndroidRect(androidx.compose.ui.geometry.Rect);
+ method public static android.graphics.Rect toAndroidRect(androidx.compose.ui.unit.IntRect);
+ method public static android.graphics.RectF toAndroidRectF(androidx.compose.ui.geometry.Rect);
+ method public static androidx.compose.ui.unit.IntRect toComposeIntRect(android.graphics.Rect);
+ method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.Rect);
+ }
+
+ public final class RectangleShapeKt {
+ method public static androidx.compose.ui.graphics.Shape getRectangleShape();
+ property public static final androidx.compose.ui.graphics.Shape RectangleShape;
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class RenderEffect {
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) public final android.graphics.RenderEffect asAndroidRenderEffect();
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) protected abstract android.graphics.RenderEffect createRenderEffect();
+ method public boolean isSupported();
+ }
+
+ public final class RenderEffectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.BlurEffect BlurEffect(float radiusX, float radiusY, optional int edgeTreatment);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.OffsetEffect OffsetEffect(float offsetX, float offsetY);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract class ShaderBrush extends androidx.compose.ui.graphics.Brush {
+ ctor public ShaderBrush();
+ method public final void applyTo(long size, androidx.compose.ui.graphics.Paint p, float alpha);
+ method public abstract android.graphics.Shader createShader(long size);
+ }
+
+ public final class ShaderKt {
+ method public static android.graphics.Shader ImageShader(androidx.compose.ui.graphics.ImageBitmap image, optional int tileModeX, optional int tileModeY);
+ method public static android.graphics.Shader LinearGradientShader(long from, long to, java.util.List<androidx.compose.ui.graphics.Color> colors, optional java.util.List<java.lang.Float>? colorStops, optional int tileMode);
+ method public static android.graphics.Shader RadialGradientShader(long center, float radius, java.util.List<androidx.compose.ui.graphics.Color> colors, optional java.util.List<java.lang.Float>? colorStops, optional int tileMode);
+ method public static android.graphics.Shader SweepGradientShader(long center, java.util.List<androidx.compose.ui.graphics.Color> colors, optional java.util.List<java.lang.Float>? colorStops);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Shadow {
+ ctor public Shadow(optional @androidx.compose.runtime.Stable long color, optional @androidx.compose.runtime.Stable long offset, optional @androidx.compose.runtime.Stable float blurRadius);
+ method public androidx.compose.ui.graphics.Shadow copy(optional long color, optional long offset, optional float blurRadius);
+ method public float getBlurRadius();
+ method public long getColor();
+ method public long getOffset();
+ property public final float blurRadius;
+ property public final long color;
+ property public final long offset;
+ field public static final androidx.compose.ui.graphics.Shadow.Companion Companion;
+ }
+
+ public static final class Shadow.Companion {
+ method public androidx.compose.ui.graphics.Shadow getNone();
+ property public final androidx.compose.ui.graphics.Shadow None;
+ }
+
+ public final class ShadowKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public interface Shape {
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
+ }
+
+ @androidx.compose.runtime.Immutable public final class SolidColor extends androidx.compose.ui.graphics.Brush {
+ ctor public SolidColor(long value);
+ method public void applyTo(long size, androidx.compose.ui.graphics.Paint p, float alpha);
+ method public long getValue();
+ property public final long value;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class StampedPathEffectStyle {
+ field public static final androidx.compose.ui.graphics.StampedPathEffectStyle.Companion Companion;
+ }
+
+ public static final class StampedPathEffectStyle.Companion {
+ method public int getMorph();
+ method public int getRotate();
+ method public int getTranslate();
+ property public final int Morph;
+ property public final int Rotate;
+ property public final int Translate;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class StrokeCap {
+ field public static final androidx.compose.ui.graphics.StrokeCap.Companion Companion;
+ }
+
+ public static final class StrokeCap.Companion {
+ method public int getButt();
+ method public int getRound();
+ method public int getSquare();
+ property public final int Butt;
+ property public final int Round;
+ property public final int Square;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class StrokeJoin {
+ field public static final androidx.compose.ui.graphics.StrokeJoin.Companion Companion;
+ }
+
+ public static final class StrokeJoin.Companion {
+ method public int getBevel();
+ method public int getMiter();
+ method public int getRound();
+ property public final int Bevel;
+ property public final int Miter;
+ property public final int Round;
+ }
+
+ @androidx.compose.runtime.Immutable public final class SweepGradient extends androidx.compose.ui.graphics.ShaderBrush {
+ method public android.graphics.Shader createShader(long size);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TileMode {
+ field public static final androidx.compose.ui.graphics.TileMode.Companion Companion;
+ }
+
+ public static final class TileMode.Companion {
+ method public int getClamp();
+ method public int getDecal();
+ method public int getMirror();
+ method public int getRepeated();
+ property public final int Clamp;
+ property public final int Decal;
+ property public final int Mirror;
+ property public final int Repeated;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class VertexMode {
+ field public static final androidx.compose.ui.graphics.VertexMode.Companion Companion;
+ }
+
+ public static final class VertexMode.Companion {
+ method public int getTriangleFan();
+ method public int getTriangleStrip();
+ method public int getTriangles();
+ property public final int TriangleFan;
+ property public final int TriangleStrip;
+ property public final int Triangles;
+ }
+
+ public final class Vertices {
+ ctor public Vertices(int vertexMode, java.util.List<androidx.compose.ui.geometry.Offset> positions, java.util.List<androidx.compose.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.compose.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
+ method public int[] getColors();
+ method public short[] getIndices();
+ method public float[] getPositions();
+ method public float[] getTextureCoordinates();
+ method public int getVertexMode();
+ property public final int[] colors;
+ property public final short[] indices;
+ property public final float[] positions;
+ property public final float[] textureCoordinates;
+ property public final int vertexMode;
+ }
+
+}
+
+package androidx.compose.ui.graphics.colorspace {
+
+ public abstract class Adaptation {
+ field public static final androidx.compose.ui.graphics.colorspace.Adaptation.Companion Companion;
+ }
+
+ public static final class Adaptation.Companion {
+ method public androidx.compose.ui.graphics.colorspace.Adaptation getBradford();
+ method public androidx.compose.ui.graphics.colorspace.Adaptation getCiecat02();
+ method public androidx.compose.ui.graphics.colorspace.Adaptation getVonKries();
+ property public final androidx.compose.ui.graphics.colorspace.Adaptation Bradford;
+ property public final androidx.compose.ui.graphics.colorspace.Adaptation Ciecat02;
+ property public final androidx.compose.ui.graphics.colorspace.Adaptation VonKries;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ColorModel {
+ method public int getComponentCount();
+ property @androidx.compose.runtime.Stable public final int componentCount;
+ field public static final androidx.compose.ui.graphics.colorspace.ColorModel.Companion Companion;
+ }
+
+ public static final class ColorModel.Companion {
+ method public long getCmyk();
+ method public long getLab();
+ method public long getRgb();
+ method public long getXyz();
+ property public final long Cmyk;
+ property public final long Lab;
+ property public final long Rgb;
+ property public final long Xyz;
+ }
+
+ public abstract class ColorSpace {
+ ctor public ColorSpace(String name, long model);
+ method public final float[] fromXyz(float x, float y, float z);
+ method public abstract float[] fromXyz(float[] v);
+ method public final int getComponentCount();
+ method public abstract float getMaxValue(int component);
+ method public abstract float getMinValue(int component);
+ method public final long getModel();
+ method public final String getName();
+ method public boolean isSrgb();
+ method public abstract boolean isWideGamut();
+ method public final float[] toXyz(float r, float g, float b);
+ method public abstract float[] toXyz(float[] v);
+ property public final int componentCount;
+ property public boolean isSrgb;
+ property public abstract boolean isWideGamut;
+ property public final long model;
+ property public final String name;
+ }
+
+ public final class ColorSpaceKt {
+ method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, optional androidx.compose.ui.graphics.colorspace.Adaptation adaptation);
+ method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint);
+ method public static androidx.compose.ui.graphics.colorspace.Connector connect(androidx.compose.ui.graphics.colorspace.ColorSpace, optional androidx.compose.ui.graphics.colorspace.ColorSpace destination, optional int intent);
+ }
+
+ public final class ColorSpaces {
+ method public androidx.compose.ui.graphics.colorspace.Rgb getAces();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getAcescg();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getAdobeRgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getBt2020();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getBt709();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getCieLab();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getCieXyz();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getDciP3();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getDisplayP3();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getExtendedSrgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getLinearExtendedSrgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getLinearSrgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getNtsc1953();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getOklab();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getProPhotoRgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getSmpteC();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getSrgb();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace? match(float[] toXYZD50, androidx.compose.ui.graphics.colorspace.TransferParameters function);
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Aces;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Acescg;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb AdobeRgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Bt2020;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Bt709;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace CieLab;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace CieXyz;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb DciP3;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb DisplayP3;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb ExtendedSrgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb LinearExtendedSrgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb LinearSrgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Ntsc1953;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace Oklab;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb ProPhotoRgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb SmpteC;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Srgb;
+ field public static final androidx.compose.ui.graphics.colorspace.ColorSpaces INSTANCE;
+ }
+
+ public class Connector {
+ method public final androidx.compose.ui.graphics.colorspace.ColorSpace getDestination();
+ method public final int getRenderIntent();
+ method public final androidx.compose.ui.graphics.colorspace.ColorSpace getSource();
+ method public final float[] transform(float r, float g, float b);
+ method public float[] transform(float[] v);
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace destination;
+ property public final int renderIntent;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace source;
+ }
+
+ public final class Illuminant {
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getA();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getB();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getC();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD50();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD55();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD60();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD65();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD75();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getE();
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint A;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint B;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint C;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D50;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D55;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D60;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D65;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D75;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint E;
+ field public static final androidx.compose.ui.graphics.colorspace.Illuminant INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class RenderIntent {
+ field public static final androidx.compose.ui.graphics.colorspace.RenderIntent.Companion Companion;
+ }
+
+ public static final class RenderIntent.Companion {
+ method public int getAbsolute();
+ method public int getPerceptual();
+ method public int getRelative();
+ method public int getSaturation();
+ property public final int Absolute;
+ property public final int Perceptual;
+ property public final int Relative;
+ property public final int Saturation;
+ }
+
+ public final class Rgb extends androidx.compose.ui.graphics.colorspace.ColorSpace {
+ ctor public Rgb(String name, float[] toXYZ, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf, float min, float max);
+ ctor public Rgb(String name, float[] toXYZ, androidx.compose.ui.graphics.colorspace.TransferParameters function);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, androidx.compose.ui.graphics.colorspace.TransferParameters function);
+ ctor public Rgb(String name, float[] toXYZ, double gamma);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, double gamma);
+ method public float[] fromLinear(float r, float g, float b);
+ method public float[] fromLinear(float[] v);
+ method public float[] fromXyz(float[] v);
+ method public kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> getEotf();
+ method public float[] getInverseTransform();
+ method public float[] getInverseTransform(float[] inverseTransform);
+ method public float getMaxValue(int component);
+ method public float getMinValue(int component);
+ method public kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> getOetf();
+ method public float[] getPrimaries();
+ method public float[] getPrimaries(float[] primaries);
+ method public androidx.compose.ui.graphics.colorspace.TransferParameters? getTransferParameters();
+ method public float[] getTransform();
+ method public float[] getTransform(float[] transform);
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getWhitePoint();
+ method public boolean isWideGamut();
+ method public float[] toLinear(float r, float g, float b);
+ method public float[] toLinear(float[] v);
+ method public float[] toXyz(float[] v);
+ property public final kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> eotf;
+ property public boolean isSrgb;
+ property public boolean isWideGamut;
+ property public final kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> oetf;
+ property public final androidx.compose.ui.graphics.colorspace.TransferParameters? transferParameters;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint;
+ }
+
+ public final class TransferParameters {
+ ctor public TransferParameters(double gamma, double a, double b, double c, double d, optional double e, optional double f);
+ method public double component1();
+ method public double component2();
+ method public double component3();
+ method public double component4();
+ method public double component5();
+ method public double component6();
+ method public double component7();
+ method public androidx.compose.ui.graphics.colorspace.TransferParameters copy(double gamma, double a, double b, double c, double d, double e, double f);
+ method public double getA();
+ method public double getB();
+ method public double getC();
+ method public double getD();
+ method public double getE();
+ method public double getF();
+ method public double getGamma();
+ property public final double a;
+ property public final double b;
+ property public final double c;
+ property public final double d;
+ property public final double e;
+ property public final double f;
+ property public final double gamma;
+ }
+
+ public final class WhitePoint {
+ ctor public WhitePoint(float x, float y);
+ ctor public WhitePoint(float x, float y, float z);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+}
+
+package androidx.compose.ui.graphics.drawscope {
+
+ public final class CanvasDrawScope implements androidx.compose.ui.graphics.drawscope.DrawScope {
+ ctor public CanvasDrawScope();
+ method public inline void draw(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public void drawArc(androidx.compose.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawArc(long color, float startAngle, float sweepAngle, boolean useCenter, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawCircle(androidx.compose.ui.graphics.Brush brush, float radius, long center, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawCircle(long color, float radius, long center, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, long topLeft, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method @Deprecated public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, long srcOffset, long srcSize, long dstOffset, long dstSize, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawLine(androidx.compose.ui.graphics.Brush brush, long start, long end, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawLine(long color, long start, long end, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawOval(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawOval(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRect(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, long cornerRadius, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRoundRect(long color, long topLeft, long size, long cornerRadius, androidx.compose.ui.graphics.drawscope.DrawStyle style, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public float getDensity();
+ method public androidx.compose.ui.graphics.drawscope.DrawContext getDrawContext();
+ method public float getFontScale();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ property public float density;
+ property public androidx.compose.ui.graphics.drawscope.DrawContext drawContext;
+ property public float fontScale;
+ property public androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ContentDrawScope extends androidx.compose.ui.graphics.drawscope.DrawScope {
+ method public void drawContent();
+ }
+
+ public interface DrawContext {
+ method public androidx.compose.ui.graphics.Canvas getCanvas();
+ method public long getSize();
+ method public androidx.compose.ui.graphics.drawscope.DrawTransform getTransform();
+ method public void setSize(long);
+ property public abstract androidx.compose.ui.graphics.Canvas canvas;
+ property public abstract long size;
+ property public abstract androidx.compose.ui.graphics.drawscope.DrawTransform transform;
+ }
+
+ @androidx.compose.ui.graphics.drawscope.DrawScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawScope extends androidx.compose.ui.unit.Density {
+ method public void drawArc(androidx.compose.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawArc(long color, float startAngle, float sweepAngle, boolean useCenter, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawCircle(androidx.compose.ui.graphics.Brush brush, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawCircle(long color, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public default void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode, optional int filterQuality);
+ method @Deprecated public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawLine(androidx.compose.ui.graphics.Brush brush, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawLine(long color, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawOval(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawOval(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRect(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional long cornerRadius, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRoundRect(long color, optional long topLeft, optional long size, optional long cornerRadius, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public default long getCenter();
+ method public androidx.compose.ui.graphics.drawscope.DrawContext getDrawContext();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public default long getSize();
+ property public default long center;
+ property public abstract androidx.compose.ui.graphics.drawscope.DrawContext drawContext;
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public default long size;
+ field public static final androidx.compose.ui.graphics.drawscope.DrawScope.Companion Companion;
+ }
+
+ public static final class DrawScope.Companion {
+ method public int getDefaultBlendMode();
+ method public int getDefaultFilterQuality();
+ property public final int DefaultBlendMode;
+ property public final int DefaultFilterQuality;
+ }
+
+ public final class DrawScopeKt {
+ method public static inline void clipPath(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Path path, optional int clipOp, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void clipRect(androidx.compose.ui.graphics.drawscope.DrawScope, optional float left, optional float top, optional float right, optional float bottom, optional int clipOp, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void drawIntoCanvas(androidx.compose.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float inset, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, optional float horizontal, optional float vertical, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void rotate(androidx.compose.ui.graphics.drawscope.DrawScope, float degrees, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawScope, float radians, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawScope, float scaleX, float scaleY, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawScope, float scale, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void translate(androidx.compose.ui.graphics.drawscope.DrawScope, optional float left, optional float top, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void withTransform(androidx.compose.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawTransform,kotlin.Unit> transformBlock, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> drawBlock);
+ }
+
+ @kotlin.DslMarker public @interface DrawScopeMarker {
+ }
+
+ public abstract sealed class DrawStyle {
+ }
+
+ @androidx.compose.ui.graphics.drawscope.DrawScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawTransform {
+ method public void clipPath(androidx.compose.ui.graphics.Path path, optional int clipOp);
+ method public void clipRect(optional float left, optional float top, optional float right, optional float bottom, optional int clipOp);
+ method public default long getCenter();
+ method public long getSize();
+ method public void inset(float left, float top, float right, float bottom);
+ method public void rotate(float degrees, optional long pivot);
+ method public void scale(float scaleX, float scaleY, optional long pivot);
+ method public void transform(float[] matrix);
+ method public void translate(optional float left, optional float top);
+ property public default long center;
+ property public abstract long size;
+ }
+
+ public final class DrawTransformKt {
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, optional float horizontal, optional float vertical);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, float inset);
+ method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawTransform, float radians, optional long pivot);
+ method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawTransform, float scale, optional long pivot);
+ }
+
+ public final class Fill extends androidx.compose.ui.graphics.drawscope.DrawStyle {
+ field public static final androidx.compose.ui.graphics.drawscope.Fill INSTANCE;
+ }
+
+ public final class Stroke extends androidx.compose.ui.graphics.drawscope.DrawStyle {
+ ctor public Stroke(optional float width, optional float miter, optional int cap, optional int join, optional androidx.compose.ui.graphics.PathEffect? pathEffect);
+ method public int getCap();
+ method public int getJoin();
+ method public float getMiter();
+ method public androidx.compose.ui.graphics.PathEffect? getPathEffect();
+ method public float getWidth();
+ property public final int cap;
+ property public final int join;
+ property public final float miter;
+ property public final androidx.compose.ui.graphics.PathEffect? pathEffect;
+ property public final float width;
+ field public static final androidx.compose.ui.graphics.drawscope.Stroke.Companion Companion;
+ field public static final float DefaultMiter = 4.0f;
+ field public static final float HairlineWidth = 0.0f;
+ }
+
+ public static final class Stroke.Companion {
+ method public int getDefaultCap();
+ method public int getDefaultJoin();
+ property public final int DefaultCap;
+ property public final int DefaultJoin;
+ }
+
+}
+
+package androidx.compose.ui.graphics.painter {
+
+ public final class BitmapPainter extends androidx.compose.ui.graphics.painter.Painter {
+ ctor public BitmapPainter(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize);
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public long intrinsicSize;
+ }
+
+ public final class BitmapPainterKt {
+ method public static androidx.compose.ui.graphics.painter.BitmapPainter BitmapPainter(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional int filterQuality);
+ }
+
+ public final class BrushPainter extends androidx.compose.ui.graphics.painter.Painter {
+ ctor public BrushPainter(androidx.compose.ui.graphics.Brush brush);
+ method public androidx.compose.ui.graphics.Brush getBrush();
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public final androidx.compose.ui.graphics.Brush brush;
+ property public long intrinsicSize;
+ }
+
+ public final class ColorPainter extends androidx.compose.ui.graphics.painter.Painter {
+ ctor public ColorPainter(long color);
+ method public long getColor();
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public final long color;
+ property public long intrinsicSize;
+ }
+
+ public abstract class Painter {
+ ctor public Painter();
+ method protected boolean applyAlpha(float alpha);
+ method protected boolean applyColorFilter(androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method protected boolean applyLayoutDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public final void draw(androidx.compose.ui.graphics.drawscope.DrawScope, long size, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method public abstract long getIntrinsicSize();
+ method protected abstract void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public abstract long intrinsicSize;
+ }
+
+}
+
+package androidx.compose.ui.graphics.vector {
+
+ public final class PathBuilder {
+ ctor public PathBuilder();
+ method public androidx.compose.ui.graphics.vector.PathBuilder arcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float x1, float y1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder arcToRelative(float a, float b, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float dx1, float dy1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder close();
+ method public androidx.compose.ui.graphics.vector.PathBuilder curveTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public androidx.compose.ui.graphics.vector.PathBuilder curveToRelative(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> getNodes();
+ method public androidx.compose.ui.graphics.vector.PathBuilder horizontalLineTo(float x);
+ method public androidx.compose.ui.graphics.vector.PathBuilder horizontalLineToRelative(float dx);
+ method public androidx.compose.ui.graphics.vector.PathBuilder lineTo(float x, float y);
+ method public androidx.compose.ui.graphics.vector.PathBuilder lineToRelative(float dx, float dy);
+ method public androidx.compose.ui.graphics.vector.PathBuilder moveTo(float x, float y);
+ method public androidx.compose.ui.graphics.vector.PathBuilder moveToRelative(float dx, float dy);
+ method public androidx.compose.ui.graphics.vector.PathBuilder quadTo(float x1, float y1, float x2, float y2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder quadToRelative(float dx1, float dy1, float dx2, float dy2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveCurveTo(float x1, float y1, float x2, float y2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveCurveToRelative(float dx1, float dy1, float dx2, float dy2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveQuadTo(float x1, float y1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveQuadToRelative(float dx1, float dy1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder verticalLineTo(float y);
+ method public androidx.compose.ui.graphics.vector.PathBuilder verticalLineToRelative(float dy);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class PathNode {
+ method public final boolean isCurve();
+ method public final boolean isQuad();
+ property public final boolean isCurve;
+ property public final boolean isQuad;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.ArcTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.ArcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartX, float arcStartY);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public boolean component4();
+ method public boolean component5();
+ method public float component6();
+ method public float component7();
+ method public androidx.compose.ui.graphics.vector.PathNode.ArcTo copy(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartX, float arcStartY);
+ method public float getArcStartX();
+ method public float getArcStartY();
+ method public float getHorizontalEllipseRadius();
+ method public float getTheta();
+ method public float getVerticalEllipseRadius();
+ method public boolean isMoreThanHalf();
+ method public boolean isPositiveArc();
+ property public final float arcStartX;
+ property public final float arcStartY;
+ property public final float horizontalEllipseRadius;
+ property public final boolean isMoreThanHalf;
+ property public final boolean isPositiveArc;
+ property public final float theta;
+ property public final float verticalEllipseRadius;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.Close extends androidx.compose.ui.graphics.vector.PathNode {
+ field public static final androidx.compose.ui.graphics.vector.PathNode.Close INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.CurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.CurveTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public float component5();
+ method public float component6();
+ method public androidx.compose.ui.graphics.vector.PathNode.CurveTo copy(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public float getX1();
+ method public float getX2();
+ method public float getX3();
+ method public float getY1();
+ method public float getY2();
+ method public float getY3();
+ property public final float x1;
+ property public final float x2;
+ property public final float x3;
+ property public final float y1;
+ property public final float y2;
+ property public final float y3;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.HorizontalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.HorizontalTo(float x);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.HorizontalTo copy(float x);
+ method public float getX();
+ property public final float x;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.LineTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.LineTo(float x, float y);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.LineTo copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.MoveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.MoveTo(float x, float y);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.MoveTo copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.QuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.QuadTo(float x1, float y1, float x2, float y2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.QuadTo copy(float x1, float y1, float x2, float y2);
+ method public float getX1();
+ method public float getX2();
+ method public float getY1();
+ method public float getY2();
+ property public final float x1;
+ property public final float x2;
+ property public final float y1;
+ property public final float y2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.ReflectiveCurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.ReflectiveCurveTo(float x1, float y1, float x2, float y2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.ReflectiveCurveTo copy(float x1, float y1, float x2, float y2);
+ method public float getX1();
+ method public float getX2();
+ method public float getY1();
+ method public float getY2();
+ property public final float x1;
+ property public final float x2;
+ property public final float y1;
+ property public final float y2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.ReflectiveQuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.ReflectiveQuadTo(float x, float y);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.ReflectiveQuadTo copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeArcTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeArcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartDx, float arcStartDy);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public boolean component4();
+ method public boolean component5();
+ method public float component6();
+ method public float component7();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeArcTo copy(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartDx, float arcStartDy);
+ method public float getArcStartDx();
+ method public float getArcStartDy();
+ method public float getHorizontalEllipseRadius();
+ method public float getTheta();
+ method public float getVerticalEllipseRadius();
+ method public boolean isMoreThanHalf();
+ method public boolean isPositiveArc();
+ property public final float arcStartDx;
+ property public final float arcStartDy;
+ property public final float horizontalEllipseRadius;
+ property public final boolean isMoreThanHalf;
+ property public final boolean isPositiveArc;
+ property public final float theta;
+ property public final float verticalEllipseRadius;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeCurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeCurveTo(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public float component5();
+ method public float component6();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeCurveTo copy(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public float getDx1();
+ method public float getDx2();
+ method public float getDx3();
+ method public float getDy1();
+ method public float getDy2();
+ method public float getDy3();
+ property public final float dx1;
+ property public final float dx2;
+ property public final float dx3;
+ property public final float dy1;
+ property public final float dy2;
+ property public final float dy3;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeHorizontalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeHorizontalTo(float dx);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeHorizontalTo copy(float dx);
+ method public float getDx();
+ property public final float dx;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeLineTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeLineTo(float dx, float dy);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeLineTo copy(float dx, float dy);
+ method public float getDx();
+ method public float getDy();
+ property public final float dx;
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeMoveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeMoveTo(float dx, float dy);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeMoveTo copy(float dx, float dy);
+ method public float getDx();
+ method public float getDy();
+ property public final float dx;
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeQuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeQuadTo(float dx1, float dy1, float dx2, float dy2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeQuadTo copy(float dx1, float dy1, float dx2, float dy2);
+ method public float getDx1();
+ method public float getDx2();
+ method public float getDy1();
+ method public float getDy2();
+ property public final float dx1;
+ property public final float dx2;
+ property public final float dy1;
+ property public final float dy2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeReflectiveCurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeReflectiveCurveTo(float dx1, float dy1, float dx2, float dy2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeReflectiveCurveTo copy(float dx1, float dy1, float dx2, float dy2);
+ method public float getDx1();
+ method public float getDx2();
+ method public float getDy1();
+ method public float getDy2();
+ property public final float dx1;
+ property public final float dx2;
+ property public final float dy1;
+ property public final float dy2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeReflectiveQuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeReflectiveQuadTo(float dx, float dy);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeReflectiveQuadTo copy(float dx, float dy);
+ method public float getDx();
+ method public float getDy();
+ property public final float dx;
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeVerticalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeVerticalTo(float dy);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeVerticalTo copy(float dy);
+ method public float getDy();
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.VerticalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.VerticalTo(float y);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.VerticalTo copy(float y);
+ method public float getY();
+ property public final float y;
+ }
+
+ public final class PathParser {
+ ctor public PathParser();
+ method public androidx.compose.ui.graphics.vector.PathParser addPathNodes(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> nodes);
+ method public void clear();
+ method public androidx.compose.ui.graphics.vector.PathParser parsePathString(String pathData);
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> toNodes();
+ method public androidx.compose.ui.graphics.Path toPath(optional androidx.compose.ui.graphics.Path target);
+ }
+
+}
+
diff --git a/compose/ui/ui-graphics/api/current.ignore b/compose/ui/ui-graphics/api/current.ignore
deleted file mode 100644
index cded3ab..0000000
--- a/compose/ui/ui-graphics/api/current.ignore
+++ /dev/null
@@ -1,21 +0,0 @@
-// Baseline format: 1.0
-AddedAbstractMethod: androidx.compose.ui.graphics.PathMeasure#getPosition(float):
- Added method androidx.compose.ui.graphics.PathMeasure.getPosition(float)
-AddedAbstractMethod: androidx.compose.ui.graphics.PathMeasure#getTangent(float):
- Added method androidx.compose.ui.graphics.PathMeasure.getTangent(float)
-
-
-RemovedClass: androidx.compose.ui.graphics.AndroidShader_androidKt:
- Removed class androidx.compose.ui.graphics.AndroidShader_androidKt
-RemovedClass: androidx.compose.ui.graphics.DegreesKt:
- Removed class androidx.compose.ui.graphics.DegreesKt
-RemovedClass: androidx.compose.ui.graphics.Float16Kt:
- Removed class androidx.compose.ui.graphics.Float16Kt
-RemovedClass: androidx.compose.ui.graphics.drawscope.CanvasDrawScopeKt:
- Removed class androidx.compose.ui.graphics.drawscope.CanvasDrawScopeKt
-RemovedClass: androidx.compose.ui.graphics.vector.PathNodeKt:
- Removed class androidx.compose.ui.graphics.vector.PathNodeKt
-
-
-RemovedPackage: androidx.compose.ui.graphics.internal:
- Removed package androidx.compose.ui.graphics.internal
diff --git a/compose/ui/ui-graphics/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-graphics/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..b8961c4
--- /dev/null
+++ b/compose/ui/ui-graphics/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,1617 @@
+// Signature format: 4.0
+package androidx.compose.ui.graphics {
+
+ public final class AndroidBlendMode_androidKt {
+ method public static boolean isSupported(int);
+ }
+
+ public final class AndroidCanvas_androidKt {
+ method public static androidx.compose.ui.graphics.Canvas Canvas(android.graphics.Canvas c);
+ method public static android.graphics.Canvas getNativeCanvas(androidx.compose.ui.graphics.Canvas);
+ }
+
+ public final class AndroidColorFilter_androidKt {
+ method public static android.graphics.ColorFilter asAndroidColorFilter(androidx.compose.ui.graphics.ColorFilter);
+ method public static androidx.compose.ui.graphics.ColorFilter asComposeColorFilter(android.graphics.ColorFilter);
+ }
+
+ public final class AndroidImageBitmap_androidKt {
+ method public static android.graphics.Bitmap asAndroidBitmap(androidx.compose.ui.graphics.ImageBitmap);
+ method public static androidx.compose.ui.graphics.ImageBitmap asImageBitmap(android.graphics.Bitmap);
+ }
+
+ public final class AndroidMatrixConversions_androidKt {
+ method public static void setFrom(float[], android.graphics.Matrix matrix);
+ method public static void setFrom(android.graphics.Matrix, float[] matrix);
+ }
+
+ public final class AndroidPaint implements androidx.compose.ui.graphics.Paint {
+ ctor public AndroidPaint(android.graphics.Paint internalPaint);
+ ctor public AndroidPaint();
+ method public android.graphics.Paint asFrameworkPaint();
+ method public float getAlpha();
+ method public int getBlendMode();
+ method public long getColor();
+ method public androidx.compose.ui.graphics.ColorFilter? getColorFilter();
+ method public int getFilterQuality();
+ method public androidx.compose.ui.graphics.PathEffect? getPathEffect();
+ method public android.graphics.Shader? getShader();
+ method public int getStrokeCap();
+ method public int getStrokeJoin();
+ method public float getStrokeMiterLimit();
+ method public float getStrokeWidth();
+ method public int getStyle();
+ method public boolean isAntiAlias();
+ method public void setAlpha(float);
+ method public void setAntiAlias(boolean);
+ method public void setBlendMode(int);
+ method public void setColor(long);
+ method public void setColorFilter(androidx.compose.ui.graphics.ColorFilter?);
+ method public void setFilterQuality(int);
+ method public void setPathEffect(androidx.compose.ui.graphics.PathEffect?);
+ method public void setShader(android.graphics.Shader?);
+ method public void setStrokeCap(int);
+ method public void setStrokeJoin(int);
+ method public void setStrokeMiterLimit(float);
+ method public void setStrokeWidth(float);
+ method public void setStyle(int);
+ property public float alpha;
+ property public int blendMode;
+ property public long color;
+ property public androidx.compose.ui.graphics.ColorFilter? colorFilter;
+ property public int filterQuality;
+ property public boolean isAntiAlias;
+ property public androidx.compose.ui.graphics.PathEffect? pathEffect;
+ property public android.graphics.Shader? shader;
+ property public int strokeCap;
+ property public int strokeJoin;
+ property public float strokeMiterLimit;
+ property public float strokeWidth;
+ property public int style;
+ }
+
+ public final class AndroidPaint_androidKt {
+ method public static androidx.compose.ui.graphics.Paint Paint();
+ method public static androidx.compose.ui.graphics.Paint toComposePaint(android.graphics.Paint);
+ }
+
+ public final class AndroidPath implements androidx.compose.ui.graphics.Path {
+ ctor public AndroidPath(optional android.graphics.Path internalPath);
+ method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+ method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+ method public void addOval(androidx.compose.ui.geometry.Rect oval);
+ method public void addPath(androidx.compose.ui.graphics.Path path, long offset);
+ method public void addRect(androidx.compose.ui.geometry.Rect rect);
+ method public void addRoundRect(androidx.compose.ui.geometry.RoundRect roundRect);
+ method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+ method public void close();
+ method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public int getFillType();
+ method public android.graphics.Path getInternalPath();
+ method public boolean isConvex();
+ method public boolean isEmpty();
+ method public void lineTo(float x, float y);
+ method public void moveTo(float x, float y);
+ method public boolean op(androidx.compose.ui.graphics.Path path1, androidx.compose.ui.graphics.Path path2, int operation);
+ method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+ method public void relativeCubicTo(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public void relativeLineTo(float dx, float dy);
+ method public void relativeMoveTo(float dx, float dy);
+ method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
+ method public void reset();
+ method public void setFillType(int);
+ method public void translate(long offset);
+ property public int fillType;
+ property public final android.graphics.Path internalPath;
+ property public boolean isConvex;
+ property public boolean isEmpty;
+ }
+
+ public final class AndroidPathEffect_androidKt {
+ method public static android.graphics.PathEffect asAndroidPathEffect(androidx.compose.ui.graphics.PathEffect);
+ method public static androidx.compose.ui.graphics.PathEffect toComposePathEffect(android.graphics.PathEffect);
+ }
+
+ public final class AndroidPathMeasure implements androidx.compose.ui.graphics.PathMeasure {
+ method public float getLength();
+ method public long getPosition(float distance);
+ method public boolean getSegment(float startDistance, float stopDistance, androidx.compose.ui.graphics.Path destination, boolean startWithMoveTo);
+ method public long getTangent(float distance);
+ method public void setPath(androidx.compose.ui.graphics.Path? path, boolean forceClosed);
+ property public float length;
+ }
+
+ public final class AndroidPathMeasure_androidKt {
+ method public static androidx.compose.ui.graphics.PathMeasure PathMeasure();
+ }
+
+ public final class AndroidPath_androidKt {
+ method public static androidx.compose.ui.graphics.Path Path();
+ method public static inline android.graphics.Path asAndroidPath(androidx.compose.ui.graphics.Path);
+ method public static androidx.compose.ui.graphics.Path asComposePath(android.graphics.Path);
+ }
+
+ public final class AndroidRenderEffect_androidKt {
+ method public static androidx.compose.ui.graphics.RenderEffect asComposeRenderEffect(android.graphics.RenderEffect);
+ }
+
+ public final class AndroidTileMode_androidKt {
+ method public static boolean isSupported(int);
+ method public static android.graphics.Shader.TileMode toAndroidTileMode(int);
+ method public static int toComposeTileMode(android.graphics.Shader.TileMode);
+ }
+
+ public final class AndroidVertexMode_androidKt {
+ method public static android.graphics.Canvas.VertexMode toAndroidVertexMode(int);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BlendMode {
+ field public static final androidx.compose.ui.graphics.BlendMode.Companion Companion;
+ }
+
+ public static final class BlendMode.Companion {
+ method public int getClear();
+ method public int getColor();
+ method public int getColorBurn();
+ method public int getColorDodge();
+ method public int getDarken();
+ method public int getDifference();
+ method public int getDst();
+ method public int getDstAtop();
+ method public int getDstIn();
+ method public int getDstOut();
+ method public int getDstOver();
+ method public int getExclusion();
+ method public int getHardlight();
+ method public int getHue();
+ method public int getLighten();
+ method public int getLuminosity();
+ method public int getModulate();
+ method public int getMultiply();
+ method public int getOverlay();
+ method public int getPlus();
+ method public int getSaturation();
+ method public int getScreen();
+ method public int getSoftlight();
+ method public int getSrc();
+ method public int getSrcAtop();
+ method public int getSrcIn();
+ method public int getSrcOut();
+ method public int getSrcOver();
+ method public int getXor();
+ property public final int Clear;
+ property public final int Color;
+ property public final int ColorBurn;
+ property public final int ColorDodge;
+ property public final int Darken;
+ property public final int Difference;
+ property public final int Dst;
+ property public final int DstAtop;
+ property public final int DstIn;
+ property public final int DstOut;
+ property public final int DstOver;
+ property public final int Exclusion;
+ property public final int Hardlight;
+ property public final int Hue;
+ property public final int Lighten;
+ property public final int Luminosity;
+ property public final int Modulate;
+ property public final int Multiply;
+ property public final int Overlay;
+ property public final int Plus;
+ property public final int Saturation;
+ property public final int Screen;
+ property public final int Softlight;
+ property public final int Src;
+ property public final int SrcAtop;
+ property public final int SrcIn;
+ property public final int SrcOut;
+ property public final int SrcOver;
+ property public final int Xor;
+ }
+
+ @androidx.compose.runtime.Immutable public final class BlurEffect extends androidx.compose.ui.graphics.RenderEffect {
+ ctor public BlurEffect(androidx.compose.ui.graphics.RenderEffect? renderEffect, float radiusX, float radiusY, int edgeTreatment);
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) protected android.graphics.RenderEffect createRenderEffect();
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class Brush {
+ method public abstract void applyTo(long size, androidx.compose.ui.graphics.Paint p, float alpha);
+ method public long getIntrinsicSize();
+ property public long intrinsicSize;
+ field public static final androidx.compose.ui.graphics.Brush.Companion Companion;
+ }
+
+ public static final class Brush.Companion {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startX, optional float endX, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startX, optional float endX, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long start, optional long end, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long start, optional long end, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center, optional float radius, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center, optional float radius, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startY, optional float endY, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startY, optional float endY, optional int tileMode);
+ }
+
+ public final class BrushKt {
+ method public static androidx.compose.ui.graphics.ShaderBrush ShaderBrush(android.graphics.Shader shader);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Canvas {
+ method public void clipPath(androidx.compose.ui.graphics.Path path, optional int clipOp);
+ method public default void clipRect(androidx.compose.ui.geometry.Rect rect, optional int clipOp);
+ method public void clipRect(float left, float top, float right, float bottom, optional int clipOp);
+ method public void concat(float[] matrix);
+ method public void disableZ();
+ method public default void drawArc(androidx.compose.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
+ method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
+ method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
+ method public void drawCircle(long center, float radius, androidx.compose.ui.graphics.Paint paint);
+ method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, long topLeftOffset, androidx.compose.ui.graphics.Paint paint);
+ method public void drawImageRect(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, androidx.compose.ui.graphics.Paint paint);
+ method public void drawLine(long p1, long p2, androidx.compose.ui.graphics.Paint paint);
+ method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
+ method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Paint paint);
+ method public void drawPoints(int pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRawPoints(int pointMode, float[] points, androidx.compose.ui.graphics.Paint paint);
+ method public default void drawRect(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRect(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.compose.ui.graphics.Paint paint);
+ method public void drawVertices(androidx.compose.ui.graphics.Vertices vertices, int blendMode, androidx.compose.ui.graphics.Paint paint);
+ method public void enableZ();
+ method public void restore();
+ method public void rotate(float degrees);
+ method public void save();
+ method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.compose.ui.graphics.Paint paint);
+ method public void scale(float sx, optional float sy);
+ method public void skew(float sx, float sy);
+ method public default void skewRad(float sxRad, float syRad);
+ method public void translate(float dx, float dy);
+ }
+
+ public final class CanvasHolder {
+ ctor public CanvasHolder();
+ method public inline void drawInto(android.graphics.Canvas targetCanvas, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class CanvasKt {
+ method public static androidx.compose.ui.graphics.Canvas Canvas(androidx.compose.ui.graphics.ImageBitmap image);
+ method public static void rotate(androidx.compose.ui.graphics.Canvas, float degrees, float pivotX, float pivotY);
+ method public static void rotateRad(androidx.compose.ui.graphics.Canvas, float radians, optional float pivotX, optional float pivotY);
+ method public static void scale(androidx.compose.ui.graphics.Canvas, float sx, optional float sy, float pivotX, float pivotY);
+ method public static inline void withSave(androidx.compose.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static inline void withSaveLayer(androidx.compose.ui.graphics.Canvas, androidx.compose.ui.geometry.Rect bounds, androidx.compose.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ClipOp {
+ field public static final androidx.compose.ui.graphics.ClipOp.Companion Companion;
+ }
+
+ public static final class ClipOp.Companion {
+ method public int getDifference();
+ method public int getIntersect();
+ property public final int Difference;
+ property public final int Intersect;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Color {
+ ctor public Color(long value);
+ method @androidx.compose.runtime.Stable public operator float component1();
+ method @androidx.compose.runtime.Stable public operator float component2();
+ method @androidx.compose.runtime.Stable public operator float component3();
+ method @androidx.compose.runtime.Stable public operator float component4();
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.graphics.colorspace.ColorSpace component5();
+ method public long convert(androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
+ method @androidx.compose.runtime.Stable public long copy(optional float alpha, optional float red, optional float green, optional float blue);
+ method public float getAlpha();
+ method public float getBlue();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getColorSpace();
+ method public float getGreen();
+ method public float getRed();
+ method public long getValue();
+ property @androidx.compose.runtime.Stable public final float alpha;
+ property @androidx.compose.runtime.Stable public final float blue;
+ property @androidx.compose.runtime.Stable public final androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace;
+ property @androidx.compose.runtime.Stable public final float green;
+ property @androidx.compose.runtime.Stable public final float red;
+ property public final long value;
+ field public static final androidx.compose.ui.graphics.Color.Companion Companion;
+ }
+
+ public static final class Color.Companion {
+ method public long getBlack();
+ method public long getBlue();
+ method public long getCyan();
+ method public long getDarkGray();
+ method public long getGray();
+ method public long getGreen();
+ method public long getLightGray();
+ method public long getMagenta();
+ method public long getRed();
+ method public long getTransparent();
+ method public long getUnspecified();
+ method public long getWhite();
+ method public long getYellow();
+ method public long hsl(float hue, float saturation, float lightness, optional float alpha, optional androidx.compose.ui.graphics.colorspace.Rgb colorSpace);
+ method public long hsv(float hue, float saturation, float value, optional float alpha, optional androidx.compose.ui.graphics.colorspace.Rgb colorSpace);
+ property public final long Black;
+ property public final long Blue;
+ property public final long Cyan;
+ property public final long DarkGray;
+ property public final long Gray;
+ property public final long Green;
+ property public final long LightGray;
+ property public final long Magenta;
+ property public final long Red;
+ property public final long Transparent;
+ property public final long Unspecified;
+ property public final long White;
+ property public final long Yellow;
+ }
+
+ @androidx.compose.runtime.Immutable public final class ColorFilter {
+ field public static final androidx.compose.ui.graphics.ColorFilter.Companion Companion;
+ }
+
+ public static final class ColorFilter.Companion {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter colorMatrix(float[] colorMatrix);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter lighting(long multiply, long add);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter tint(long color, optional int blendMode);
+ }
+
+ public final class ColorKt {
+ method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, optional float alpha, optional androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
+ method @androidx.compose.runtime.Stable public static long Color(int color);
+ method @androidx.compose.runtime.Stable public static long Color(long color);
+ method @androidx.compose.runtime.Stable public static long Color(int red, int green, int blue, optional int alpha);
+ method @androidx.compose.runtime.Stable public static long compositeOver(long, long background);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static float luminance(long);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.Color> block);
+ method @androidx.compose.runtime.Stable public static int toArgb(long);
+ }
+
+ @kotlin.jvm.JvmInline public final value class ColorMatrix {
+ ctor public ColorMatrix(optional float[] values);
+ method public void convertRgbToYuv();
+ method public void convertYuvToRgb();
+ method public inline operator float get(int row, int column);
+ method public float[] getValues();
+ method public void reset();
+ method public inline operator void set(int row, int column, float v);
+ method public void set(float[] src);
+ method public void setToRotateBlue(float degrees);
+ method public void setToRotateGreen(float degrees);
+ method public void setToRotateRed(float degrees);
+ method public void setToSaturation(float sat);
+ method public void setToScale(float redScale, float greenScale, float blueScale, float alphaScale);
+ method public operator void timesAssign(float[] colorMatrix);
+ property public final float[] values;
+ }
+
+ @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalGraphicsApi {
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class FilterQuality {
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.graphics.FilterQuality.Companion Companion;
+ }
+
+ public static final class FilterQuality.Companion {
+ method public int getHigh();
+ method public int getLow();
+ method public int getMedium();
+ method public int getNone();
+ property public final int High;
+ property public final int Low;
+ property public final int Medium;
+ property public final int None;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ImageBitmap {
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getColorSpace();
+ method public int getConfig();
+ method public boolean getHasAlpha();
+ method public int getHeight();
+ method public int getWidth();
+ method public void prepareToDraw();
+ method public void readPixels(int[] buffer, optional int startX, optional int startY, optional int width, optional int height, optional int bufferOffset, optional int stride);
+ property public abstract androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace;
+ property public abstract int config;
+ property public abstract boolean hasAlpha;
+ property public abstract int height;
+ property public abstract int width;
+ field public static final androidx.compose.ui.graphics.ImageBitmap.Companion Companion;
+ }
+
+ public static final class ImageBitmap.Companion {
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ImageBitmapConfig {
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.graphics.ImageBitmapConfig.Companion Companion;
+ }
+
+ public static final class ImageBitmapConfig.Companion {
+ method public int getAlpha8();
+ method public int getArgb8888();
+ method public int getF16();
+ method public int getGpu();
+ method public int getRgb565();
+ property public final int Alpha8;
+ property public final int Argb8888;
+ property public final int F16;
+ property public final int Gpu;
+ property public final int Rgb565;
+ }
+
+ public final class ImageBitmapKt {
+ method public static androidx.compose.ui.graphics.ImageBitmap ImageBitmap(int width, int height, optional int config, optional boolean hasAlpha, optional androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
+ method public static androidx.compose.ui.graphics.PixelMap toPixelMap(androidx.compose.ui.graphics.ImageBitmap, optional int startX, optional int startY, optional int width, optional int height, optional int[] buffer, optional int bufferOffset, optional int stride);
+ }
+
+ @androidx.compose.runtime.Immutable public final class LinearGradient extends androidx.compose.ui.graphics.ShaderBrush {
+ method public android.graphics.Shader createShader(long size);
+ property public long intrinsicSize;
+ }
+
+ @kotlin.jvm.JvmInline public final value class Matrix {
+ ctor public Matrix(optional float[] values);
+ method public inline operator float get(int row, int column);
+ method public float[] getValues();
+ method public void invert();
+ method public long map(long point);
+ method public androidx.compose.ui.geometry.Rect map(androidx.compose.ui.geometry.Rect rect);
+ method public void map(androidx.compose.ui.geometry.MutableRect rect);
+ method public void reset();
+ method public void rotateX(float degrees);
+ method public void rotateY(float degrees);
+ method public void rotateZ(float degrees);
+ method public void scale(optional float x, optional float y, optional float z);
+ method public inline operator void set(int row, int column, float v);
+ method public void setFrom(float[] matrix);
+ method public operator void timesAssign(float[] m);
+ method public void translate(optional float x, optional float y, optional float z);
+ property public final float[] values;
+ field public static final androidx.compose.ui.graphics.Matrix.Companion Companion;
+ field public static final int Perspective0 = 3; // 0x3
+ field public static final int Perspective1 = 7; // 0x7
+ field public static final int Perspective2 = 15; // 0xf
+ field public static final int ScaleX = 0; // 0x0
+ field public static final int ScaleY = 5; // 0x5
+ field public static final int ScaleZ = 10; // 0xa
+ field public static final int SkewX = 4; // 0x4
+ field public static final int SkewY = 1; // 0x1
+ field public static final int TranslateX = 12; // 0xc
+ field public static final int TranslateY = 13; // 0xd
+ field public static final int TranslateZ = 14; // 0xe
+ }
+
+ public static final class Matrix.Companion {
+ }
+
+ public final class MatrixKt {
+ method public static boolean isIdentity(float[]);
+ }
+
+ @androidx.compose.runtime.Immutable public final class OffsetEffect extends androidx.compose.ui.graphics.RenderEffect {
+ ctor public OffsetEffect(androidx.compose.ui.graphics.RenderEffect? renderEffect, long offset);
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) protected android.graphics.RenderEffect createRenderEffect();
+ }
+
+ public abstract sealed class Outline {
+ method public abstract androidx.compose.ui.geometry.Rect getBounds();
+ property public abstract androidx.compose.ui.geometry.Rect bounds;
+ }
+
+ public static final class Outline.Generic extends androidx.compose.ui.graphics.Outline {
+ ctor public Outline.Generic(androidx.compose.ui.graphics.Path path);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public androidx.compose.ui.graphics.Path getPath();
+ property public androidx.compose.ui.geometry.Rect bounds;
+ property public final androidx.compose.ui.graphics.Path path;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class Outline.Rectangle extends androidx.compose.ui.graphics.Outline {
+ ctor public Outline.Rectangle(androidx.compose.ui.geometry.Rect rect);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public androidx.compose.ui.geometry.Rect getRect();
+ property public androidx.compose.ui.geometry.Rect bounds;
+ property public final androidx.compose.ui.geometry.Rect rect;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class Outline.Rounded extends androidx.compose.ui.graphics.Outline {
+ ctor public Outline.Rounded(androidx.compose.ui.geometry.RoundRect roundRect);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public androidx.compose.ui.geometry.RoundRect getRoundRect();
+ property public androidx.compose.ui.geometry.Rect bounds;
+ property public final androidx.compose.ui.geometry.RoundRect roundRect;
+ }
+
+ public final class OutlineKt {
+ method public static void addOutline(androidx.compose.ui.graphics.Path, androidx.compose.ui.graphics.Outline outline);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public static void drawOutline(androidx.compose.ui.graphics.Canvas, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Paint paint);
+ }
+
+ public interface Paint {
+ method public android.graphics.Paint asFrameworkPaint();
+ method public float getAlpha();
+ method public int getBlendMode();
+ method public long getColor();
+ method public androidx.compose.ui.graphics.ColorFilter? getColorFilter();
+ method public int getFilterQuality();
+ method public androidx.compose.ui.graphics.PathEffect? getPathEffect();
+ method public android.graphics.Shader? getShader();
+ method public int getStrokeCap();
+ method public int getStrokeJoin();
+ method public float getStrokeMiterLimit();
+ method public float getStrokeWidth();
+ method public int getStyle();
+ method public boolean isAntiAlias();
+ method public void setAlpha(float);
+ method public void setAntiAlias(boolean);
+ method public void setBlendMode(int);
+ method public void setColor(long);
+ method public void setColorFilter(androidx.compose.ui.graphics.ColorFilter?);
+ method public void setFilterQuality(int);
+ method public void setPathEffect(androidx.compose.ui.graphics.PathEffect?);
+ method public void setShader(android.graphics.Shader?);
+ method public void setStrokeCap(int);
+ method public void setStrokeJoin(int);
+ method public void setStrokeMiterLimit(float);
+ method public void setStrokeWidth(float);
+ method public void setStyle(int);
+ property public abstract float alpha;
+ property public abstract int blendMode;
+ property public abstract long color;
+ property public abstract androidx.compose.ui.graphics.ColorFilter? colorFilter;
+ property public abstract int filterQuality;
+ property public abstract boolean isAntiAlias;
+ property public abstract androidx.compose.ui.graphics.PathEffect? pathEffect;
+ property public abstract android.graphics.Shader? shader;
+ property public abstract int strokeCap;
+ property public abstract int strokeJoin;
+ property public abstract float strokeMiterLimit;
+ property public abstract float strokeWidth;
+ property public abstract int style;
+ }
+
+ public final class PaintKt {
+ method public static androidx.compose.ui.graphics.Paint Paint();
+ field public static final float DefaultAlpha = 1.0f;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PaintingStyle {
+ field public static final androidx.compose.ui.graphics.PaintingStyle.Companion Companion;
+ }
+
+ public static final class PaintingStyle.Companion {
+ method public int getFill();
+ method public int getStroke();
+ property public final int Fill;
+ property public final int Stroke;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Path {
+ method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+ method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+ method public void addOval(androidx.compose.ui.geometry.Rect oval);
+ method public void addPath(androidx.compose.ui.graphics.Path path, optional long offset);
+ method public void addRect(androidx.compose.ui.geometry.Rect rect);
+ method public void addRoundRect(androidx.compose.ui.geometry.RoundRect roundRect);
+ method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+ method public default void arcToRad(androidx.compose.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+ method public void close();
+ method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public int getFillType();
+ method public boolean isConvex();
+ method public boolean isEmpty();
+ method public void lineTo(float x, float y);
+ method public void moveTo(float x, float y);
+ method public boolean op(androidx.compose.ui.graphics.Path path1, androidx.compose.ui.graphics.Path path2, int operation);
+ method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+ method public void relativeCubicTo(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public void relativeLineTo(float dx, float dy);
+ method public void relativeMoveTo(float dx, float dy);
+ method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
+ method public void reset();
+ method public void setFillType(int);
+ method public void translate(long offset);
+ property public abstract int fillType;
+ property public abstract boolean isConvex;
+ property public abstract boolean isEmpty;
+ field public static final androidx.compose.ui.graphics.Path.Companion Companion;
+ }
+
+ public static final class Path.Companion {
+ method public androidx.compose.ui.graphics.Path combine(int operation, androidx.compose.ui.graphics.Path path1, androidx.compose.ui.graphics.Path path2);
+ }
+
+ public interface PathEffect {
+ field public static final androidx.compose.ui.graphics.PathEffect.Companion Companion;
+ }
+
+ public static final class PathEffect.Companion {
+ method public androidx.compose.ui.graphics.PathEffect chainPathEffect(androidx.compose.ui.graphics.PathEffect outer, androidx.compose.ui.graphics.PathEffect inner);
+ method public androidx.compose.ui.graphics.PathEffect cornerPathEffect(float radius);
+ method public androidx.compose.ui.graphics.PathEffect dashPathEffect(float[] intervals, optional float phase);
+ method public androidx.compose.ui.graphics.PathEffect stampedPathEffect(androidx.compose.ui.graphics.Path shape, float advance, float phase, int style);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PathFillType {
+ field public static final androidx.compose.ui.graphics.PathFillType.Companion Companion;
+ }
+
+ public static final class PathFillType.Companion {
+ method public int getEvenOdd();
+ method public int getNonZero();
+ property public final int EvenOdd;
+ property public final int NonZero;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PathMeasure {
+ method public float getLength();
+ method public long getPosition(float distance);
+ method public boolean getSegment(float startDistance, float stopDistance, androidx.compose.ui.graphics.Path destination, optional boolean startWithMoveTo);
+ method public long getTangent(float distance);
+ method public void setPath(androidx.compose.ui.graphics.Path? path, boolean forceClosed);
+ property public abstract float length;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PathOperation {
+ field public static final androidx.compose.ui.graphics.PathOperation.Companion Companion;
+ }
+
+ public static final class PathOperation.Companion {
+ method public int getDifference();
+ method public int getIntersect();
+ method public int getReverseDifference();
+ method public int getUnion();
+ method public int getXor();
+ property public final int Difference;
+ property public final int Intersect;
+ property public final int ReverseDifference;
+ property public final int Union;
+ property public final int Xor;
+ }
+
+ public final class PathOperationKt {
+ method @Deprecated public static int getDifference(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getIntersect(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getReverseDifference(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getUnion(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getXor(androidx.compose.ui.graphics.PathOperation.Companion);
+ }
+
+ public final class PixelMap {
+ ctor public PixelMap(int[] buffer, int width, int height, int bufferOffset, int stride);
+ method public operator long get(int x, int y);
+ method public int[] getBuffer();
+ method public int getBufferOffset();
+ method public int getHeight();
+ method public int getStride();
+ method public int getWidth();
+ property public final int[] buffer;
+ property public final int bufferOffset;
+ property public final int height;
+ property public final int stride;
+ property public final int width;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PointMode {
+ field public static final androidx.compose.ui.graphics.PointMode.Companion Companion;
+ }
+
+ public static final class PointMode.Companion {
+ method public int getLines();
+ method public int getPoints();
+ method public int getPolygon();
+ property public final int Lines;
+ property public final int Points;
+ property public final int Polygon;
+ }
+
+ @androidx.compose.runtime.Immutable public final class RadialGradient extends androidx.compose.ui.graphics.ShaderBrush {
+ method public android.graphics.Shader createShader(long size);
+ property public long intrinsicSize;
+ }
+
+ public final class RectHelper_androidKt {
+ method @Deprecated public static android.graphics.Rect toAndroidRect(androidx.compose.ui.geometry.Rect);
+ method public static android.graphics.Rect toAndroidRect(androidx.compose.ui.unit.IntRect);
+ method public static android.graphics.RectF toAndroidRectF(androidx.compose.ui.geometry.Rect);
+ method public static androidx.compose.ui.unit.IntRect toComposeIntRect(android.graphics.Rect);
+ method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.Rect);
+ }
+
+ public final class RectangleShapeKt {
+ method public static androidx.compose.ui.graphics.Shape getRectangleShape();
+ property public static final androidx.compose.ui.graphics.Shape RectangleShape;
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class RenderEffect {
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) public final android.graphics.RenderEffect asAndroidRenderEffect();
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) protected abstract android.graphics.RenderEffect createRenderEffect();
+ method public boolean isSupported();
+ }
+
+ public final class RenderEffectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.BlurEffect BlurEffect(float radiusX, float radiusY, optional int edgeTreatment);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.OffsetEffect OffsetEffect(float offsetX, float offsetY);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract class ShaderBrush extends androidx.compose.ui.graphics.Brush {
+ ctor public ShaderBrush();
+ method public final void applyTo(long size, androidx.compose.ui.graphics.Paint p, float alpha);
+ method public abstract android.graphics.Shader createShader(long size);
+ }
+
+ public final class ShaderKt {
+ method public static android.graphics.Shader ImageShader(androidx.compose.ui.graphics.ImageBitmap image, optional int tileModeX, optional int tileModeY);
+ method public static android.graphics.Shader LinearGradientShader(long from, long to, java.util.List<androidx.compose.ui.graphics.Color> colors, optional java.util.List<java.lang.Float>? colorStops, optional int tileMode);
+ method public static android.graphics.Shader RadialGradientShader(long center, float radius, java.util.List<androidx.compose.ui.graphics.Color> colors, optional java.util.List<java.lang.Float>? colorStops, optional int tileMode);
+ method public static android.graphics.Shader SweepGradientShader(long center, java.util.List<androidx.compose.ui.graphics.Color> colors, optional java.util.List<java.lang.Float>? colorStops);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Shadow {
+ ctor public Shadow(optional @androidx.compose.runtime.Stable long color, optional @androidx.compose.runtime.Stable long offset, optional @androidx.compose.runtime.Stable float blurRadius);
+ method public androidx.compose.ui.graphics.Shadow copy(optional long color, optional long offset, optional float blurRadius);
+ method public float getBlurRadius();
+ method public long getColor();
+ method public long getOffset();
+ property public final float blurRadius;
+ property public final long color;
+ property public final long offset;
+ field public static final androidx.compose.ui.graphics.Shadow.Companion Companion;
+ }
+
+ public static final class Shadow.Companion {
+ method public androidx.compose.ui.graphics.Shadow getNone();
+ property public final androidx.compose.ui.graphics.Shadow None;
+ }
+
+ public final class ShadowKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public interface Shape {
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
+ }
+
+ @androidx.compose.runtime.Immutable public final class SolidColor extends androidx.compose.ui.graphics.Brush {
+ ctor public SolidColor(long value);
+ method public void applyTo(long size, androidx.compose.ui.graphics.Paint p, float alpha);
+ method public long getValue();
+ property public final long value;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class StampedPathEffectStyle {
+ field public static final androidx.compose.ui.graphics.StampedPathEffectStyle.Companion Companion;
+ }
+
+ public static final class StampedPathEffectStyle.Companion {
+ method public int getMorph();
+ method public int getRotate();
+ method public int getTranslate();
+ property public final int Morph;
+ property public final int Rotate;
+ property public final int Translate;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class StrokeCap {
+ field public static final androidx.compose.ui.graphics.StrokeCap.Companion Companion;
+ }
+
+ public static final class StrokeCap.Companion {
+ method public int getButt();
+ method public int getRound();
+ method public int getSquare();
+ property public final int Butt;
+ property public final int Round;
+ property public final int Square;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class StrokeJoin {
+ field public static final androidx.compose.ui.graphics.StrokeJoin.Companion Companion;
+ }
+
+ public static final class StrokeJoin.Companion {
+ method public int getBevel();
+ method public int getMiter();
+ method public int getRound();
+ property public final int Bevel;
+ property public final int Miter;
+ property public final int Round;
+ }
+
+ @androidx.compose.runtime.Immutable public final class SweepGradient extends androidx.compose.ui.graphics.ShaderBrush {
+ method public android.graphics.Shader createShader(long size);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TileMode {
+ field public static final androidx.compose.ui.graphics.TileMode.Companion Companion;
+ }
+
+ public static final class TileMode.Companion {
+ method public int getClamp();
+ method public int getDecal();
+ method public int getMirror();
+ method public int getRepeated();
+ property public final int Clamp;
+ property public final int Decal;
+ property public final int Mirror;
+ property public final int Repeated;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class VertexMode {
+ field public static final androidx.compose.ui.graphics.VertexMode.Companion Companion;
+ }
+
+ public static final class VertexMode.Companion {
+ method public int getTriangleFan();
+ method public int getTriangleStrip();
+ method public int getTriangles();
+ property public final int TriangleFan;
+ property public final int TriangleStrip;
+ property public final int Triangles;
+ }
+
+ public final class Vertices {
+ ctor public Vertices(int vertexMode, java.util.List<androidx.compose.ui.geometry.Offset> positions, java.util.List<androidx.compose.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.compose.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
+ method public int[] getColors();
+ method public short[] getIndices();
+ method public float[] getPositions();
+ method public float[] getTextureCoordinates();
+ method public int getVertexMode();
+ property public final int[] colors;
+ property public final short[] indices;
+ property public final float[] positions;
+ property public final float[] textureCoordinates;
+ property public final int vertexMode;
+ }
+
+}
+
+package androidx.compose.ui.graphics.colorspace {
+
+ public abstract class Adaptation {
+ field public static final androidx.compose.ui.graphics.colorspace.Adaptation.Companion Companion;
+ }
+
+ public static final class Adaptation.Companion {
+ method public androidx.compose.ui.graphics.colorspace.Adaptation getBradford();
+ method public androidx.compose.ui.graphics.colorspace.Adaptation getCiecat02();
+ method public androidx.compose.ui.graphics.colorspace.Adaptation getVonKries();
+ property public final androidx.compose.ui.graphics.colorspace.Adaptation Bradford;
+ property public final androidx.compose.ui.graphics.colorspace.Adaptation Ciecat02;
+ property public final androidx.compose.ui.graphics.colorspace.Adaptation VonKries;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ColorModel {
+ method public int getComponentCount();
+ property @androidx.compose.runtime.Stable public final int componentCount;
+ field public static final androidx.compose.ui.graphics.colorspace.ColorModel.Companion Companion;
+ }
+
+ public static final class ColorModel.Companion {
+ method public long getCmyk();
+ method public long getLab();
+ method public long getRgb();
+ method public long getXyz();
+ property public final long Cmyk;
+ property public final long Lab;
+ property public final long Rgb;
+ property public final long Xyz;
+ }
+
+ public abstract class ColorSpace {
+ ctor public ColorSpace(String name, long model);
+ method public final float[] fromXyz(float x, float y, float z);
+ method public abstract float[] fromXyz(float[] v);
+ method public final int getComponentCount();
+ method public abstract float getMaxValue(int component);
+ method public abstract float getMinValue(int component);
+ method public final long getModel();
+ method public final String getName();
+ method public boolean isSrgb();
+ method public abstract boolean isWideGamut();
+ method public final float[] toXyz(float r, float g, float b);
+ method public abstract float[] toXyz(float[] v);
+ property public final int componentCount;
+ property public boolean isSrgb;
+ property public abstract boolean isWideGamut;
+ property public final long model;
+ property public final String name;
+ }
+
+ public final class ColorSpaceKt {
+ method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, optional androidx.compose.ui.graphics.colorspace.Adaptation adaptation);
+ method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint);
+ method public static androidx.compose.ui.graphics.colorspace.Connector connect(androidx.compose.ui.graphics.colorspace.ColorSpace, optional androidx.compose.ui.graphics.colorspace.ColorSpace destination, optional int intent);
+ }
+
+ public final class ColorSpaces {
+ method public androidx.compose.ui.graphics.colorspace.Rgb getAces();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getAcescg();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getAdobeRgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getBt2020();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getBt709();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getCieLab();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getCieXyz();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getDciP3();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getDisplayP3();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getExtendedSrgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getLinearExtendedSrgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getLinearSrgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getNtsc1953();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getOklab();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getProPhotoRgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getSmpteC();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getSrgb();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace? match(float[] toXYZD50, androidx.compose.ui.graphics.colorspace.TransferParameters function);
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Aces;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Acescg;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb AdobeRgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Bt2020;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Bt709;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace CieLab;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace CieXyz;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb DciP3;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb DisplayP3;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb ExtendedSrgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb LinearExtendedSrgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb LinearSrgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Ntsc1953;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace Oklab;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb ProPhotoRgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb SmpteC;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Srgb;
+ field public static final androidx.compose.ui.graphics.colorspace.ColorSpaces INSTANCE;
+ }
+
+ public class Connector {
+ method public final androidx.compose.ui.graphics.colorspace.ColorSpace getDestination();
+ method public final int getRenderIntent();
+ method public final androidx.compose.ui.graphics.colorspace.ColorSpace getSource();
+ method public final float[] transform(float r, float g, float b);
+ method public float[] transform(float[] v);
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace destination;
+ property public final int renderIntent;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace source;
+ }
+
+ public final class Illuminant {
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getA();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getB();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getC();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD50();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD55();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD60();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD65();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD75();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getE();
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint A;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint B;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint C;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D50;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D55;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D60;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D65;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D75;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint E;
+ field public static final androidx.compose.ui.graphics.colorspace.Illuminant INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class RenderIntent {
+ field public static final androidx.compose.ui.graphics.colorspace.RenderIntent.Companion Companion;
+ }
+
+ public static final class RenderIntent.Companion {
+ method public int getAbsolute();
+ method public int getPerceptual();
+ method public int getRelative();
+ method public int getSaturation();
+ property public final int Absolute;
+ property public final int Perceptual;
+ property public final int Relative;
+ property public final int Saturation;
+ }
+
+ public final class Rgb extends androidx.compose.ui.graphics.colorspace.ColorSpace {
+ ctor public Rgb(String name, float[] toXYZ, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf, float min, float max);
+ ctor public Rgb(String name, float[] toXYZ, androidx.compose.ui.graphics.colorspace.TransferParameters function);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, androidx.compose.ui.graphics.colorspace.TransferParameters function);
+ ctor public Rgb(String name, float[] toXYZ, double gamma);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, double gamma);
+ method public float[] fromLinear(float r, float g, float b);
+ method public float[] fromLinear(float[] v);
+ method public float[] fromXyz(float[] v);
+ method public kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> getEotf();
+ method public float[] getInverseTransform();
+ method public float[] getInverseTransform(float[] inverseTransform);
+ method public float getMaxValue(int component);
+ method public float getMinValue(int component);
+ method public kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> getOetf();
+ method public float[] getPrimaries();
+ method public float[] getPrimaries(float[] primaries);
+ method public androidx.compose.ui.graphics.colorspace.TransferParameters? getTransferParameters();
+ method public float[] getTransform();
+ method public float[] getTransform(float[] transform);
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getWhitePoint();
+ method public boolean isWideGamut();
+ method public float[] toLinear(float r, float g, float b);
+ method public float[] toLinear(float[] v);
+ method public float[] toXyz(float[] v);
+ property public final kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> eotf;
+ property public boolean isSrgb;
+ property public boolean isWideGamut;
+ property public final kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> oetf;
+ property public final androidx.compose.ui.graphics.colorspace.TransferParameters? transferParameters;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint;
+ }
+
+ public final class TransferParameters {
+ ctor public TransferParameters(double gamma, double a, double b, double c, double d, optional double e, optional double f);
+ method public double component1();
+ method public double component2();
+ method public double component3();
+ method public double component4();
+ method public double component5();
+ method public double component6();
+ method public double component7();
+ method public androidx.compose.ui.graphics.colorspace.TransferParameters copy(double gamma, double a, double b, double c, double d, double e, double f);
+ method public double getA();
+ method public double getB();
+ method public double getC();
+ method public double getD();
+ method public double getE();
+ method public double getF();
+ method public double getGamma();
+ property public final double a;
+ property public final double b;
+ property public final double c;
+ property public final double d;
+ property public final double e;
+ property public final double f;
+ property public final double gamma;
+ }
+
+ public final class WhitePoint {
+ ctor public WhitePoint(float x, float y);
+ ctor public WhitePoint(float x, float y, float z);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+}
+
+package androidx.compose.ui.graphics.drawscope {
+
+ public final class CanvasDrawScope implements androidx.compose.ui.graphics.drawscope.DrawScope {
+ ctor public CanvasDrawScope();
+ method public inline void draw(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public void drawArc(androidx.compose.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawArc(long color, float startAngle, float sweepAngle, boolean useCenter, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawCircle(androidx.compose.ui.graphics.Brush brush, float radius, long center, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawCircle(long color, float radius, long center, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, long topLeft, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method @Deprecated public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, long srcOffset, long srcSize, long dstOffset, long dstSize, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawLine(androidx.compose.ui.graphics.Brush brush, long start, long end, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawLine(long color, long start, long end, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawOval(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawOval(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRect(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, long cornerRadius, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRoundRect(long color, long topLeft, long size, long cornerRadius, androidx.compose.ui.graphics.drawscope.DrawStyle style, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public float getDensity();
+ method public androidx.compose.ui.graphics.drawscope.DrawContext getDrawContext();
+ method public float getFontScale();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ property public float density;
+ property public androidx.compose.ui.graphics.drawscope.DrawContext drawContext;
+ property public float fontScale;
+ property public androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ContentDrawScope extends androidx.compose.ui.graphics.drawscope.DrawScope {
+ method public void drawContent();
+ }
+
+ public interface DrawContext {
+ method public androidx.compose.ui.graphics.Canvas getCanvas();
+ method public long getSize();
+ method public androidx.compose.ui.graphics.drawscope.DrawTransform getTransform();
+ method public void setSize(long);
+ property public abstract androidx.compose.ui.graphics.Canvas canvas;
+ property public abstract long size;
+ property public abstract androidx.compose.ui.graphics.drawscope.DrawTransform transform;
+ }
+
+ @androidx.compose.ui.graphics.drawscope.DrawScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawScope extends androidx.compose.ui.unit.Density {
+ method public void drawArc(androidx.compose.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawArc(long color, float startAngle, float sweepAngle, boolean useCenter, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawCircle(androidx.compose.ui.graphics.Brush brush, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawCircle(long color, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public default void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode, optional int filterQuality);
+ method @Deprecated public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawLine(androidx.compose.ui.graphics.Brush brush, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawLine(long color, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawOval(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawOval(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRect(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional long cornerRadius, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRoundRect(long color, optional long topLeft, optional long size, optional long cornerRadius, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public default long getCenter();
+ method public androidx.compose.ui.graphics.drawscope.DrawContext getDrawContext();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public default long getSize();
+ property public default long center;
+ property public abstract androidx.compose.ui.graphics.drawscope.DrawContext drawContext;
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public default long size;
+ field public static final androidx.compose.ui.graphics.drawscope.DrawScope.Companion Companion;
+ }
+
+ public static final class DrawScope.Companion {
+ method public int getDefaultBlendMode();
+ method public int getDefaultFilterQuality();
+ property public final int DefaultBlendMode;
+ property public final int DefaultFilterQuality;
+ }
+
+ public final class DrawScopeKt {
+ method public static inline void clipPath(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Path path, optional int clipOp, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void clipRect(androidx.compose.ui.graphics.drawscope.DrawScope, optional float left, optional float top, optional float right, optional float bottom, optional int clipOp, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void drawIntoCanvas(androidx.compose.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float inset, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, optional float horizontal, optional float vertical, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void rotate(androidx.compose.ui.graphics.drawscope.DrawScope, float degrees, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawScope, float radians, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawScope, float scaleX, float scaleY, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawScope, float scale, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void translate(androidx.compose.ui.graphics.drawscope.DrawScope, optional float left, optional float top, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void withTransform(androidx.compose.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawTransform,kotlin.Unit> transformBlock, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> drawBlock);
+ }
+
+ @kotlin.DslMarker public @interface DrawScopeMarker {
+ }
+
+ public abstract sealed class DrawStyle {
+ }
+
+ @androidx.compose.ui.graphics.drawscope.DrawScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawTransform {
+ method public void clipPath(androidx.compose.ui.graphics.Path path, optional int clipOp);
+ method public void clipRect(optional float left, optional float top, optional float right, optional float bottom, optional int clipOp);
+ method public default long getCenter();
+ method public long getSize();
+ method public void inset(float left, float top, float right, float bottom);
+ method public void rotate(float degrees, optional long pivot);
+ method public void scale(float scaleX, float scaleY, optional long pivot);
+ method public void transform(float[] matrix);
+ method public void translate(optional float left, optional float top);
+ property public default long center;
+ property public abstract long size;
+ }
+
+ public final class DrawTransformKt {
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, optional float horizontal, optional float vertical);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, float inset);
+ method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawTransform, float radians, optional long pivot);
+ method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawTransform, float scale, optional long pivot);
+ }
+
+ public final class Fill extends androidx.compose.ui.graphics.drawscope.DrawStyle {
+ field public static final androidx.compose.ui.graphics.drawscope.Fill INSTANCE;
+ }
+
+ public final class Stroke extends androidx.compose.ui.graphics.drawscope.DrawStyle {
+ ctor public Stroke(optional float width, optional float miter, optional int cap, optional int join, optional androidx.compose.ui.graphics.PathEffect? pathEffect);
+ method public int getCap();
+ method public int getJoin();
+ method public float getMiter();
+ method public androidx.compose.ui.graphics.PathEffect? getPathEffect();
+ method public float getWidth();
+ property public final int cap;
+ property public final int join;
+ property public final float miter;
+ property public final androidx.compose.ui.graphics.PathEffect? pathEffect;
+ property public final float width;
+ field public static final androidx.compose.ui.graphics.drawscope.Stroke.Companion Companion;
+ field public static final float DefaultMiter = 4.0f;
+ field public static final float HairlineWidth = 0.0f;
+ }
+
+ public static final class Stroke.Companion {
+ method public int getDefaultCap();
+ method public int getDefaultJoin();
+ property public final int DefaultCap;
+ property public final int DefaultJoin;
+ }
+
+}
+
+package androidx.compose.ui.graphics.painter {
+
+ public final class BitmapPainter extends androidx.compose.ui.graphics.painter.Painter {
+ ctor public BitmapPainter(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize);
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public long intrinsicSize;
+ }
+
+ public final class BitmapPainterKt {
+ method public static androidx.compose.ui.graphics.painter.BitmapPainter BitmapPainter(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional int filterQuality);
+ }
+
+ public final class BrushPainter extends androidx.compose.ui.graphics.painter.Painter {
+ ctor public BrushPainter(androidx.compose.ui.graphics.Brush brush);
+ method public androidx.compose.ui.graphics.Brush getBrush();
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public final androidx.compose.ui.graphics.Brush brush;
+ property public long intrinsicSize;
+ }
+
+ public final class ColorPainter extends androidx.compose.ui.graphics.painter.Painter {
+ ctor public ColorPainter(long color);
+ method public long getColor();
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public final long color;
+ property public long intrinsicSize;
+ }
+
+ public abstract class Painter {
+ ctor public Painter();
+ method protected boolean applyAlpha(float alpha);
+ method protected boolean applyColorFilter(androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method protected boolean applyLayoutDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public final void draw(androidx.compose.ui.graphics.drawscope.DrawScope, long size, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method public abstract long getIntrinsicSize();
+ method protected abstract void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public abstract long intrinsicSize;
+ }
+
+}
+
+package androidx.compose.ui.graphics.vector {
+
+ public final class PathBuilder {
+ ctor public PathBuilder();
+ method public androidx.compose.ui.graphics.vector.PathBuilder arcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float x1, float y1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder arcToRelative(float a, float b, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float dx1, float dy1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder close();
+ method public androidx.compose.ui.graphics.vector.PathBuilder curveTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public androidx.compose.ui.graphics.vector.PathBuilder curveToRelative(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> getNodes();
+ method public androidx.compose.ui.graphics.vector.PathBuilder horizontalLineTo(float x);
+ method public androidx.compose.ui.graphics.vector.PathBuilder horizontalLineToRelative(float dx);
+ method public androidx.compose.ui.graphics.vector.PathBuilder lineTo(float x, float y);
+ method public androidx.compose.ui.graphics.vector.PathBuilder lineToRelative(float dx, float dy);
+ method public androidx.compose.ui.graphics.vector.PathBuilder moveTo(float x, float y);
+ method public androidx.compose.ui.graphics.vector.PathBuilder moveToRelative(float dx, float dy);
+ method public androidx.compose.ui.graphics.vector.PathBuilder quadTo(float x1, float y1, float x2, float y2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder quadToRelative(float dx1, float dy1, float dx2, float dy2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveCurveTo(float x1, float y1, float x2, float y2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveCurveToRelative(float dx1, float dy1, float dx2, float dy2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveQuadTo(float x1, float y1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveQuadToRelative(float dx1, float dy1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder verticalLineTo(float y);
+ method public androidx.compose.ui.graphics.vector.PathBuilder verticalLineToRelative(float dy);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class PathNode {
+ method public final boolean isCurve();
+ method public final boolean isQuad();
+ property public final boolean isCurve;
+ property public final boolean isQuad;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.ArcTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.ArcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartX, float arcStartY);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public boolean component4();
+ method public boolean component5();
+ method public float component6();
+ method public float component7();
+ method public androidx.compose.ui.graphics.vector.PathNode.ArcTo copy(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartX, float arcStartY);
+ method public float getArcStartX();
+ method public float getArcStartY();
+ method public float getHorizontalEllipseRadius();
+ method public float getTheta();
+ method public float getVerticalEllipseRadius();
+ method public boolean isMoreThanHalf();
+ method public boolean isPositiveArc();
+ property public final float arcStartX;
+ property public final float arcStartY;
+ property public final float horizontalEllipseRadius;
+ property public final boolean isMoreThanHalf;
+ property public final boolean isPositiveArc;
+ property public final float theta;
+ property public final float verticalEllipseRadius;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.Close extends androidx.compose.ui.graphics.vector.PathNode {
+ field public static final androidx.compose.ui.graphics.vector.PathNode.Close INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.CurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.CurveTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public float component5();
+ method public float component6();
+ method public androidx.compose.ui.graphics.vector.PathNode.CurveTo copy(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public float getX1();
+ method public float getX2();
+ method public float getX3();
+ method public float getY1();
+ method public float getY2();
+ method public float getY3();
+ property public final float x1;
+ property public final float x2;
+ property public final float x3;
+ property public final float y1;
+ property public final float y2;
+ property public final float y3;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.HorizontalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.HorizontalTo(float x);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.HorizontalTo copy(float x);
+ method public float getX();
+ property public final float x;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.LineTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.LineTo(float x, float y);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.LineTo copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.MoveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.MoveTo(float x, float y);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.MoveTo copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.QuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.QuadTo(float x1, float y1, float x2, float y2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.QuadTo copy(float x1, float y1, float x2, float y2);
+ method public float getX1();
+ method public float getX2();
+ method public float getY1();
+ method public float getY2();
+ property public final float x1;
+ property public final float x2;
+ property public final float y1;
+ property public final float y2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.ReflectiveCurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.ReflectiveCurveTo(float x1, float y1, float x2, float y2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.ReflectiveCurveTo copy(float x1, float y1, float x2, float y2);
+ method public float getX1();
+ method public float getX2();
+ method public float getY1();
+ method public float getY2();
+ property public final float x1;
+ property public final float x2;
+ property public final float y1;
+ property public final float y2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.ReflectiveQuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.ReflectiveQuadTo(float x, float y);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.ReflectiveQuadTo copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeArcTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeArcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartDx, float arcStartDy);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public boolean component4();
+ method public boolean component5();
+ method public float component6();
+ method public float component7();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeArcTo copy(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartDx, float arcStartDy);
+ method public float getArcStartDx();
+ method public float getArcStartDy();
+ method public float getHorizontalEllipseRadius();
+ method public float getTheta();
+ method public float getVerticalEllipseRadius();
+ method public boolean isMoreThanHalf();
+ method public boolean isPositiveArc();
+ property public final float arcStartDx;
+ property public final float arcStartDy;
+ property public final float horizontalEllipseRadius;
+ property public final boolean isMoreThanHalf;
+ property public final boolean isPositiveArc;
+ property public final float theta;
+ property public final float verticalEllipseRadius;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeCurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeCurveTo(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public float component5();
+ method public float component6();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeCurveTo copy(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public float getDx1();
+ method public float getDx2();
+ method public float getDx3();
+ method public float getDy1();
+ method public float getDy2();
+ method public float getDy3();
+ property public final float dx1;
+ property public final float dx2;
+ property public final float dx3;
+ property public final float dy1;
+ property public final float dy2;
+ property public final float dy3;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeHorizontalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeHorizontalTo(float dx);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeHorizontalTo copy(float dx);
+ method public float getDx();
+ property public final float dx;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeLineTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeLineTo(float dx, float dy);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeLineTo copy(float dx, float dy);
+ method public float getDx();
+ method public float getDy();
+ property public final float dx;
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeMoveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeMoveTo(float dx, float dy);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeMoveTo copy(float dx, float dy);
+ method public float getDx();
+ method public float getDy();
+ property public final float dx;
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeQuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeQuadTo(float dx1, float dy1, float dx2, float dy2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeQuadTo copy(float dx1, float dy1, float dx2, float dy2);
+ method public float getDx1();
+ method public float getDx2();
+ method public float getDy1();
+ method public float getDy2();
+ property public final float dx1;
+ property public final float dx2;
+ property public final float dy1;
+ property public final float dy2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeReflectiveCurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeReflectiveCurveTo(float dx1, float dy1, float dx2, float dy2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeReflectiveCurveTo copy(float dx1, float dy1, float dx2, float dy2);
+ method public float getDx1();
+ method public float getDx2();
+ method public float getDy1();
+ method public float getDy2();
+ property public final float dx1;
+ property public final float dx2;
+ property public final float dy1;
+ property public final float dy2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeReflectiveQuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeReflectiveQuadTo(float dx, float dy);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeReflectiveQuadTo copy(float dx, float dy);
+ method public float getDx();
+ method public float getDy();
+ property public final float dx;
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeVerticalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeVerticalTo(float dy);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeVerticalTo copy(float dy);
+ method public float getDy();
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.VerticalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.VerticalTo(float y);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.VerticalTo copy(float y);
+ method public float getY();
+ property public final float y;
+ }
+
+ public final class PathParser {
+ ctor public PathParser();
+ method public androidx.compose.ui.graphics.vector.PathParser addPathNodes(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> nodes);
+ method public void clear();
+ method public androidx.compose.ui.graphics.vector.PathParser parsePathString(String pathData);
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> toNodes();
+ method public androidx.compose.ui.graphics.Path toPath(optional androidx.compose.ui.graphics.Path target);
+ }
+
+}
+
diff --git a/compose/ui/ui-graphics/api/res-1.4.0-beta02.txt b/compose/ui/ui-graphics/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-graphics/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-graphics/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-graphics/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..63742f0
--- /dev/null
+++ b/compose/ui/ui-graphics/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,1673 @@
+// Signature format: 4.0
+package androidx.compose.ui.graphics {
+
+ public final class AndroidBlendMode_androidKt {
+ method public static boolean isSupported(int);
+ }
+
+ @kotlin.PublishedApi internal final class AndroidCanvas implements androidx.compose.ui.graphics.Canvas {
+ ctor public AndroidCanvas();
+ method public void clipPath(androidx.compose.ui.graphics.Path path, int clipOp);
+ method public void clipRect(float left, float top, float right, float bottom, int clipOp);
+ method public void concat(float[] matrix);
+ method public void disableZ();
+ method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
+ method public void drawCircle(long center, float radius, androidx.compose.ui.graphics.Paint paint);
+ method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, long topLeftOffset, androidx.compose.ui.graphics.Paint paint);
+ method public void drawImageRect(androidx.compose.ui.graphics.ImageBitmap image, long srcOffset, long srcSize, long dstOffset, long dstSize, androidx.compose.ui.graphics.Paint paint);
+ method public void drawLine(long p1, long p2, androidx.compose.ui.graphics.Paint paint);
+ method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Paint paint);
+ method public void drawPoints(int pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRawPoints(int pointMode, float[] points, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRect(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.compose.ui.graphics.Paint paint);
+ method public void drawVertices(androidx.compose.ui.graphics.Vertices vertices, int blendMode, androidx.compose.ui.graphics.Paint paint);
+ method public void enableZ();
+ method public void restore();
+ method public void rotate(float degrees);
+ method public void save();
+ method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.compose.ui.graphics.Paint paint);
+ method public void scale(float sx, float sy);
+ method public void skew(float sx, float sy);
+ method public android.graphics.Region.Op toRegionOp(int);
+ method public void translate(float dx, float dy);
+ field @kotlin.PublishedApi internal android.graphics.Canvas internalCanvas;
+ }
+
+ public final class AndroidCanvas_androidKt {
+ method public static androidx.compose.ui.graphics.Canvas Canvas(android.graphics.Canvas c);
+ method public static android.graphics.Canvas getNativeCanvas(androidx.compose.ui.graphics.Canvas);
+ }
+
+ public final class AndroidColorFilter_androidKt {
+ method public static android.graphics.ColorFilter asAndroidColorFilter(androidx.compose.ui.graphics.ColorFilter);
+ method public static androidx.compose.ui.graphics.ColorFilter asComposeColorFilter(android.graphics.ColorFilter);
+ }
+
+ public final class AndroidImageBitmap_androidKt {
+ method public static android.graphics.Bitmap asAndroidBitmap(androidx.compose.ui.graphics.ImageBitmap);
+ method public static androidx.compose.ui.graphics.ImageBitmap asImageBitmap(android.graphics.Bitmap);
+ }
+
+ public final class AndroidMatrixConversions_androidKt {
+ method public static void setFrom(float[], android.graphics.Matrix matrix);
+ method public static void setFrom(android.graphics.Matrix, float[] matrix);
+ }
+
+ public final class AndroidPaint implements androidx.compose.ui.graphics.Paint {
+ ctor public AndroidPaint(android.graphics.Paint internalPaint);
+ ctor public AndroidPaint();
+ method public android.graphics.Paint asFrameworkPaint();
+ method public float getAlpha();
+ method public int getBlendMode();
+ method public long getColor();
+ method public androidx.compose.ui.graphics.ColorFilter? getColorFilter();
+ method public int getFilterQuality();
+ method public androidx.compose.ui.graphics.PathEffect? getPathEffect();
+ method public android.graphics.Shader? getShader();
+ method public int getStrokeCap();
+ method public int getStrokeJoin();
+ method public float getStrokeMiterLimit();
+ method public float getStrokeWidth();
+ method public int getStyle();
+ method public boolean isAntiAlias();
+ method public void setAlpha(float);
+ method public void setAntiAlias(boolean);
+ method public void setBlendMode(int);
+ method public void setColor(long);
+ method public void setColorFilter(androidx.compose.ui.graphics.ColorFilter?);
+ method public void setFilterQuality(int);
+ method public void setPathEffect(androidx.compose.ui.graphics.PathEffect?);
+ method public void setShader(android.graphics.Shader?);
+ method public void setStrokeCap(int);
+ method public void setStrokeJoin(int);
+ method public void setStrokeMiterLimit(float);
+ method public void setStrokeWidth(float);
+ method public void setStyle(int);
+ property public float alpha;
+ property public int blendMode;
+ property public long color;
+ property public androidx.compose.ui.graphics.ColorFilter? colorFilter;
+ property public int filterQuality;
+ property public boolean isAntiAlias;
+ property public androidx.compose.ui.graphics.PathEffect? pathEffect;
+ property public android.graphics.Shader? shader;
+ property public int strokeCap;
+ property public int strokeJoin;
+ property public float strokeMiterLimit;
+ property public float strokeWidth;
+ property public int style;
+ }
+
+ public final class AndroidPaint_androidKt {
+ method public static androidx.compose.ui.graphics.Paint Paint();
+ method public static androidx.compose.ui.graphics.Paint toComposePaint(android.graphics.Paint);
+ }
+
+ public final class AndroidPath implements androidx.compose.ui.graphics.Path {
+ ctor public AndroidPath(optional android.graphics.Path internalPath);
+ method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+ method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+ method public void addOval(androidx.compose.ui.geometry.Rect oval);
+ method public void addPath(androidx.compose.ui.graphics.Path path, long offset);
+ method public void addRect(androidx.compose.ui.geometry.Rect rect);
+ method public void addRoundRect(androidx.compose.ui.geometry.RoundRect roundRect);
+ method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+ method public void close();
+ method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public int getFillType();
+ method public android.graphics.Path getInternalPath();
+ method public boolean isConvex();
+ method public boolean isEmpty();
+ method public void lineTo(float x, float y);
+ method public void moveTo(float x, float y);
+ method public boolean op(androidx.compose.ui.graphics.Path path1, androidx.compose.ui.graphics.Path path2, int operation);
+ method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+ method public void relativeCubicTo(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public void relativeLineTo(float dx, float dy);
+ method public void relativeMoveTo(float dx, float dy);
+ method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
+ method public void reset();
+ method public void setFillType(int);
+ method public void translate(long offset);
+ property public int fillType;
+ property public final android.graphics.Path internalPath;
+ property public boolean isConvex;
+ property public boolean isEmpty;
+ }
+
+ public final class AndroidPathEffect_androidKt {
+ method public static android.graphics.PathEffect asAndroidPathEffect(androidx.compose.ui.graphics.PathEffect);
+ method public static androidx.compose.ui.graphics.PathEffect toComposePathEffect(android.graphics.PathEffect);
+ }
+
+ public final class AndroidPathMeasure implements androidx.compose.ui.graphics.PathMeasure {
+ method public float getLength();
+ method public long getPosition(float distance);
+ method public boolean getSegment(float startDistance, float stopDistance, androidx.compose.ui.graphics.Path destination, boolean startWithMoveTo);
+ method public long getTangent(float distance);
+ method public void setPath(androidx.compose.ui.graphics.Path? path, boolean forceClosed);
+ property public float length;
+ }
+
+ public final class AndroidPathMeasure_androidKt {
+ method public static androidx.compose.ui.graphics.PathMeasure PathMeasure();
+ }
+
+ public final class AndroidPath_androidKt {
+ method public static androidx.compose.ui.graphics.Path Path();
+ method public static inline android.graphics.Path asAndroidPath(androidx.compose.ui.graphics.Path);
+ method public static androidx.compose.ui.graphics.Path asComposePath(android.graphics.Path);
+ }
+
+ public final class AndroidRenderEffect_androidKt {
+ method public static androidx.compose.ui.graphics.RenderEffect asComposeRenderEffect(android.graphics.RenderEffect);
+ }
+
+ public final class AndroidTileMode_androidKt {
+ method public static boolean isSupported(int);
+ method public static android.graphics.Shader.TileMode toAndroidTileMode(int);
+ method public static int toComposeTileMode(android.graphics.Shader.TileMode);
+ }
+
+ public final class AndroidVertexMode_androidKt {
+ method public static android.graphics.Canvas.VertexMode toAndroidVertexMode(int);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BlendMode {
+ field public static final androidx.compose.ui.graphics.BlendMode.Companion Companion;
+ }
+
+ public static final class BlendMode.Companion {
+ method public int getClear();
+ method public int getColor();
+ method public int getColorBurn();
+ method public int getColorDodge();
+ method public int getDarken();
+ method public int getDifference();
+ method public int getDst();
+ method public int getDstAtop();
+ method public int getDstIn();
+ method public int getDstOut();
+ method public int getDstOver();
+ method public int getExclusion();
+ method public int getHardlight();
+ method public int getHue();
+ method public int getLighten();
+ method public int getLuminosity();
+ method public int getModulate();
+ method public int getMultiply();
+ method public int getOverlay();
+ method public int getPlus();
+ method public int getSaturation();
+ method public int getScreen();
+ method public int getSoftlight();
+ method public int getSrc();
+ method public int getSrcAtop();
+ method public int getSrcIn();
+ method public int getSrcOut();
+ method public int getSrcOver();
+ method public int getXor();
+ property public final int Clear;
+ property public final int Color;
+ property public final int ColorBurn;
+ property public final int ColorDodge;
+ property public final int Darken;
+ property public final int Difference;
+ property public final int Dst;
+ property public final int DstAtop;
+ property public final int DstIn;
+ property public final int DstOut;
+ property public final int DstOver;
+ property public final int Exclusion;
+ property public final int Hardlight;
+ property public final int Hue;
+ property public final int Lighten;
+ property public final int Luminosity;
+ property public final int Modulate;
+ property public final int Multiply;
+ property public final int Overlay;
+ property public final int Plus;
+ property public final int Saturation;
+ property public final int Screen;
+ property public final int Softlight;
+ property public final int Src;
+ property public final int SrcAtop;
+ property public final int SrcIn;
+ property public final int SrcOut;
+ property public final int SrcOver;
+ property public final int Xor;
+ }
+
+ @androidx.compose.runtime.Immutable public final class BlurEffect extends androidx.compose.ui.graphics.RenderEffect {
+ ctor public BlurEffect(androidx.compose.ui.graphics.RenderEffect? renderEffect, float radiusX, float radiusY, int edgeTreatment);
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) protected android.graphics.RenderEffect createRenderEffect();
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class Brush {
+ method public abstract void applyTo(long size, androidx.compose.ui.graphics.Paint p, float alpha);
+ method public long getIntrinsicSize();
+ property public long intrinsicSize;
+ field public static final androidx.compose.ui.graphics.Brush.Companion Companion;
+ }
+
+ public static final class Brush.Companion {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startX, optional float endX, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startX, optional float endX, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long start, optional long end, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long start, optional long end, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center, optional float radius, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center, optional float radius, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startY, optional float endY, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startY, optional float endY, optional int tileMode);
+ }
+
+ public final class BrushKt {
+ method public static androidx.compose.ui.graphics.ShaderBrush ShaderBrush(android.graphics.Shader shader);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Canvas {
+ method public void clipPath(androidx.compose.ui.graphics.Path path, optional int clipOp);
+ method public default void clipRect(androidx.compose.ui.geometry.Rect rect, optional int clipOp);
+ method public void clipRect(float left, float top, float right, float bottom, optional int clipOp);
+ method public void concat(float[] matrix);
+ method public void disableZ();
+ method public default void drawArc(androidx.compose.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
+ method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
+ method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
+ method public void drawCircle(long center, float radius, androidx.compose.ui.graphics.Paint paint);
+ method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, long topLeftOffset, androidx.compose.ui.graphics.Paint paint);
+ method public void drawImageRect(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, androidx.compose.ui.graphics.Paint paint);
+ method public void drawLine(long p1, long p2, androidx.compose.ui.graphics.Paint paint);
+ method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
+ method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Paint paint);
+ method public void drawPoints(int pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRawPoints(int pointMode, float[] points, androidx.compose.ui.graphics.Paint paint);
+ method public default void drawRect(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRect(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
+ method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.compose.ui.graphics.Paint paint);
+ method public void drawVertices(androidx.compose.ui.graphics.Vertices vertices, int blendMode, androidx.compose.ui.graphics.Paint paint);
+ method public void enableZ();
+ method public void restore();
+ method public void rotate(float degrees);
+ method public void save();
+ method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.compose.ui.graphics.Paint paint);
+ method public void scale(float sx, optional float sy);
+ method public void skew(float sx, float sy);
+ method public default void skewRad(float sxRad, float syRad);
+ method public void translate(float dx, float dy);
+ }
+
+ public final class CanvasHolder {
+ ctor public CanvasHolder();
+ method public inline void drawInto(android.graphics.Canvas targetCanvas, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> block);
+ field @kotlin.PublishedApi internal final androidx.compose.ui.graphics.AndroidCanvas androidCanvas;
+ }
+
+ public final class CanvasKt {
+ method public static androidx.compose.ui.graphics.Canvas Canvas(androidx.compose.ui.graphics.ImageBitmap image);
+ method public static void rotate(androidx.compose.ui.graphics.Canvas, float degrees, float pivotX, float pivotY);
+ method public static void rotateRad(androidx.compose.ui.graphics.Canvas, float radians, optional float pivotX, optional float pivotY);
+ method public static void scale(androidx.compose.ui.graphics.Canvas, float sx, optional float sy, float pivotX, float pivotY);
+ method public static inline void withSave(androidx.compose.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static inline void withSaveLayer(androidx.compose.ui.graphics.Canvas, androidx.compose.ui.geometry.Rect bounds, androidx.compose.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ClipOp {
+ field public static final androidx.compose.ui.graphics.ClipOp.Companion Companion;
+ }
+
+ public static final class ClipOp.Companion {
+ method public int getDifference();
+ method public int getIntersect();
+ property public final int Difference;
+ property public final int Intersect;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Color {
+ ctor public Color(long value);
+ method @androidx.compose.runtime.Stable public operator float component1();
+ method @androidx.compose.runtime.Stable public operator float component2();
+ method @androidx.compose.runtime.Stable public operator float component3();
+ method @androidx.compose.runtime.Stable public operator float component4();
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.graphics.colorspace.ColorSpace component5();
+ method public long convert(androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
+ method @androidx.compose.runtime.Stable public long copy(optional float alpha, optional float red, optional float green, optional float blue);
+ method public float getAlpha();
+ method public float getBlue();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getColorSpace();
+ method public float getGreen();
+ method public float getRed();
+ method public long getValue();
+ property @androidx.compose.runtime.Stable public final float alpha;
+ property @androidx.compose.runtime.Stable public final float blue;
+ property @androidx.compose.runtime.Stable public final androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace;
+ property @androidx.compose.runtime.Stable public final float green;
+ property @androidx.compose.runtime.Stable public final float red;
+ property public final long value;
+ field public static final androidx.compose.ui.graphics.Color.Companion Companion;
+ }
+
+ public static final class Color.Companion {
+ method public long getBlack();
+ method public long getBlue();
+ method public long getCyan();
+ method public long getDarkGray();
+ method public long getGray();
+ method public long getGreen();
+ method public long getLightGray();
+ method public long getMagenta();
+ method public long getRed();
+ method public long getTransparent();
+ method public long getUnspecified();
+ method public long getWhite();
+ method public long getYellow();
+ method public long hsl(float hue, float saturation, float lightness, optional float alpha, optional androidx.compose.ui.graphics.colorspace.Rgb colorSpace);
+ method public long hsv(float hue, float saturation, float value, optional float alpha, optional androidx.compose.ui.graphics.colorspace.Rgb colorSpace);
+ property public final long Black;
+ property public final long Blue;
+ property public final long Cyan;
+ property public final long DarkGray;
+ property public final long Gray;
+ property public final long Green;
+ property public final long LightGray;
+ property public final long Magenta;
+ property public final long Red;
+ property public final long Transparent;
+ property public final long Unspecified;
+ property public final long White;
+ property public final long Yellow;
+ }
+
+ @androidx.compose.runtime.Immutable public final class ColorFilter {
+ field public static final androidx.compose.ui.graphics.ColorFilter.Companion Companion;
+ }
+
+ public static final class ColorFilter.Companion {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter colorMatrix(float[] colorMatrix);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter lighting(long multiply, long add);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter tint(long color, optional int blendMode);
+ }
+
+ public final class ColorKt {
+ method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, optional float alpha, optional androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
+ method @androidx.compose.runtime.Stable public static long Color(int color);
+ method @androidx.compose.runtime.Stable public static long Color(long color);
+ method @androidx.compose.runtime.Stable public static long Color(int red, int green, int blue, optional int alpha);
+ method @androidx.compose.runtime.Stable public static long compositeOver(long, long background);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static float luminance(long);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.Color> block);
+ method @androidx.compose.runtime.Stable public static int toArgb(long);
+ }
+
+ @kotlin.jvm.JvmInline public final value class ColorMatrix {
+ ctor public ColorMatrix(optional float[] values);
+ method public void convertRgbToYuv();
+ method public void convertYuvToRgb();
+ method public inline operator float get(int row, int column);
+ method public float[] getValues();
+ method public void reset();
+ method public inline operator void set(int row, int column, float v);
+ method public void set(float[] src);
+ method public void setToRotateBlue(float degrees);
+ method public void setToRotateGreen(float degrees);
+ method public void setToRotateRed(float degrees);
+ method public void setToSaturation(float sat);
+ method public void setToScale(float redScale, float greenScale, float blueScale, float alphaScale);
+ method public operator void timesAssign(float[] colorMatrix);
+ property public final float[] values;
+ }
+
+ public final class DegreesKt {
+ method @kotlin.PublishedApi internal static float degrees(float radians);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class FilterQuality {
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.graphics.FilterQuality.Companion Companion;
+ }
+
+ public static final class FilterQuality.Companion {
+ method public int getHigh();
+ method public int getLow();
+ method public int getMedium();
+ method public int getNone();
+ property public final int High;
+ property public final int Low;
+ property public final int Medium;
+ property public final int None;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ImageBitmap {
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getColorSpace();
+ method public int getConfig();
+ method public boolean getHasAlpha();
+ method public int getHeight();
+ method public int getWidth();
+ method public void prepareToDraw();
+ method public void readPixels(int[] buffer, optional int startX, optional int startY, optional int width, optional int height, optional int bufferOffset, optional int stride);
+ property public abstract androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace;
+ property public abstract int config;
+ property public abstract boolean hasAlpha;
+ property public abstract int height;
+ property public abstract int width;
+ field public static final androidx.compose.ui.graphics.ImageBitmap.Companion Companion;
+ }
+
+ public static final class ImageBitmap.Companion {
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ImageBitmapConfig {
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.graphics.ImageBitmapConfig.Companion Companion;
+ }
+
+ public static final class ImageBitmapConfig.Companion {
+ method public int getAlpha8();
+ method public int getArgb8888();
+ method public int getF16();
+ method public int getGpu();
+ method public int getRgb565();
+ property public final int Alpha8;
+ property public final int Argb8888;
+ property public final int F16;
+ property public final int Gpu;
+ property public final int Rgb565;
+ }
+
+ public final class ImageBitmapKt {
+ method public static androidx.compose.ui.graphics.ImageBitmap ImageBitmap(int width, int height, optional int config, optional boolean hasAlpha, optional androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
+ method public static androidx.compose.ui.graphics.PixelMap toPixelMap(androidx.compose.ui.graphics.ImageBitmap, optional int startX, optional int startY, optional int width, optional int height, optional int[] buffer, optional int bufferOffset, optional int stride);
+ }
+
+ @androidx.compose.runtime.Immutable public final class LinearGradient extends androidx.compose.ui.graphics.ShaderBrush {
+ method public android.graphics.Shader createShader(long size);
+ property public long intrinsicSize;
+ }
+
+ @kotlin.jvm.JvmInline public final value class Matrix {
+ ctor public Matrix(optional float[] values);
+ method public inline operator float get(int row, int column);
+ method public float[] getValues();
+ method public void invert();
+ method public long map(long point);
+ method public androidx.compose.ui.geometry.Rect map(androidx.compose.ui.geometry.Rect rect);
+ method public void map(androidx.compose.ui.geometry.MutableRect rect);
+ method public void reset();
+ method public void rotateX(float degrees);
+ method public void rotateY(float degrees);
+ method public void rotateZ(float degrees);
+ method public void scale(optional float x, optional float y, optional float z);
+ method public inline operator void set(int row, int column, float v);
+ method public void setFrom(float[] matrix);
+ method public operator void timesAssign(float[] m);
+ method public void translate(optional float x, optional float y, optional float z);
+ property public final float[] values;
+ field public static final androidx.compose.ui.graphics.Matrix.Companion Companion;
+ field public static final int Perspective0 = 3; // 0x3
+ field public static final int Perspective1 = 7; // 0x7
+ field public static final int Perspective2 = 15; // 0xf
+ field public static final int ScaleX = 0; // 0x0
+ field public static final int ScaleY = 5; // 0x5
+ field public static final int ScaleZ = 10; // 0xa
+ field public static final int SkewX = 4; // 0x4
+ field public static final int SkewY = 1; // 0x1
+ field public static final int TranslateX = 12; // 0xc
+ field public static final int TranslateY = 13; // 0xd
+ field public static final int TranslateZ = 14; // 0xe
+ }
+
+ public static final class Matrix.Companion {
+ }
+
+ public final class MatrixKt {
+ method public static boolean isIdentity(float[]);
+ }
+
+ @androidx.compose.runtime.Immutable public final class OffsetEffect extends androidx.compose.ui.graphics.RenderEffect {
+ ctor public OffsetEffect(androidx.compose.ui.graphics.RenderEffect? renderEffect, long offset);
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) protected android.graphics.RenderEffect createRenderEffect();
+ }
+
+ public abstract sealed class Outline {
+ method public abstract androidx.compose.ui.geometry.Rect getBounds();
+ property public abstract androidx.compose.ui.geometry.Rect bounds;
+ }
+
+ public static final class Outline.Generic extends androidx.compose.ui.graphics.Outline {
+ ctor public Outline.Generic(androidx.compose.ui.graphics.Path path);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public androidx.compose.ui.graphics.Path getPath();
+ property public androidx.compose.ui.geometry.Rect bounds;
+ property public final androidx.compose.ui.graphics.Path path;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class Outline.Rectangle extends androidx.compose.ui.graphics.Outline {
+ ctor public Outline.Rectangle(androidx.compose.ui.geometry.Rect rect);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public androidx.compose.ui.geometry.Rect getRect();
+ property public androidx.compose.ui.geometry.Rect bounds;
+ property public final androidx.compose.ui.geometry.Rect rect;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class Outline.Rounded extends androidx.compose.ui.graphics.Outline {
+ ctor public Outline.Rounded(androidx.compose.ui.geometry.RoundRect roundRect);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public androidx.compose.ui.geometry.RoundRect getRoundRect();
+ property public androidx.compose.ui.geometry.Rect bounds;
+ property public final androidx.compose.ui.geometry.RoundRect roundRect;
+ }
+
+ public final class OutlineKt {
+ method public static void addOutline(androidx.compose.ui.graphics.Path, androidx.compose.ui.graphics.Outline outline);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public static void drawOutline(androidx.compose.ui.graphics.Canvas, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Paint paint);
+ }
+
+ public interface Paint {
+ method public android.graphics.Paint asFrameworkPaint();
+ method public float getAlpha();
+ method public int getBlendMode();
+ method public long getColor();
+ method public androidx.compose.ui.graphics.ColorFilter? getColorFilter();
+ method public int getFilterQuality();
+ method public androidx.compose.ui.graphics.PathEffect? getPathEffect();
+ method public android.graphics.Shader? getShader();
+ method public int getStrokeCap();
+ method public int getStrokeJoin();
+ method public float getStrokeMiterLimit();
+ method public float getStrokeWidth();
+ method public int getStyle();
+ method public boolean isAntiAlias();
+ method public void setAlpha(float);
+ method public void setAntiAlias(boolean);
+ method public void setBlendMode(int);
+ method public void setColor(long);
+ method public void setColorFilter(androidx.compose.ui.graphics.ColorFilter?);
+ method public void setFilterQuality(int);
+ method public void setPathEffect(androidx.compose.ui.graphics.PathEffect?);
+ method public void setShader(android.graphics.Shader?);
+ method public void setStrokeCap(int);
+ method public void setStrokeJoin(int);
+ method public void setStrokeMiterLimit(float);
+ method public void setStrokeWidth(float);
+ method public void setStyle(int);
+ property public abstract float alpha;
+ property public abstract int blendMode;
+ property public abstract long color;
+ property public abstract androidx.compose.ui.graphics.ColorFilter? colorFilter;
+ property public abstract int filterQuality;
+ property public abstract boolean isAntiAlias;
+ property public abstract androidx.compose.ui.graphics.PathEffect? pathEffect;
+ property public abstract android.graphics.Shader? shader;
+ property public abstract int strokeCap;
+ property public abstract int strokeJoin;
+ property public abstract float strokeMiterLimit;
+ property public abstract float strokeWidth;
+ property public abstract int style;
+ }
+
+ public final class PaintKt {
+ method public static androidx.compose.ui.graphics.Paint Paint();
+ field public static final float DefaultAlpha = 1.0f;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PaintingStyle {
+ field public static final androidx.compose.ui.graphics.PaintingStyle.Companion Companion;
+ }
+
+ public static final class PaintingStyle.Companion {
+ method public int getFill();
+ method public int getStroke();
+ property public final int Fill;
+ property public final int Stroke;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface Path {
+ method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+ method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+ method public void addOval(androidx.compose.ui.geometry.Rect oval);
+ method public void addPath(androidx.compose.ui.graphics.Path path, optional long offset);
+ method public void addRect(androidx.compose.ui.geometry.Rect rect);
+ method public void addRoundRect(androidx.compose.ui.geometry.RoundRect roundRect);
+ method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+ method public default void arcToRad(androidx.compose.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+ method public void close();
+ method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public androidx.compose.ui.geometry.Rect getBounds();
+ method public int getFillType();
+ method public boolean isConvex();
+ method public boolean isEmpty();
+ method public void lineTo(float x, float y);
+ method public void moveTo(float x, float y);
+ method public boolean op(androidx.compose.ui.graphics.Path path1, androidx.compose.ui.graphics.Path path2, int operation);
+ method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+ method public void relativeCubicTo(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public void relativeLineTo(float dx, float dy);
+ method public void relativeMoveTo(float dx, float dy);
+ method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
+ method public void reset();
+ method public void setFillType(int);
+ method public void translate(long offset);
+ property public abstract int fillType;
+ property public abstract boolean isConvex;
+ property public abstract boolean isEmpty;
+ field public static final androidx.compose.ui.graphics.Path.Companion Companion;
+ }
+
+ public static final class Path.Companion {
+ method public androidx.compose.ui.graphics.Path combine(int operation, androidx.compose.ui.graphics.Path path1, androidx.compose.ui.graphics.Path path2);
+ }
+
+ public interface PathEffect {
+ field public static final androidx.compose.ui.graphics.PathEffect.Companion Companion;
+ }
+
+ public static final class PathEffect.Companion {
+ method public androidx.compose.ui.graphics.PathEffect chainPathEffect(androidx.compose.ui.graphics.PathEffect outer, androidx.compose.ui.graphics.PathEffect inner);
+ method public androidx.compose.ui.graphics.PathEffect cornerPathEffect(float radius);
+ method public androidx.compose.ui.graphics.PathEffect dashPathEffect(float[] intervals, optional float phase);
+ method public androidx.compose.ui.graphics.PathEffect stampedPathEffect(androidx.compose.ui.graphics.Path shape, float advance, float phase, int style);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PathFillType {
+ field public static final androidx.compose.ui.graphics.PathFillType.Companion Companion;
+ }
+
+ public static final class PathFillType.Companion {
+ method public int getEvenOdd();
+ method public int getNonZero();
+ property public final int EvenOdd;
+ property public final int NonZero;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PathMeasure {
+ method public float getLength();
+ method public long getPosition(float distance);
+ method public boolean getSegment(float startDistance, float stopDistance, androidx.compose.ui.graphics.Path destination, optional boolean startWithMoveTo);
+ method public long getTangent(float distance);
+ method public void setPath(androidx.compose.ui.graphics.Path? path, boolean forceClosed);
+ property public abstract float length;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PathOperation {
+ field public static final androidx.compose.ui.graphics.PathOperation.Companion Companion;
+ }
+
+ public static final class PathOperation.Companion {
+ method public int getDifference();
+ method public int getIntersect();
+ method public int getReverseDifference();
+ method public int getUnion();
+ method public int getXor();
+ property public final int Difference;
+ property public final int Intersect;
+ property public final int ReverseDifference;
+ property public final int Union;
+ property public final int Xor;
+ }
+
+ public final class PathOperationKt {
+ method @Deprecated public static int getDifference(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getIntersect(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getReverseDifference(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getUnion(androidx.compose.ui.graphics.PathOperation.Companion);
+ method @Deprecated public static int getXor(androidx.compose.ui.graphics.PathOperation.Companion);
+ }
+
+ public final class PixelMap {
+ ctor public PixelMap(int[] buffer, int width, int height, int bufferOffset, int stride);
+ method public operator long get(int x, int y);
+ method public int[] getBuffer();
+ method public int getBufferOffset();
+ method public int getHeight();
+ method public int getStride();
+ method public int getWidth();
+ property public final int[] buffer;
+ property public final int bufferOffset;
+ property public final int height;
+ property public final int stride;
+ property public final int width;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class PointMode {
+ field public static final androidx.compose.ui.graphics.PointMode.Companion Companion;
+ }
+
+ public static final class PointMode.Companion {
+ method public int getLines();
+ method public int getPoints();
+ method public int getPolygon();
+ property public final int Lines;
+ property public final int Points;
+ property public final int Polygon;
+ }
+
+ @androidx.compose.runtime.Immutable public final class RadialGradient extends androidx.compose.ui.graphics.ShaderBrush {
+ method public android.graphics.Shader createShader(long size);
+ property public long intrinsicSize;
+ }
+
+ public final class RectHelper_androidKt {
+ method @Deprecated public static android.graphics.Rect toAndroidRect(androidx.compose.ui.geometry.Rect);
+ method public static android.graphics.Rect toAndroidRect(androidx.compose.ui.unit.IntRect);
+ method public static android.graphics.RectF toAndroidRectF(androidx.compose.ui.geometry.Rect);
+ method public static androidx.compose.ui.unit.IntRect toComposeIntRect(android.graphics.Rect);
+ method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.Rect);
+ }
+
+ public final class RectangleShapeKt {
+ method public static androidx.compose.ui.graphics.Shape getRectangleShape();
+ property public static final androidx.compose.ui.graphics.Shape RectangleShape;
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class RenderEffect {
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) public final android.graphics.RenderEffect asAndroidRenderEffect();
+ method @RequiresApi(android.os.Build.VERSION_CODES.S) protected abstract android.graphics.RenderEffect createRenderEffect();
+ method public boolean isSupported();
+ }
+
+ public final class RenderEffectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.BlurEffect BlurEffect(float radiusX, float radiusY, optional int edgeTreatment);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.OffsetEffect OffsetEffect(float offsetX, float offsetY);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract class ShaderBrush extends androidx.compose.ui.graphics.Brush {
+ ctor public ShaderBrush();
+ method public final void applyTo(long size, androidx.compose.ui.graphics.Paint p, float alpha);
+ method public abstract android.graphics.Shader createShader(long size);
+ }
+
+ public final class ShaderKt {
+ method public static android.graphics.Shader ImageShader(androidx.compose.ui.graphics.ImageBitmap image, optional int tileModeX, optional int tileModeY);
+ method public static android.graphics.Shader LinearGradientShader(long from, long to, java.util.List<androidx.compose.ui.graphics.Color> colors, optional java.util.List<java.lang.Float>? colorStops, optional int tileMode);
+ method public static android.graphics.Shader RadialGradientShader(long center, float radius, java.util.List<androidx.compose.ui.graphics.Color> colors, optional java.util.List<java.lang.Float>? colorStops, optional int tileMode);
+ method public static android.graphics.Shader SweepGradientShader(long center, java.util.List<androidx.compose.ui.graphics.Color> colors, optional java.util.List<java.lang.Float>? colorStops);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Shadow {
+ ctor public Shadow(optional @androidx.compose.runtime.Stable long color, optional @androidx.compose.runtime.Stable long offset, optional @androidx.compose.runtime.Stable float blurRadius);
+ method public androidx.compose.ui.graphics.Shadow copy(optional long color, optional long offset, optional float blurRadius);
+ method public float getBlurRadius();
+ method public long getColor();
+ method public long getOffset();
+ property public final float blurRadius;
+ property public final long color;
+ property public final long offset;
+ field public static final androidx.compose.ui.graphics.Shadow.Companion Companion;
+ }
+
+ public static final class Shadow.Companion {
+ method public androidx.compose.ui.graphics.Shadow getNone();
+ property public final androidx.compose.ui.graphics.Shadow None;
+ }
+
+ public final class ShadowKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public interface Shape {
+ method public androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
+ }
+
+ @androidx.compose.runtime.Immutable public final class SolidColor extends androidx.compose.ui.graphics.Brush {
+ ctor public SolidColor(long value);
+ method public void applyTo(long size, androidx.compose.ui.graphics.Paint p, float alpha);
+ method public long getValue();
+ property public final long value;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class StampedPathEffectStyle {
+ field public static final androidx.compose.ui.graphics.StampedPathEffectStyle.Companion Companion;
+ }
+
+ public static final class StampedPathEffectStyle.Companion {
+ method public int getMorph();
+ method public int getRotate();
+ method public int getTranslate();
+ property public final int Morph;
+ property public final int Rotate;
+ property public final int Translate;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class StrokeCap {
+ field public static final androidx.compose.ui.graphics.StrokeCap.Companion Companion;
+ }
+
+ public static final class StrokeCap.Companion {
+ method public int getButt();
+ method public int getRound();
+ method public int getSquare();
+ property public final int Butt;
+ property public final int Round;
+ property public final int Square;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class StrokeJoin {
+ field public static final androidx.compose.ui.graphics.StrokeJoin.Companion Companion;
+ }
+
+ public static final class StrokeJoin.Companion {
+ method public int getBevel();
+ method public int getMiter();
+ method public int getRound();
+ property public final int Bevel;
+ property public final int Miter;
+ property public final int Round;
+ }
+
+ @androidx.compose.runtime.Immutable public final class SweepGradient extends androidx.compose.ui.graphics.ShaderBrush {
+ method public android.graphics.Shader createShader(long size);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TileMode {
+ field public static final androidx.compose.ui.graphics.TileMode.Companion Companion;
+ }
+
+ public static final class TileMode.Companion {
+ method public int getClamp();
+ method public int getDecal();
+ method public int getMirror();
+ method public int getRepeated();
+ property public final int Clamp;
+ property public final int Decal;
+ property public final int Mirror;
+ property public final int Repeated;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class VertexMode {
+ field public static final androidx.compose.ui.graphics.VertexMode.Companion Companion;
+ }
+
+ public static final class VertexMode.Companion {
+ method public int getTriangleFan();
+ method public int getTriangleStrip();
+ method public int getTriangles();
+ property public final int TriangleFan;
+ property public final int TriangleStrip;
+ property public final int Triangles;
+ }
+
+ public final class Vertices {
+ ctor public Vertices(int vertexMode, java.util.List<androidx.compose.ui.geometry.Offset> positions, java.util.List<androidx.compose.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.compose.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
+ method public int[] getColors();
+ method public short[] getIndices();
+ method public float[] getPositions();
+ method public float[] getTextureCoordinates();
+ method public int getVertexMode();
+ property public final int[] colors;
+ property public final short[] indices;
+ property public final float[] positions;
+ property public final float[] textureCoordinates;
+ property public final int vertexMode;
+ }
+
+}
+
+package androidx.compose.ui.graphics.colorspace {
+
+ public abstract class Adaptation {
+ field public static final androidx.compose.ui.graphics.colorspace.Adaptation.Companion Companion;
+ }
+
+ public static final class Adaptation.Companion {
+ method public androidx.compose.ui.graphics.colorspace.Adaptation getBradford();
+ method public androidx.compose.ui.graphics.colorspace.Adaptation getCiecat02();
+ method public androidx.compose.ui.graphics.colorspace.Adaptation getVonKries();
+ property public final androidx.compose.ui.graphics.colorspace.Adaptation Bradford;
+ property public final androidx.compose.ui.graphics.colorspace.Adaptation Ciecat02;
+ property public final androidx.compose.ui.graphics.colorspace.Adaptation VonKries;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ColorModel {
+ method public int getComponentCount();
+ property @androidx.compose.runtime.Stable public final int componentCount;
+ field public static final androidx.compose.ui.graphics.colorspace.ColorModel.Companion Companion;
+ }
+
+ public static final class ColorModel.Companion {
+ method public long getCmyk();
+ method public long getLab();
+ method public long getRgb();
+ method public long getXyz();
+ property public final long Cmyk;
+ property public final long Lab;
+ property public final long Rgb;
+ property public final long Xyz;
+ }
+
+ public abstract class ColorSpace {
+ ctor public ColorSpace(String name, long model);
+ method public final float[] fromXyz(float x, float y, float z);
+ method public abstract float[] fromXyz(float[] v);
+ method public final int getComponentCount();
+ method public abstract float getMaxValue(int component);
+ method public abstract float getMinValue(int component);
+ method public final long getModel();
+ method public final String getName();
+ method public boolean isSrgb();
+ method public abstract boolean isWideGamut();
+ method public final float[] toXyz(float r, float g, float b);
+ method public abstract float[] toXyz(float[] v);
+ property public final int componentCount;
+ property public boolean isSrgb;
+ property public abstract boolean isWideGamut;
+ property public final long model;
+ property public final String name;
+ }
+
+ public final class ColorSpaceKt {
+ method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, optional androidx.compose.ui.graphics.colorspace.Adaptation adaptation);
+ method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint);
+ method public static androidx.compose.ui.graphics.colorspace.Connector connect(androidx.compose.ui.graphics.colorspace.ColorSpace, optional androidx.compose.ui.graphics.colorspace.ColorSpace destination, optional int intent);
+ }
+
+ public final class ColorSpaces {
+ method public androidx.compose.ui.graphics.colorspace.Rgb getAces();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getAcescg();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getAdobeRgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getBt2020();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getBt709();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getCieLab();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getCieXyz();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getDciP3();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getDisplayP3();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getExtendedSrgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getLinearExtendedSrgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getLinearSrgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getNtsc1953();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace getOklab();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getProPhotoRgb();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getSmpteC();
+ method public androidx.compose.ui.graphics.colorspace.Rgb getSrgb();
+ method public androidx.compose.ui.graphics.colorspace.ColorSpace? match(float[] toXYZD50, androidx.compose.ui.graphics.colorspace.TransferParameters function);
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Aces;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Acescg;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb AdobeRgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Bt2020;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Bt709;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace CieLab;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace CieXyz;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb DciP3;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb DisplayP3;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb ExtendedSrgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb LinearExtendedSrgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb LinearSrgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Ntsc1953;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace Oklab;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb ProPhotoRgb;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb SmpteC;
+ property public final androidx.compose.ui.graphics.colorspace.Rgb Srgb;
+ field public static final androidx.compose.ui.graphics.colorspace.ColorSpaces INSTANCE;
+ }
+
+ public class Connector {
+ method public final androidx.compose.ui.graphics.colorspace.ColorSpace getDestination();
+ method public final int getRenderIntent();
+ method public final androidx.compose.ui.graphics.colorspace.ColorSpace getSource();
+ method public final float[] transform(float r, float g, float b);
+ method public float[] transform(float[] v);
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace destination;
+ property public final int renderIntent;
+ property public final androidx.compose.ui.graphics.colorspace.ColorSpace source;
+ }
+
+ public final class Illuminant {
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getA();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getB();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getC();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD50();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD55();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD60();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD65();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getD75();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getE();
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint A;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint B;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint C;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D50;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D55;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D60;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D65;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint D75;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint E;
+ field public static final androidx.compose.ui.graphics.colorspace.Illuminant INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class RenderIntent {
+ field public static final androidx.compose.ui.graphics.colorspace.RenderIntent.Companion Companion;
+ }
+
+ public static final class RenderIntent.Companion {
+ method public int getAbsolute();
+ method public int getPerceptual();
+ method public int getRelative();
+ method public int getSaturation();
+ property public final int Absolute;
+ property public final int Perceptual;
+ property public final int Relative;
+ property public final int Saturation;
+ }
+
+ public final class Rgb extends androidx.compose.ui.graphics.colorspace.ColorSpace {
+ ctor public Rgb(String name, float[] toXYZ, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf, float min, float max);
+ ctor public Rgb(String name, float[] toXYZ, androidx.compose.ui.graphics.colorspace.TransferParameters function);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, androidx.compose.ui.graphics.colorspace.TransferParameters function);
+ ctor public Rgb(String name, float[] toXYZ, double gamma);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, double gamma);
+ method public float[] fromLinear(float r, float g, float b);
+ method public float[] fromLinear(float[] v);
+ method public float[] fromXyz(float[] v);
+ method public kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> getEotf();
+ method public float[] getInverseTransform();
+ method public float[] getInverseTransform(float[] inverseTransform);
+ method public float getMaxValue(int component);
+ method public float getMinValue(int component);
+ method public kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> getOetf();
+ method public float[] getPrimaries();
+ method public float[] getPrimaries(float[] primaries);
+ method public androidx.compose.ui.graphics.colorspace.TransferParameters? getTransferParameters();
+ method public float[] getTransform();
+ method public float[] getTransform(float[] transform);
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint getWhitePoint();
+ method public boolean isWideGamut();
+ method public float[] toLinear(float r, float g, float b);
+ method public float[] toLinear(float[] v);
+ method public float[] toXyz(float[] v);
+ property public final kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> eotf;
+ property public boolean isSrgb;
+ property public boolean isWideGamut;
+ property public final kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> oetf;
+ property public final androidx.compose.ui.graphics.colorspace.TransferParameters? transferParameters;
+ property public final androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint;
+ }
+
+ public final class TransferParameters {
+ ctor public TransferParameters(double gamma, double a, double b, double c, double d, optional double e, optional double f);
+ method public double component1();
+ method public double component2();
+ method public double component3();
+ method public double component4();
+ method public double component5();
+ method public double component6();
+ method public double component7();
+ method public androidx.compose.ui.graphics.colorspace.TransferParameters copy(double gamma, double a, double b, double c, double d, double e, double f);
+ method public double getA();
+ method public double getB();
+ method public double getC();
+ method public double getD();
+ method public double getE();
+ method public double getF();
+ method public double getGamma();
+ property public final double a;
+ property public final double b;
+ property public final double c;
+ property public final double d;
+ property public final double e;
+ property public final double f;
+ property public final double gamma;
+ }
+
+ public final class WhitePoint {
+ ctor public WhitePoint(float x, float y);
+ ctor public WhitePoint(float x, float y, float z);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.colorspace.WhitePoint copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+}
+
+package androidx.compose.ui.graphics.drawscope {
+
+ public final class CanvasDrawScope implements androidx.compose.ui.graphics.drawscope.DrawScope {
+ ctor public CanvasDrawScope();
+ method public inline void draw(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public void drawArc(androidx.compose.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawArc(long color, float startAngle, float sweepAngle, boolean useCenter, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawCircle(androidx.compose.ui.graphics.Brush brush, float radius, long center, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawCircle(long color, float radius, long center, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, long topLeft, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method @Deprecated public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, long srcOffset, long srcSize, long dstOffset, long dstSize, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawLine(androidx.compose.ui.graphics.Brush brush, long start, long end, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawLine(long color, long start, long end, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawOval(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawOval(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRect(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, long cornerRadius, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawRoundRect(long color, long topLeft, long size, long cornerRadius, androidx.compose.ui.graphics.drawscope.DrawStyle style, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public float getDensity();
+ method public androidx.compose.ui.graphics.drawscope.DrawContext getDrawContext();
+ method public float getFontScale();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ property public float density;
+ property public androidx.compose.ui.graphics.drawscope.DrawContext drawContext;
+ property public float fontScale;
+ property public androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ field @kotlin.PublishedApi internal final androidx.compose.ui.graphics.drawscope.CanvasDrawScope.DrawParams drawParams;
+ }
+
+ @kotlin.PublishedApi internal static final class CanvasDrawScope.DrawParams {
+ ctor public CanvasDrawScope.DrawParams(optional androidx.compose.ui.unit.Density density, optional androidx.compose.ui.unit.LayoutDirection layoutDirection, optional androidx.compose.ui.graphics.Canvas canvas, optional long size);
+ method public androidx.compose.ui.unit.Density component1();
+ method public androidx.compose.ui.unit.LayoutDirection component2();
+ method public androidx.compose.ui.graphics.Canvas component3();
+ method public long component4-NH-jbRc();
+ method internal boolean equals(Object? other);
+ method public androidx.compose.ui.graphics.Canvas getCanvas();
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public long getSize();
+ method internal int hashCode();
+ method public void setCanvas(androidx.compose.ui.graphics.Canvas);
+ method public void setDensity(androidx.compose.ui.unit.Density);
+ method public void setLayoutDirection(androidx.compose.ui.unit.LayoutDirection);
+ method public void setSize(long);
+ method internal String toString();
+ property public final androidx.compose.ui.graphics.Canvas canvas;
+ property public final androidx.compose.ui.unit.Density density;
+ property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public final long size;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ContentDrawScope extends androidx.compose.ui.graphics.drawscope.DrawScope {
+ method public void drawContent();
+ }
+
+ public interface DrawContext {
+ method public androidx.compose.ui.graphics.Canvas getCanvas();
+ method public long getSize();
+ method public androidx.compose.ui.graphics.drawscope.DrawTransform getTransform();
+ method public void setSize(long);
+ property public abstract androidx.compose.ui.graphics.Canvas canvas;
+ property public abstract long size;
+ property public abstract androidx.compose.ui.graphics.drawscope.DrawTransform transform;
+ }
+
+ @androidx.compose.ui.graphics.drawscope.DrawScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawScope extends androidx.compose.ui.unit.Density {
+ method public void drawArc(androidx.compose.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawArc(long color, float startAngle, float sweepAngle, boolean useCenter, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawCircle(androidx.compose.ui.graphics.Brush brush, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawCircle(long color, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public default void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode, optional int filterQuality);
+ method @Deprecated public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawLine(androidx.compose.ui.graphics.Brush brush, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawLine(long color, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawOval(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawOval(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRect(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional long cornerRadius, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawRoundRect(long color, optional long topLeft, optional long size, optional long cornerRadius, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public default long getCenter();
+ method public androidx.compose.ui.graphics.drawscope.DrawContext getDrawContext();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public default long getSize();
+ property public default long center;
+ property public abstract androidx.compose.ui.graphics.drawscope.DrawContext drawContext;
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public default long size;
+ field public static final androidx.compose.ui.graphics.drawscope.DrawScope.Companion Companion;
+ }
+
+ public static final class DrawScope.Companion {
+ method public int getDefaultBlendMode();
+ method public int getDefaultFilterQuality();
+ property public final int DefaultBlendMode;
+ property public final int DefaultFilterQuality;
+ }
+
+ public final class DrawScopeKt {
+ method public static inline void clipPath(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Path path, optional int clipOp, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void clipRect(androidx.compose.ui.graphics.drawscope.DrawScope, optional float left, optional float top, optional float right, optional float bottom, optional int clipOp, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void drawIntoCanvas(androidx.compose.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float inset, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, optional float horizontal, optional float vertical, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void rotate(androidx.compose.ui.graphics.drawscope.DrawScope, float degrees, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawScope, float radians, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawScope, float scaleX, float scaleY, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawScope, float scale, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void translate(androidx.compose.ui.graphics.drawscope.DrawScope, optional float left, optional float top, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void withTransform(androidx.compose.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawTransform,kotlin.Unit> transformBlock, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> drawBlock);
+ }
+
+ @kotlin.DslMarker public @interface DrawScopeMarker {
+ }
+
+ public abstract sealed class DrawStyle {
+ }
+
+ @androidx.compose.ui.graphics.drawscope.DrawScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawTransform {
+ method public void clipPath(androidx.compose.ui.graphics.Path path, optional int clipOp);
+ method public void clipRect(optional float left, optional float top, optional float right, optional float bottom, optional int clipOp);
+ method public default long getCenter();
+ method public long getSize();
+ method public void inset(float left, float top, float right, float bottom);
+ method public void rotate(float degrees, optional long pivot);
+ method public void scale(float scaleX, float scaleY, optional long pivot);
+ method public void transform(float[] matrix);
+ method public void translate(optional float left, optional float top);
+ property public default long center;
+ property public abstract long size;
+ }
+
+ public final class DrawTransformKt {
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, optional float horizontal, optional float vertical);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, float inset);
+ method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawTransform, float radians, optional long pivot);
+ method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawTransform, float scale, optional long pivot);
+ }
+
+ public final class Fill extends androidx.compose.ui.graphics.drawscope.DrawStyle {
+ field public static final androidx.compose.ui.graphics.drawscope.Fill INSTANCE;
+ }
+
+ public final class Stroke extends androidx.compose.ui.graphics.drawscope.DrawStyle {
+ ctor public Stroke(optional float width, optional float miter, optional int cap, optional int join, optional androidx.compose.ui.graphics.PathEffect? pathEffect);
+ method public int getCap();
+ method public int getJoin();
+ method public float getMiter();
+ method public androidx.compose.ui.graphics.PathEffect? getPathEffect();
+ method public float getWidth();
+ property public final int cap;
+ property public final int join;
+ property public final float miter;
+ property public final androidx.compose.ui.graphics.PathEffect? pathEffect;
+ property public final float width;
+ field public static final androidx.compose.ui.graphics.drawscope.Stroke.Companion Companion;
+ field public static final float DefaultMiter = 4.0f;
+ field public static final float HairlineWidth = 0.0f;
+ }
+
+ public static final class Stroke.Companion {
+ method public int getDefaultCap();
+ method public int getDefaultJoin();
+ property public final int DefaultCap;
+ property public final int DefaultJoin;
+ }
+
+}
+
+package androidx.compose.ui.graphics.painter {
+
+ public final class BitmapPainter extends androidx.compose.ui.graphics.painter.Painter {
+ ctor public BitmapPainter(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize);
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public long intrinsicSize;
+ }
+
+ public final class BitmapPainterKt {
+ method public static androidx.compose.ui.graphics.painter.BitmapPainter BitmapPainter(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional int filterQuality);
+ }
+
+ public final class BrushPainter extends androidx.compose.ui.graphics.painter.Painter {
+ ctor public BrushPainter(androidx.compose.ui.graphics.Brush brush);
+ method public androidx.compose.ui.graphics.Brush getBrush();
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public final androidx.compose.ui.graphics.Brush brush;
+ property public long intrinsicSize;
+ }
+
+ public final class ColorPainter extends androidx.compose.ui.graphics.painter.Painter {
+ ctor public ColorPainter(long color);
+ method public long getColor();
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public final long color;
+ property public long intrinsicSize;
+ }
+
+ public abstract class Painter {
+ ctor public Painter();
+ method protected boolean applyAlpha(float alpha);
+ method protected boolean applyColorFilter(androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method protected boolean applyLayoutDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public final void draw(androidx.compose.ui.graphics.drawscope.DrawScope, long size, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method public abstract long getIntrinsicSize();
+ method protected abstract void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public abstract long intrinsicSize;
+ }
+
+}
+
+package androidx.compose.ui.graphics.vector {
+
+ public final class PathBuilder {
+ ctor public PathBuilder();
+ method public androidx.compose.ui.graphics.vector.PathBuilder arcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float x1, float y1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder arcToRelative(float a, float b, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float dx1, float dy1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder close();
+ method public androidx.compose.ui.graphics.vector.PathBuilder curveTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public androidx.compose.ui.graphics.vector.PathBuilder curveToRelative(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> getNodes();
+ method public androidx.compose.ui.graphics.vector.PathBuilder horizontalLineTo(float x);
+ method public androidx.compose.ui.graphics.vector.PathBuilder horizontalLineToRelative(float dx);
+ method public androidx.compose.ui.graphics.vector.PathBuilder lineTo(float x, float y);
+ method public androidx.compose.ui.graphics.vector.PathBuilder lineToRelative(float dx, float dy);
+ method public androidx.compose.ui.graphics.vector.PathBuilder moveTo(float x, float y);
+ method public androidx.compose.ui.graphics.vector.PathBuilder moveToRelative(float dx, float dy);
+ method public androidx.compose.ui.graphics.vector.PathBuilder quadTo(float x1, float y1, float x2, float y2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder quadToRelative(float dx1, float dy1, float dx2, float dy2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveCurveTo(float x1, float y1, float x2, float y2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveCurveToRelative(float dx1, float dy1, float dx2, float dy2);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveQuadTo(float x1, float y1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder reflectiveQuadToRelative(float dx1, float dy1);
+ method public androidx.compose.ui.graphics.vector.PathBuilder verticalLineTo(float y);
+ method public androidx.compose.ui.graphics.vector.PathBuilder verticalLineToRelative(float dy);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class PathNode {
+ method public final boolean isCurve();
+ method public final boolean isQuad();
+ property public final boolean isCurve;
+ property public final boolean isQuad;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.ArcTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.ArcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartX, float arcStartY);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public boolean component4();
+ method public boolean component5();
+ method public float component6();
+ method public float component7();
+ method public androidx.compose.ui.graphics.vector.PathNode.ArcTo copy(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartX, float arcStartY);
+ method public float getArcStartX();
+ method public float getArcStartY();
+ method public float getHorizontalEllipseRadius();
+ method public float getTheta();
+ method public float getVerticalEllipseRadius();
+ method public boolean isMoreThanHalf();
+ method public boolean isPositiveArc();
+ property public final float arcStartX;
+ property public final float arcStartY;
+ property public final float horizontalEllipseRadius;
+ property public final boolean isMoreThanHalf;
+ property public final boolean isPositiveArc;
+ property public final float theta;
+ property public final float verticalEllipseRadius;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.Close extends androidx.compose.ui.graphics.vector.PathNode {
+ field public static final androidx.compose.ui.graphics.vector.PathNode.Close INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.CurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.CurveTo(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public float component5();
+ method public float component6();
+ method public androidx.compose.ui.graphics.vector.PathNode.CurveTo copy(float x1, float y1, float x2, float y2, float x3, float y3);
+ method public float getX1();
+ method public float getX2();
+ method public float getX3();
+ method public float getY1();
+ method public float getY2();
+ method public float getY3();
+ property public final float x1;
+ property public final float x2;
+ property public final float x3;
+ property public final float y1;
+ property public final float y2;
+ property public final float y3;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.HorizontalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.HorizontalTo(float x);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.HorizontalTo copy(float x);
+ method public float getX();
+ property public final float x;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.LineTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.LineTo(float x, float y);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.LineTo copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.MoveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.MoveTo(float x, float y);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.MoveTo copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.QuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.QuadTo(float x1, float y1, float x2, float y2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.QuadTo copy(float x1, float y1, float x2, float y2);
+ method public float getX1();
+ method public float getX2();
+ method public float getY1();
+ method public float getY2();
+ property public final float x1;
+ property public final float x2;
+ property public final float y1;
+ property public final float y2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.ReflectiveCurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.ReflectiveCurveTo(float x1, float y1, float x2, float y2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.ReflectiveCurveTo copy(float x1, float y1, float x2, float y2);
+ method public float getX1();
+ method public float getX2();
+ method public float getY1();
+ method public float getY2();
+ property public final float x1;
+ property public final float x2;
+ property public final float y1;
+ property public final float y2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.ReflectiveQuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.ReflectiveQuadTo(float x, float y);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.ReflectiveQuadTo copy(float x, float y);
+ method public float getX();
+ method public float getY();
+ property public final float x;
+ property public final float y;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeArcTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeArcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartDx, float arcStartDy);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public boolean component4();
+ method public boolean component5();
+ method public float component6();
+ method public float component7();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeArcTo copy(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, boolean isMoreThanHalf, boolean isPositiveArc, float arcStartDx, float arcStartDy);
+ method public float getArcStartDx();
+ method public float getArcStartDy();
+ method public float getHorizontalEllipseRadius();
+ method public float getTheta();
+ method public float getVerticalEllipseRadius();
+ method public boolean isMoreThanHalf();
+ method public boolean isPositiveArc();
+ property public final float arcStartDx;
+ property public final float arcStartDy;
+ property public final float horizontalEllipseRadius;
+ property public final boolean isMoreThanHalf;
+ property public final boolean isPositiveArc;
+ property public final float theta;
+ property public final float verticalEllipseRadius;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeCurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeCurveTo(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public float component5();
+ method public float component6();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeCurveTo copy(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+ method public float getDx1();
+ method public float getDx2();
+ method public float getDx3();
+ method public float getDy1();
+ method public float getDy2();
+ method public float getDy3();
+ property public final float dx1;
+ property public final float dx2;
+ property public final float dx3;
+ property public final float dy1;
+ property public final float dy2;
+ property public final float dy3;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeHorizontalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeHorizontalTo(float dx);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeHorizontalTo copy(float dx);
+ method public float getDx();
+ property public final float dx;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeLineTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeLineTo(float dx, float dy);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeLineTo copy(float dx, float dy);
+ method public float getDx();
+ method public float getDy();
+ property public final float dx;
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeMoveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeMoveTo(float dx, float dy);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeMoveTo copy(float dx, float dy);
+ method public float getDx();
+ method public float getDy();
+ property public final float dx;
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeQuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeQuadTo(float dx1, float dy1, float dx2, float dy2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeQuadTo copy(float dx1, float dy1, float dx2, float dy2);
+ method public float getDx1();
+ method public float getDx2();
+ method public float getDy1();
+ method public float getDy2();
+ property public final float dx1;
+ property public final float dx2;
+ property public final float dy1;
+ property public final float dy2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeReflectiveCurveTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeReflectiveCurveTo(float dx1, float dy1, float dx2, float dy2);
+ method public float component1();
+ method public float component2();
+ method public float component3();
+ method public float component4();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeReflectiveCurveTo copy(float dx1, float dy1, float dx2, float dy2);
+ method public float getDx1();
+ method public float getDx2();
+ method public float getDy1();
+ method public float getDy2();
+ property public final float dx1;
+ property public final float dx2;
+ property public final float dy1;
+ property public final float dy2;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeReflectiveQuadTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeReflectiveQuadTo(float dx, float dy);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeReflectiveQuadTo copy(float dx, float dy);
+ method public float getDx();
+ method public float getDy();
+ property public final float dx;
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.RelativeVerticalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.RelativeVerticalTo(float dy);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.RelativeVerticalTo copy(float dy);
+ method public float getDy();
+ property public final float dy;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class PathNode.VerticalTo extends androidx.compose.ui.graphics.vector.PathNode {
+ ctor public PathNode.VerticalTo(float y);
+ method public float component1();
+ method public androidx.compose.ui.graphics.vector.PathNode.VerticalTo copy(float y);
+ method public float getY();
+ property public final float y;
+ }
+
+ public final class PathParser {
+ ctor public PathParser();
+ method public androidx.compose.ui.graphics.vector.PathParser addPathNodes(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> nodes);
+ method public void clear();
+ method public androidx.compose.ui.graphics.vector.PathParser parsePathString(String pathData);
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> toNodes();
+ method public androidx.compose.ui.graphics.Path toPath(optional androidx.compose.ui.graphics.Path target);
+ }
+
+}
+
diff --git a/compose/ui/ui-graphics/api/restricted_current.ignore b/compose/ui/ui-graphics/api/restricted_current.ignore
deleted file mode 100644
index 8f7bb6b..0000000
--- a/compose/ui/ui-graphics/api/restricted_current.ignore
+++ /dev/null
@@ -1,19 +0,0 @@
-// Baseline format: 1.0
-AddedAbstractMethod: androidx.compose.ui.graphics.PathMeasure#getPosition(float):
- Added method androidx.compose.ui.graphics.PathMeasure.getPosition(float)
-AddedAbstractMethod: androidx.compose.ui.graphics.PathMeasure#getTangent(float):
- Added method androidx.compose.ui.graphics.PathMeasure.getTangent(float)
-
-
-RemovedClass: androidx.compose.ui.graphics.AndroidShader_androidKt:
- Removed class androidx.compose.ui.graphics.AndroidShader_androidKt
-RemovedClass: androidx.compose.ui.graphics.Float16Kt:
- Removed class androidx.compose.ui.graphics.Float16Kt
-RemovedClass: androidx.compose.ui.graphics.drawscope.CanvasDrawScopeKt:
- Removed class androidx.compose.ui.graphics.drawscope.CanvasDrawScopeKt
-RemovedClass: androidx.compose.ui.graphics.vector.PathNodeKt:
- Removed class androidx.compose.ui.graphics.vector.PathNodeKt
-
-
-RemovedPackage: androidx.compose.ui.graphics.internal:
- Removed package androidx.compose.ui.graphics.internal
diff --git a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/inspector/ParameterFactoryTest.kt b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/inspector/ParameterFactoryTest.kt
index 6b03b4c..c75966c 100644
--- a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/inspector/ParameterFactoryTest.kt
+++ b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/inspector/ParameterFactoryTest.kt
@@ -43,11 +43,14 @@
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.DefaultCameraDistance
+import androidx.compose.ui.graphics.DefaultShadowColor
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.Shadow
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.colorspace.ColorModel
import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.debugInspectorInfo
@@ -670,6 +673,44 @@
}
@Test
+ fun testSingleModifierNode() {
+ validate(
+ create(
+ "modifier",
+ Modifier.graphicsLayer(
+ scaleX = 2f,
+ scaleY = 1.5f,
+ alpha = 0.5f,
+ clip = true
+ )
+ )
+ ) {
+ parameter("modifier", ParameterType.String, "") {
+ parameter("graphicsLayer", ParameterType.String, "") {
+ parameter("scaleX", ParameterType.Float, 2f)
+ parameter("scaleY", ParameterType.Float, 1.5f)
+ parameter("alpha", ParameterType.Float, 0.5f)
+ parameter("translationX", ParameterType.Float, 0f)
+ parameter("translationY", ParameterType.Float, 0f)
+ parameter("shadowElevation", ParameterType.Float, 0f)
+ parameter("rotationX", ParameterType.Float, 0f)
+ parameter("rotationY", ParameterType.Float, 0f)
+ parameter("rotationZ", ParameterType.Float, 0f)
+ parameter("cameraDistance", ParameterType.Float, DefaultCameraDistance)
+ parameter("transformOrigin", ParameterType.String, "Center")
+ parameter("shape", ParameterType.String, "RectangleShape")
+ parameter("clip", ParameterType.Boolean, true)
+ // parameter("renderEffect", ParameterType.String, "")
+ val shadowArgb = DefaultShadowColor.toArgb()
+ parameter("ambientShadowColor", ParameterType.Color, shadowArgb, index = 14)
+ parameter("spotShadowColor", ParameterType.Color, shadowArgb, index = 15)
+ parameter("compositingStrategy", ParameterType.String, "Auto", index = 16)
+ }
+ }
+ }
+ }
+
+ @Test
fun testWrappedModifier() {
fun Modifier.frame(color: Color) = inspectable(
debugInspectorInfo {
diff --git a/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/ModifierNodeInspectablePropertiesDetector.kt b/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/ModifierNodeInspectablePropertiesDetector.kt
new file mode 100644
index 0000000..bfa381b
--- /dev/null
+++ b/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/ModifierNodeInspectablePropertiesDetector.kt
@@ -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.
+ */
+
+@file:Suppress("UnstableApiUsage")
+
+package androidx.compose.ui.lint
+
+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 org.jetbrains.kotlin.psi.KtCallableDeclaration
+import org.jetbrains.uast.UClass
+import org.jetbrains.uast.UMethod
+import org.jetbrains.uast.UTypeReferenceExpression
+import org.jetbrains.uast.UastFacade
+import org.jetbrains.uast.convertWithParent
+import org.jetbrains.uast.toUElement
+
+/**
+ * Detects subclasses of ModifierNodeElement that do not override the base `inspectableProperties`
+ * function. Classes that extend from another class which overrides this function satisfy the
+ * inspection.
+ *
+ * We suggest overriding this method to provide more accurate, complete, and consistent data in
+ * the layout inspector. This check reports an error for AndroidX libraries, since we want to ensure
+ * each modifier has full inspection support. Additionally, the base implementation can only work
+ * if kotlin-reflect is in the classpath, which is avoided by having a custom implementation.
+ */
+class ModifierNodeInspectablePropertiesDetector : Detector(), Detector.UastScanner {
+
+ override fun applicableSuperClasses(): List<String> {
+ return listOf("androidx.compose.ui.node.ModifierNodeElement")
+ }
+
+ override fun visitClass(context: JavaContext, declaration: UClass) {
+ if (declaration.qualifiedName == ModifierNodeElementFqName) {
+ return
+ }
+
+ if (declaration.getInspectablePropertiesFunctionOverride() == null) {
+ context.report(
+ ModifierNodeInspectableProperties,
+ declaration,
+ context.getNameLocation(declaration),
+ "${declaration.name} does not override $InspectionFunName(). The layout " +
+ "inspector will use the default implementation of this function, which " +
+ "will attempt to read ${declaration.name}'s properties reflectively. " +
+ "Override $InspectionFunName() if you'd like to customize this modifier's " +
+ "presentation in the layout inspector."
+ )
+ }
+ }
+
+ private tailrec fun UClass?.getInspectablePropertiesFunctionOverride(): UMethod? {
+ if (this == null || qualifiedName == ModifierNodeElementFqName) {
+ return null
+ }
+
+ return uastDeclarations
+ .filterIsInstance<UMethod>()
+ .firstOrNull { it.hasInspectablePropertiesSignature() }
+ ?: UastFacade.convertWithParent<UClass>(javaPsi.superClass)
+ ?.getInspectablePropertiesFunctionOverride()
+ }
+
+ private fun UMethod.hasInspectablePropertiesSignature(): Boolean {
+ return name == InspectionFunName &&
+ parameters.size == 1 && // The only argument is the receiver
+ receiverFqType == InspectionFunFqReceiver
+ }
+
+ private val UMethod.receiverFqType: String?
+ get() {
+ val receiverTypeRef = (sourcePsi as? KtCallableDeclaration)?.receiverTypeReference
+ return (receiverTypeRef?.toUElement() as? UTypeReferenceExpression)?.getQualifiedName()
+ }
+
+ companion object {
+ private const val ModifierNodeElementFqName = "androidx.compose.ui.node.ModifierNodeElement"
+ private const val InspectionFunName = "inspectableProperties"
+ private const val InspectionFunFqReceiver = "androidx.compose.ui.platform.InspectorInfo"
+
+ val ModifierNodeInspectableProperties = Issue.create(
+ "ModifierNodeInspectableProperties",
+ "ModifierNodeElement missing inspectableProperties",
+ "ModifierNodeElements may override inspectableProperties() to provide information " +
+ "about the modifier in the layout inspector. The default implementation attempts " +
+ "to read all of the properties on the class reflectively, which may not " +
+ "comprehensively or effectively describe the modifier.",
+ Category.PRODUCTIVITY, 4, Severity.INFORMATIONAL,
+ Implementation(
+ ModifierNodeInspectablePropertiesDetector::class.java,
+ Scope.JAVA_FILE_SCOPE
+ )
+ )
+ }
+}
\ No newline at end of file
diff --git a/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/UiIssueRegistry.kt b/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/UiIssueRegistry.kt
index 109f8b0..d296f22 100644
--- a/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/UiIssueRegistry.kt
+++ b/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/UiIssueRegistry.kt
@@ -35,6 +35,7 @@
ModifierDeclarationDetector.ModifierFactoryExtensionFunction,
ModifierDeclarationDetector.ModifierFactoryReturnType,
ModifierDeclarationDetector.ModifierFactoryUnreferencedReceiver,
+ ModifierNodeInspectablePropertiesDetector.ModifierNodeInspectableProperties,
ModifierParameterDetector.ModifierParameter,
ReturnFromAwaitPointerEventScopeDetector.ExitAwaitPointerEventScope,
MultipleAwaitPointerEventScopesDetector.MultipleAwaitPointerEventScopes
diff --git a/compose/ui/ui-lint/src/test/java/androidx/compose/ui/lint/ModifierNodeInspectablePropertiesDetectorTest.kt b/compose/ui/ui-lint/src/test/java/androidx/compose/ui/lint/ModifierNodeInspectablePropertiesDetectorTest.kt
new file mode 100644
index 0000000..191e087
--- /dev/null
+++ b/compose/ui/ui-lint/src/test/java/androidx/compose/ui/lint/ModifierNodeInspectablePropertiesDetectorTest.kt
@@ -0,0 +1,246 @@
+/*
+ * 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.ui.lint
+
+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
+
+/* ktlint-disable max-line-length */
+class ModifierNodeInspectablePropertiesDetectorTest : LintDetectorTest() {
+ override fun getDetector(): Detector = ModifierNodeInspectablePropertiesDetector()
+
+ override fun getIssues(): MutableList<Issue> = mutableListOf(
+ ModifierNodeInspectablePropertiesDetector.ModifierNodeInspectableProperties
+ )
+
+ @Test
+ fun testNodeElementWithNoInspectableValues_flagsError() {
+ lint().files(
+ kotlin(
+ """
+ package test
+
+ import androidx.compose.ui.Modifier
+ import androidx.compose.ui.platform.InspectableValue
+ import androidx.compose.ui.node.ModifierNodeElement
+
+ class Element : ModifierNodeElement<Modifier.Node>() {
+ override fun create() = object : Modifier.Node() {}
+ override fun update(node: Modifier.Node) = node
+ }
+ """
+ ),
+ ModifierStub, InspectableValueStub, ModifierNodeElementStub
+ )
+ .run()
+ .expect(
+ """
+src/test/Element.kt:8: Information: Element does not override inspectableProperties(). The layout inspector will use the default implementation of this function, which will attempt to read Element's properties reflectively. Override inspectableProperties() if you'd like to customize this modifier's presentation in the layout inspector. [ModifierNodeInspectableProperties]
+ class Element : ModifierNodeElement<Modifier.Node>() {
+ ~~~~~~~
+0 errors, 0 warnings
+ """.trimIndent()
+ )
+ }
+
+ @Test
+ fun testNodeElementWithAlmostInspectableValues_flagsError() {
+ lint().files(
+ kotlin(
+ """
+ package test
+
+ import androidx.compose.ui.Modifier
+ import androidx.compose.ui.platform.InspectableValue
+ import androidx.compose.ui.platform.InspectorInfo
+ import androidx.compose.ui.node.ModifierNodeElement
+
+ class ElementWithExtraParam : ModifierNodeElement<Modifier.Node>() {
+ override fun create() = object : Modifier.Node() {}
+ override fun update(node: Modifier.Node) = node
+ // Doesn't override the base declaration
+ fun InspectorInfo.inspectableProperties(count: Int) {
+ name = "element"
+ properties["count"] = count
+ }
+ }
+ """
+ ),
+ kotlin(
+ """
+ package test
+
+ import androidx.compose.ui.Modifier
+ import androidx.compose.ui.platform.InspectableValue
+ import androidx.compose.ui.platform.InspectorInfo
+ import androidx.compose.ui.node.ModifierNodeElement
+
+ class ElementWithoutReceiver : ModifierNodeElement<Modifier.Node>() {
+ override fun create() = object : Modifier.Node() {}
+ override fun update(node: Modifier.Node) = node
+ // Doesn't override the base declaration
+ fun inspectableProperties() { }
+ }
+ """
+ ),
+ ModifierStub, InspectableValueStub, ModifierNodeElementStub
+ )
+ .run()
+ .expect(
+ """
+src/test/ElementWithExtraParam.kt:9: Information: ElementWithExtraParam does not override inspectableProperties(). The layout inspector will use the default implementation of this function, which will attempt to read ElementWithExtraParam's properties reflectively. Override inspectableProperties() if you'd like to customize this modifier's presentation in the layout inspector. [ModifierNodeInspectableProperties]
+ class ElementWithExtraParam : ModifierNodeElement<Modifier.Node>() {
+ ~~~~~~~~~~~~~~~~~~~~~
+src/test/ElementWithoutReceiver.kt:9: Information: ElementWithoutReceiver does not override inspectableProperties(). The layout inspector will use the default implementation of this function, which will attempt to read ElementWithoutReceiver's properties reflectively. Override inspectableProperties() if you'd like to customize this modifier's presentation in the layout inspector. [ModifierNodeInspectableProperties]
+ class ElementWithoutReceiver : ModifierNodeElement<Modifier.Node>() {
+ ~~~~~~~~~~~~~~~~~~~~~~
+0 errors, 0 warnings
+ """.trimIndent()
+ )
+ }
+
+ @Test
+ fun testNodeElementWithInspectableValues_doesNotFlagError() {
+ lint().files(
+ kotlin(
+ """
+ package test
+
+ import androidx.compose.ui.Modifier
+ import androidx.compose.ui.platform.InspectableValue
+ import androidx.compose.ui.platform.InspectorInfo
+ import androidx.compose.ui.node.ModifierNodeElement
+
+ class Element : ModifierNodeElement<Modifier.Node>() {
+ override fun create() = object : Modifier.Node() {}
+ override fun update(node: Modifier.Node) = node
+ override fun InspectorInfo.inspectableProperties() {
+ name = "element"
+ properties["count"] = count
+ }
+ }
+ """
+ ),
+ ModifierStub, InspectableValueStub, ModifierNodeElementStub
+ )
+ .run()
+ .expectClean()
+ }
+
+ @Test
+ fun testNodeElementWithInheritedInspectableValues_doesNotFlagError() {
+ lint().files(
+ kotlin(
+ """
+ package test
+
+ import androidx.compose.ui.Modifier
+ import androidx.compose.ui.platform.InspectableValue
+ import androidx.compose.ui.platform.InspectorInfo
+ import androidx.compose.ui.node.ModifierNodeElement
+
+ open class Element : ModifierNodeElement<Modifier.Node>() {
+ override fun create() = object : Modifier.Node() {}
+ override fun update(node: Modifier.Node) = node
+ override fun InspectorInfo.inspectableProperties() {
+ name = "element"
+ properties["count"] = count
+ }
+ }
+
+ class InheritingElement : Element() {
+ override fun create() = object : Modifier.Node() {}
+ override fun update(node: Modifier.Node) = node
+ }
+ """
+ ),
+ ModifierStub, InspectableValueStub, ModifierNodeElementStub
+ )
+ .run()
+ .expectClean()
+ }
+
+ companion object {
+ private val ModifierStub = kotlin(
+ """
+ package androidx.compose.ui
+
+ interface Modifier {
+ interface Node
+ interface Element
+ }
+ """
+ )
+
+ private val InspectableValueStub = kotlin(
+ """
+ package androidx.compose.ui.platform
+
+ import androidx.compose.ui.Modifier
+
+ interface InspectableValue {
+ val inspectableElements: Sequence<ValueElement>
+ get() = emptySequence()
+
+ val nameFallback: String?
+ get() = null
+
+ val valueOverride: Any?
+ get() = null
+ }
+
+ data class ValueElement(val name: String, val value: Any?)
+
+ class InspectorInfo {
+ var name: String? = null
+ var value: Any? = null
+ val properties = ValueElementSequence()
+ }
+
+ class ValueElementSequence : Sequence<ValueElement> {
+ private val elements = mutableListOf<ValueElement>()
+
+ override fun iterator(): Iterator<ValueElement> = elements.iterator()
+
+ operator fun set(name: String, value: Any?) {
+ elements.add(ValueElement(name, value))
+ }
+ }
+ """
+ )
+
+ private val ModifierNodeElementStub = kotlin(
+ """
+ package androidx.compose.ui.node
+
+ abstract class ModifierNodeElement<N : Modifier.Node> : Modifier.Element {
+
+ abstract fun create(): N
+
+ abstract fun update(node: N): N
+
+ open fun InspectorInfo.inspectableProperties() {
+ // Reflective implementation omitted from the stubs.
+ }
+ }
+ """
+ )
+ }
+}
+/* ktlint-enable max-line-length */
\ No newline at end of file
diff --git a/compose/ui/ui-test-junit4/api/1.4.0-beta02.txt b/compose/ui/ui-test-junit4/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..94a0fe4
--- /dev/null
+++ b/compose/ui/ui-test-junit4/api/1.4.0-beta02.txt
@@ -0,0 +1,72 @@
+// Signature format: 4.0
+package androidx.compose.ui.test.junit4 {
+
+ public final class AndroidComposeTestRule<R extends org.junit.rules.TestRule, A extends androidx.activity.ComponentActivity> implements androidx.compose.ui.test.junit4.ComposeContentTestRule {
+ ctor public AndroidComposeTestRule(R activityRule, kotlin.jvm.functions.Function1<? super R,? extends A> activityProvider);
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public A getActivity();
+ method public R getActivityRule();
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.test.MainTestClock getMainClock();
+ method public androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodes(androidx.compose.ui.test.SemanticsMatcher matcher, boolean useUnmergedTree);
+ method public androidx.compose.ui.test.SemanticsNodeInteraction onNode(androidx.compose.ui.test.SemanticsMatcher matcher, boolean useUnmergedTree);
+ method public void registerIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public <T> T! runOnIdle(kotlin.jvm.functions.Function0<? extends T> action);
+ method public <T> T! runOnUiThread(kotlin.jvm.functions.Function0<? extends T> action);
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+ method public void unregisterIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public void waitForIdle();
+ method public void waitUntil(long timeoutMillis, kotlin.jvm.functions.Function0<java.lang.Boolean> condition);
+ property public final A activity;
+ property public final R activityRule;
+ property public androidx.compose.ui.unit.Density density;
+ property public androidx.compose.ui.test.MainTestClock mainClock;
+ }
+
+ @Deprecated public final class AndroidComposeTestRule.AndroidComposeStatement extends org.junit.runners.model.Statement {
+ ctor @Deprecated public AndroidComposeTestRule.AndroidComposeStatement(org.junit.runners.model.Statement base);
+ method @Deprecated public void evaluate();
+ }
+
+ public final class AndroidComposeTestRule_androidKt {
+ method public static <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(Class<A> activityClass);
+ method public static inline <reified A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule();
+ method public static androidx.compose.ui.test.junit4.ComposeContentTestRule createComposeRule();
+ method public static androidx.compose.ui.test.junit4.ComposeTestRule createEmptyComposeRule();
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ComposeContentTestRule extends androidx.compose.ui.test.junit4.ComposeTestRule {
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ComposeTestRule extends org.junit.rules.TestRule androidx.compose.ui.test.SemanticsNodeInteractionsProvider {
+ method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.test.MainTestClock getMainClock();
+ method public void registerIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public <T> T! runOnIdle(kotlin.jvm.functions.Function0<? extends T> action);
+ method public <T> T! runOnUiThread(kotlin.jvm.functions.Function0<? extends T> action);
+ method public void unregisterIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public void waitForIdle();
+ method public void waitUntil(optional long timeoutMillis, kotlin.jvm.functions.Function0<java.lang.Boolean> condition);
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract androidx.compose.ui.test.MainTestClock mainClock;
+ }
+
+ public final class StateRestorationTester {
+ ctor public StateRestorationTester(androidx.compose.ui.test.junit4.ComposeContentTestRule composeTestRule);
+ method public void emulateSavedInstanceStateRestore();
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+ }
+
+}
+
+package androidx.compose.ui.test.junit4.android {
+
+ public final class ComposeNotIdleException extends java.lang.Exception {
+ ctor public ComposeNotIdleException(String? message, Throwable? cause);
+ }
+
+}
+
diff --git a/compose/ui/ui-test-junit4/api/current.ignore b/compose/ui/ui-test-junit4/api/current.ignore
deleted file mode 100644
index 06d8a27..0000000
--- a/compose/ui/ui-test-junit4/api/current.ignore
+++ /dev/null
@@ -1,13 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.test.junit4.AndroidSynchronization_androidKt:
- Removed class androidx.compose.ui.test.junit4.AndroidSynchronization_androidKt
-RemovedClass: androidx.compose.ui.test.junit4.ComposeIdlingResource_androidKt:
- Removed class androidx.compose.ui.test.junit4.ComposeIdlingResource_androidKt
-RemovedClass: androidx.compose.ui.test.junit4.ComposeRootRegistry_androidKt:
- Removed class androidx.compose.ui.test.junit4.ComposeRootRegistry_androidKt
-RemovedClass: androidx.compose.ui.test.junit4.EspressoLink_androidKt:
- Removed class androidx.compose.ui.test.junit4.EspressoLink_androidKt
-
-
-RemovedPackage: androidx.compose.ui.test:
- Removed package androidx.compose.ui.test
diff --git a/compose/ui/ui-test-junit4/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-test-junit4/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..53f3965
--- /dev/null
+++ b/compose/ui/ui-test-junit4/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,140 @@
+// Signature format: 4.0
+package androidx.compose.ui.test {
+
+ @androidx.compose.ui.test.ExperimentalTestApi public sealed interface AndroidComposeUiTest<A extends androidx.activity.ComponentActivity> extends androidx.compose.ui.test.ComposeUiTest {
+ method public A? getActivity();
+ property public abstract A? activity;
+ }
+
+ @androidx.compose.ui.test.ExperimentalTestApi public abstract class AndroidComposeUiTestEnvironment<A extends androidx.activity.ComponentActivity> {
+ ctor public AndroidComposeUiTestEnvironment(optional kotlin.coroutines.CoroutineContext effectContext);
+ method protected abstract A? getActivity();
+ method public final androidx.compose.ui.test.AndroidComposeUiTest<A> getTest();
+ method public final <R> R! runTest(kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.AndroidComposeUiTest<A>,? extends R> block);
+ property protected abstract A? activity;
+ property public final androidx.compose.ui.test.AndroidComposeUiTest<A> test;
+ }
+
+ @androidx.compose.ui.test.ExperimentalTestApi public sealed interface ComposeUiTest extends androidx.compose.ui.test.SemanticsNodeInteractionsProvider {
+ method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.test.MainTestClock getMainClock();
+ method public void registerIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public <T> T! runOnIdle(kotlin.jvm.functions.Function0<? extends T> action);
+ method public <T> T! runOnUiThread(kotlin.jvm.functions.Function0<? extends T> action);
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+ method public void unregisterIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public void waitForIdle();
+ method public void waitUntil(long timeoutMillis, kotlin.jvm.functions.Function0<java.lang.Boolean> condition);
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract androidx.compose.ui.test.MainTestClock mainClock;
+ }
+
+ public final class ComposeUiTestKt {
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void runComposeUiTest(optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.ComposeUiTest,? extends kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void waitUntilAtLeastOneExists(androidx.compose.ui.test.ComposeUiTest, androidx.compose.ui.test.SemanticsMatcher matcher, optional long timeoutMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void waitUntilDoesNotExist(androidx.compose.ui.test.ComposeUiTest, androidx.compose.ui.test.SemanticsMatcher matcher, optional long timeoutMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void waitUntilExactlyOneExists(androidx.compose.ui.test.ComposeUiTest, androidx.compose.ui.test.SemanticsMatcher matcher, optional long timeoutMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void waitUntilNodeCount(androidx.compose.ui.test.ComposeUiTest, androidx.compose.ui.test.SemanticsMatcher matcher, int count, optional long timeoutMillis);
+ }
+
+ public final class ComposeUiTest_androidKt {
+ method @androidx.compose.ui.test.ExperimentalTestApi public static inline <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.AndroidComposeUiTestEnvironment<A> AndroidComposeUiTestEnvironment(optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function0<? extends A> activityProvider);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static <A extends androidx.activity.ComponentActivity> void runAndroidComposeUiTest(Class<A> activityClass, optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.AndroidComposeUiTest<A>,kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static inline <reified A extends androidx.activity.ComponentActivity> void runAndroidComposeUiTest(optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.AndroidComposeUiTest<A>,? extends kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void runComposeUiTest(kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.ComposeUiTest,kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void runEmptyComposeUiTest(kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.ComposeUiTest,kotlin.Unit> block);
+ }
+
+ @androidx.compose.ui.test.ExperimentalTestApi public final class StateRestorationTester {
+ ctor public StateRestorationTester(androidx.compose.ui.test.ComposeUiTest composeTest);
+ method public void emulateSaveAndRestore();
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+ }
+
+}
+
+package androidx.compose.ui.test.junit4 {
+
+ public final class AndroidComposeTestRule<R extends org.junit.rules.TestRule, A extends androidx.activity.ComponentActivity> implements androidx.compose.ui.test.junit4.ComposeContentTestRule {
+ ctor public AndroidComposeTestRule(R activityRule, kotlin.jvm.functions.Function1<? super R,? extends A> activityProvider);
+ ctor @androidx.compose.ui.test.ExperimentalTestApi public AndroidComposeTestRule(R activityRule, optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super R,? extends A> activityProvider);
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public A getActivity();
+ method public R getActivityRule();
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.test.MainTestClock getMainClock();
+ method public androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodes(androidx.compose.ui.test.SemanticsMatcher matcher, boolean useUnmergedTree);
+ method public androidx.compose.ui.test.SemanticsNodeInteraction onNode(androidx.compose.ui.test.SemanticsMatcher matcher, boolean useUnmergedTree);
+ method public void registerIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public <T> T! runOnIdle(kotlin.jvm.functions.Function0<? extends T> action);
+ method public <T> T! runOnUiThread(kotlin.jvm.functions.Function0<? extends T> action);
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+ method public void unregisterIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public void waitForIdle();
+ method public void waitUntil(long timeoutMillis, kotlin.jvm.functions.Function0<java.lang.Boolean> condition);
+ method @androidx.compose.ui.test.ExperimentalTestApi public void waitUntilAtLeastOneExists(androidx.compose.ui.test.SemanticsMatcher matcher, long timeoutMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public void waitUntilDoesNotExist(androidx.compose.ui.test.SemanticsMatcher matcher, long timeoutMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public void waitUntilExactlyOneExists(androidx.compose.ui.test.SemanticsMatcher matcher, long timeoutMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public void waitUntilNodeCount(androidx.compose.ui.test.SemanticsMatcher matcher, int count, long timeoutMillis);
+ property public final A activity;
+ property public final R activityRule;
+ property public androidx.compose.ui.unit.Density density;
+ property public androidx.compose.ui.test.MainTestClock mainClock;
+ }
+
+ @Deprecated public final class AndroidComposeTestRule.AndroidComposeStatement extends org.junit.runners.model.Statement {
+ ctor @Deprecated public AndroidComposeTestRule.AndroidComposeStatement(org.junit.runners.model.Statement base);
+ method @Deprecated public void evaluate();
+ }
+
+ public final class AndroidComposeTestRule_androidKt {
+ method public static <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(Class<A> activityClass);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(Class<A> activityClass, optional kotlin.coroutines.CoroutineContext effectContext);
+ method public static inline <reified A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule();
+ method @androidx.compose.ui.test.ExperimentalTestApi public static inline <reified A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(optional kotlin.coroutines.CoroutineContext effectContext);
+ method public static androidx.compose.ui.test.junit4.ComposeContentTestRule createComposeRule();
+ method @androidx.compose.ui.test.ExperimentalTestApi public static androidx.compose.ui.test.junit4.ComposeContentTestRule createComposeRule(kotlin.coroutines.CoroutineContext effectContext);
+ method public static androidx.compose.ui.test.junit4.ComposeTestRule createEmptyComposeRule();
+ method @androidx.compose.ui.test.ExperimentalTestApi public static androidx.compose.ui.test.junit4.ComposeTestRule createEmptyComposeRule(optional kotlin.coroutines.CoroutineContext effectContext);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ComposeContentTestRule extends androidx.compose.ui.test.junit4.ComposeTestRule {
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ComposeTestRule extends org.junit.rules.TestRule androidx.compose.ui.test.SemanticsNodeInteractionsProvider {
+ method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.test.MainTestClock getMainClock();
+ method public void registerIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public <T> T! runOnIdle(kotlin.jvm.functions.Function0<? extends T> action);
+ method public <T> T! runOnUiThread(kotlin.jvm.functions.Function0<? extends T> action);
+ method public void unregisterIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public void waitForIdle();
+ method public void waitUntil(optional long timeoutMillis, kotlin.jvm.functions.Function0<java.lang.Boolean> condition);
+ method @androidx.compose.ui.test.ExperimentalTestApi public void waitUntilAtLeastOneExists(androidx.compose.ui.test.SemanticsMatcher matcher, optional long timeoutMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public void waitUntilDoesNotExist(androidx.compose.ui.test.SemanticsMatcher matcher, optional long timeoutMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public void waitUntilExactlyOneExists(androidx.compose.ui.test.SemanticsMatcher matcher, optional long timeoutMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public void waitUntilNodeCount(androidx.compose.ui.test.SemanticsMatcher matcher, int count, optional long timeoutMillis);
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract androidx.compose.ui.test.MainTestClock mainClock;
+ }
+
+ public final class StateRestorationTester {
+ ctor public StateRestorationTester(androidx.compose.ui.test.junit4.ComposeContentTestRule composeTestRule);
+ method public void emulateSavedInstanceStateRestore();
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+ }
+
+}
+
+package androidx.compose.ui.test.junit4.android {
+
+ public final class ComposeNotIdleException extends java.lang.Exception {
+ ctor public ComposeNotIdleException(String? message, Throwable? cause);
+ }
+
+}
+
diff --git a/compose/ui/ui-test-junit4/api/res-1.4.0-beta02.txt b/compose/ui/ui-test-junit4/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-test-junit4/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-test-junit4/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-test-junit4/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..94a0fe4
--- /dev/null
+++ b/compose/ui/ui-test-junit4/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,72 @@
+// Signature format: 4.0
+package androidx.compose.ui.test.junit4 {
+
+ public final class AndroidComposeTestRule<R extends org.junit.rules.TestRule, A extends androidx.activity.ComponentActivity> implements androidx.compose.ui.test.junit4.ComposeContentTestRule {
+ ctor public AndroidComposeTestRule(R activityRule, kotlin.jvm.functions.Function1<? super R,? extends A> activityProvider);
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public A getActivity();
+ method public R getActivityRule();
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.test.MainTestClock getMainClock();
+ method public androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodes(androidx.compose.ui.test.SemanticsMatcher matcher, boolean useUnmergedTree);
+ method public androidx.compose.ui.test.SemanticsNodeInteraction onNode(androidx.compose.ui.test.SemanticsMatcher matcher, boolean useUnmergedTree);
+ method public void registerIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public <T> T! runOnIdle(kotlin.jvm.functions.Function0<? extends T> action);
+ method public <T> T! runOnUiThread(kotlin.jvm.functions.Function0<? extends T> action);
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+ method public void unregisterIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public void waitForIdle();
+ method public void waitUntil(long timeoutMillis, kotlin.jvm.functions.Function0<java.lang.Boolean> condition);
+ property public final A activity;
+ property public final R activityRule;
+ property public androidx.compose.ui.unit.Density density;
+ property public androidx.compose.ui.test.MainTestClock mainClock;
+ }
+
+ @Deprecated public final class AndroidComposeTestRule.AndroidComposeStatement extends org.junit.runners.model.Statement {
+ ctor @Deprecated public AndroidComposeTestRule.AndroidComposeStatement(org.junit.runners.model.Statement base);
+ method @Deprecated public void evaluate();
+ }
+
+ public final class AndroidComposeTestRule_androidKt {
+ method public static <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(Class<A> activityClass);
+ method public static inline <reified A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule();
+ method public static androidx.compose.ui.test.junit4.ComposeContentTestRule createComposeRule();
+ method public static androidx.compose.ui.test.junit4.ComposeTestRule createEmptyComposeRule();
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ComposeContentTestRule extends androidx.compose.ui.test.junit4.ComposeTestRule {
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ComposeTestRule extends org.junit.rules.TestRule androidx.compose.ui.test.SemanticsNodeInteractionsProvider {
+ method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.test.MainTestClock getMainClock();
+ method public void registerIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public <T> T! runOnIdle(kotlin.jvm.functions.Function0<? extends T> action);
+ method public <T> T! runOnUiThread(kotlin.jvm.functions.Function0<? extends T> action);
+ method public void unregisterIdlingResource(androidx.compose.ui.test.IdlingResource idlingResource);
+ method public void waitForIdle();
+ method public void waitUntil(optional long timeoutMillis, kotlin.jvm.functions.Function0<java.lang.Boolean> condition);
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract androidx.compose.ui.test.MainTestClock mainClock;
+ }
+
+ public final class StateRestorationTester {
+ ctor public StateRestorationTester(androidx.compose.ui.test.junit4.ComposeContentTestRule composeTestRule);
+ method public void emulateSavedInstanceStateRestore();
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+ }
+
+}
+
+package androidx.compose.ui.test.junit4.android {
+
+ public final class ComposeNotIdleException extends java.lang.Exception {
+ ctor public ComposeNotIdleException(String? message, Throwable? cause);
+ }
+
+}
+
diff --git a/compose/ui/ui-test-junit4/api/restricted_current.ignore b/compose/ui/ui-test-junit4/api/restricted_current.ignore
deleted file mode 100644
index 06d8a27..0000000
--- a/compose/ui/ui-test-junit4/api/restricted_current.ignore
+++ /dev/null
@@ -1,13 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.test.junit4.AndroidSynchronization_androidKt:
- Removed class androidx.compose.ui.test.junit4.AndroidSynchronization_androidKt
-RemovedClass: androidx.compose.ui.test.junit4.ComposeIdlingResource_androidKt:
- Removed class androidx.compose.ui.test.junit4.ComposeIdlingResource_androidKt
-RemovedClass: androidx.compose.ui.test.junit4.ComposeRootRegistry_androidKt:
- Removed class androidx.compose.ui.test.junit4.ComposeRootRegistry_androidKt
-RemovedClass: androidx.compose.ui.test.junit4.EspressoLink_androidKt:
- Removed class androidx.compose.ui.test.junit4.EspressoLink_androidKt
-
-
-RemovedPackage: androidx.compose.ui.test:
- Removed package androidx.compose.ui.test
diff --git a/compose/ui/ui-test-manifest/api/1.4.0-beta02.txt b/compose/ui/ui-test-manifest/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/compose/ui/ui-test-manifest/api/1.4.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/compose/ui/ui-test-manifest/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-test-manifest/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/compose/ui/ui-test-manifest/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/compose/ui/ui-test-manifest/api/res-1.4.0-beta02.txt b/compose/ui/ui-test-manifest/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-test-manifest/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-test-manifest/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-test-manifest/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/compose/ui/ui-test-manifest/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/compose/ui/ui-test/api/1.4.0-beta02.txt b/compose/ui/ui-test/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..ae53863
--- /dev/null
+++ b/compose/ui/ui-test/api/1.4.0-beta02.txt
@@ -0,0 +1,352 @@
+// Signature format: 4.0
+package androidx.compose.ui.test {
+
+ public final class ActionsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performClick(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method @Deprecated public static androidx.compose.ui.test.SemanticsNodeInteraction performGesture(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.GestureScope,kotlin.Unit> block);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performMultiModalInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.MultiModalInjectionScope,kotlin.Unit> block);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollTo(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToIndex(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToKey(androidx.compose.ui.test.SemanticsNodeInteraction, Object key);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToNode(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
+ method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsActionUnit(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> invocation);
+ method @Deprecated public static void performSemanticsActionUnit(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performTouchInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
+ }
+
+ public final class AndroidImageHelpers_androidKt {
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.compose.ui.graphics.ImageBitmap captureToImage(androidx.compose.ui.test.SemanticsNodeInteraction);
+ }
+
+ public final class AssertionsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assert(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher, optional kotlin.jvm.functions.Function0<java.lang.String>? messagePrefixOnError);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection assertAll(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection assertAny(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertContentDescriptionContains(androidx.compose.ui.test.SemanticsNodeInteraction, String value, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertContentDescriptionEquals(androidx.compose.ui.test.SemanticsNodeInteraction, java.lang.String... values);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection assertCountEquals(androidx.compose.ui.test.SemanticsNodeInteractionCollection, int expectedSize);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsDisplayed(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsEnabled(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsFocused(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotDisplayed(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotEnabled(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotFocused(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotSelected(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsOff(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsOn(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsSelectable(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsToggleable(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertRangeInfoEquals(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.ProgressBarRangeInfo value);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTextContains(androidx.compose.ui.test.SemanticsNodeInteraction, String value, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTextEquals(androidx.compose.ui.test.SemanticsNodeInteraction, String![] values, optional boolean includeEditableText);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertValueEquals(androidx.compose.ui.test.SemanticsNodeInteraction, String value);
+ }
+
+ public final class BoundsAssertionsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedHeight);
+ method public static void assertIsEqualTo(float, float expected, String subject, optional float tolerance);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedLeft);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedTop);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTouchHeightIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedHeight);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTouchWidthIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedWidth);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedWidth);
+ method public static float getAlignmentLinePosition(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public static androidx.compose.ui.unit.DpRect getBoundsInRoot(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.unit.DpRect getUnclippedBoundsInRoot(androidx.compose.ui.test.SemanticsNodeInteraction);
+ }
+
+ public final class ComposeTimeoutException extends java.lang.Throwable {
+ ctor public ComposeTimeoutException(String? message);
+ }
+
+ public final class FiltersKt {
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnyAncestor(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnyChild(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnyDescendant(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnySibling(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasClickAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasContentDescription(String value, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasContentDescriptionExactly(java.lang.String... values);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasImeAction(int actionType);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasNoClickAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasNoScrollAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasParent(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasProgressBarRangeInfo(androidx.compose.ui.semantics.ProgressBarRangeInfo rangeInfo);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollToIndexAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollToKeyAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollToNodeAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasSetTextAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasStateDescription(String value);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasTestTag(String testTag);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasText(String text, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasTextExactly(String![] textValues, optional boolean includeEditableText);
+ method public static androidx.compose.ui.test.SemanticsMatcher isDialog();
+ method public static androidx.compose.ui.test.SemanticsMatcher isEnabled();
+ method public static androidx.compose.ui.test.SemanticsMatcher isFocusable();
+ method public static androidx.compose.ui.test.SemanticsMatcher isFocused();
+ method public static androidx.compose.ui.test.SemanticsMatcher isHeading();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotEnabled();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotFocusable();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotFocused();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotSelected();
+ method public static androidx.compose.ui.test.SemanticsMatcher isOff();
+ method public static androidx.compose.ui.test.SemanticsMatcher isOn();
+ method public static androidx.compose.ui.test.SemanticsMatcher isPopup();
+ method public static androidx.compose.ui.test.SemanticsMatcher isRoot();
+ method public static androidx.compose.ui.test.SemanticsMatcher isSelectable();
+ method public static androidx.compose.ui.test.SemanticsMatcher isSelected();
+ method public static androidx.compose.ui.test.SemanticsMatcher isToggleable();
+ }
+
+ public final class FindersKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodesWithContentDescription(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String label, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodesWithTag(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String testTag, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodesWithText(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String text, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onNodeWithContentDescription(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String label, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onNodeWithTag(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String testTag, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onNodeWithText(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String text, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onRoot(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, optional boolean useUnmergedTree);
+ }
+
+ @Deprecated public final class GestureScope {
+ ctor @Deprecated public GestureScope(androidx.compose.ui.semantics.SemanticsNode node, androidx.compose.ui.test.TestContext testContext);
+ method @Deprecated public long getVisibleSize();
+ property public final long visibleSize;
+ }
+
+ public final class GestureScopeKt {
+ method @Deprecated public static void cancel(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void click(androidx.compose.ui.test.GestureScope, optional long position);
+ method @Deprecated public static void doubleClick(androidx.compose.ui.test.GestureScope, optional long position, optional long delayMillis);
+ method @Deprecated public static void down(androidx.compose.ui.test.GestureScope, int pointerId, long position);
+ method @Deprecated public static void down(androidx.compose.ui.test.GestureScope, long position);
+ method @Deprecated public static inline float getBottom(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getBottomCenter(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getBottomLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getBottomRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getCenter(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getCenterLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getCenterRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getCenterX(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getCenterY(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline int getHeight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getTop(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getTopCenter(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getTopLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getTopRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline int getWidth(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void longClick(androidx.compose.ui.test.GestureScope, optional long position, optional long durationMillis);
+ method @Deprecated public static void move(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void moveBy(androidx.compose.ui.test.GestureScope, int pointerId, long delta);
+ method @Deprecated public static void moveBy(androidx.compose.ui.test.GestureScope, long delta);
+ method @Deprecated public static void movePointerBy(androidx.compose.ui.test.GestureScope, int pointerId, long delta);
+ method @Deprecated public static void movePointerTo(androidx.compose.ui.test.GestureScope, int pointerId, long position);
+ method @Deprecated public static void moveTo(androidx.compose.ui.test.GestureScope, int pointerId, long position);
+ method @Deprecated public static void moveTo(androidx.compose.ui.test.GestureScope, long position);
+ method @Deprecated public static long percentOffset(androidx.compose.ui.test.GestureScope, optional float x, optional float y);
+ method @Deprecated public static void pinch(androidx.compose.ui.test.GestureScope, long start0, long end0, long start1, long end1, optional long durationMillis);
+ method @Deprecated public static void swipe(androidx.compose.ui.test.GestureScope, long start, long end, optional long durationMillis);
+ method @Deprecated public static void swipeDown(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void swipeLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void swipeRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void swipeUp(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void swipeWithVelocity(androidx.compose.ui.test.GestureScope, long start, long end, float endVelocity, optional long durationMillis);
+ method @Deprecated public static void up(androidx.compose.ui.test.GestureScope, optional int pointerId);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface IdlingResource {
+ method public default String? getDiagnosticMessageIfBusy();
+ method public boolean isIdleNow();
+ property public abstract boolean isIdleNow;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface InjectionScope extends androidx.compose.ui.unit.Density {
+ method public void advanceEventTime(optional long durationMillis);
+ method public default float getBottom();
+ method public default long getBottomCenter();
+ method public default long getBottomLeft();
+ method public default long getBottomRight();
+ method public default long getCenter();
+ method public default long getCenterLeft();
+ method public default long getCenterRight();
+ method public default float getCenterX();
+ method public default float getCenterY();
+ method public default long getEventPeriodMillis();
+ method public default int getHeight();
+ method public default float getLeft();
+ method public default float getRight();
+ method public default float getTop();
+ method public default long getTopCenter();
+ method public default long getTopLeft();
+ method public default long getTopRight();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public long getVisibleSize();
+ method public default int getWidth();
+ method public default long percentOffset(optional float x, optional float y);
+ property public default float bottom;
+ property public default long bottomCenter;
+ property public default long bottomLeft;
+ property public default long bottomRight;
+ property public default long center;
+ property public default long centerLeft;
+ property public default long centerRight;
+ property public default float centerX;
+ property public default float centerY;
+ property public default long eventPeriodMillis;
+ property public default int height;
+ property public default float left;
+ property public default float right;
+ property public default float top;
+ property public default long topCenter;
+ property public default long topLeft;
+ property public default long topRight;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ property public abstract long visibleSize;
+ property public default int width;
+ }
+
+ public final class KeyInputHelpersKt {
+ method public static boolean performKeyPress(androidx.compose.ui.test.SemanticsNodeInteraction, android.view.KeyEvent keyEvent);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface MainTestClock {
+ method public void advanceTimeBy(long milliseconds, optional boolean ignoreFrameDuration);
+ method public void advanceTimeByFrame();
+ method public void advanceTimeUntil(optional long timeoutMillis, kotlin.jvm.functions.Function0<java.lang.Boolean> condition);
+ method public boolean getAutoAdvance();
+ method public long getCurrentTime();
+ method public void setAutoAdvance(boolean);
+ property public abstract boolean autoAdvance;
+ property public abstract long currentTime;
+ }
+
+ public sealed interface MultiModalInjectionScope extends androidx.compose.ui.test.InjectionScope {
+ method public void touch(kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
+ }
+
+ public final class OutputKt {
+ method public static void printToLog(androidx.compose.ui.test.SemanticsNodeInteraction, String tag, optional int maxDepth);
+ method public static void printToLog(androidx.compose.ui.test.SemanticsNodeInteractionCollection, String tag, optional int maxDepth);
+ method public static String printToString(androidx.compose.ui.test.SemanticsNodeInteraction, optional int maxDepth);
+ method public static String printToString(androidx.compose.ui.test.SemanticsNodeInteractionCollection, optional int maxDepth);
+ }
+
+ public final class SelectionResult {
+ ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, optional String? customErrorOnNoMatch);
+ method public String? getCustomErrorOnNoMatch();
+ method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getSelectedNodes();
+ property public final String? customErrorOnNoMatch;
+ property public final java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes;
+ }
+
+ public final class SelectorsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection filter(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction filterToOne(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAncestors(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onChild(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onChildAt(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onChildren(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onFirst(androidx.compose.ui.test.SemanticsNodeInteractionCollection);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onLast(androidx.compose.ui.test.SemanticsNodeInteractionCollection);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onParent(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onSibling(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onSiblings(androidx.compose.ui.test.SemanticsNodeInteraction);
+ }
+
+ public final class SemanticsMatcher {
+ ctor public SemanticsMatcher(String description, kotlin.jvm.functions.Function1<? super androidx.compose.ui.semantics.SemanticsNode,java.lang.Boolean> matcher);
+ method public infix androidx.compose.ui.test.SemanticsMatcher and(androidx.compose.ui.test.SemanticsMatcher other);
+ method public String getDescription();
+ method public boolean matches(androidx.compose.ui.semantics.SemanticsNode node);
+ method public boolean matchesAny(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes);
+ method public operator androidx.compose.ui.test.SemanticsMatcher not();
+ method public infix androidx.compose.ui.test.SemanticsMatcher or(androidx.compose.ui.test.SemanticsMatcher other);
+ property public final String description;
+ field public static final androidx.compose.ui.test.SemanticsMatcher.Companion Companion;
+ }
+
+ public static final class SemanticsMatcher.Companion {
+ method public <T> androidx.compose.ui.test.SemanticsMatcher expectValue(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, T? expectedValue);
+ method public <T> androidx.compose.ui.test.SemanticsMatcher keyIsDefined(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ method public <T> androidx.compose.ui.test.SemanticsMatcher keyNotDefined(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ }
+
+ public final class SemanticsNodeInteraction {
+ ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
+ ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public void assertDoesNotExist();
+ method public androidx.compose.ui.test.SemanticsNodeInteraction assertExists(optional String? errorMessageOnFail);
+ method public androidx.compose.ui.semantics.SemanticsNode fetchSemanticsNode(optional String? errorMessageOnFail);
+ }
+
+ public final class SemanticsNodeInteractionCollection {
+ ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
+ ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> fetchSemanticsNodes(optional boolean atLeastOneRootRequired, optional String? errorMessageOnFail);
+ method public operator androidx.compose.ui.test.SemanticsNodeInteraction get(int index);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface SemanticsNodeInteractionsProvider {
+ method public androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodes(androidx.compose.ui.test.SemanticsMatcher matcher, optional boolean useUnmergedTree);
+ method public androidx.compose.ui.test.SemanticsNodeInteraction onNode(androidx.compose.ui.test.SemanticsMatcher matcher, optional boolean useUnmergedTree);
+ }
+
+ public final class SemanticsSelector {
+ ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, optional androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
+ method public String getDescription();
+ method public androidx.compose.ui.test.SelectionResult map(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes, String errorOnFail);
+ property public final String description;
+ }
+
+ public final class TestContext {
+ }
+
+ public final class TextActionsKt {
+ method public static void performImeAction(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static void performTextClearance(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static void performTextInput(androidx.compose.ui.test.SemanticsNodeInteraction, String text);
+ method public static void performTextReplacement(androidx.compose.ui.test.SemanticsNodeInteraction, String text);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TouchInjectionScope extends androidx.compose.ui.test.InjectionScope {
+ method public void cancel(optional long delayMillis);
+ method public androidx.compose.ui.geometry.Offset? currentPosition(optional int pointerId);
+ method public void down(int pointerId, long position);
+ method public default void down(long position);
+ method public void move(optional long delayMillis);
+ method public default void moveBy(int pointerId, long delta, optional long delayMillis);
+ method public default void moveBy(long delta, optional long delayMillis);
+ method public default void moveTo(int pointerId, long position, optional long delayMillis);
+ method public default void moveTo(long position, optional long delayMillis);
+ method public void up(optional int pointerId);
+ method public default void updatePointerBy(int pointerId, long delta);
+ method public void updatePointerTo(int pointerId, long position);
+ }
+
+ public final class TouchInjectionScopeKt {
+ method public static void click(androidx.compose.ui.test.TouchInjectionScope, optional long position);
+ method public static void doubleClick(androidx.compose.ui.test.TouchInjectionScope, optional long position, optional long delayMillis);
+ method public static void longClick(androidx.compose.ui.test.TouchInjectionScope, optional long position, optional long durationMillis);
+ method public static void pinch(androidx.compose.ui.test.TouchInjectionScope, long start0, long end0, long start1, long end1, optional long durationMillis);
+ method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, long start, long end, optional long durationMillis);
+ method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, kotlin.jvm.functions.Function1<? super java.lang.Long,androidx.compose.ui.geometry.Offset> curve, long durationMillis, optional java.util.List<java.lang.Long> keyTimes);
+ method public static void swipeDown(androidx.compose.ui.test.TouchInjectionScope, optional float startY, optional float endY, optional long durationMillis);
+ method public static void swipeLeft(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
+ method public static void swipeRight(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
+ method public static void swipeUp(androidx.compose.ui.test.TouchInjectionScope, optional float startY, optional float endY, optional long durationMillis);
+ method public static void swipeWithVelocity(androidx.compose.ui.test.TouchInjectionScope, long start, long end, float endVelocity, optional long durationMillis);
+ }
+
+}
+
diff --git a/compose/ui/ui-test/api/current.ignore b/compose/ui/ui-test/api/current.ignore
deleted file mode 100644
index eb44141..0000000
--- a/compose/ui/ui-test/api/current.ignore
+++ /dev/null
@@ -1,31 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.test.Actions_androidKt:
- Removed class androidx.compose.ui.test.Actions_androidKt
-RemovedClass: androidx.compose.ui.test.AndroidAssertions_androidKt:
- Removed class androidx.compose.ui.test.AndroidAssertions_androidKt
-RemovedClass: androidx.compose.ui.test.AndroidInputDispatcher_androidKt:
- Removed class androidx.compose.ui.test.AndroidInputDispatcher_androidKt
-RemovedClass: androidx.compose.ui.test.AndroidOutput_androidKt:
- Removed class androidx.compose.ui.test.AndroidOutput_androidKt
-RemovedClass: androidx.compose.ui.test.ErrorMessagesKt:
- Removed class androidx.compose.ui.test.ErrorMessagesKt
-RemovedClass: androidx.compose.ui.test.Expect_jvmKt:
- Removed class androidx.compose.ui.test.Expect_jvmKt
-RemovedClass: androidx.compose.ui.test.KeyInjectionScopeKt:
- Removed class androidx.compose.ui.test.KeyInjectionScopeKt
-RemovedClass: androidx.compose.ui.test.MouseInjectionScopeKt:
- Removed class androidx.compose.ui.test.MouseInjectionScopeKt
-RemovedClass: androidx.compose.ui.test.SemanticsSelectorKt:
- Removed class androidx.compose.ui.test.SemanticsSelectorKt
-RemovedClass: androidx.compose.ui.test.TestMonotonicFrameClock_jvmKt:
- Removed class androidx.compose.ui.test.TestMonotonicFrameClock_jvmKt
-RemovedClass: androidx.compose.ui.test.TestOwnerKt:
- Removed class androidx.compose.ui.test.TestOwnerKt
-RemovedClass: androidx.compose.ui.test.UtilsKt:
- Removed class androidx.compose.ui.test.UtilsKt
-
-
-RemovedPackage: androidx.compose.ui.test.android:
- Removed package androidx.compose.ui.test.android
-RemovedPackage: androidx.compose.ui.test.internal:
- Removed package androidx.compose.ui.test.internal
diff --git a/compose/ui/ui-test/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-test/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..625ea2f
--- /dev/null
+++ b/compose/ui/ui-test/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,496 @@
+// Signature format: 4.0
+package androidx.compose.ui.test {
+
+ public final class ActionsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performClick(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method @Deprecated public static androidx.compose.ui.test.SemanticsNodeInteraction performGesture(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.GestureScope,kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static androidx.compose.ui.test.SemanticsNodeInteraction performKeyInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.KeyInjectionScope,kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static androidx.compose.ui.test.SemanticsNodeInteraction performMouseInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.MouseInjectionScope,kotlin.Unit> block);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performMultiModalInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.MultiModalInjectionScope,kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static androidx.compose.ui.test.SemanticsNodeInteraction performRotaryScrollInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.RotaryInjectionScope,kotlin.Unit> block);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollTo(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToIndex(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToKey(androidx.compose.ui.test.SemanticsNodeInteraction, Object key);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToNode(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
+ method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsActionUnit(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> invocation);
+ method @Deprecated public static void performSemanticsActionUnit(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performTouchInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
+ }
+
+ public final class AndroidImageHelpers_androidKt {
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.compose.ui.graphics.ImageBitmap captureToImage(androidx.compose.ui.test.SemanticsNodeInteraction);
+ }
+
+ public final class AssertionsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assert(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher, optional kotlin.jvm.functions.Function0<java.lang.String>? messagePrefixOnError);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection assertAll(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection assertAny(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertContentDescriptionContains(androidx.compose.ui.test.SemanticsNodeInteraction, String value, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertContentDescriptionEquals(androidx.compose.ui.test.SemanticsNodeInteraction, java.lang.String... values);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection assertCountEquals(androidx.compose.ui.test.SemanticsNodeInteractionCollection, int expectedSize);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsDisplayed(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsEnabled(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsFocused(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotDisplayed(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotEnabled(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotFocused(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotSelected(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsOff(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsOn(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsSelectable(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsToggleable(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertRangeInfoEquals(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.ProgressBarRangeInfo value);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTextContains(androidx.compose.ui.test.SemanticsNodeInteraction, String value, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTextEquals(androidx.compose.ui.test.SemanticsNodeInteraction, String![] values, optional boolean includeEditableText);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertValueEquals(androidx.compose.ui.test.SemanticsNodeInteraction, String value);
+ }
+
+ public final class BoundsAssertionsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedHeight);
+ method public static void assertIsEqualTo(float, float expected, String subject, optional float tolerance);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedLeft);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedTop);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTouchHeightIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedHeight);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTouchWidthIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedWidth);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedWidth);
+ method public static float getAlignmentLinePosition(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public static androidx.compose.ui.unit.DpRect getBoundsInRoot(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.unit.DpRect getUnclippedBoundsInRoot(androidx.compose.ui.test.SemanticsNodeInteraction);
+ }
+
+ public final class ComposeTimeoutException extends java.lang.Throwable {
+ ctor public ComposeTimeoutException(String? message);
+ }
+
+ @kotlin.RequiresOptIn(message="This testing API is experimental and is likely to be changed or removed entirely") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalTestApi {
+ }
+
+ public final class FiltersKt {
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnyAncestor(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnyChild(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnyDescendant(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnySibling(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasClickAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasContentDescription(String value, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasContentDescriptionExactly(java.lang.String... values);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasImeAction(int actionType);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasNoClickAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasNoScrollAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasParent(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasProgressBarRangeInfo(androidx.compose.ui.semantics.ProgressBarRangeInfo rangeInfo);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollToIndexAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollToKeyAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollToNodeAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasSetTextAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasStateDescription(String value);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasTestTag(String testTag);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasText(String text, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasTextExactly(String![] textValues, optional boolean includeEditableText);
+ method public static androidx.compose.ui.test.SemanticsMatcher isDialog();
+ method public static androidx.compose.ui.test.SemanticsMatcher isEnabled();
+ method public static androidx.compose.ui.test.SemanticsMatcher isFocusable();
+ method public static androidx.compose.ui.test.SemanticsMatcher isFocused();
+ method public static androidx.compose.ui.test.SemanticsMatcher isHeading();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotEnabled();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotFocusable();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotFocused();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotSelected();
+ method public static androidx.compose.ui.test.SemanticsMatcher isOff();
+ method public static androidx.compose.ui.test.SemanticsMatcher isOn();
+ method public static androidx.compose.ui.test.SemanticsMatcher isPopup();
+ method public static androidx.compose.ui.test.SemanticsMatcher isRoot();
+ method public static androidx.compose.ui.test.SemanticsMatcher isSelectable();
+ method public static androidx.compose.ui.test.SemanticsMatcher isSelected();
+ method public static androidx.compose.ui.test.SemanticsMatcher isToggleable();
+ }
+
+ public final class FindersKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodesWithContentDescription(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String label, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodesWithTag(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String testTag, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodesWithText(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String text, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onNodeWithContentDescription(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String label, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onNodeWithTag(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String testTag, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onNodeWithText(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String text, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onRoot(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, optional boolean useUnmergedTree);
+ }
+
+ @Deprecated public final class GestureScope {
+ ctor @Deprecated public GestureScope(androidx.compose.ui.semantics.SemanticsNode node, androidx.compose.ui.test.TestContext testContext);
+ method @Deprecated public long getVisibleSize();
+ property public final long visibleSize;
+ }
+
+ public final class GestureScopeKt {
+ method @Deprecated @androidx.compose.ui.test.ExperimentalTestApi public static void advanceEventTime(androidx.compose.ui.test.GestureScope, long durationMillis);
+ method @Deprecated public static void cancel(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void click(androidx.compose.ui.test.GestureScope, optional long position);
+ method @Deprecated public static void doubleClick(androidx.compose.ui.test.GestureScope, optional long position, optional long delayMillis);
+ method @Deprecated public static void down(androidx.compose.ui.test.GestureScope, int pointerId, long position);
+ method @Deprecated public static void down(androidx.compose.ui.test.GestureScope, long position);
+ method @Deprecated public static inline float getBottom(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getBottomCenter(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getBottomLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getBottomRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getCenter(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getCenterLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getCenterRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getCenterX(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getCenterY(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline int getHeight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getTop(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getTopCenter(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getTopLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getTopRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline int getWidth(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void longClick(androidx.compose.ui.test.GestureScope, optional long position, optional long durationMillis);
+ method @Deprecated public static void move(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void moveBy(androidx.compose.ui.test.GestureScope, int pointerId, long delta);
+ method @Deprecated public static void moveBy(androidx.compose.ui.test.GestureScope, long delta);
+ method @Deprecated public static void movePointerBy(androidx.compose.ui.test.GestureScope, int pointerId, long delta);
+ method @Deprecated public static void movePointerTo(androidx.compose.ui.test.GestureScope, int pointerId, long position);
+ method @Deprecated public static void moveTo(androidx.compose.ui.test.GestureScope, int pointerId, long position);
+ method @Deprecated public static void moveTo(androidx.compose.ui.test.GestureScope, long position);
+ method @Deprecated public static long percentOffset(androidx.compose.ui.test.GestureScope, optional float x, optional float y);
+ method @Deprecated public static void pinch(androidx.compose.ui.test.GestureScope, long start0, long end0, long start1, long end1, optional long durationMillis);
+ method @Deprecated public static void swipe(androidx.compose.ui.test.GestureScope, long start, long end, optional long durationMillis);
+ method @Deprecated public static void swipeDown(androidx.compose.ui.test.GestureScope);
+ method @Deprecated @androidx.compose.ui.test.ExperimentalTestApi public static void swipeDown(androidx.compose.ui.test.GestureScope, optional float startY, optional float endY, optional long durationMillis);
+ method @Deprecated public static void swipeLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated @androidx.compose.ui.test.ExperimentalTestApi public static void swipeLeft(androidx.compose.ui.test.GestureScope, optional float startX, optional float endX, optional long durationMillis);
+ method @Deprecated public static void swipeRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated @androidx.compose.ui.test.ExperimentalTestApi public static void swipeRight(androidx.compose.ui.test.GestureScope, optional float startX, optional float endX, optional long durationMillis);
+ method @Deprecated public static void swipeUp(androidx.compose.ui.test.GestureScope);
+ method @Deprecated @androidx.compose.ui.test.ExperimentalTestApi public static void swipeUp(androidx.compose.ui.test.GestureScope, optional float startY, optional float endY, optional long durationMillis);
+ method @Deprecated public static void swipeWithVelocity(androidx.compose.ui.test.GestureScope, long start, long end, float endVelocity, optional long durationMillis);
+ method @Deprecated public static void up(androidx.compose.ui.test.GestureScope, optional int pointerId);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface IdlingResource {
+ method public default String? getDiagnosticMessageIfBusy();
+ method public boolean isIdleNow();
+ property public abstract boolean isIdleNow;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface InjectionScope extends androidx.compose.ui.unit.Density {
+ method public void advanceEventTime(optional long durationMillis);
+ method public default float getBottom();
+ method public default long getBottomCenter();
+ method public default long getBottomLeft();
+ method public default long getBottomRight();
+ method public default long getCenter();
+ method public default long getCenterLeft();
+ method public default long getCenterRight();
+ method public default float getCenterX();
+ method public default float getCenterY();
+ method public default long getEventPeriodMillis();
+ method public default int getHeight();
+ method public default float getLeft();
+ method public default float getRight();
+ method public default float getTop();
+ method public default long getTopCenter();
+ method public default long getTopLeft();
+ method public default long getTopRight();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public long getVisibleSize();
+ method public default int getWidth();
+ method public default long percentOffset(optional float x, optional float y);
+ property public default float bottom;
+ property public default long bottomCenter;
+ property public default long bottomLeft;
+ property public default long bottomRight;
+ property public default long center;
+ property public default long centerLeft;
+ property public default long centerRight;
+ property public default float centerX;
+ property public default float centerY;
+ property public default long eventPeriodMillis;
+ property public default int height;
+ property public default float left;
+ property public default float right;
+ property public default float top;
+ property public default long topCenter;
+ property public default long topLeft;
+ property public default long topRight;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ property public abstract long visibleSize;
+ property public default int width;
+ }
+
+ @kotlin.RequiresOptIn(message="This is internal API for Compose modules that may change frequently and without warning.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface InternalTestApi {
+ }
+
+ @androidx.compose.ui.test.ExperimentalTestApi @kotlin.jvm.JvmDefaultWithCompatibility public interface KeyInjectionScope extends androidx.compose.ui.test.InjectionScope {
+ method public boolean isCapsLockOn();
+ method public boolean isKeyDown(long key);
+ method public boolean isNumLockOn();
+ method public boolean isScrollLockOn();
+ method public void keyDown(long key);
+ method public void keyUp(long key);
+ property public abstract boolean isCapsLockOn;
+ property public abstract boolean isNumLockOn;
+ property public abstract boolean isScrollLockOn;
+ }
+
+ public final class KeyInjectionScopeKt {
+ method @androidx.compose.ui.test.ExperimentalTestApi public static boolean isAltDown(androidx.compose.ui.test.KeyInjectionScope);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static boolean isCtrlDown(androidx.compose.ui.test.KeyInjectionScope);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static boolean isFnDown(androidx.compose.ui.test.KeyInjectionScope);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static boolean isMetaDown(androidx.compose.ui.test.KeyInjectionScope);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static boolean isShiftDown(androidx.compose.ui.test.KeyInjectionScope);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void pressKey(androidx.compose.ui.test.KeyInjectionScope, long key, optional long pressDurationMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void withKeyDown(androidx.compose.ui.test.KeyInjectionScope, long key, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.KeyInjectionScope,kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void withKeyToggled(androidx.compose.ui.test.KeyInjectionScope, long key, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.KeyInjectionScope,kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void withKeysDown(androidx.compose.ui.test.KeyInjectionScope, java.util.List<androidx.compose.ui.input.key.Key> keys, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.KeyInjectionScope,kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void withKeysToggled(androidx.compose.ui.test.KeyInjectionScope, java.util.List<androidx.compose.ui.input.key.Key> keys, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.KeyInjectionScope,kotlin.Unit> block);
+ }
+
+ public final class KeyInputHelpersKt {
+ method public static boolean performKeyPress(androidx.compose.ui.test.SemanticsNodeInteraction, android.view.KeyEvent keyEvent);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface MainTestClock {
+ method public void advanceTimeBy(long milliseconds, optional boolean ignoreFrameDuration);
+ method public void advanceTimeByFrame();
+ method public void advanceTimeUntil(optional long timeoutMillis, kotlin.jvm.functions.Function0<java.lang.Boolean> condition);
+ method public boolean getAutoAdvance();
+ method public long getCurrentTime();
+ method public void setAutoAdvance(boolean);
+ property public abstract boolean autoAdvance;
+ property public abstract long currentTime;
+ }
+
+ @androidx.compose.ui.test.ExperimentalTestApi @kotlin.jvm.JvmInline public final value class MouseButton {
+ ctor public MouseButton(int buttonId);
+ method public int getButtonId();
+ property public final int buttonId;
+ field public static final androidx.compose.ui.test.MouseButton.Companion Companion;
+ }
+
+ @androidx.compose.ui.test.ExperimentalTestApi public static final class MouseButton.Companion {
+ method public int getPrimary();
+ method public int getSecondary();
+ method public int getTertiary();
+ property public final int Primary;
+ property public final int Secondary;
+ property public final int Tertiary;
+ }
+
+ @androidx.compose.ui.test.ExperimentalTestApi public interface MouseInjectionScope extends androidx.compose.ui.test.InjectionScope {
+ method public void cancel(optional long delayMillis);
+ method public void enter(optional long position, optional long delayMillis);
+ method public void exit(optional long position, optional long delayMillis);
+ method public long getCurrentPosition();
+ method public default void moveBy(long delta, optional long delayMillis);
+ method public void moveTo(long position, optional long delayMillis);
+ method public void press(optional int button);
+ method public void release(optional int button);
+ method public void scroll(float delta, optional int scrollWheel);
+ method public default void updatePointerBy(long delta);
+ method public void updatePointerTo(long position);
+ property public abstract long currentPosition;
+ }
+
+ public final class MouseInjectionScopeKt {
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void animateAlong(androidx.compose.ui.test.MouseInjectionScope, kotlin.jvm.functions.Function1<? super java.lang.Long,androidx.compose.ui.geometry.Offset> curve, optional long durationMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void animateBy(androidx.compose.ui.test.MouseInjectionScope, long delta, optional long durationMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void animateTo(androidx.compose.ui.test.MouseInjectionScope, long position, optional long durationMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void click(androidx.compose.ui.test.MouseInjectionScope, optional long position);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void doubleClick(androidx.compose.ui.test.MouseInjectionScope, optional long position);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void dragAndDrop(androidx.compose.ui.test.MouseInjectionScope, long start, long end, optional long durationMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void longClick(androidx.compose.ui.test.MouseInjectionScope, optional long position);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void rightClick(androidx.compose.ui.test.MouseInjectionScope, optional long position);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void smoothScroll(androidx.compose.ui.test.MouseInjectionScope, float scrollAmount, optional long durationMillis, optional int scrollWheel);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void tripleClick(androidx.compose.ui.test.MouseInjectionScope, optional long position);
+ }
+
+ public sealed interface MultiModalInjectionScope extends androidx.compose.ui.test.InjectionScope {
+ method @androidx.compose.ui.test.ExperimentalTestApi public void key(kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.KeyInjectionScope,kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public void mouse(kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.MouseInjectionScope,kotlin.Unit> block);
+ method @androidx.compose.ui.test.ExperimentalTestApi public void rotary(kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.RotaryInjectionScope,kotlin.Unit> block);
+ method public void touch(kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
+ }
+
+ public final class OutputKt {
+ method public static void printToLog(androidx.compose.ui.test.SemanticsNodeInteraction, String tag, optional int maxDepth);
+ method public static void printToLog(androidx.compose.ui.test.SemanticsNodeInteractionCollection, String tag, optional int maxDepth);
+ method public static String printToString(androidx.compose.ui.test.SemanticsNodeInteraction, optional int maxDepth);
+ method public static String printToString(androidx.compose.ui.test.SemanticsNodeInteractionCollection, optional int maxDepth);
+ }
+
+ @androidx.compose.ui.test.ExperimentalTestApi public interface RotaryInjectionScope extends androidx.compose.ui.test.InjectionScope {
+ method public void rotateToScrollHorizontally(float horizontalScrollPixels);
+ method public void rotateToScrollVertically(float verticalScrollPixels);
+ }
+
+ @androidx.compose.ui.test.ExperimentalTestApi @kotlin.jvm.JvmInline public final value class ScrollWheel {
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.test.ScrollWheel.Companion Companion;
+ }
+
+ @androidx.compose.ui.test.ExperimentalTestApi public static final class ScrollWheel.Companion {
+ method public int getHorizontal();
+ method public int getVertical();
+ property public final int Horizontal;
+ property public final int Vertical;
+ }
+
+ public final class SelectionResult {
+ ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, optional String? customErrorOnNoMatch);
+ method public String? getCustomErrorOnNoMatch();
+ method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getSelectedNodes();
+ property public final String? customErrorOnNoMatch;
+ property public final java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes;
+ }
+
+ public final class SelectorsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection filter(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction filterToOne(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAncestors(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onChild(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onChildAt(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onChildren(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onFirst(androidx.compose.ui.test.SemanticsNodeInteractionCollection);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onLast(androidx.compose.ui.test.SemanticsNodeInteractionCollection);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onParent(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onSibling(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onSiblings(androidx.compose.ui.test.SemanticsNodeInteraction);
+ }
+
+ public final class SemanticsMatcher {
+ ctor public SemanticsMatcher(String description, kotlin.jvm.functions.Function1<? super androidx.compose.ui.semantics.SemanticsNode,java.lang.Boolean> matcher);
+ method public infix androidx.compose.ui.test.SemanticsMatcher and(androidx.compose.ui.test.SemanticsMatcher other);
+ method public String getDescription();
+ method public boolean matches(androidx.compose.ui.semantics.SemanticsNode node);
+ method public boolean matchesAny(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes);
+ method public operator androidx.compose.ui.test.SemanticsMatcher not();
+ method public infix androidx.compose.ui.test.SemanticsMatcher or(androidx.compose.ui.test.SemanticsMatcher other);
+ property public final String description;
+ field public static final androidx.compose.ui.test.SemanticsMatcher.Companion Companion;
+ }
+
+ public static final class SemanticsMatcher.Companion {
+ method public <T> androidx.compose.ui.test.SemanticsMatcher expectValue(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, T? expectedValue);
+ method public <T> androidx.compose.ui.test.SemanticsMatcher keyIsDefined(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ method public <T> androidx.compose.ui.test.SemanticsMatcher keyNotDefined(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ }
+
+ public final class SemanticsNodeInteraction {
+ ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
+ ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public void assertDoesNotExist();
+ method public androidx.compose.ui.test.SemanticsNodeInteraction assertExists(optional String? errorMessageOnFail);
+ method public androidx.compose.ui.semantics.SemanticsNode fetchSemanticsNode(optional String? errorMessageOnFail);
+ }
+
+ public final class SemanticsNodeInteractionCollection {
+ ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
+ ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> fetchSemanticsNodes(optional boolean atLeastOneRootRequired, optional String? errorMessageOnFail);
+ method public operator androidx.compose.ui.test.SemanticsNodeInteraction get(int index);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface SemanticsNodeInteractionsProvider {
+ method public androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodes(androidx.compose.ui.test.SemanticsMatcher matcher, optional boolean useUnmergedTree);
+ method public androidx.compose.ui.test.SemanticsNodeInteraction onNode(androidx.compose.ui.test.SemanticsMatcher matcher, optional boolean useUnmergedTree);
+ }
+
+ public final class SemanticsSelector {
+ ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, optional androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
+ method public String getDescription();
+ method public androidx.compose.ui.test.SelectionResult map(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes, String errorOnFail);
+ property public final String description;
+ }
+
+ public final class TestContext {
+ }
+
+ @androidx.compose.ui.test.ExperimentalTestApi @kotlinx.coroutines.ExperimentalCoroutinesApi public final class TestMonotonicFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
+ ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, optional long frameDelayNanos, optional kotlin.jvm.functions.Function1<? super java.lang.Long,kotlin.Unit> onPerformTraversals);
+ method @androidx.compose.ui.test.ExperimentalTestApi public kotlin.coroutines.ContinuationInterceptor getContinuationInterceptor();
+ method public long getFrameDelayNanos();
+ method public boolean getHasAwaiters();
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property @androidx.compose.ui.test.ExperimentalTestApi public final kotlin.coroutines.ContinuationInterceptor continuationInterceptor;
+ property public final long frameDelayNanos;
+ property public final boolean hasAwaiters;
+ }
+
+ public final class TestMonotonicFrameClock_jvmKt {
+ method @androidx.compose.ui.test.ExperimentalTestApi public static long getFrameDelayMillis(androidx.compose.ui.test.TestMonotonicFrameClock);
+ }
+
+ @androidx.compose.ui.test.InternalTestApi public interface TestOwner {
+ method public androidx.compose.ui.test.MainTestClock getMainClock();
+ method public java.util.Set<androidx.compose.ui.node.RootForTest> getRoots(boolean atLeastOneRootExpected);
+ method public <T> T! runOnUiThread(kotlin.jvm.functions.Function0<? extends T> action);
+ method public void sendImeAction(androidx.compose.ui.semantics.SemanticsNode node, int actionSpecified);
+ method public void sendTextInputCommand(androidx.compose.ui.semantics.SemanticsNode node, java.util.List<? extends androidx.compose.ui.text.input.EditCommand> command);
+ property public abstract androidx.compose.ui.test.MainTestClock mainClock;
+ }
+
+ public final class TestOwnerKt {
+ method @androidx.compose.ui.test.InternalTestApi public static androidx.compose.ui.test.TestContext createTestContext(androidx.compose.ui.test.TestOwner owner);
+ }
+
+ public final class TextActionsKt {
+ method public static void performImeAction(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static void performTextClearance(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static void performTextInput(androidx.compose.ui.test.SemanticsNodeInteraction, String text);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void performTextInputSelection(androidx.compose.ui.test.SemanticsNodeInteraction, long selection);
+ method public static void performTextReplacement(androidx.compose.ui.test.SemanticsNodeInteraction, String text);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TouchInjectionScope extends androidx.compose.ui.test.InjectionScope {
+ method public void cancel(optional long delayMillis);
+ method public androidx.compose.ui.geometry.Offset? currentPosition(optional int pointerId);
+ method public void down(int pointerId, long position);
+ method public default void down(long position);
+ method public void move(optional long delayMillis);
+ method public default void moveBy(int pointerId, long delta, optional long delayMillis);
+ method public default void moveBy(long delta, optional long delayMillis);
+ method public default void moveTo(int pointerId, long position, optional long delayMillis);
+ method public default void moveTo(long position, optional long delayMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public default void moveWithHistory(java.util.List<java.lang.Long> relativeHistoricalTimes, java.util.List<androidx.compose.ui.geometry.Offset> historicalCoordinates, optional long delayMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public void moveWithHistoryMultiPointer(java.util.List<java.lang.Long> relativeHistoricalTimes, java.util.List<? extends java.util.List<androidx.compose.ui.geometry.Offset>> historicalCoordinates, optional long delayMillis);
+ method public void up(optional int pointerId);
+ method public default void updatePointerBy(int pointerId, long delta);
+ method public void updatePointerTo(int pointerId, long position);
+ }
+
+ public final class TouchInjectionScopeKt {
+ method public static void click(androidx.compose.ui.test.TouchInjectionScope, optional long position);
+ method public static void doubleClick(androidx.compose.ui.test.TouchInjectionScope, optional long position, optional long delayMillis);
+ method public static void longClick(androidx.compose.ui.test.TouchInjectionScope, optional long position, optional long durationMillis);
+ method @androidx.compose.ui.test.ExperimentalTestApi public static void multiTouchSwipe(androidx.compose.ui.test.TouchInjectionScope, java.util.List<? extends kotlin.jvm.functions.Function1<? super java.lang.Long,androidx.compose.ui.geometry.Offset>> curves, long durationMillis, optional java.util.List<java.lang.Long> keyTimes);
+ method public static void pinch(androidx.compose.ui.test.TouchInjectionScope, long start0, long end0, long start1, long end1, optional long durationMillis);
+ method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, long start, long end, optional long durationMillis);
+ method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, kotlin.jvm.functions.Function1<? super java.lang.Long,androidx.compose.ui.geometry.Offset> curve, long durationMillis, optional java.util.List<java.lang.Long> keyTimes);
+ method public static void swipeDown(androidx.compose.ui.test.TouchInjectionScope, optional float startY, optional float endY, optional long durationMillis);
+ method public static void swipeLeft(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
+ method public static void swipeRight(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
+ method public static void swipeUp(androidx.compose.ui.test.TouchInjectionScope, optional float startY, optional float endY, optional long durationMillis);
+ method public static void swipeWithVelocity(androidx.compose.ui.test.TouchInjectionScope, long start, long end, float endVelocity, optional long durationMillis);
+ }
+
+}
+
+package androidx.compose.ui.test.internal {
+
+ @androidx.compose.ui.test.InternalTestApi public abstract class DelayPropagatingContinuationInterceptorWrapper extends kotlin.coroutines.AbstractCoroutineContextElement implements kotlin.coroutines.ContinuationInterceptor kotlinx.coroutines.Delay {
+ ctor public DelayPropagatingContinuationInterceptorWrapper(kotlin.coroutines.ContinuationInterceptor? wrappedInterceptor);
+ }
+
+}
+
diff --git a/compose/ui/ui-test/api/res-1.4.0-beta02.txt b/compose/ui/ui-test/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-test/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-test/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-test/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..8264e10
--- /dev/null
+++ b/compose/ui/ui-test/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,353 @@
+// Signature format: 4.0
+package androidx.compose.ui.test {
+
+ public final class ActionsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performClick(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method @Deprecated public static androidx.compose.ui.test.SemanticsNodeInteraction performGesture(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.GestureScope,kotlin.Unit> block);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performMultiModalInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.MultiModalInjectionScope,kotlin.Unit> block);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollTo(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToIndex(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToKey(androidx.compose.ui.test.SemanticsNodeInteraction, Object key);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToNode(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
+ method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsActionUnit(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> invocation);
+ method @Deprecated public static void performSemanticsActionUnit(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction performTouchInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
+ }
+
+ public final class AndroidImageHelpers_androidKt {
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.compose.ui.graphics.ImageBitmap captureToImage(androidx.compose.ui.test.SemanticsNodeInteraction);
+ }
+
+ public final class AssertionsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assert(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher, optional kotlin.jvm.functions.Function0<java.lang.String>? messagePrefixOnError);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection assertAll(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection assertAny(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertContentDescriptionContains(androidx.compose.ui.test.SemanticsNodeInteraction, String value, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertContentDescriptionEquals(androidx.compose.ui.test.SemanticsNodeInteraction, java.lang.String... values);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection assertCountEquals(androidx.compose.ui.test.SemanticsNodeInteractionCollection, int expectedSize);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsDisplayed(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsEnabled(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsFocused(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotDisplayed(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotEnabled(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotFocused(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsNotSelected(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsOff(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsOn(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsSelectable(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertIsToggleable(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertRangeInfoEquals(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.ProgressBarRangeInfo value);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTextContains(androidx.compose.ui.test.SemanticsNodeInteraction, String value, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTextEquals(androidx.compose.ui.test.SemanticsNodeInteraction, String![] values, optional boolean includeEditableText);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertValueEquals(androidx.compose.ui.test.SemanticsNodeInteraction, String value);
+ }
+
+ public final class BoundsAssertionsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedHeight);
+ method public static void assertIsEqualTo(float, float expected, String subject, optional float tolerance);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedLeft);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedTop);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTouchHeightIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedHeight);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertTouchWidthIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedWidth);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo(androidx.compose.ui.test.SemanticsNodeInteraction, float expectedWidth);
+ method public static float getAlignmentLinePosition(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public static androidx.compose.ui.unit.DpRect getBoundsInRoot(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.unit.DpRect getUnclippedBoundsInRoot(androidx.compose.ui.test.SemanticsNodeInteraction);
+ }
+
+ public final class ComposeTimeoutException extends java.lang.Throwable {
+ ctor public ComposeTimeoutException(String? message);
+ }
+
+ public final class FiltersKt {
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnyAncestor(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnyChild(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnyDescendant(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasAnySibling(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasClickAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasContentDescription(String value, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasContentDescriptionExactly(java.lang.String... values);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasImeAction(int actionType);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasNoClickAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasNoScrollAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasParent(androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasProgressBarRangeInfo(androidx.compose.ui.semantics.ProgressBarRangeInfo rangeInfo);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollToIndexAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollToKeyAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasScrollToNodeAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasSetTextAction();
+ method public static androidx.compose.ui.test.SemanticsMatcher hasStateDescription(String value);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasTestTag(String testTag);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasText(String text, optional boolean substring, optional boolean ignoreCase);
+ method public static androidx.compose.ui.test.SemanticsMatcher hasTextExactly(String![] textValues, optional boolean includeEditableText);
+ method public static androidx.compose.ui.test.SemanticsMatcher isDialog();
+ method public static androidx.compose.ui.test.SemanticsMatcher isEnabled();
+ method public static androidx.compose.ui.test.SemanticsMatcher isFocusable();
+ method public static androidx.compose.ui.test.SemanticsMatcher isFocused();
+ method public static androidx.compose.ui.test.SemanticsMatcher isHeading();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotEnabled();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotFocusable();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotFocused();
+ method public static androidx.compose.ui.test.SemanticsMatcher isNotSelected();
+ method public static androidx.compose.ui.test.SemanticsMatcher isOff();
+ method public static androidx.compose.ui.test.SemanticsMatcher isOn();
+ method public static androidx.compose.ui.test.SemanticsMatcher isPopup();
+ method public static androidx.compose.ui.test.SemanticsMatcher isRoot();
+ method public static androidx.compose.ui.test.SemanticsMatcher isSelectable();
+ method public static androidx.compose.ui.test.SemanticsMatcher isSelected();
+ method public static androidx.compose.ui.test.SemanticsMatcher isToggleable();
+ }
+
+ public final class FindersKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodesWithContentDescription(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String label, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodesWithTag(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String testTag, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodesWithText(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String text, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onNodeWithContentDescription(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String label, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onNodeWithTag(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String testTag, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onNodeWithText(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, String text, optional boolean substring, optional boolean ignoreCase, optional boolean useUnmergedTree);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onRoot(androidx.compose.ui.test.SemanticsNodeInteractionsProvider, optional boolean useUnmergedTree);
+ }
+
+ @Deprecated public final class GestureScope {
+ ctor @Deprecated public GestureScope(androidx.compose.ui.semantics.SemanticsNode node, androidx.compose.ui.test.TestContext testContext);
+ method @Deprecated public long getVisibleSize();
+ property public final long visibleSize;
+ field @Deprecated @kotlin.PublishedApi internal final androidx.compose.ui.test.MultiModalInjectionScope delegateScope;
+ }
+
+ public final class GestureScopeKt {
+ method @Deprecated public static void cancel(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void click(androidx.compose.ui.test.GestureScope, optional long position);
+ method @Deprecated public static void doubleClick(androidx.compose.ui.test.GestureScope, optional long position, optional long delayMillis);
+ method @Deprecated public static void down(androidx.compose.ui.test.GestureScope, int pointerId, long position);
+ method @Deprecated public static void down(androidx.compose.ui.test.GestureScope, long position);
+ method @Deprecated public static inline float getBottom(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getBottomCenter(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getBottomLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getBottomRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getCenter(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getCenterLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getCenterRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getCenterX(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getCenterY(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline int getHeight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline float getTop(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getTopCenter(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getTopLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static long getTopRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static inline int getWidth(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void longClick(androidx.compose.ui.test.GestureScope, optional long position, optional long durationMillis);
+ method @Deprecated public static void move(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void moveBy(androidx.compose.ui.test.GestureScope, int pointerId, long delta);
+ method @Deprecated public static void moveBy(androidx.compose.ui.test.GestureScope, long delta);
+ method @Deprecated public static void movePointerBy(androidx.compose.ui.test.GestureScope, int pointerId, long delta);
+ method @Deprecated public static void movePointerTo(androidx.compose.ui.test.GestureScope, int pointerId, long position);
+ method @Deprecated public static void moveTo(androidx.compose.ui.test.GestureScope, int pointerId, long position);
+ method @Deprecated public static void moveTo(androidx.compose.ui.test.GestureScope, long position);
+ method @Deprecated public static long percentOffset(androidx.compose.ui.test.GestureScope, optional float x, optional float y);
+ method @Deprecated public static void pinch(androidx.compose.ui.test.GestureScope, long start0, long end0, long start1, long end1, optional long durationMillis);
+ method @Deprecated public static void swipe(androidx.compose.ui.test.GestureScope, long start, long end, optional long durationMillis);
+ method @Deprecated public static void swipeDown(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void swipeLeft(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void swipeRight(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void swipeUp(androidx.compose.ui.test.GestureScope);
+ method @Deprecated public static void swipeWithVelocity(androidx.compose.ui.test.GestureScope, long start, long end, float endVelocity, optional long durationMillis);
+ method @Deprecated public static void up(androidx.compose.ui.test.GestureScope, optional int pointerId);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface IdlingResource {
+ method public default String? getDiagnosticMessageIfBusy();
+ method public boolean isIdleNow();
+ property public abstract boolean isIdleNow;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface InjectionScope extends androidx.compose.ui.unit.Density {
+ method public void advanceEventTime(optional long durationMillis);
+ method public default float getBottom();
+ method public default long getBottomCenter();
+ method public default long getBottomLeft();
+ method public default long getBottomRight();
+ method public default long getCenter();
+ method public default long getCenterLeft();
+ method public default long getCenterRight();
+ method public default float getCenterX();
+ method public default float getCenterY();
+ method public default long getEventPeriodMillis();
+ method public default int getHeight();
+ method public default float getLeft();
+ method public default float getRight();
+ method public default float getTop();
+ method public default long getTopCenter();
+ method public default long getTopLeft();
+ method public default long getTopRight();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public long getVisibleSize();
+ method public default int getWidth();
+ method public default long percentOffset(optional float x, optional float y);
+ property public default float bottom;
+ property public default long bottomCenter;
+ property public default long bottomLeft;
+ property public default long bottomRight;
+ property public default long center;
+ property public default long centerLeft;
+ property public default long centerRight;
+ property public default float centerX;
+ property public default float centerY;
+ property public default long eventPeriodMillis;
+ property public default int height;
+ property public default float left;
+ property public default float right;
+ property public default float top;
+ property public default long topCenter;
+ property public default long topLeft;
+ property public default long topRight;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ property public abstract long visibleSize;
+ property public default int width;
+ }
+
+ public final class KeyInputHelpersKt {
+ method public static boolean performKeyPress(androidx.compose.ui.test.SemanticsNodeInteraction, android.view.KeyEvent keyEvent);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface MainTestClock {
+ method public void advanceTimeBy(long milliseconds, optional boolean ignoreFrameDuration);
+ method public void advanceTimeByFrame();
+ method public void advanceTimeUntil(optional long timeoutMillis, kotlin.jvm.functions.Function0<java.lang.Boolean> condition);
+ method public boolean getAutoAdvance();
+ method public long getCurrentTime();
+ method public void setAutoAdvance(boolean);
+ property public abstract boolean autoAdvance;
+ property public abstract long currentTime;
+ }
+
+ public sealed interface MultiModalInjectionScope extends androidx.compose.ui.test.InjectionScope {
+ method public void touch(kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
+ }
+
+ public final class OutputKt {
+ method public static void printToLog(androidx.compose.ui.test.SemanticsNodeInteraction, String tag, optional int maxDepth);
+ method public static void printToLog(androidx.compose.ui.test.SemanticsNodeInteractionCollection, String tag, optional int maxDepth);
+ method public static String printToString(androidx.compose.ui.test.SemanticsNodeInteraction, optional int maxDepth);
+ method public static String printToString(androidx.compose.ui.test.SemanticsNodeInteractionCollection, optional int maxDepth);
+ }
+
+ public final class SelectionResult {
+ ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, optional String? customErrorOnNoMatch);
+ method public String? getCustomErrorOnNoMatch();
+ method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getSelectedNodes();
+ property public final String? customErrorOnNoMatch;
+ property public final java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes;
+ }
+
+ public final class SelectorsKt {
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection filter(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction filterToOne(androidx.compose.ui.test.SemanticsNodeInteractionCollection, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onAncestors(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onChild(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onChildAt(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onChildren(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onFirst(androidx.compose.ui.test.SemanticsNodeInteractionCollection);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onLast(androidx.compose.ui.test.SemanticsNodeInteractionCollection);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onParent(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteraction onSibling(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static androidx.compose.ui.test.SemanticsNodeInteractionCollection onSiblings(androidx.compose.ui.test.SemanticsNodeInteraction);
+ }
+
+ public final class SemanticsMatcher {
+ ctor public SemanticsMatcher(String description, kotlin.jvm.functions.Function1<? super androidx.compose.ui.semantics.SemanticsNode,java.lang.Boolean> matcher);
+ method public infix androidx.compose.ui.test.SemanticsMatcher and(androidx.compose.ui.test.SemanticsMatcher other);
+ method public String getDescription();
+ method public boolean matches(androidx.compose.ui.semantics.SemanticsNode node);
+ method public boolean matchesAny(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes);
+ method public operator androidx.compose.ui.test.SemanticsMatcher not();
+ method public infix androidx.compose.ui.test.SemanticsMatcher or(androidx.compose.ui.test.SemanticsMatcher other);
+ property public final String description;
+ field public static final androidx.compose.ui.test.SemanticsMatcher.Companion Companion;
+ }
+
+ public static final class SemanticsMatcher.Companion {
+ method public <T> androidx.compose.ui.test.SemanticsMatcher expectValue(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, T? expectedValue);
+ method public <T> androidx.compose.ui.test.SemanticsMatcher keyIsDefined(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ method public <T> androidx.compose.ui.test.SemanticsMatcher keyNotDefined(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ }
+
+ public final class SemanticsNodeInteraction {
+ ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
+ ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public void assertDoesNotExist();
+ method public androidx.compose.ui.test.SemanticsNodeInteraction assertExists(optional String? errorMessageOnFail);
+ method public androidx.compose.ui.semantics.SemanticsNode fetchSemanticsNode(optional String? errorMessageOnFail);
+ }
+
+ public final class SemanticsNodeInteractionCollection {
+ ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
+ ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> fetchSemanticsNodes(optional boolean atLeastOneRootRequired, optional String? errorMessageOnFail);
+ method public operator androidx.compose.ui.test.SemanticsNodeInteraction get(int index);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface SemanticsNodeInteractionsProvider {
+ method public androidx.compose.ui.test.SemanticsNodeInteractionCollection onAllNodes(androidx.compose.ui.test.SemanticsMatcher matcher, optional boolean useUnmergedTree);
+ method public androidx.compose.ui.test.SemanticsNodeInteraction onNode(androidx.compose.ui.test.SemanticsMatcher matcher, optional boolean useUnmergedTree);
+ }
+
+ public final class SemanticsSelector {
+ ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, optional androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
+ method public String getDescription();
+ method public androidx.compose.ui.test.SelectionResult map(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes, String errorOnFail);
+ property public final String description;
+ }
+
+ public final class TestContext {
+ }
+
+ public final class TextActionsKt {
+ method public static void performImeAction(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static void performTextClearance(androidx.compose.ui.test.SemanticsNodeInteraction);
+ method public static void performTextInput(androidx.compose.ui.test.SemanticsNodeInteraction, String text);
+ method public static void performTextReplacement(androidx.compose.ui.test.SemanticsNodeInteraction, String text);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TouchInjectionScope extends androidx.compose.ui.test.InjectionScope {
+ method public void cancel(optional long delayMillis);
+ method public androidx.compose.ui.geometry.Offset? currentPosition(optional int pointerId);
+ method public void down(int pointerId, long position);
+ method public default void down(long position);
+ method public void move(optional long delayMillis);
+ method public default void moveBy(int pointerId, long delta, optional long delayMillis);
+ method public default void moveBy(long delta, optional long delayMillis);
+ method public default void moveTo(int pointerId, long position, optional long delayMillis);
+ method public default void moveTo(long position, optional long delayMillis);
+ method public void up(optional int pointerId);
+ method public default void updatePointerBy(int pointerId, long delta);
+ method public void updatePointerTo(int pointerId, long position);
+ }
+
+ public final class TouchInjectionScopeKt {
+ method public static void click(androidx.compose.ui.test.TouchInjectionScope, optional long position);
+ method public static void doubleClick(androidx.compose.ui.test.TouchInjectionScope, optional long position, optional long delayMillis);
+ method public static void longClick(androidx.compose.ui.test.TouchInjectionScope, optional long position, optional long durationMillis);
+ method public static void pinch(androidx.compose.ui.test.TouchInjectionScope, long start0, long end0, long start1, long end1, optional long durationMillis);
+ method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, long start, long end, optional long durationMillis);
+ method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, kotlin.jvm.functions.Function1<? super java.lang.Long,androidx.compose.ui.geometry.Offset> curve, long durationMillis, optional java.util.List<java.lang.Long> keyTimes);
+ method public static void swipeDown(androidx.compose.ui.test.TouchInjectionScope, optional float startY, optional float endY, optional long durationMillis);
+ method public static void swipeLeft(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
+ method public static void swipeRight(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
+ method public static void swipeUp(androidx.compose.ui.test.TouchInjectionScope, optional float startY, optional float endY, optional long durationMillis);
+ method public static void swipeWithVelocity(androidx.compose.ui.test.TouchInjectionScope, long start, long end, float endVelocity, optional long durationMillis);
+ }
+
+}
+
diff --git a/compose/ui/ui-test/api/restricted_current.ignore b/compose/ui/ui-test/api/restricted_current.ignore
deleted file mode 100644
index eb44141..0000000
--- a/compose/ui/ui-test/api/restricted_current.ignore
+++ /dev/null
@@ -1,31 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.test.Actions_androidKt:
- Removed class androidx.compose.ui.test.Actions_androidKt
-RemovedClass: androidx.compose.ui.test.AndroidAssertions_androidKt:
- Removed class androidx.compose.ui.test.AndroidAssertions_androidKt
-RemovedClass: androidx.compose.ui.test.AndroidInputDispatcher_androidKt:
- Removed class androidx.compose.ui.test.AndroidInputDispatcher_androidKt
-RemovedClass: androidx.compose.ui.test.AndroidOutput_androidKt:
- Removed class androidx.compose.ui.test.AndroidOutput_androidKt
-RemovedClass: androidx.compose.ui.test.ErrorMessagesKt:
- Removed class androidx.compose.ui.test.ErrorMessagesKt
-RemovedClass: androidx.compose.ui.test.Expect_jvmKt:
- Removed class androidx.compose.ui.test.Expect_jvmKt
-RemovedClass: androidx.compose.ui.test.KeyInjectionScopeKt:
- Removed class androidx.compose.ui.test.KeyInjectionScopeKt
-RemovedClass: androidx.compose.ui.test.MouseInjectionScopeKt:
- Removed class androidx.compose.ui.test.MouseInjectionScopeKt
-RemovedClass: androidx.compose.ui.test.SemanticsSelectorKt:
- Removed class androidx.compose.ui.test.SemanticsSelectorKt
-RemovedClass: androidx.compose.ui.test.TestMonotonicFrameClock_jvmKt:
- Removed class androidx.compose.ui.test.TestMonotonicFrameClock_jvmKt
-RemovedClass: androidx.compose.ui.test.TestOwnerKt:
- Removed class androidx.compose.ui.test.TestOwnerKt
-RemovedClass: androidx.compose.ui.test.UtilsKt:
- Removed class androidx.compose.ui.test.UtilsKt
-
-
-RemovedPackage: androidx.compose.ui.test.android:
- Removed package androidx.compose.ui.test.android
-RemovedPackage: androidx.compose.ui.test.internal:
- Removed package androidx.compose.ui.test.internal
diff --git a/compose/ui/ui-text-google-fonts/api/1.4.0-beta02.txt b/compose/ui/ui-text-google-fonts/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..b93d5c2
--- /dev/null
+++ b/compose/ui/ui-text-google-fonts/api/1.4.0-beta02.txt
@@ -0,0 +1,23 @@
+// Signature format: 4.0
+package androidx.compose.ui.text.googlefonts {
+
+ public final class GoogleFont {
+ ctor public GoogleFont(String name, optional boolean bestEffort);
+ method public boolean getBestEffort();
+ method public String getName();
+ property public final boolean bestEffort;
+ property public final String name;
+ }
+
+ public static final class GoogleFont.Provider {
+ ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, java.util.List<? extends java.util.List<byte[]>> certificates);
+ ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, @ArrayRes int certificates);
+ }
+
+ public final class GoogleFontKt {
+ method public static androidx.compose.ui.text.font.Font Font(androidx.compose.ui.text.googlefonts.GoogleFont googleFont, androidx.compose.ui.text.googlefonts.GoogleFont.Provider fontProvider, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
+ method @WorkerThread public static boolean isAvailableOnDevice(androidx.compose.ui.text.googlefonts.GoogleFont.Provider, android.content.Context context);
+ }
+
+}
+
diff --git a/compose/ui/ui-text-google-fonts/api/current.ignore b/compose/ui/ui-text-google-fonts/api/current.ignore
deleted file mode 100644
index 9c78ac5..0000000
--- a/compose/ui/ui-text-google-fonts/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.text.googlefonts.FontProviderHelperKt:
- Removed class androidx.compose.ui.text.googlefonts.FontProviderHelperKt
diff --git a/compose/ui/ui-text-google-fonts/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-text-google-fonts/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..b93d5c2
--- /dev/null
+++ b/compose/ui/ui-text-google-fonts/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,23 @@
+// Signature format: 4.0
+package androidx.compose.ui.text.googlefonts {
+
+ public final class GoogleFont {
+ ctor public GoogleFont(String name, optional boolean bestEffort);
+ method public boolean getBestEffort();
+ method public String getName();
+ property public final boolean bestEffort;
+ property public final String name;
+ }
+
+ public static final class GoogleFont.Provider {
+ ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, java.util.List<? extends java.util.List<byte[]>> certificates);
+ ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, @ArrayRes int certificates);
+ }
+
+ public final class GoogleFontKt {
+ method public static androidx.compose.ui.text.font.Font Font(androidx.compose.ui.text.googlefonts.GoogleFont googleFont, androidx.compose.ui.text.googlefonts.GoogleFont.Provider fontProvider, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
+ method @WorkerThread public static boolean isAvailableOnDevice(androidx.compose.ui.text.googlefonts.GoogleFont.Provider, android.content.Context context);
+ }
+
+}
+
diff --git a/compose/ui/ui-text-google-fonts/api/res-1.4.0-beta02.txt b/compose/ui/ui-text-google-fonts/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-text-google-fonts/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-text-google-fonts/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-text-google-fonts/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..b93d5c2
--- /dev/null
+++ b/compose/ui/ui-text-google-fonts/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,23 @@
+// Signature format: 4.0
+package androidx.compose.ui.text.googlefonts {
+
+ public final class GoogleFont {
+ ctor public GoogleFont(String name, optional boolean bestEffort);
+ method public boolean getBestEffort();
+ method public String getName();
+ property public final boolean bestEffort;
+ property public final String name;
+ }
+
+ public static final class GoogleFont.Provider {
+ ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, java.util.List<? extends java.util.List<byte[]>> certificates);
+ ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, @ArrayRes int certificates);
+ }
+
+ public final class GoogleFontKt {
+ method public static androidx.compose.ui.text.font.Font Font(androidx.compose.ui.text.googlefonts.GoogleFont googleFont, androidx.compose.ui.text.googlefonts.GoogleFont.Provider fontProvider, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
+ method @WorkerThread public static boolean isAvailableOnDevice(androidx.compose.ui.text.googlefonts.GoogleFont.Provider, android.content.Context context);
+ }
+
+}
+
diff --git a/compose/ui/ui-text-google-fonts/api/restricted_current.ignore b/compose/ui/ui-text-google-fonts/api/restricted_current.ignore
deleted file mode 100644
index 9c78ac5..0000000
--- a/compose/ui/ui-text-google-fonts/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.text.googlefonts.FontProviderHelperKt:
- Removed class androidx.compose.ui.text.googlefonts.FontProviderHelperKt
diff --git a/compose/ui/ui-text/api/1.4.0-beta02.txt b/compose/ui/ui-text/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..1d00051
--- /dev/null
+++ b/compose/ui/ui-text/api/1.4.0-beta02.txt
@@ -0,0 +1,1414 @@
+// Signature format: 4.0
+package androidx.compose.ui.text {
+
+ public final class AndroidTextStyle_androidKt {
+ method public static androidx.compose.ui.text.PlatformParagraphStyle lerp(androidx.compose.ui.text.PlatformParagraphStyle start, androidx.compose.ui.text.PlatformParagraphStyle stop, float fraction);
+ method public static androidx.compose.ui.text.PlatformSpanStyle lerp(androidx.compose.ui.text.PlatformSpanStyle start, androidx.compose.ui.text.PlatformSpanStyle stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class AnnotatedString implements java.lang.CharSequence {
+ ctor public AnnotatedString(String text, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
+ method public operator char get(int index);
+ method public int getLength();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+ method public String getText();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.TtsAnnotation>> getTtsAnnotations(int start, int end);
+ method public boolean hasStringAnnotations(String tag, int start, int end);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
+ method public androidx.compose.ui.text.AnnotatedString subSequence(int startIndex, int endIndex);
+ method public androidx.compose.ui.text.AnnotatedString subSequence(long range);
+ property public int length;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles;
+ property public final String text;
+ }
+
+ public static final class AnnotatedString.Builder implements java.lang.Appendable {
+ ctor public AnnotatedString.Builder(optional int capacity);
+ ctor public AnnotatedString.Builder(String text);
+ ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
+ method public void addStringAnnotation(String tag, String annotation, int start, int end);
+ method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
+ method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
+ method public void append(String text);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text, int start, int end);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(char char);
+ method public void append(androidx.compose.ui.text.AnnotatedString text);
+ method public void append(androidx.compose.ui.text.AnnotatedString text, int start, int end);
+ method @Deprecated public void deprecated_append_returning_void(char char);
+ method public int getLength();
+ method public void pop();
+ method public void pop(int index);
+ method public int pushStringAnnotation(String tag, String annotation);
+ method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
+ method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+ method public int pushTtsAnnotation(androidx.compose.ui.text.TtsAnnotation ttsAnnotation);
+ method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
+ property public final int length;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
+ ctor public AnnotatedString.Range(T? item, int start, int end, String tag);
+ ctor public AnnotatedString.Range(T? item, int start, int end);
+ method public T! component1();
+ method public int component2();
+ method public int component3();
+ method public String component4();
+ method public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+ method public int getEnd();
+ method public T! getItem();
+ method public int getStart();
+ method public String getTag();
+ property public final int end;
+ property public final T! item;
+ property public final int start;
+ property public final String tag;
+ }
+
+ public final class AnnotatedStringKt {
+ method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, optional androidx.compose.ui.text.ParagraphStyle? paragraphStyle);
+ method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+ method public static inline androidx.compose.ui.text.AnnotatedString buildAnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+ method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ }
+
+ @kotlin.jvm.JvmInline public final value class EmojiSupportMatch {
+ field public static final androidx.compose.ui.text.EmojiSupportMatch.Companion Companion;
+ }
+
+ public static final class EmojiSupportMatch.Companion {
+ method public int getDefault();
+ method public int getNone();
+ property public final int Default;
+ property public final int None;
+ }
+
+ public final class MultiParagraph {
+ ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+ method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+ method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public androidx.compose.ui.text.MultiParagraphIntrinsics getIntrinsics();
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineEnd(int lineIndex, optional boolean visibleEnd);
+ method public int getLineForOffset(int offset);
+ method public int getLineForVerticalPosition(float vertical);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public int getLineStart(int lineIndex);
+ method public float getLineTop(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public int getMaxLines();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(long position);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+ method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
+ method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
+ method public float getWidth();
+ method public long getWordBoundary(int offset);
+ method public boolean isLineEllipsized(int lineIndex);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration);
+ property public final boolean didExceedMaxLines;
+ property public final float firstBaseline;
+ property public final float height;
+ property public final androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics;
+ property public final float lastBaseline;
+ property public final int lineCount;
+ property public final float maxIntrinsicWidth;
+ property public final int maxLines;
+ property public final float minIntrinsicWidth;
+ property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
+ property public final float width;
+ }
+
+ public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
+ ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
+ ctor @Deprecated public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public boolean hasStaleResolvedFonts;
+ property public float maxIntrinsicWidth;
+ property public float minIntrinsicWidth;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders;
+ }
+
+ public sealed interface Paragraph {
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+ method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+ method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineEnd(int lineIndex, boolean visibleEnd);
+ method public int getLineForOffset(int offset);
+ method public int getLineForVerticalPosition(float vertical);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public int getLineStart(int lineIndex);
+ method public float getLineTop(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(long position);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+ method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
+ method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
+ method public float getWidth();
+ method public long getWordBoundary(int offset);
+ method public boolean isLineEllipsized(int lineIndex);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, long color, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration);
+ property public abstract boolean didExceedMaxLines;
+ property public abstract float firstBaseline;
+ property public abstract float height;
+ property public abstract float lastBaseline;
+ property public abstract int lineCount;
+ property public abstract float maxIntrinsicWidth;
+ property public abstract float minIntrinsicWidth;
+ property public abstract java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
+ property public abstract float width;
+ }
+
+ public interface ParagraphIntrinsics {
+ method public default boolean getHasStaleResolvedFonts();
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ property public default boolean hasStaleResolvedFonts;
+ property public abstract float maxIntrinsicWidth;
+ property public abstract float minIntrinsicWidth;
+ }
+
+ public final class ParagraphIntrinsicsKt {
+ method @Deprecated public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
+ }
+
+ public final class ParagraphKt {
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, optional int maxLines, optional boolean ellipsis, float width);
+ method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
+ }
+
+ @androidx.compose.runtime.Immutable public final class ParagraphStyle {
+ ctor public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method public androidx.compose.ui.text.style.Hyphens? getHyphens();
+ method public androidx.compose.ui.text.style.LineBreak? getLineBreak();
+ method public long getLineHeight();
+ method public androidx.compose.ui.text.style.LineHeightStyle? getLineHeightStyle();
+ method public androidx.compose.ui.text.PlatformParagraphStyle? getPlatformStyle();
+ method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+ method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+ method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle merge(optional androidx.compose.ui.text.ParagraphStyle? other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+ property public final androidx.compose.ui.text.style.Hyphens? hyphens;
+ property public final androidx.compose.ui.text.style.LineBreak? lineBreak;
+ property public final long lineHeight;
+ property public final androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle;
+ property public final androidx.compose.ui.text.PlatformParagraphStyle? platformStyle;
+ property public final androidx.compose.ui.text.style.TextAlign? textAlign;
+ property public final androidx.compose.ui.text.style.TextDirection? textDirection;
+ property public final androidx.compose.ui.text.style.TextIndent? textIndent;
+ }
+
+ public final class ParagraphStyleKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Placeholder {
+ ctor public Placeholder(long width, long height, int placeholderVerticalAlign);
+ method public androidx.compose.ui.text.Placeholder copy(optional long width, optional long height, optional int placeholderVerticalAlign);
+ method public long getHeight();
+ method public int getPlaceholderVerticalAlign();
+ method public long getWidth();
+ property public final long height;
+ property public final int placeholderVerticalAlign;
+ property public final long width;
+ }
+
+ @kotlin.jvm.JvmInline public final value class PlaceholderVerticalAlign {
+ field public static final androidx.compose.ui.text.PlaceholderVerticalAlign.Companion Companion;
+ }
+
+ public static final class PlaceholderVerticalAlign.Companion {
+ method public int getAboveBaseline();
+ method public int getBottom();
+ method public int getCenter();
+ method public int getTextBottom();
+ method public int getTextCenter();
+ method public int getTextTop();
+ method public int getTop();
+ property public final int AboveBaseline;
+ property public final int Bottom;
+ property public final int Center;
+ property public final int TextBottom;
+ property public final int TextCenter;
+ property public final int TextTop;
+ property public final int Top;
+ }
+
+ public final class PlatformParagraphStyle {
+ ctor @Deprecated public PlatformParagraphStyle(optional boolean includeFontPadding);
+ ctor @Deprecated public PlatformParagraphStyle(optional int emojiSupportMatch, optional boolean includeFontPadding);
+ ctor public PlatformParagraphStyle(optional int emojiSupportMatch);
+ method public int getEmojiSupportMatch();
+ method @Deprecated public boolean getIncludeFontPadding();
+ method public androidx.compose.ui.text.PlatformParagraphStyle merge(androidx.compose.ui.text.PlatformParagraphStyle? other);
+ property public final int emojiSupportMatch;
+ property @Deprecated public final boolean includeFontPadding;
+ field public static final androidx.compose.ui.text.PlatformParagraphStyle.Companion Companion;
+ }
+
+ public static final class PlatformParagraphStyle.Companion {
+ method public androidx.compose.ui.text.PlatformParagraphStyle getDefault();
+ property public final androidx.compose.ui.text.PlatformParagraphStyle Default;
+ }
+
+ public final class PlatformSpanStyle {
+ ctor public PlatformSpanStyle();
+ method public androidx.compose.ui.text.PlatformSpanStyle merge(androidx.compose.ui.text.PlatformSpanStyle? other);
+ field public static final androidx.compose.ui.text.PlatformSpanStyle.Companion Companion;
+ }
+
+ public static final class PlatformSpanStyle.Companion {
+ method public androidx.compose.ui.text.PlatformSpanStyle getDefault();
+ property public final androidx.compose.ui.text.PlatformSpanStyle Default;
+ }
+
+ public final class PlatformTextStyle {
+ ctor public PlatformTextStyle(androidx.compose.ui.text.PlatformSpanStyle? spanStyle, androidx.compose.ui.text.PlatformParagraphStyle? paragraphStyle);
+ ctor @Deprecated public PlatformTextStyle(optional boolean includeFontPadding);
+ ctor public PlatformTextStyle(int emojiSupportMatch);
+ method public androidx.compose.ui.text.PlatformParagraphStyle? getParagraphStyle();
+ method public androidx.compose.ui.text.PlatformSpanStyle? getSpanStyle();
+ property public final androidx.compose.ui.text.PlatformParagraphStyle? paragraphStyle;
+ property public final androidx.compose.ui.text.PlatformSpanStyle? spanStyle;
+ }
+
+ @androidx.compose.runtime.Immutable public final class SpanStyle {
+ ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
+ ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
+ method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
+ method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
+ method public long getBackground();
+ method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
+ method public long getColor();
+ method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+ method public String? getFontFeatureSettings();
+ method public long getFontSize();
+ method public androidx.compose.ui.text.font.FontStyle? getFontStyle();
+ method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+ method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
+ method public long getLetterSpacing();
+ method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
+ method public androidx.compose.ui.text.PlatformSpanStyle? getPlatformStyle();
+ method public androidx.compose.ui.graphics.Shadow? getShadow();
+ method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+ method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle merge(optional androidx.compose.ui.text.SpanStyle? other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
+ property public final long background;
+ property public final androidx.compose.ui.text.style.BaselineShift? baselineShift;
+ property public final long color;
+ property public final androidx.compose.ui.text.font.FontFamily? fontFamily;
+ property public final String? fontFeatureSettings;
+ property public final long fontSize;
+ property public final androidx.compose.ui.text.font.FontStyle? fontStyle;
+ property public final androidx.compose.ui.text.font.FontSynthesis? fontSynthesis;
+ property public final androidx.compose.ui.text.font.FontWeight? fontWeight;
+ property public final long letterSpacing;
+ property public final androidx.compose.ui.text.intl.LocaleList? localeList;
+ property public final androidx.compose.ui.text.PlatformSpanStyle? platformStyle;
+ property public final androidx.compose.ui.graphics.Shadow? shadow;
+ property public final androidx.compose.ui.text.style.TextDecoration? textDecoration;
+ property public final androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform;
+ }
+
+ public final class SpanStyleKt {
+ method public static androidx.compose.ui.text.SpanStyle lerp(androidx.compose.ui.text.SpanStyle start, androidx.compose.ui.text.SpanStyle stop, float fraction);
+ }
+
+ public final class StringKt {
+ method public static String capitalize(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String capitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static String decapitalize(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String decapitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static String toLowerCase(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String toLowerCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static String toUpperCase(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String toUpperCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ }
+
+ public final class TextLayoutInput {
+ ctor @Deprecated public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, int overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, long constraints);
+ ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, int overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, long constraints);
+ method @Deprecated public androidx.compose.ui.text.TextLayoutInput copy(optional androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean softWrap, optional int overflow, optional androidx.compose.ui.unit.Density density, optional androidx.compose.ui.unit.LayoutDirection layoutDirection, optional androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, optional long constraints);
+ method public long getConstraints();
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.text.font.FontFamily.Resolver getFontFamilyResolver();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public int getMaxLines();
+ method public int getOverflow();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+ method @Deprecated public androidx.compose.ui.text.font.Font.ResourceLoader getResourceLoader();
+ method public boolean getSoftWrap();
+ method public androidx.compose.ui.text.TextStyle getStyle();
+ method public androidx.compose.ui.text.AnnotatedString getText();
+ property public final long constraints;
+ property public final androidx.compose.ui.unit.Density density;
+ property public final androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver;
+ property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public final int maxLines;
+ property public final int overflow;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders;
+ property @Deprecated public final androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader;
+ property public final boolean softWrap;
+ property public final androidx.compose.ui.text.TextStyle style;
+ property public final androidx.compose.ui.text.AnnotatedString text;
+ }
+
+ public final class TextLayoutResult {
+ ctor public TextLayoutResult(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, long size);
+ method public androidx.compose.ui.text.TextLayoutResult copy(optional androidx.compose.ui.text.TextLayoutInput layoutInput, optional long size);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+ method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+ method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidOverflowHeight();
+ method public boolean getDidOverflowWidth();
+ method public float getFirstBaseline();
+ method public boolean getHasVisualOverflow();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public float getLastBaseline();
+ method public androidx.compose.ui.text.TextLayoutInput getLayoutInput();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineEnd(int lineIndex, optional boolean visibleEnd);
+ method public int getLineForOffset(int offset);
+ method public int getLineForVerticalPosition(float vertical);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public int getLineStart(int lineIndex);
+ method public float getLineTop(int lineIndex);
+ method public androidx.compose.ui.text.MultiParagraph getMultiParagraph();
+ method public int getOffsetForPosition(long position);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+ method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
+ method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
+ method public long getSize();
+ method public long getWordBoundary(int offset);
+ method public boolean isLineEllipsized(int lineIndex);
+ property public final boolean didOverflowHeight;
+ property public final boolean didOverflowWidth;
+ property public final float firstBaseline;
+ property public final boolean hasVisualOverflow;
+ property public final float lastBaseline;
+ property public final androidx.compose.ui.text.TextLayoutInput layoutInput;
+ property public final int lineCount;
+ property public final androidx.compose.ui.text.MultiParagraph multiParagraph;
+ property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
+ property public final long size;
+ }
+
+ public final class TextPainter {
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.text.TextLayoutResult textLayoutResult);
+ field public static final androidx.compose.ui.text.TextPainter INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextRange {
+ method public operator boolean contains(long other);
+ method public operator boolean contains(int offset);
+ method public boolean getCollapsed();
+ method public int getEnd();
+ method public int getLength();
+ method public int getMax();
+ method public int getMin();
+ method public boolean getReversed();
+ method public int getStart();
+ method public boolean intersects(long other);
+ property public final boolean collapsed;
+ property public final int end;
+ property public final int length;
+ property public final int max;
+ property public final int min;
+ property public final boolean reversed;
+ property public final int start;
+ field public static final androidx.compose.ui.text.TextRange.Companion Companion;
+ }
+
+ public static final class TextRange.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class TextRangeKt {
+ method public static long TextRange(int start, int end);
+ method public static long TextRange(int index);
+ method public static String substring(CharSequence, long range);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextStyle {
+ ctor public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method public long getBackground();
+ method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
+ method public long getColor();
+ method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+ method public String? getFontFeatureSettings();
+ method public long getFontSize();
+ method public androidx.compose.ui.text.font.FontStyle? getFontStyle();
+ method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+ method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
+ method public androidx.compose.ui.text.style.Hyphens? getHyphens();
+ method public long getLetterSpacing();
+ method public androidx.compose.ui.text.style.LineBreak? getLineBreak();
+ method public long getLineHeight();
+ method public androidx.compose.ui.text.style.LineHeightStyle? getLineHeightStyle();
+ method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
+ method public androidx.compose.ui.text.PlatformTextStyle? getPlatformStyle();
+ method public androidx.compose.ui.graphics.Shadow? getShadow();
+ method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+ method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+ method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+ method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+ method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+ method public boolean hasSameLayoutAffectingAttributes(androidx.compose.ui.text.TextStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(optional androidx.compose.ui.text.TextStyle? other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+ property public final long background;
+ property public final androidx.compose.ui.text.style.BaselineShift? baselineShift;
+ property public final long color;
+ property public final androidx.compose.ui.text.font.FontFamily? fontFamily;
+ property public final String? fontFeatureSettings;
+ property public final long fontSize;
+ property public final androidx.compose.ui.text.font.FontStyle? fontStyle;
+ property public final androidx.compose.ui.text.font.FontSynthesis? fontSynthesis;
+ property public final androidx.compose.ui.text.font.FontWeight? fontWeight;
+ property public final androidx.compose.ui.text.style.Hyphens? hyphens;
+ property public final long letterSpacing;
+ property public final androidx.compose.ui.text.style.LineBreak? lineBreak;
+ property public final long lineHeight;
+ property public final androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle;
+ property public final androidx.compose.ui.text.intl.LocaleList? localeList;
+ property public final androidx.compose.ui.text.PlatformTextStyle? platformStyle;
+ property public final androidx.compose.ui.graphics.Shadow? shadow;
+ property public final androidx.compose.ui.text.style.TextAlign? textAlign;
+ property public final androidx.compose.ui.text.style.TextDecoration? textDecoration;
+ property public final androidx.compose.ui.text.style.TextDirection? textDirection;
+ property public final androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform;
+ property public final androidx.compose.ui.text.style.TextIndent? textIndent;
+ field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
+ }
+
+ public static final class TextStyle.Companion {
+ method public androidx.compose.ui.text.TextStyle getDefault();
+ property public final androidx.compose.ui.text.TextStyle Default;
+ }
+
+ public final class TextStyleKt {
+ method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
+ method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.compose.ui.unit.LayoutDirection direction);
+ }
+
+ public abstract sealed class TtsAnnotation {
+ }
+
+ public final class VerbatimTtsAnnotation extends androidx.compose.ui.text.TtsAnnotation {
+ ctor public VerbatimTtsAnnotation(String verbatim);
+ method public String getVerbatim();
+ property public final String verbatim;
+ }
+
+}
+
+package androidx.compose.ui.text.font {
+
+ public abstract class AndroidFont implements androidx.compose.ui.text.font.Font {
+ ctor public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader, androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ ctor @Deprecated public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader);
+ method public final int getLoadingStrategy();
+ method public final androidx.compose.ui.text.font.AndroidFont.TypefaceLoader getTypefaceLoader();
+ method public final androidx.compose.ui.text.font.FontVariation.Settings getVariationSettings();
+ property public final int loadingStrategy;
+ property public final androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader;
+ property public final androidx.compose.ui.text.font.FontVariation.Settings variationSettings;
+ }
+
+ public static interface AndroidFont.TypefaceLoader {
+ method public suspend Object? awaitLoad(android.content.Context context, androidx.compose.ui.text.font.AndroidFont font, kotlin.coroutines.Continuation<? super android.graphics.Typeface>);
+ method public android.graphics.Typeface? loadBlocking(android.content.Context context, androidx.compose.ui.text.font.AndroidFont font);
+ }
+
+ public final class AndroidFontKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(String path, android.content.res.AssetManager assetManager, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(java.io.File file, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @RequiresApi(26) @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(android.os.ParcelFileDescriptor fileDescriptor, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ }
+
+ public final class AndroidTypeface_androidKt {
+ method public static androidx.compose.ui.text.font.FontFamily FontFamily(android.graphics.Typeface typeface);
+ method @Deprecated public static androidx.compose.ui.text.font.Typeface Typeface(android.content.Context context, androidx.compose.ui.text.font.FontFamily fontFamily, optional java.util.List<kotlin.Pair<androidx.compose.ui.text.font.FontWeight,androidx.compose.ui.text.font.FontStyle>>? styles);
+ method public static androidx.compose.ui.text.font.Typeface Typeface(android.graphics.Typeface typeface);
+ }
+
+ public final class DelegatingFontLoaderForDeprecatedUsage_androidKt {
+ method @Deprecated public static androidx.compose.ui.text.font.FontFamily.Resolver createFontFamilyResolver(androidx.compose.ui.text.font.Font.ResourceLoader fontResourceLoader, android.content.Context context);
+ }
+
+ @kotlin.jvm.JvmInline public final value class DeviceFontFamilyName {
+ ctor public DeviceFontFamilyName(String name);
+ method public String getName();
+ property public final String name;
+ }
+
+ public final class DeviceFontFamilyNameFontKt {
+ method public static androidx.compose.ui.text.font.Font Font(String familyName, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ }
+
+ public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+ }
+
+ @androidx.compose.runtime.Immutable public interface Font {
+ method public default int getLoadingStrategy();
+ method public int getStyle();
+ method public androidx.compose.ui.text.font.FontWeight getWeight();
+ property public default int loadingStrategy;
+ property public abstract int style;
+ property public abstract androidx.compose.ui.text.font.FontWeight weight;
+ field public static final androidx.compose.ui.text.font.Font.Companion Companion;
+ field public static final long MaximumAsyncTimeoutMillis = 15000L; // 0x3a98L
+ }
+
+ public static final class Font.Companion {
+ field public static final long MaximumAsyncTimeoutMillis = 15000L; // 0x3a98L
+ }
+
+ @Deprecated public static interface Font.ResourceLoader {
+ method @Deprecated public Object load(androidx.compose.ui.text.font.Font font);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class FontFamily {
+ method @Deprecated public final boolean getCanLoadSynchronously();
+ property @Deprecated public final boolean canLoadSynchronously;
+ field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
+ }
+
+ public static final class FontFamily.Companion {
+ method public androidx.compose.ui.text.font.GenericFontFamily getCursive();
+ method public androidx.compose.ui.text.font.SystemFontFamily getDefault();
+ method public androidx.compose.ui.text.font.GenericFontFamily getMonospace();
+ method public androidx.compose.ui.text.font.GenericFontFamily getSansSerif();
+ method public androidx.compose.ui.text.font.GenericFontFamily getSerif();
+ property public final androidx.compose.ui.text.font.GenericFontFamily Cursive;
+ property public final androidx.compose.ui.text.font.SystemFontFamily Default;
+ property public final androidx.compose.ui.text.font.GenericFontFamily Monospace;
+ property public final androidx.compose.ui.text.font.GenericFontFamily SansSerif;
+ property public final androidx.compose.ui.text.font.GenericFontFamily Serif;
+ }
+
+ public static sealed interface FontFamily.Resolver {
+ method public suspend Object? preload(androidx.compose.ui.text.font.FontFamily fontFamily, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.runtime.State<java.lang.Object> resolve(optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight fontWeight, optional int fontStyle, optional int fontSynthesis);
+ }
+
+ public final class FontFamilyKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Font... fonts);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Typeface typeface);
+ }
+
+ 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 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);
+ }
+
+ public final class FontKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional int loadingStrategy);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily toFontFamily(androidx.compose.ui.text.font.Font);
+ }
+
+ @androidx.compose.runtime.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+ method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
+ property public final java.util.List<androidx.compose.ui.text.font.Font> fonts;
+ }
+
+ @kotlin.jvm.JvmInline public final value class FontLoadingStrategy {
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.text.font.FontLoadingStrategy.Companion Companion;
+ }
+
+ public static final class FontLoadingStrategy.Companion {
+ method public int getAsync();
+ method public int getBlocking();
+ method public int getOptionalLocal();
+ property public final int Async;
+ property public final int Blocking;
+ property public final int OptionalLocal;
+ }
+
+ @kotlin.jvm.JvmInline public final value class FontStyle {
+ ctor public FontStyle(int value);
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.text.font.FontStyle.Companion Companion;
+ }
+
+ public static final class FontStyle.Companion {
+ method public int getItalic();
+ method public int getNormal();
+ method public java.util.List<androidx.compose.ui.text.font.FontStyle> values();
+ property public final int Italic;
+ property public final int Normal;
+ }
+
+ @kotlin.jvm.JvmInline public final value class FontSynthesis {
+ field public static final androidx.compose.ui.text.font.FontSynthesis.Companion Companion;
+ }
+
+ public static final class FontSynthesis.Companion {
+ method public int getAll();
+ method public int getNone();
+ method public int getStyle();
+ method public int getWeight();
+ property public final int All;
+ property public final int None;
+ property public final int Style;
+ property public final int Weight;
+ }
+
+ public final class FontVariation {
+ method public androidx.compose.ui.text.font.FontVariation.Setting Setting(String name, float value);
+ method public androidx.compose.ui.text.font.FontVariation.Settings Settings(androidx.compose.ui.text.font.FontWeight weight, int style, androidx.compose.ui.text.font.FontVariation.Setting... settings);
+ method public androidx.compose.ui.text.font.FontVariation.Setting grade(int value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting italic(float value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting opticalSizing(long textSize);
+ method public androidx.compose.ui.text.font.FontVariation.Setting slant(float value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting weight(int value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting width(float value);
+ field public static final androidx.compose.ui.text.font.FontVariation INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable public static sealed interface FontVariation.Setting {
+ method public String getAxisName();
+ method public boolean getNeedsDensity();
+ method public float toVariationValue(androidx.compose.ui.unit.Density? density);
+ property public abstract String axisName;
+ property public abstract boolean needsDensity;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class FontVariation.Settings {
+ ctor public FontVariation.Settings(androidx.compose.ui.text.font.FontVariation.Setting... settings);
+ method public java.util.List<androidx.compose.ui.text.font.FontVariation.Setting> getSettings();
+ property public final java.util.List<androidx.compose.ui.text.font.FontVariation.Setting> settings;
+ }
+
+ @androidx.compose.runtime.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
+ ctor public FontWeight(int weight);
+ method public operator int compareTo(androidx.compose.ui.text.font.FontWeight other);
+ method public int getWeight();
+ property public final int weight;
+ field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
+ }
+
+ public static final class FontWeight.Companion {
+ method public androidx.compose.ui.text.font.FontWeight getBlack();
+ method public androidx.compose.ui.text.font.FontWeight getBold();
+ method public androidx.compose.ui.text.font.FontWeight getExtraBold();
+ method public androidx.compose.ui.text.font.FontWeight getExtraLight();
+ method public androidx.compose.ui.text.font.FontWeight getLight();
+ method public androidx.compose.ui.text.font.FontWeight getMedium();
+ method public androidx.compose.ui.text.font.FontWeight getNormal();
+ method public androidx.compose.ui.text.font.FontWeight getSemiBold();
+ method public androidx.compose.ui.text.font.FontWeight getThin();
+ method public androidx.compose.ui.text.font.FontWeight getW100();
+ method public androidx.compose.ui.text.font.FontWeight getW200();
+ method public androidx.compose.ui.text.font.FontWeight getW300();
+ method public androidx.compose.ui.text.font.FontWeight getW400();
+ method public androidx.compose.ui.text.font.FontWeight getW500();
+ method public androidx.compose.ui.text.font.FontWeight getW600();
+ method public androidx.compose.ui.text.font.FontWeight getW700();
+ method public androidx.compose.ui.text.font.FontWeight getW800();
+ method public androidx.compose.ui.text.font.FontWeight getW900();
+ property public final androidx.compose.ui.text.font.FontWeight Black;
+ property public final androidx.compose.ui.text.font.FontWeight Bold;
+ property public final androidx.compose.ui.text.font.FontWeight ExtraBold;
+ property public final androidx.compose.ui.text.font.FontWeight ExtraLight;
+ property public final androidx.compose.ui.text.font.FontWeight Light;
+ property public final androidx.compose.ui.text.font.FontWeight Medium;
+ property public final androidx.compose.ui.text.font.FontWeight Normal;
+ property public final androidx.compose.ui.text.font.FontWeight SemiBold;
+ property public final androidx.compose.ui.text.font.FontWeight Thin;
+ property public final androidx.compose.ui.text.font.FontWeight W100;
+ property public final androidx.compose.ui.text.font.FontWeight W200;
+ property public final androidx.compose.ui.text.font.FontWeight W300;
+ property public final androidx.compose.ui.text.font.FontWeight W400;
+ property public final androidx.compose.ui.text.font.FontWeight W500;
+ property public final androidx.compose.ui.text.font.FontWeight W600;
+ property public final androidx.compose.ui.text.font.FontWeight W700;
+ property public final androidx.compose.ui.text.font.FontWeight W800;
+ property public final androidx.compose.ui.text.font.FontWeight W900;
+ }
+
+ public final class FontWeightKt {
+ method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
+ method public String getName();
+ property public final String name;
+ }
+
+ public final class LoadedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+ method public androidx.compose.ui.text.font.Typeface getTypeface();
+ property public final androidx.compose.ui.text.font.Typeface typeface;
+ }
+
+ public final class ResourceFont implements androidx.compose.ui.text.font.Font {
+ method public androidx.compose.ui.text.font.ResourceFont copy(optional int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
+ method public int getResId();
+ method public int getStyle();
+ method public androidx.compose.ui.text.font.FontWeight getWeight();
+ property public final int resId;
+ property public int style;
+ property public androidx.compose.ui.text.font.FontWeight weight;
+ }
+
+ public abstract sealed class SystemFontFamily extends androidx.compose.ui.text.font.FontFamily {
+ }
+
+ public interface Typeface {
+ method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+ property public abstract androidx.compose.ui.text.font.FontFamily? fontFamily;
+ }
+
+}
+
+package androidx.compose.ui.text.input {
+
+ public final class BackspaceCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public BackspaceCommand();
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ public final class CommitTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public CommitTextCommand(androidx.compose.ui.text.AnnotatedString annotatedString, int newCursorPosition);
+ ctor public CommitTextCommand(String text, int newCursorPosition);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public int getNewCursorPosition();
+ method public String getText();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public final int newCursorPosition;
+ property public final String text;
+ }
+
+ public final class DeleteAllCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public DeleteAllCommand();
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ public final class DeleteSurroundingTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public DeleteSurroundingTextCommand(int lengthBeforeCursor, int lengthAfterCursor);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getLengthAfterCursor();
+ method public int getLengthBeforeCursor();
+ property public final int lengthAfterCursor;
+ property public final int lengthBeforeCursor;
+ }
+
+ public final class DeleteSurroundingTextInCodePointsCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public DeleteSurroundingTextInCodePointsCommand(int lengthBeforeCursor, int lengthAfterCursor);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getLengthAfterCursor();
+ method public int getLengthBeforeCursor();
+ property public final int lengthAfterCursor;
+ property public final int lengthBeforeCursor;
+ }
+
+ public interface EditCommand {
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ public final class EditProcessor {
+ ctor public EditProcessor();
+ method public androidx.compose.ui.text.input.TextFieldValue apply(java.util.List<? extends androidx.compose.ui.text.input.EditCommand> editCommands);
+ method public void reset(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.TextInputSession? textInputSession);
+ method public androidx.compose.ui.text.input.TextFieldValue toTextFieldValue();
+ }
+
+ public final class EditingBuffer {
+ ctor public EditingBuffer(androidx.compose.ui.text.AnnotatedString text, long selection);
+ }
+
+ public final class FinishComposingTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public FinishComposingTextCommand();
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ @kotlin.jvm.JvmInline public final value class ImeAction {
+ field public static final androidx.compose.ui.text.input.ImeAction.Companion Companion;
+ }
+
+ public static final class ImeAction.Companion {
+ method public int getDefault();
+ method public int getDone();
+ method public int getGo();
+ method public int getNext();
+ method public int getNone();
+ method public int getPrevious();
+ method public int getSearch();
+ method public int getSend();
+ property public final int Default;
+ property public final int Done;
+ property public final int Go;
+ property public final int Next;
+ property public final int None;
+ property public final int Previous;
+ property public final int Search;
+ property public final int Send;
+ }
+
+ @androidx.compose.runtime.Immutable public final class ImeOptions {
+ ctor public ImeOptions(optional boolean singleLine, optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public androidx.compose.ui.text.input.ImeOptions copy(optional boolean singleLine, optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public boolean getAutoCorrect();
+ method public int getCapitalization();
+ method public int getImeAction();
+ method public int getKeyboardType();
+ method public boolean getSingleLine();
+ property public final boolean autoCorrect;
+ property public final int capitalization;
+ property public final int imeAction;
+ property public final int keyboardType;
+ property public final boolean singleLine;
+ field public static final androidx.compose.ui.text.input.ImeOptions.Companion Companion;
+ }
+
+ public static final class ImeOptions.Companion {
+ method public androidx.compose.ui.text.input.ImeOptions getDefault();
+ property public final androidx.compose.ui.text.input.ImeOptions Default;
+ }
+
+ @Deprecated public interface InputEventCallback {
+ method @Deprecated public void onEditCommands(java.util.List<? extends androidx.compose.ui.text.input.EditCommand> editCommands);
+ method @Deprecated public void onImeAction(int imeAction);
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyboardCapitalization {
+ field public static final androidx.compose.ui.text.input.KeyboardCapitalization.Companion Companion;
+ }
+
+ public static final class KeyboardCapitalization.Companion {
+ method public int getCharacters();
+ method public int getNone();
+ method public int getSentences();
+ method public int getWords();
+ property public final int Characters;
+ property public final int None;
+ property public final int Sentences;
+ property public final int Words;
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyboardType {
+ field public static final androidx.compose.ui.text.input.KeyboardType.Companion Companion;
+ }
+
+ public static final class KeyboardType.Companion {
+ method public int getAscii();
+ method public int getDecimal();
+ method public int getEmail();
+ method public int getNumber();
+ method public int getNumberPassword();
+ method public int getPassword();
+ method public int getPhone();
+ method public int getText();
+ method public int getUri();
+ property public final int Ascii;
+ property public final int Decimal;
+ property public final int Email;
+ property public final int Number;
+ property public final int NumberPassword;
+ property public final int Password;
+ property public final int Phone;
+ property public final int Text;
+ property public final int Uri;
+ }
+
+ public final class MoveCursorCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public MoveCursorCommand(int amount);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getAmount();
+ property public final int amount;
+ }
+
+ public interface OffsetMapping {
+ method public int originalToTransformed(int offset);
+ method public int transformedToOriginal(int offset);
+ field public static final androidx.compose.ui.text.input.OffsetMapping.Companion Companion;
+ }
+
+ public static final class OffsetMapping.Companion {
+ method public androidx.compose.ui.text.input.OffsetMapping getIdentity();
+ property public final androidx.compose.ui.text.input.OffsetMapping Identity;
+ }
+
+ 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);
+ method public char getMask();
+ property public final char mask;
+ }
+
+ public interface PlatformTextInputService {
+ method public void hideSoftwareKeyboard();
+ method public default void notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
+ method public void showSoftwareKeyboard();
+ method public void startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.ImeOptions imeOptions, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditCommand>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+ method public void stopInput();
+ method public void updateState(androidx.compose.ui.text.input.TextFieldValue? oldValue, androidx.compose.ui.text.input.TextFieldValue newValue);
+ }
+
+ public final class SetComposingRegionCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public SetComposingRegionCommand(int start, int end);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getEnd();
+ method public int getStart();
+ property public final int end;
+ property public final int start;
+ }
+
+ public final class SetComposingTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public SetComposingTextCommand(androidx.compose.ui.text.AnnotatedString annotatedString, int newCursorPosition);
+ ctor public SetComposingTextCommand(String text, int newCursorPosition);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public int getNewCursorPosition();
+ method public String getText();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public final int newCursorPosition;
+ property public final String text;
+ }
+
+ public final class SetSelectionCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public SetSelectionCommand(int start, int end);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getEnd();
+ method public int getStart();
+ property public final int end;
+ property public final int start;
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextFieldValue {
+ ctor public TextFieldValue(androidx.compose.ui.text.AnnotatedString annotatedString, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ ctor public TextFieldValue(optional String text, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ method public androidx.compose.ui.text.input.TextFieldValue copy(optional androidx.compose.ui.text.AnnotatedString annotatedString, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ method public androidx.compose.ui.text.input.TextFieldValue copy(String text, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public androidx.compose.ui.text.TextRange? getComposition();
+ method public long getSelection();
+ method public String getText();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public final androidx.compose.ui.text.TextRange? composition;
+ property public final long selection;
+ property public final String text;
+ field public static final androidx.compose.ui.text.input.TextFieldValue.Companion Companion;
+ }
+
+ public static final class TextFieldValue.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> Saver;
+ }
+
+ public final class TextFieldValueKt {
+ method public static androidx.compose.ui.text.AnnotatedString getSelectedText(androidx.compose.ui.text.input.TextFieldValue);
+ method public static androidx.compose.ui.text.AnnotatedString getTextAfterSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+ method public static androidx.compose.ui.text.AnnotatedString getTextBeforeSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+ }
+
+ public class TextInputService {
+ ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+ method @Deprecated public final void hideSoftwareKeyboard();
+ method @Deprecated public final void showSoftwareKeyboard();
+ method public androidx.compose.ui.text.input.TextInputSession startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.ImeOptions imeOptions, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditCommand>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+ method public void stopInput(androidx.compose.ui.text.input.TextInputSession session);
+ }
+
+ public final class TextInputSession {
+ ctor public TextInputSession(androidx.compose.ui.text.input.TextInputService textInputService, androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+ method public void dispose();
+ method public boolean hideSoftwareKeyboard();
+ method public boolean isOpen();
+ method public boolean notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
+ method public boolean showSoftwareKeyboard();
+ method public boolean updateState(androidx.compose.ui.text.input.TextFieldValue? oldValue, androidx.compose.ui.text.input.TextFieldValue newValue);
+ property public final boolean isOpen;
+ }
+
+ public final class TransformedText {
+ ctor public TransformedText(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.input.OffsetMapping offsetMapping);
+ method public androidx.compose.ui.text.input.OffsetMapping getOffsetMapping();
+ method public androidx.compose.ui.text.AnnotatedString getText();
+ property public final androidx.compose.ui.text.input.OffsetMapping offsetMapping;
+ property public final androidx.compose.ui.text.AnnotatedString text;
+ }
+
+ @androidx.compose.runtime.Immutable public fun interface VisualTransformation {
+ method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+ field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
+ }
+
+ public static final class VisualTransformation.Companion {
+ method public androidx.compose.ui.text.input.VisualTransformation getNone();
+ property public final androidx.compose.ui.text.input.VisualTransformation None;
+ }
+
+}
+
+package androidx.compose.ui.text.intl {
+
+ @androidx.compose.runtime.Immutable public final class Locale {
+ ctor public Locale(String languageTag);
+ method public String getLanguage();
+ method public String getRegion();
+ method public String getScript();
+ method public String toLanguageTag();
+ property public final String language;
+ property public final String region;
+ property public final String script;
+ field public static final androidx.compose.ui.text.intl.Locale.Companion Companion;
+ }
+
+ public static final class Locale.Companion {
+ method public androidx.compose.ui.text.intl.Locale getCurrent();
+ property public final androidx.compose.ui.text.intl.Locale current;
+ }
+
+ @androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+ ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+ ctor public LocaleList(String languageTags);
+ ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+ method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
+ method public boolean containsAll(java.util.Collection<E!> elements);
+ method public operator androidx.compose.ui.text.intl.Locale get(int i);
+ method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
+ method public int getSize();
+ method public boolean isEmpty();
+ method public java.util.Iterator<androidx.compose.ui.text.intl.Locale> iterator();
+ property public final java.util.List<androidx.compose.ui.text.intl.Locale> localeList;
+ property public int size;
+ field public static final androidx.compose.ui.text.intl.LocaleList.Companion Companion;
+ }
+
+ public static final class LocaleList.Companion {
+ method public androidx.compose.ui.text.intl.LocaleList getCurrent();
+ property public final androidx.compose.ui.text.intl.LocaleList current;
+ }
+
+}
+
+package androidx.compose.ui.text.platform.extensions {
+
+ public final class TtsAnnotationExtensions_androidKt {
+ method public static android.text.style.TtsSpan toSpan(androidx.compose.ui.text.TtsAnnotation);
+ method public static android.text.style.TtsSpan toSpan(androidx.compose.ui.text.VerbatimTtsAnnotation);
+ }
+
+}
+
+package androidx.compose.ui.text.style {
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BaselineShift {
+ ctor public BaselineShift(float multiplier);
+ method public float getMultiplier();
+ property public final float multiplier;
+ field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
+ }
+
+ public static final class BaselineShift.Companion {
+ method public float getNone();
+ method public float getSubscript();
+ method public float getSuperscript();
+ property public final float None;
+ property public final float Subscript;
+ property public final float Superscript;
+ }
+
+ public final class BaselineShiftKt {
+ method @androidx.compose.runtime.Stable public static float lerp(float start, float stop, float fraction);
+ }
+
+ @kotlin.jvm.JvmInline public final value class Hyphens {
+ field public static final androidx.compose.ui.text.style.Hyphens.Companion Companion;
+ }
+
+ public static final class Hyphens.Companion {
+ method public int getAuto();
+ method public int getNone();
+ property public final int Auto;
+ property public final int None;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class LineBreak {
+ ctor public LineBreak(int strategy, int strictness, int wordBreak);
+ method public int copy(optional int strategy, optional int strictness, optional int wordBreak);
+ method public int getStrategy();
+ method public int getStrictness();
+ method public int getWordBreak();
+ property public final int strategy;
+ property public final int strictness;
+ property public final int wordBreak;
+ field public static final androidx.compose.ui.text.style.LineBreak.Companion Companion;
+ }
+
+ public static final class LineBreak.Companion {
+ method public int getHeading();
+ method public int getParagraph();
+ method public int getSimple();
+ property public final int Heading;
+ property public final int Paragraph;
+ property public final int Simple;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineBreak.Strategy {
+ field public static final androidx.compose.ui.text.style.LineBreak.Strategy.Companion Companion;
+ }
+
+ public static final class LineBreak.Strategy.Companion {
+ method public int getBalanced();
+ method public int getHighQuality();
+ method public int getSimple();
+ property public final int Balanced;
+ property public final int HighQuality;
+ property public final int Simple;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineBreak.Strictness {
+ field public static final androidx.compose.ui.text.style.LineBreak.Strictness.Companion Companion;
+ }
+
+ public static final class LineBreak.Strictness.Companion {
+ method public int getDefault();
+ method public int getLoose();
+ method public int getNormal();
+ method public int getStrict();
+ property public final int Default;
+ property public final int Loose;
+ property public final int Normal;
+ property public final int Strict;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineBreak.WordBreak {
+ field public static final androidx.compose.ui.text.style.LineBreak.WordBreak.Companion Companion;
+ }
+
+ public static final class LineBreak.WordBreak.Companion {
+ method public int getDefault();
+ method public int getPhrase();
+ property public final int Default;
+ property public final int Phrase;
+ }
+
+ public final class LineHeightStyle {
+ ctor public LineHeightStyle(float alignment, int trim);
+ method public float getAlignment();
+ method public int getTrim();
+ property public final float alignment;
+ property public final int trim;
+ field public static final androidx.compose.ui.text.style.LineHeightStyle.Companion Companion;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineHeightStyle.Alignment {
+ field public static final androidx.compose.ui.text.style.LineHeightStyle.Alignment.Companion Companion;
+ }
+
+ public static final class LineHeightStyle.Alignment.Companion {
+ method public float getBottom();
+ method public float getCenter();
+ method public float getProportional();
+ method public float getTop();
+ property public final float Bottom;
+ property public final float Center;
+ property public final float Proportional;
+ property public final float Top;
+ }
+
+ public static final class LineHeightStyle.Companion {
+ method public androidx.compose.ui.text.style.LineHeightStyle getDefault();
+ property public final androidx.compose.ui.text.style.LineHeightStyle Default;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineHeightStyle.Trim {
+ field public static final androidx.compose.ui.text.style.LineHeightStyle.Trim.Companion Companion;
+ }
+
+ public static final class LineHeightStyle.Trim.Companion {
+ method public int getBoth();
+ method public int getFirstLineTop();
+ method public int getLastLineBottom();
+ method public int getNone();
+ property public final int Both;
+ property public final int FirstLineTop;
+ property public final int LastLineBottom;
+ property public final int None;
+ }
+
+ public enum ResolvedTextDirection {
+ method public static androidx.compose.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.text.style.ResolvedTextDirection[] values();
+ enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Ltr;
+ enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Rtl;
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextAlign {
+ field public static final androidx.compose.ui.text.style.TextAlign.Companion Companion;
+ }
+
+ public static final class TextAlign.Companion {
+ method public int getCenter();
+ method public int getEnd();
+ method public int getJustify();
+ method public int getLeft();
+ method public int getRight();
+ method public int getStart();
+ method public java.util.List<androidx.compose.ui.text.style.TextAlign> values();
+ property public final int Center;
+ property public final int End;
+ property public final int Justify;
+ property public final int Left;
+ property public final int Right;
+ property public final int Start;
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextDecoration {
+ method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
+ method public int getMask();
+ method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
+ property public final int mask;
+ field public static final androidx.compose.ui.text.style.TextDecoration.Companion Companion;
+ }
+
+ public static final class TextDecoration.Companion {
+ method public androidx.compose.ui.text.style.TextDecoration combine(java.util.List<androidx.compose.ui.text.style.TextDecoration> decorations);
+ method public androidx.compose.ui.text.style.TextDecoration getLineThrough();
+ method public androidx.compose.ui.text.style.TextDecoration getNone();
+ method public androidx.compose.ui.text.style.TextDecoration getUnderline();
+ property public final androidx.compose.ui.text.style.TextDecoration LineThrough;
+ property public final androidx.compose.ui.text.style.TextDecoration None;
+ property public final androidx.compose.ui.text.style.TextDecoration Underline;
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextDirection {
+ field public static final androidx.compose.ui.text.style.TextDirection.Companion Companion;
+ }
+
+ public static final class TextDirection.Companion {
+ method public int getContent();
+ method public int getContentOrLtr();
+ method public int getContentOrRtl();
+ method public int getLtr();
+ method public int getRtl();
+ property public final int Content;
+ property public final int ContentOrLtr;
+ property public final int ContentOrRtl;
+ property public final int Ltr;
+ property public final int Rtl;
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
+ ctor public TextGeometricTransform(optional float scaleX, optional float skewX);
+ method public androidx.compose.ui.text.style.TextGeometricTransform copy(optional float scaleX, optional float skewX);
+ method public float getScaleX();
+ method public float getSkewX();
+ property public final float scaleX;
+ property public final float skewX;
+ field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
+ }
+
+ public static final class TextGeometricTransform.Companion {
+ }
+
+ public final class TextGeometricTransformKt {
+ method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextIndent {
+ ctor public TextIndent(optional long firstLine, optional long restLine);
+ method public androidx.compose.ui.text.style.TextIndent copy(optional long firstLine, optional long restLine);
+ method public long getFirstLine();
+ method public long getRestLine();
+ property public final long firstLine;
+ property public final long restLine;
+ field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
+ }
+
+ public static final class TextIndent.Companion {
+ method public androidx.compose.ui.text.style.TextIndent getNone();
+ property public final androidx.compose.ui.text.style.TextIndent None;
+ }
+
+ public final class TextIndentKt {
+ method public static androidx.compose.ui.text.style.TextIndent lerp(androidx.compose.ui.text.style.TextIndent start, androidx.compose.ui.text.style.TextIndent stop, float fraction);
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextOverflow {
+ field public static final androidx.compose.ui.text.style.TextOverflow.Companion Companion;
+ }
+
+ public static final class TextOverflow.Companion {
+ method public int getClip();
+ method public int getEllipsis();
+ method public int getVisible();
+ property public final int Clip;
+ property public final int Ellipsis;
+ property public final int Visible;
+ }
+
+}
+
diff --git a/compose/ui/ui-text/api/current.ignore b/compose/ui/ui-text/api/current.ignore
deleted file mode 100644
index 8b45dbb..0000000
--- a/compose/ui/ui-text/api/current.ignore
+++ /dev/null
@@ -1,75 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.compose.ui.text.AnnotatedString.Builder#append(char):
- Method androidx.compose.ui.text.AnnotatedString.Builder.append has changed return type from void to androidx.compose.ui.text.AnnotatedString.Builder
-
-
-RemovedClass: androidx.compose.ui.text.ActualAtomicReferenceJvmKt:
- Removed class androidx.compose.ui.text.ActualAtomicReferenceJvmKt
-RemovedClass: androidx.compose.ui.text.AndroidParagraph_androidKt:
- Removed class androidx.compose.ui.text.AndroidParagraph_androidKt
-RemovedClass: androidx.compose.ui.text.JvmAnnotatedString_jvmKt:
- Removed class androidx.compose.ui.text.JvmAnnotatedString_jvmKt
-RemovedClass: androidx.compose.ui.text.JvmCharHelpers_androidKt:
- Removed class androidx.compose.ui.text.JvmCharHelpers_androidKt
-RemovedClass: androidx.compose.ui.text.MultiParagraphIntrinsicsKt:
- Removed class androidx.compose.ui.text.MultiParagraphIntrinsicsKt
-RemovedClass: androidx.compose.ui.text.MultiParagraphKt:
- Removed class androidx.compose.ui.text.MultiParagraphKt
-RemovedClass: androidx.compose.ui.text.SaversKt:
- Removed class androidx.compose.ui.text.SaversKt
-RemovedClass: androidx.compose.ui.text.TempListUtilsKt:
- Removed class androidx.compose.ui.text.TempListUtilsKt
-RemovedClass: androidx.compose.ui.text.TextMeasurerKt:
- Removed class androidx.compose.ui.text.TextMeasurerKt
-RemovedClass: androidx.compose.ui.text.TextPainterKt:
- Removed class androidx.compose.ui.text.TextPainterKt
-RemovedClass: androidx.compose.ui.text.font.AndroidFontLoader_androidKt:
- Removed class androidx.compose.ui.text.font.AndroidFontLoader_androidKt
-RemovedClass: androidx.compose.ui.text.font.AndroidFontResolveInterceptor_androidKt:
- Removed class androidx.compose.ui.text.font.AndroidFontResolveInterceptor_androidKt
-RemovedClass: androidx.compose.ui.text.font.AndroidFontUtils_androidKt:
- Removed class androidx.compose.ui.text.font.AndroidFontUtils_androidKt
-RemovedClass: androidx.compose.ui.text.font.FontFamilyResolverKt:
- Removed class androidx.compose.ui.text.font.FontFamilyResolverKt
-RemovedClass: androidx.compose.ui.text.font.FontListFontFamilyTypefaceAdapterKt:
- Removed class androidx.compose.ui.text.font.FontListFontFamilyTypefaceAdapterKt
-RemovedClass: androidx.compose.ui.text.font.FontSynthesis_androidKt:
- Removed class androidx.compose.ui.text.font.FontSynthesis_androidKt
-RemovedClass: androidx.compose.ui.text.font.PlatformTypefacesKt:
- Removed class androidx.compose.ui.text.font.PlatformTypefacesKt
-RemovedClass: androidx.compose.ui.text.input.EditCommandKt:
- Removed class androidx.compose.ui.text.input.EditCommandKt
-RemovedClass: androidx.compose.ui.text.input.EditingBufferKt:
- Removed class androidx.compose.ui.text.input.EditingBufferKt
-RemovedClass: androidx.compose.ui.text.input.GapBufferKt:
- Removed class androidx.compose.ui.text.input.GapBufferKt
-RemovedClass: androidx.compose.ui.text.input.GapBuffer_jvmKt:
- Removed class androidx.compose.ui.text.input.GapBuffer_jvmKt
-RemovedClass: androidx.compose.ui.text.intl.AndroidPlatformLocale_androidKt:
- Removed class androidx.compose.ui.text.intl.AndroidPlatformLocale_androidKt
-RemovedClass: androidx.compose.ui.text.intl.PlatformLocaleKt:
- Removed class androidx.compose.ui.text.intl.PlatformLocaleKt
-RemovedClass: androidx.compose.ui.text.platform.extensions.LocaleExtensions_androidKt:
- Removed class androidx.compose.ui.text.platform.extensions.LocaleExtensions_androidKt
-RemovedClass: androidx.compose.ui.text.platform.extensions.PlaceholderExtensions_androidKt:
- Removed class androidx.compose.ui.text.platform.extensions.PlaceholderExtensions_androidKt
-RemovedClass: androidx.compose.ui.text.platform.extensions.SpannableExtensions_androidKt:
- Removed class androidx.compose.ui.text.platform.extensions.SpannableExtensions_androidKt
-RemovedClass: androidx.compose.ui.text.platform.extensions.TextPaintExtensions_androidKt:
- Removed class androidx.compose.ui.text.platform.extensions.TextPaintExtensions_androidKt
-RemovedClass: androidx.compose.ui.text.platform.extensions.UrlAnnotationExtensions_androidKt:
- Removed class androidx.compose.ui.text.platform.extensions.UrlAnnotationExtensions_androidKt
-RemovedClass: androidx.compose.ui.text.style.TextDrawStyleKt:
- Removed class androidx.compose.ui.text.style.TextDrawStyleKt
-
-
-RemovedPackage: androidx.compose.ui.text.android:
- Removed package androidx.compose.ui.text.android
-RemovedPackage: androidx.compose.ui.text.android.style:
- Removed package androidx.compose.ui.text.android.style
-RemovedPackage: androidx.compose.ui.text.caches:
- Removed package androidx.compose.ui.text.caches
-RemovedPackage: androidx.compose.ui.text.internal:
- Removed package androidx.compose.ui.text.internal
-RemovedPackage: androidx.compose.ui.text.platform:
- Removed package androidx.compose.ui.text.platform
diff --git a/compose/ui/ui-text/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-text/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..9e33150
--- /dev/null
+++ b/compose/ui/ui-text/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,1507 @@
+// Signature format: 4.0
+package androidx.compose.ui.text {
+
+ public final class AndroidTextStyle_androidKt {
+ method public static androidx.compose.ui.text.PlatformParagraphStyle lerp(androidx.compose.ui.text.PlatformParagraphStyle start, androidx.compose.ui.text.PlatformParagraphStyle stop, float fraction);
+ method public static androidx.compose.ui.text.PlatformSpanStyle lerp(androidx.compose.ui.text.PlatformSpanStyle start, androidx.compose.ui.text.PlatformSpanStyle stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class AnnotatedString implements java.lang.CharSequence {
+ ctor public AnnotatedString(String text, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
+ method public operator char get(int index);
+ method public int getLength();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+ method public String getText();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.TtsAnnotation>> getTtsAnnotations(int start, int end);
+ method @androidx.compose.ui.text.ExperimentalTextApi public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.UrlAnnotation>> getUrlAnnotations(int start, int end);
+ method public boolean hasStringAnnotations(String tag, int start, int end);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
+ method public androidx.compose.ui.text.AnnotatedString subSequence(int startIndex, int endIndex);
+ method public androidx.compose.ui.text.AnnotatedString subSequence(long range);
+ property public int length;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles;
+ property public final String text;
+ }
+
+ public static final class AnnotatedString.Builder implements java.lang.Appendable {
+ ctor public AnnotatedString.Builder(optional int capacity);
+ ctor public AnnotatedString.Builder(String text);
+ ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
+ method public void addStringAnnotation(String tag, String annotation, int start, int end);
+ method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
+ method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
+ method @androidx.compose.ui.text.ExperimentalTextApi public void addTtsAnnotation(androidx.compose.ui.text.TtsAnnotation ttsAnnotation, int start, int end);
+ method @androidx.compose.ui.text.ExperimentalTextApi public void addUrlAnnotation(androidx.compose.ui.text.UrlAnnotation urlAnnotation, int start, int end);
+ method public void append(String text);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text, int start, int end);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(char char);
+ method public void append(androidx.compose.ui.text.AnnotatedString text);
+ method public void append(androidx.compose.ui.text.AnnotatedString text, int start, int end);
+ method @Deprecated public void deprecated_append_returning_void(char char);
+ method public int getLength();
+ method public void pop();
+ method public void pop(int index);
+ method public int pushStringAnnotation(String tag, String annotation);
+ method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
+ method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+ method public int pushTtsAnnotation(androidx.compose.ui.text.TtsAnnotation ttsAnnotation);
+ method @androidx.compose.ui.text.ExperimentalTextApi public int pushUrlAnnotation(androidx.compose.ui.text.UrlAnnotation urlAnnotation);
+ method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
+ property public final int length;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
+ ctor public AnnotatedString.Range(T? item, int start, int end, String tag);
+ ctor public AnnotatedString.Range(T? item, int start, int end);
+ method public T! component1();
+ method public int component2();
+ method public int component3();
+ method public String component4();
+ method public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+ method public int getEnd();
+ method public T! getItem();
+ method public int getStart();
+ method public String getTag();
+ property public final int end;
+ property public final T! item;
+ property public final int start;
+ property public final String tag;
+ }
+
+ public final class AnnotatedStringKt {
+ method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, optional androidx.compose.ui.text.ParagraphStyle? paragraphStyle);
+ method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+ method public static inline androidx.compose.ui.text.AnnotatedString buildAnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+ method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method @androidx.compose.ui.text.ExperimentalTextApi public static inline <R> R withAnnotation(androidx.compose.ui.text.AnnotatedString.Builder, String tag, String annotation, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ method @androidx.compose.ui.text.ExperimentalTextApi public static inline <R> R withAnnotation(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.TtsAnnotation ttsAnnotation, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ method @androidx.compose.ui.text.ExperimentalTextApi public static inline <R> R withAnnotation(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.UrlAnnotation urlAnnotation, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ }
+
+ @kotlin.jvm.JvmInline public final value class EmojiSupportMatch {
+ field public static final androidx.compose.ui.text.EmojiSupportMatch.Companion Companion;
+ }
+
+ public static final class EmojiSupportMatch.Companion {
+ method public int getDefault();
+ method public int getNone();
+ property public final int Default;
+ property public final int None;
+ }
+
+ @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalTextApi {
+ }
+
+ @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 InternalTextApi {
+ }
+
+ public final class MultiParagraph {
+ ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+ method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+ method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public androidx.compose.ui.text.MultiParagraphIntrinsics getIntrinsics();
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineEnd(int lineIndex, optional boolean visibleEnd);
+ method public int getLineForOffset(int offset);
+ method public int getLineForVerticalPosition(float vertical);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public int getLineStart(int lineIndex);
+ method public float getLineTop(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public int getMaxLines();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(long position);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+ method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
+ method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
+ method public float getWidth();
+ method public long getWordBoundary(int offset);
+ method public boolean isLineEllipsized(int lineIndex);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration);
+ method @androidx.compose.ui.text.ExperimentalTextApi public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
+ method @androidx.compose.ui.text.ExperimentalTextApi public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
+ property public final boolean didExceedMaxLines;
+ property public final float firstBaseline;
+ property public final float height;
+ property public final androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics;
+ property public final float lastBaseline;
+ property public final int lineCount;
+ property public final float maxIntrinsicWidth;
+ property public final int maxLines;
+ property public final float minIntrinsicWidth;
+ property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
+ property public final float width;
+ }
+
+ public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
+ ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
+ ctor @Deprecated public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public boolean hasStaleResolvedFonts;
+ property public float maxIntrinsicWidth;
+ property public float minIntrinsicWidth;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders;
+ }
+
+ public sealed interface Paragraph {
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+ method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+ method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineEnd(int lineIndex, boolean visibleEnd);
+ method public int getLineForOffset(int offset);
+ method public int getLineForVerticalPosition(float vertical);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public int getLineStart(int lineIndex);
+ method public float getLineTop(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(long position);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+ method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
+ method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
+ method public float getWidth();
+ method public long getWordBoundary(int offset);
+ method public boolean isLineEllipsized(int lineIndex);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, long color, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration);
+ method @androidx.compose.ui.text.ExperimentalTextApi public void paint(androidx.compose.ui.graphics.Canvas canvas, long color, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, int blendMode);
+ method @androidx.compose.ui.text.ExperimentalTextApi public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, int blendMode);
+ property public abstract boolean didExceedMaxLines;
+ property public abstract float firstBaseline;
+ property public abstract float height;
+ property public abstract float lastBaseline;
+ property public abstract int lineCount;
+ property public abstract float maxIntrinsicWidth;
+ property public abstract float minIntrinsicWidth;
+ property public abstract java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
+ property public abstract float width;
+ }
+
+ public interface ParagraphIntrinsics {
+ method public default boolean getHasStaleResolvedFonts();
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ property public default boolean hasStaleResolvedFonts;
+ property public abstract float maxIntrinsicWidth;
+ property public abstract float minIntrinsicWidth;
+ }
+
+ public final class ParagraphIntrinsicsKt {
+ method @Deprecated public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
+ }
+
+ public final class ParagraphKt {
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, optional int maxLines, optional boolean ellipsis, float width);
+ method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
+ }
+
+ @androidx.compose.runtime.Immutable public final class ParagraphStyle {
+ ctor @androidx.compose.ui.text.ExperimentalTextApi public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ ctor public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method public androidx.compose.ui.text.style.Hyphens? getHyphens();
+ method public androidx.compose.ui.text.style.LineBreak? getLineBreak();
+ method public long getLineHeight();
+ method public androidx.compose.ui.text.style.LineHeightStyle? getLineHeightStyle();
+ method public androidx.compose.ui.text.PlatformParagraphStyle? getPlatformStyle();
+ method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+ method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+ method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.style.TextMotion? getTextMotion();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle merge(optional androidx.compose.ui.text.ParagraphStyle? other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+ property public final androidx.compose.ui.text.style.Hyphens? hyphens;
+ property public final androidx.compose.ui.text.style.LineBreak? lineBreak;
+ property public final long lineHeight;
+ property public final androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle;
+ property public final androidx.compose.ui.text.PlatformParagraphStyle? platformStyle;
+ property public final androidx.compose.ui.text.style.TextAlign? textAlign;
+ property public final androidx.compose.ui.text.style.TextDirection? textDirection;
+ property public final androidx.compose.ui.text.style.TextIndent? textIndent;
+ property @androidx.compose.ui.text.ExperimentalTextApi public final androidx.compose.ui.text.style.TextMotion? textMotion;
+ }
+
+ public final class ParagraphStyleKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Placeholder {
+ ctor public Placeholder(long width, long height, int placeholderVerticalAlign);
+ method public androidx.compose.ui.text.Placeholder copy(optional long width, optional long height, optional int placeholderVerticalAlign);
+ method public long getHeight();
+ method public int getPlaceholderVerticalAlign();
+ method public long getWidth();
+ property public final long height;
+ property public final int placeholderVerticalAlign;
+ property public final long width;
+ }
+
+ @kotlin.jvm.JvmInline public final value class PlaceholderVerticalAlign {
+ field public static final androidx.compose.ui.text.PlaceholderVerticalAlign.Companion Companion;
+ }
+
+ public static final class PlaceholderVerticalAlign.Companion {
+ method public int getAboveBaseline();
+ method public int getBottom();
+ method public int getCenter();
+ method public int getTextBottom();
+ method public int getTextCenter();
+ method public int getTextTop();
+ method public int getTop();
+ property public final int AboveBaseline;
+ property public final int Bottom;
+ property public final int Center;
+ property public final int TextBottom;
+ property public final int TextCenter;
+ property public final int TextTop;
+ property public final int Top;
+ }
+
+ public final class PlatformParagraphStyle {
+ ctor @Deprecated public PlatformParagraphStyle(optional boolean includeFontPadding);
+ ctor @Deprecated public PlatformParagraphStyle(optional int emojiSupportMatch, optional boolean includeFontPadding);
+ ctor public PlatformParagraphStyle(optional int emojiSupportMatch);
+ method public int getEmojiSupportMatch();
+ method @Deprecated public boolean getIncludeFontPadding();
+ method public androidx.compose.ui.text.PlatformParagraphStyle merge(androidx.compose.ui.text.PlatformParagraphStyle? other);
+ property public final int emojiSupportMatch;
+ property @Deprecated public final boolean includeFontPadding;
+ field public static final androidx.compose.ui.text.PlatformParagraphStyle.Companion Companion;
+ }
+
+ public static final class PlatformParagraphStyle.Companion {
+ method public androidx.compose.ui.text.PlatformParagraphStyle getDefault();
+ property public final androidx.compose.ui.text.PlatformParagraphStyle Default;
+ }
+
+ public final class PlatformSpanStyle {
+ ctor public PlatformSpanStyle();
+ method public androidx.compose.ui.text.PlatformSpanStyle merge(androidx.compose.ui.text.PlatformSpanStyle? other);
+ field public static final androidx.compose.ui.text.PlatformSpanStyle.Companion Companion;
+ }
+
+ public static final class PlatformSpanStyle.Companion {
+ method public androidx.compose.ui.text.PlatformSpanStyle getDefault();
+ property public final androidx.compose.ui.text.PlatformSpanStyle Default;
+ }
+
+ public final class PlatformTextStyle {
+ ctor public PlatformTextStyle(androidx.compose.ui.text.PlatformSpanStyle? spanStyle, androidx.compose.ui.text.PlatformParagraphStyle? paragraphStyle);
+ ctor @Deprecated public PlatformTextStyle(optional boolean includeFontPadding);
+ ctor public PlatformTextStyle(int emojiSupportMatch);
+ method public androidx.compose.ui.text.PlatformParagraphStyle? getParagraphStyle();
+ method public androidx.compose.ui.text.PlatformSpanStyle? getSpanStyle();
+ property public final androidx.compose.ui.text.PlatformParagraphStyle? paragraphStyle;
+ property public final androidx.compose.ui.text.PlatformSpanStyle? spanStyle;
+ }
+
+ @androidx.compose.runtime.Immutable public final class SpanStyle {
+ ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
+ ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
+ ctor @androidx.compose.ui.text.ExperimentalTextApi public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
+ ctor @androidx.compose.ui.text.ExperimentalTextApi public SpanStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
+ method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
+ method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.SpanStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
+ method @androidx.compose.ui.text.ExperimentalTextApi public float getAlpha();
+ method public long getBackground();
+ method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.graphics.Brush? getBrush();
+ method public long getColor();
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.graphics.drawscope.DrawStyle? getDrawStyle();
+ method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+ method public String? getFontFeatureSettings();
+ method public long getFontSize();
+ method public androidx.compose.ui.text.font.FontStyle? getFontStyle();
+ method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+ method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
+ method public long getLetterSpacing();
+ method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
+ method public androidx.compose.ui.text.PlatformSpanStyle? getPlatformStyle();
+ method public androidx.compose.ui.graphics.Shadow? getShadow();
+ method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+ method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle merge(optional androidx.compose.ui.text.SpanStyle? other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
+ property @androidx.compose.ui.text.ExperimentalTextApi public final float alpha;
+ property public final long background;
+ property public final androidx.compose.ui.text.style.BaselineShift? baselineShift;
+ property @androidx.compose.ui.text.ExperimentalTextApi public final androidx.compose.ui.graphics.Brush? brush;
+ property public final long color;
+ property @androidx.compose.ui.text.ExperimentalTextApi public final androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle;
+ property public final androidx.compose.ui.text.font.FontFamily? fontFamily;
+ property public final String? fontFeatureSettings;
+ property public final long fontSize;
+ property public final androidx.compose.ui.text.font.FontStyle? fontStyle;
+ property public final androidx.compose.ui.text.font.FontSynthesis? fontSynthesis;
+ property public final androidx.compose.ui.text.font.FontWeight? fontWeight;
+ property public final long letterSpacing;
+ property public final androidx.compose.ui.text.intl.LocaleList? localeList;
+ property public final androidx.compose.ui.text.PlatformSpanStyle? platformStyle;
+ property public final androidx.compose.ui.graphics.Shadow? shadow;
+ property public final androidx.compose.ui.text.style.TextDecoration? textDecoration;
+ property public final androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform;
+ }
+
+ public final class SpanStyleKt {
+ method public static androidx.compose.ui.text.SpanStyle lerp(androidx.compose.ui.text.SpanStyle start, androidx.compose.ui.text.SpanStyle stop, float fraction);
+ }
+
+ public final class StringKt {
+ method public static String capitalize(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String capitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static String decapitalize(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String decapitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static String toLowerCase(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String toLowerCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static String toUpperCase(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String toUpperCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ }
+
+ public final class TextLayoutInput {
+ ctor @Deprecated public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, int overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, long constraints);
+ ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, int overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, long constraints);
+ method @Deprecated public androidx.compose.ui.text.TextLayoutInput copy(optional androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean softWrap, optional int overflow, optional androidx.compose.ui.unit.Density density, optional androidx.compose.ui.unit.LayoutDirection layoutDirection, optional androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, optional long constraints);
+ method public long getConstraints();
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.text.font.FontFamily.Resolver getFontFamilyResolver();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public int getMaxLines();
+ method public int getOverflow();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+ method @Deprecated public androidx.compose.ui.text.font.Font.ResourceLoader getResourceLoader();
+ method public boolean getSoftWrap();
+ method public androidx.compose.ui.text.TextStyle getStyle();
+ method public androidx.compose.ui.text.AnnotatedString getText();
+ property public final long constraints;
+ property public final androidx.compose.ui.unit.Density density;
+ property public final androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver;
+ property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public final int maxLines;
+ property public final int overflow;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders;
+ property @Deprecated public final androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader;
+ property public final boolean softWrap;
+ property public final androidx.compose.ui.text.TextStyle style;
+ property public final androidx.compose.ui.text.AnnotatedString text;
+ }
+
+ public final class TextLayoutResult {
+ ctor public TextLayoutResult(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, long size);
+ method public androidx.compose.ui.text.TextLayoutResult copy(optional androidx.compose.ui.text.TextLayoutInput layoutInput, optional long size);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+ method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+ method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidOverflowHeight();
+ method public boolean getDidOverflowWidth();
+ method public float getFirstBaseline();
+ method public boolean getHasVisualOverflow();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public float getLastBaseline();
+ method public androidx.compose.ui.text.TextLayoutInput getLayoutInput();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineEnd(int lineIndex, optional boolean visibleEnd);
+ method public int getLineForOffset(int offset);
+ method public int getLineForVerticalPosition(float vertical);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public int getLineStart(int lineIndex);
+ method public float getLineTop(int lineIndex);
+ method public androidx.compose.ui.text.MultiParagraph getMultiParagraph();
+ method public int getOffsetForPosition(long position);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+ method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
+ method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
+ method public long getSize();
+ method public long getWordBoundary(int offset);
+ method public boolean isLineEllipsized(int lineIndex);
+ property public final boolean didOverflowHeight;
+ property public final boolean didOverflowWidth;
+ property public final float firstBaseline;
+ property public final boolean hasVisualOverflow;
+ property public final float lastBaseline;
+ property public final androidx.compose.ui.text.TextLayoutInput layoutInput;
+ property public final int lineCount;
+ property public final androidx.compose.ui.text.MultiParagraph multiParagraph;
+ property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
+ property public final long size;
+ }
+
+ @androidx.compose.runtime.Immutable @androidx.compose.ui.text.ExperimentalTextApi public final class TextMeasurer {
+ ctor public TextMeasurer(androidx.compose.ui.text.font.FontFamily.Resolver fallbackFontFamilyResolver, androidx.compose.ui.unit.Density fallbackDensity, androidx.compose.ui.unit.LayoutDirection fallbackLayoutDirection, optional int cacheSize);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextLayoutResult measure(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional long constraints, optional androidx.compose.ui.unit.LayoutDirection layoutDirection, optional androidx.compose.ui.unit.Density density, optional androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional boolean skipCache);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextLayoutResult measure(String text, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional long constraints, optional androidx.compose.ui.unit.LayoutDirection layoutDirection, optional androidx.compose.ui.unit.Density density, optional androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional boolean skipCache);
+ }
+
+ public final class TextPainter {
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.text.TextLayoutResult textLayoutResult);
+ field public static final androidx.compose.ui.text.TextPainter INSTANCE;
+ }
+
+ public final class TextPainterKt {
+ method @androidx.compose.ui.text.ExperimentalTextApi public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextMeasurer textMeasurer, androidx.compose.ui.text.AnnotatedString text, optional long topLeft, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional long size, optional int blendMode);
+ method @androidx.compose.ui.text.ExperimentalTextApi public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextMeasurer textMeasurer, String text, optional long topLeft, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional long size, optional int blendMode);
+ method @androidx.compose.ui.text.ExperimentalTextApi public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, optional long color, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
+ method @androidx.compose.ui.text.ExperimentalTextApi public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextRange {
+ method public operator boolean contains(long other);
+ method public operator boolean contains(int offset);
+ method public boolean getCollapsed();
+ method public int getEnd();
+ method public int getLength();
+ method public int getMax();
+ method public int getMin();
+ method public boolean getReversed();
+ method public int getStart();
+ method public boolean intersects(long other);
+ property public final boolean collapsed;
+ property public final int end;
+ property public final int length;
+ property public final int max;
+ property public final int min;
+ property public final boolean reversed;
+ property public final int start;
+ field public static final androidx.compose.ui.text.TextRange.Companion Companion;
+ }
+
+ public static final class TextRange.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class TextRangeKt {
+ method public static long TextRange(int start, int end);
+ method public static long TextRange(int index);
+ method public static String substring(CharSequence, long range);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextStyle {
+ ctor public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ ctor @androidx.compose.ui.text.ExperimentalTextApi public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ ctor @androidx.compose.ui.text.ExperimentalTextApi public TextStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.TextStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method @androidx.compose.ui.text.ExperimentalTextApi public float getAlpha();
+ method public long getBackground();
+ method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.graphics.Brush? getBrush();
+ method public long getColor();
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.graphics.drawscope.DrawStyle? getDrawStyle();
+ method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+ method public String? getFontFeatureSettings();
+ method public long getFontSize();
+ method public androidx.compose.ui.text.font.FontStyle? getFontStyle();
+ method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+ method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
+ method public androidx.compose.ui.text.style.Hyphens? getHyphens();
+ method public long getLetterSpacing();
+ method public androidx.compose.ui.text.style.LineBreak? getLineBreak();
+ method public long getLineHeight();
+ method public androidx.compose.ui.text.style.LineHeightStyle? getLineHeightStyle();
+ method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
+ method public androidx.compose.ui.text.PlatformTextStyle? getPlatformStyle();
+ method public androidx.compose.ui.graphics.Shadow? getShadow();
+ method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+ method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+ method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+ method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+ method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.style.TextMotion? getTextMotion();
+ method public boolean hasSameLayoutAffectingAttributes(androidx.compose.ui.text.TextStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(optional androidx.compose.ui.text.TextStyle? other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+ property @androidx.compose.ui.text.ExperimentalTextApi public final float alpha;
+ property public final long background;
+ property public final androidx.compose.ui.text.style.BaselineShift? baselineShift;
+ property @androidx.compose.ui.text.ExperimentalTextApi public final androidx.compose.ui.graphics.Brush? brush;
+ property public final long color;
+ property @androidx.compose.ui.text.ExperimentalTextApi public final androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle;
+ property public final androidx.compose.ui.text.font.FontFamily? fontFamily;
+ property public final String? fontFeatureSettings;
+ property public final long fontSize;
+ property public final androidx.compose.ui.text.font.FontStyle? fontStyle;
+ property public final androidx.compose.ui.text.font.FontSynthesis? fontSynthesis;
+ property public final androidx.compose.ui.text.font.FontWeight? fontWeight;
+ property public final androidx.compose.ui.text.style.Hyphens? hyphens;
+ property public final long letterSpacing;
+ property public final androidx.compose.ui.text.style.LineBreak? lineBreak;
+ property public final long lineHeight;
+ property public final androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle;
+ property public final androidx.compose.ui.text.intl.LocaleList? localeList;
+ property public final androidx.compose.ui.text.PlatformTextStyle? platformStyle;
+ property public final androidx.compose.ui.graphics.Shadow? shadow;
+ property public final androidx.compose.ui.text.style.TextAlign? textAlign;
+ property public final androidx.compose.ui.text.style.TextDecoration? textDecoration;
+ property public final androidx.compose.ui.text.style.TextDirection? textDirection;
+ property public final androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform;
+ property public final androidx.compose.ui.text.style.TextIndent? textIndent;
+ property @androidx.compose.ui.text.ExperimentalTextApi public final androidx.compose.ui.text.style.TextMotion? textMotion;
+ field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
+ }
+
+ public static final class TextStyle.Companion {
+ method public androidx.compose.ui.text.TextStyle getDefault();
+ property public final androidx.compose.ui.text.TextStyle Default;
+ }
+
+ public final class TextStyleKt {
+ method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
+ method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.compose.ui.unit.LayoutDirection direction);
+ }
+
+ public abstract sealed class TtsAnnotation {
+ }
+
+ @androidx.compose.ui.text.ExperimentalTextApi public final class UrlAnnotation {
+ ctor public UrlAnnotation(String url);
+ method public String getUrl();
+ property public final String url;
+ }
+
+ public final class VerbatimTtsAnnotation extends androidx.compose.ui.text.TtsAnnotation {
+ ctor public VerbatimTtsAnnotation(String verbatim);
+ method public String getVerbatim();
+ property public final String verbatim;
+ }
+
+}
+
+package androidx.compose.ui.text.android {
+
+ @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 {
+ }
+
+ public final class LayoutCompatKt {
+ }
+
+}
+
+package androidx.compose.ui.text.font {
+
+ public abstract class AndroidFont implements androidx.compose.ui.text.font.Font {
+ ctor public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader, androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ ctor @Deprecated public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader);
+ method public final int getLoadingStrategy();
+ method public final androidx.compose.ui.text.font.AndroidFont.TypefaceLoader getTypefaceLoader();
+ method public final androidx.compose.ui.text.font.FontVariation.Settings getVariationSettings();
+ property public final int loadingStrategy;
+ property public final androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader;
+ property public final androidx.compose.ui.text.font.FontVariation.Settings variationSettings;
+ }
+
+ public static interface AndroidFont.TypefaceLoader {
+ method public suspend Object? awaitLoad(android.content.Context context, androidx.compose.ui.text.font.AndroidFont font, kotlin.coroutines.Continuation<? super android.graphics.Typeface>);
+ method public android.graphics.Typeface? loadBlocking(android.content.Context context, androidx.compose.ui.text.font.AndroidFont font);
+ }
+
+ public final class AndroidFontKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(String path, android.content.res.AssetManager assetManager, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(java.io.File file, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @RequiresApi(26) @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(android.os.ParcelFileDescriptor fileDescriptor, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ }
+
+ public final class AndroidTypeface_androidKt {
+ method public static androidx.compose.ui.text.font.FontFamily FontFamily(android.graphics.Typeface typeface);
+ method @Deprecated public static androidx.compose.ui.text.font.Typeface Typeface(android.content.Context context, androidx.compose.ui.text.font.FontFamily fontFamily, optional java.util.List<kotlin.Pair<androidx.compose.ui.text.font.FontWeight,androidx.compose.ui.text.font.FontStyle>>? styles);
+ method public static androidx.compose.ui.text.font.Typeface Typeface(android.graphics.Typeface typeface);
+ }
+
+ public final class DelegatingFontLoaderForDeprecatedUsage_androidKt {
+ method @Deprecated public static androidx.compose.ui.text.font.FontFamily.Resolver createFontFamilyResolver(androidx.compose.ui.text.font.Font.ResourceLoader fontResourceLoader, android.content.Context context);
+ }
+
+ @kotlin.jvm.JvmInline public final value class DeviceFontFamilyName {
+ ctor public DeviceFontFamilyName(String name);
+ method public String getName();
+ property public final String name;
+ }
+
+ public final class DeviceFontFamilyNameFontKt {
+ method public static androidx.compose.ui.text.font.Font Font(String familyName, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ }
+
+ public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+ }
+
+ @androidx.compose.runtime.Immutable public interface Font {
+ method public default int getLoadingStrategy();
+ method public int getStyle();
+ method public androidx.compose.ui.text.font.FontWeight getWeight();
+ property public default int loadingStrategy;
+ property public abstract int style;
+ property public abstract androidx.compose.ui.text.font.FontWeight weight;
+ field public static final androidx.compose.ui.text.font.Font.Companion Companion;
+ field public static final long MaximumAsyncTimeoutMillis = 15000L; // 0x3a98L
+ }
+
+ public static final class Font.Companion {
+ field public static final long MaximumAsyncTimeoutMillis = 15000L; // 0x3a98L
+ }
+
+ @Deprecated public static interface Font.ResourceLoader {
+ method @Deprecated public Object load(androidx.compose.ui.text.font.Font font);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class FontFamily {
+ method @Deprecated public final boolean getCanLoadSynchronously();
+ property @Deprecated public final boolean canLoadSynchronously;
+ field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
+ }
+
+ public static final class FontFamily.Companion {
+ method public androidx.compose.ui.text.font.GenericFontFamily getCursive();
+ method public androidx.compose.ui.text.font.SystemFontFamily getDefault();
+ method public androidx.compose.ui.text.font.GenericFontFamily getMonospace();
+ method public androidx.compose.ui.text.font.GenericFontFamily getSansSerif();
+ method public androidx.compose.ui.text.font.GenericFontFamily getSerif();
+ property public final androidx.compose.ui.text.font.GenericFontFamily Cursive;
+ property public final androidx.compose.ui.text.font.SystemFontFamily Default;
+ property public final androidx.compose.ui.text.font.GenericFontFamily Monospace;
+ property public final androidx.compose.ui.text.font.GenericFontFamily SansSerif;
+ property public final androidx.compose.ui.text.font.GenericFontFamily Serif;
+ }
+
+ public static sealed interface FontFamily.Resolver {
+ method public suspend Object? preload(androidx.compose.ui.text.font.FontFamily fontFamily, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.runtime.State<java.lang.Object> resolve(optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight fontWeight, optional int fontStyle, optional int fontSynthesis);
+ }
+
+ public final class FontFamilyKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Font... fonts);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Typeface typeface);
+ }
+
+ 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 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);
+ }
+
+ public final class FontKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional int loadingStrategy);
+ method @androidx.compose.ui.text.ExperimentalTextApi public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional int loadingStrategy, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily toFontFamily(androidx.compose.ui.text.font.Font);
+ }
+
+ @androidx.compose.runtime.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+ method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
+ property public final java.util.List<androidx.compose.ui.text.font.Font> fonts;
+ }
+
+ @kotlin.jvm.JvmInline public final value class FontLoadingStrategy {
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.text.font.FontLoadingStrategy.Companion Companion;
+ }
+
+ public static final class FontLoadingStrategy.Companion {
+ method public int getAsync();
+ method public int getBlocking();
+ method public int getOptionalLocal();
+ property public final int Async;
+ property public final int Blocking;
+ property public final int OptionalLocal;
+ }
+
+ @kotlin.jvm.JvmInline public final value class FontStyle {
+ ctor public FontStyle(int value);
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.text.font.FontStyle.Companion Companion;
+ }
+
+ public static final class FontStyle.Companion {
+ method public int getItalic();
+ method public int getNormal();
+ method public java.util.List<androidx.compose.ui.text.font.FontStyle> values();
+ property public final int Italic;
+ property public final int Normal;
+ }
+
+ @kotlin.jvm.JvmInline public final value class FontSynthesis {
+ field public static final androidx.compose.ui.text.font.FontSynthesis.Companion Companion;
+ }
+
+ public static final class FontSynthesis.Companion {
+ method public int getAll();
+ method public int getNone();
+ method public int getStyle();
+ method public int getWeight();
+ property public final int All;
+ property public final int None;
+ property public final int Style;
+ property public final int Weight;
+ }
+
+ public final class FontVariation {
+ method public androidx.compose.ui.text.font.FontVariation.Setting Setting(String name, float value);
+ method public androidx.compose.ui.text.font.FontVariation.Settings Settings(androidx.compose.ui.text.font.FontWeight weight, int style, androidx.compose.ui.text.font.FontVariation.Setting... settings);
+ method public androidx.compose.ui.text.font.FontVariation.Setting grade(int value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting italic(float value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting opticalSizing(long textSize);
+ method public androidx.compose.ui.text.font.FontVariation.Setting slant(float value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting weight(int value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting width(float value);
+ field public static final androidx.compose.ui.text.font.FontVariation INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable public static sealed interface FontVariation.Setting {
+ method public String getAxisName();
+ method public boolean getNeedsDensity();
+ method public float toVariationValue(androidx.compose.ui.unit.Density? density);
+ property public abstract String axisName;
+ property public abstract boolean needsDensity;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class FontVariation.Settings {
+ ctor public FontVariation.Settings(androidx.compose.ui.text.font.FontVariation.Setting... settings);
+ method public java.util.List<androidx.compose.ui.text.font.FontVariation.Setting> getSettings();
+ property public final java.util.List<androidx.compose.ui.text.font.FontVariation.Setting> settings;
+ }
+
+ @androidx.compose.runtime.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
+ ctor public FontWeight(int weight);
+ method public operator int compareTo(androidx.compose.ui.text.font.FontWeight other);
+ method public int getWeight();
+ property public final int weight;
+ field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
+ }
+
+ public static final class FontWeight.Companion {
+ method public androidx.compose.ui.text.font.FontWeight getBlack();
+ method public androidx.compose.ui.text.font.FontWeight getBold();
+ method public androidx.compose.ui.text.font.FontWeight getExtraBold();
+ method public androidx.compose.ui.text.font.FontWeight getExtraLight();
+ method public androidx.compose.ui.text.font.FontWeight getLight();
+ method public androidx.compose.ui.text.font.FontWeight getMedium();
+ method public androidx.compose.ui.text.font.FontWeight getNormal();
+ method public androidx.compose.ui.text.font.FontWeight getSemiBold();
+ method public androidx.compose.ui.text.font.FontWeight getThin();
+ method public androidx.compose.ui.text.font.FontWeight getW100();
+ method public androidx.compose.ui.text.font.FontWeight getW200();
+ method public androidx.compose.ui.text.font.FontWeight getW300();
+ method public androidx.compose.ui.text.font.FontWeight getW400();
+ method public androidx.compose.ui.text.font.FontWeight getW500();
+ method public androidx.compose.ui.text.font.FontWeight getW600();
+ method public androidx.compose.ui.text.font.FontWeight getW700();
+ method public androidx.compose.ui.text.font.FontWeight getW800();
+ method public androidx.compose.ui.text.font.FontWeight getW900();
+ property public final androidx.compose.ui.text.font.FontWeight Black;
+ property public final androidx.compose.ui.text.font.FontWeight Bold;
+ property public final androidx.compose.ui.text.font.FontWeight ExtraBold;
+ property public final androidx.compose.ui.text.font.FontWeight ExtraLight;
+ property public final androidx.compose.ui.text.font.FontWeight Light;
+ property public final androidx.compose.ui.text.font.FontWeight Medium;
+ property public final androidx.compose.ui.text.font.FontWeight Normal;
+ property public final androidx.compose.ui.text.font.FontWeight SemiBold;
+ property public final androidx.compose.ui.text.font.FontWeight Thin;
+ property public final androidx.compose.ui.text.font.FontWeight W100;
+ property public final androidx.compose.ui.text.font.FontWeight W200;
+ property public final androidx.compose.ui.text.font.FontWeight W300;
+ property public final androidx.compose.ui.text.font.FontWeight W400;
+ property public final androidx.compose.ui.text.font.FontWeight W500;
+ property public final androidx.compose.ui.text.font.FontWeight W600;
+ property public final androidx.compose.ui.text.font.FontWeight W700;
+ property public final androidx.compose.ui.text.font.FontWeight W800;
+ property public final androidx.compose.ui.text.font.FontWeight W900;
+ }
+
+ public final class FontWeightKt {
+ method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
+ method public String getName();
+ property public final String name;
+ }
+
+ public final class LoadedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+ method public androidx.compose.ui.text.font.Typeface getTypeface();
+ property public final androidx.compose.ui.text.font.Typeface typeface;
+ }
+
+ public final class ResourceFont implements androidx.compose.ui.text.font.Font {
+ method public androidx.compose.ui.text.font.ResourceFont copy(optional int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.font.ResourceFont copy(optional int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional int loadingStrategy, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method public int getResId();
+ method public int getStyle();
+ method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.font.FontVariation.Settings getVariationSettings();
+ method public androidx.compose.ui.text.font.FontWeight getWeight();
+ property @androidx.compose.ui.text.ExperimentalTextApi public int loadingStrategy;
+ property public final int resId;
+ property public int style;
+ property @androidx.compose.ui.text.ExperimentalTextApi public final androidx.compose.ui.text.font.FontVariation.Settings variationSettings;
+ property public androidx.compose.ui.text.font.FontWeight weight;
+ }
+
+ public abstract sealed class SystemFontFamily extends androidx.compose.ui.text.font.FontFamily {
+ }
+
+ public interface Typeface {
+ method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+ property public abstract androidx.compose.ui.text.font.FontFamily? fontFamily;
+ }
+
+}
+
+package androidx.compose.ui.text.input {
+
+ public final class BackspaceCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public BackspaceCommand();
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ public final class CommitTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public CommitTextCommand(androidx.compose.ui.text.AnnotatedString annotatedString, int newCursorPosition);
+ ctor public CommitTextCommand(String text, int newCursorPosition);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public int getNewCursorPosition();
+ method public String getText();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public final int newCursorPosition;
+ property public final String text;
+ }
+
+ public final class DeleteAllCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public DeleteAllCommand();
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ public final class DeleteSurroundingTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public DeleteSurroundingTextCommand(int lengthBeforeCursor, int lengthAfterCursor);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getLengthAfterCursor();
+ method public int getLengthBeforeCursor();
+ property public final int lengthAfterCursor;
+ property public final int lengthBeforeCursor;
+ }
+
+ public final class DeleteSurroundingTextInCodePointsCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public DeleteSurroundingTextInCodePointsCommand(int lengthBeforeCursor, int lengthAfterCursor);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getLengthAfterCursor();
+ method public int getLengthBeforeCursor();
+ property public final int lengthAfterCursor;
+ property public final int lengthBeforeCursor;
+ }
+
+ public interface EditCommand {
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ public final class EditProcessor {
+ ctor public EditProcessor();
+ method public androidx.compose.ui.text.input.TextFieldValue apply(java.util.List<? extends androidx.compose.ui.text.input.EditCommand> editCommands);
+ method public void reset(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.TextInputSession? textInputSession);
+ method public androidx.compose.ui.text.input.TextFieldValue toTextFieldValue();
+ }
+
+ public final class EditingBuffer {
+ ctor public EditingBuffer(androidx.compose.ui.text.AnnotatedString text, long selection);
+ }
+
+ public final class FinishComposingTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public FinishComposingTextCommand();
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ @kotlin.jvm.JvmInline public final value class ImeAction {
+ field public static final androidx.compose.ui.text.input.ImeAction.Companion Companion;
+ }
+
+ public static final class ImeAction.Companion {
+ method public int getDefault();
+ method public int getDone();
+ method public int getGo();
+ method public int getNext();
+ method public int getNone();
+ method public int getPrevious();
+ method public int getSearch();
+ method public int getSend();
+ property public final int Default;
+ property public final int Done;
+ property public final int Go;
+ property public final int Next;
+ property public final int None;
+ property public final int Previous;
+ property public final int Search;
+ property public final int Send;
+ }
+
+ @androidx.compose.runtime.Immutable public final class ImeOptions {
+ ctor public ImeOptions(optional boolean singleLine, optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public androidx.compose.ui.text.input.ImeOptions copy(optional boolean singleLine, optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public boolean getAutoCorrect();
+ method public int getCapitalization();
+ method public int getImeAction();
+ method public int getKeyboardType();
+ method public boolean getSingleLine();
+ property public final boolean autoCorrect;
+ property public final int capitalization;
+ property public final int imeAction;
+ property public final int keyboardType;
+ property public final boolean singleLine;
+ field public static final androidx.compose.ui.text.input.ImeOptions.Companion Companion;
+ }
+
+ public static final class ImeOptions.Companion {
+ method public androidx.compose.ui.text.input.ImeOptions getDefault();
+ property public final androidx.compose.ui.text.input.ImeOptions Default;
+ }
+
+ @Deprecated public interface InputEventCallback {
+ method @Deprecated public void onEditCommands(java.util.List<? extends androidx.compose.ui.text.input.EditCommand> editCommands);
+ method @Deprecated public void onImeAction(int imeAction);
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyboardCapitalization {
+ field public static final androidx.compose.ui.text.input.KeyboardCapitalization.Companion Companion;
+ }
+
+ public static final class KeyboardCapitalization.Companion {
+ method public int getCharacters();
+ method public int getNone();
+ method public int getSentences();
+ method public int getWords();
+ property public final int Characters;
+ property public final int None;
+ property public final int Sentences;
+ property public final int Words;
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyboardType {
+ field public static final androidx.compose.ui.text.input.KeyboardType.Companion Companion;
+ }
+
+ public static final class KeyboardType.Companion {
+ method public int getAscii();
+ method public int getDecimal();
+ method public int getEmail();
+ method public int getNumber();
+ method public int getNumberPassword();
+ method public int getPassword();
+ method public int getPhone();
+ method public int getText();
+ method public int getUri();
+ property public final int Ascii;
+ property public final int Decimal;
+ property public final int Email;
+ property public final int Number;
+ property public final int NumberPassword;
+ property public final int Password;
+ property public final int Phone;
+ property public final int Text;
+ property public final int Uri;
+ }
+
+ public final class MoveCursorCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public MoveCursorCommand(int amount);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getAmount();
+ property public final int amount;
+ }
+
+ public interface OffsetMapping {
+ method public int originalToTransformed(int offset);
+ method public int transformedToOriginal(int offset);
+ field public static final androidx.compose.ui.text.input.OffsetMapping.Companion Companion;
+ }
+
+ public static final class OffsetMapping.Companion {
+ method public androidx.compose.ui.text.input.OffsetMapping getIdentity();
+ property public final androidx.compose.ui.text.input.OffsetMapping Identity;
+ }
+
+ 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);
+ method public char getMask();
+ property public final char mask;
+ }
+
+ public interface PlatformTextInputService {
+ method public void hideSoftwareKeyboard();
+ method public default void notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
+ method public void showSoftwareKeyboard();
+ method public void startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.ImeOptions imeOptions, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditCommand>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+ method public void stopInput();
+ method public void updateState(androidx.compose.ui.text.input.TextFieldValue? oldValue, androidx.compose.ui.text.input.TextFieldValue newValue);
+ }
+
+ public final class SetComposingRegionCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public SetComposingRegionCommand(int start, int end);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getEnd();
+ method public int getStart();
+ property public final int end;
+ property public final int start;
+ }
+
+ public final class SetComposingTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public SetComposingTextCommand(androidx.compose.ui.text.AnnotatedString annotatedString, int newCursorPosition);
+ ctor public SetComposingTextCommand(String text, int newCursorPosition);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public int getNewCursorPosition();
+ method public String getText();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public final int newCursorPosition;
+ property public final String text;
+ }
+
+ public final class SetSelectionCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public SetSelectionCommand(int start, int end);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getEnd();
+ method public int getStart();
+ property public final int end;
+ property public final int start;
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextFieldValue {
+ ctor public TextFieldValue(androidx.compose.ui.text.AnnotatedString annotatedString, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ ctor public TextFieldValue(optional String text, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ method public androidx.compose.ui.text.input.TextFieldValue copy(optional androidx.compose.ui.text.AnnotatedString annotatedString, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ method public androidx.compose.ui.text.input.TextFieldValue copy(String text, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public androidx.compose.ui.text.TextRange? getComposition();
+ method public long getSelection();
+ method public String getText();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public final androidx.compose.ui.text.TextRange? composition;
+ property public final long selection;
+ property public final String text;
+ field public static final androidx.compose.ui.text.input.TextFieldValue.Companion Companion;
+ }
+
+ public static final class TextFieldValue.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> Saver;
+ }
+
+ public final class TextFieldValueKt {
+ method public static androidx.compose.ui.text.AnnotatedString getSelectedText(androidx.compose.ui.text.input.TextFieldValue);
+ method public static androidx.compose.ui.text.AnnotatedString getTextAfterSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+ method public static androidx.compose.ui.text.AnnotatedString getTextBeforeSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+ }
+
+ public class TextInputService {
+ ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+ method @Deprecated public final void hideSoftwareKeyboard();
+ method @Deprecated public final void showSoftwareKeyboard();
+ method public androidx.compose.ui.text.input.TextInputSession startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.ImeOptions imeOptions, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditCommand>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+ method public void stopInput(androidx.compose.ui.text.input.TextInputSession session);
+ }
+
+ public final class TextInputSession {
+ ctor public TextInputSession(androidx.compose.ui.text.input.TextInputService textInputService, androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+ method public void dispose();
+ method public boolean hideSoftwareKeyboard();
+ method public boolean isOpen();
+ method public boolean notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
+ method public boolean showSoftwareKeyboard();
+ method public boolean updateState(androidx.compose.ui.text.input.TextFieldValue? oldValue, androidx.compose.ui.text.input.TextFieldValue newValue);
+ property public final boolean isOpen;
+ }
+
+ public final class TransformedText {
+ ctor public TransformedText(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.input.OffsetMapping offsetMapping);
+ method public androidx.compose.ui.text.input.OffsetMapping getOffsetMapping();
+ method public androidx.compose.ui.text.AnnotatedString getText();
+ property public final androidx.compose.ui.text.input.OffsetMapping offsetMapping;
+ property public final androidx.compose.ui.text.AnnotatedString text;
+ }
+
+ @androidx.compose.runtime.Immutable public fun interface VisualTransformation {
+ method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+ field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
+ }
+
+ public static final class VisualTransformation.Companion {
+ method public androidx.compose.ui.text.input.VisualTransformation getNone();
+ property public final androidx.compose.ui.text.input.VisualTransformation None;
+ }
+
+}
+
+package androidx.compose.ui.text.intl {
+
+ @androidx.compose.runtime.Immutable public final class Locale {
+ ctor public Locale(String languageTag);
+ method public String getLanguage();
+ method public String getRegion();
+ method public String getScript();
+ method public String toLanguageTag();
+ property public final String language;
+ property public final String region;
+ property public final String script;
+ field public static final androidx.compose.ui.text.intl.Locale.Companion Companion;
+ }
+
+ public static final class Locale.Companion {
+ method public androidx.compose.ui.text.intl.Locale getCurrent();
+ property public final androidx.compose.ui.text.intl.Locale current;
+ }
+
+ @androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+ ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+ ctor public LocaleList(String languageTags);
+ ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+ method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
+ method public boolean containsAll(java.util.Collection<E!> elements);
+ method public operator androidx.compose.ui.text.intl.Locale get(int i);
+ method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
+ method public int getSize();
+ method public boolean isEmpty();
+ method public java.util.Iterator<androidx.compose.ui.text.intl.Locale> iterator();
+ property public final java.util.List<androidx.compose.ui.text.intl.Locale> localeList;
+ property public int size;
+ field public static final androidx.compose.ui.text.intl.LocaleList.Companion Companion;
+ }
+
+ public static final class LocaleList.Companion {
+ method public androidx.compose.ui.text.intl.LocaleList getCurrent();
+ property public final androidx.compose.ui.text.intl.LocaleList current;
+ }
+
+}
+
+package androidx.compose.ui.text.platform.extensions {
+
+ public final class TtsAnnotationExtensions_androidKt {
+ method public static android.text.style.TtsSpan toSpan(androidx.compose.ui.text.TtsAnnotation);
+ method public static android.text.style.TtsSpan toSpan(androidx.compose.ui.text.VerbatimTtsAnnotation);
+ }
+
+ public final class UrlAnnotationExtensions_androidKt {
+ method @androidx.compose.ui.text.ExperimentalTextApi public static android.text.style.URLSpan toSpan(androidx.compose.ui.text.UrlAnnotation);
+ }
+
+}
+
+package androidx.compose.ui.text.style {
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BaselineShift {
+ ctor public BaselineShift(float multiplier);
+ method public float getMultiplier();
+ property public final float multiplier;
+ field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
+ }
+
+ public static final class BaselineShift.Companion {
+ method public float getNone();
+ method public float getSubscript();
+ method public float getSuperscript();
+ property public final float None;
+ property public final float Subscript;
+ property public final float Superscript;
+ }
+
+ public final class BaselineShiftKt {
+ method @androidx.compose.runtime.Stable public static float lerp(float start, float stop, float fraction);
+ }
+
+ @kotlin.jvm.JvmInline public final value class Hyphens {
+ field public static final androidx.compose.ui.text.style.Hyphens.Companion Companion;
+ }
+
+ public static final class Hyphens.Companion {
+ method public int getAuto();
+ method public int getNone();
+ property public final int Auto;
+ property public final int None;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class LineBreak {
+ ctor public LineBreak(int strategy, int strictness, int wordBreak);
+ method public int copy(optional int strategy, optional int strictness, optional int wordBreak);
+ method public int getStrategy();
+ method public int getStrictness();
+ method public int getWordBreak();
+ property public final int strategy;
+ property public final int strictness;
+ property public final int wordBreak;
+ field public static final androidx.compose.ui.text.style.LineBreak.Companion Companion;
+ }
+
+ public static final class LineBreak.Companion {
+ method public int getHeading();
+ method public int getParagraph();
+ method public int getSimple();
+ property public final int Heading;
+ property public final int Paragraph;
+ property public final int Simple;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineBreak.Strategy {
+ field public static final androidx.compose.ui.text.style.LineBreak.Strategy.Companion Companion;
+ }
+
+ public static final class LineBreak.Strategy.Companion {
+ method public int getBalanced();
+ method public int getHighQuality();
+ method public int getSimple();
+ property public final int Balanced;
+ property public final int HighQuality;
+ property public final int Simple;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineBreak.Strictness {
+ field public static final androidx.compose.ui.text.style.LineBreak.Strictness.Companion Companion;
+ }
+
+ public static final class LineBreak.Strictness.Companion {
+ method public int getDefault();
+ method public int getLoose();
+ method public int getNormal();
+ method public int getStrict();
+ property public final int Default;
+ property public final int Loose;
+ property public final int Normal;
+ property public final int Strict;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineBreak.WordBreak {
+ field public static final androidx.compose.ui.text.style.LineBreak.WordBreak.Companion Companion;
+ }
+
+ public static final class LineBreak.WordBreak.Companion {
+ method public int getDefault();
+ method public int getPhrase();
+ property public final int Default;
+ property public final int Phrase;
+ }
+
+ public final class LineHeightStyle {
+ ctor public LineHeightStyle(float alignment, int trim);
+ method public float getAlignment();
+ method public int getTrim();
+ property public final float alignment;
+ property public final int trim;
+ field public static final androidx.compose.ui.text.style.LineHeightStyle.Companion Companion;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineHeightStyle.Alignment {
+ ctor @androidx.compose.ui.text.ExperimentalTextApi public LineHeightStyle.Alignment(float topRatio);
+ field public static final androidx.compose.ui.text.style.LineHeightStyle.Alignment.Companion Companion;
+ }
+
+ public static final class LineHeightStyle.Alignment.Companion {
+ method public float getBottom();
+ method public float getCenter();
+ method public float getProportional();
+ method public float getTop();
+ property public final float Bottom;
+ property public final float Center;
+ property public final float Proportional;
+ property public final float Top;
+ }
+
+ public static final class LineHeightStyle.Companion {
+ method public androidx.compose.ui.text.style.LineHeightStyle getDefault();
+ property public final androidx.compose.ui.text.style.LineHeightStyle Default;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineHeightStyle.Trim {
+ field public static final androidx.compose.ui.text.style.LineHeightStyle.Trim.Companion Companion;
+ }
+
+ public static final class LineHeightStyle.Trim.Companion {
+ method public int getBoth();
+ method public int getFirstLineTop();
+ method public int getLastLineBottom();
+ method public int getNone();
+ property public final int Both;
+ property public final int FirstLineTop;
+ property public final int LastLineBottom;
+ property public final int None;
+ }
+
+ public enum ResolvedTextDirection {
+ method public static androidx.compose.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.text.style.ResolvedTextDirection[] values();
+ enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Ltr;
+ enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Rtl;
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextAlign {
+ field public static final androidx.compose.ui.text.style.TextAlign.Companion Companion;
+ }
+
+ public static final class TextAlign.Companion {
+ method public int getCenter();
+ method public int getEnd();
+ method public int getJustify();
+ method public int getLeft();
+ method public int getRight();
+ method public int getStart();
+ method public java.util.List<androidx.compose.ui.text.style.TextAlign> values();
+ property public final int Center;
+ property public final int End;
+ property public final int Justify;
+ property public final int Left;
+ property public final int Right;
+ property public final int Start;
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextDecoration {
+ method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
+ method public int getMask();
+ method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
+ property public final int mask;
+ field public static final androidx.compose.ui.text.style.TextDecoration.Companion Companion;
+ }
+
+ public static final class TextDecoration.Companion {
+ method public androidx.compose.ui.text.style.TextDecoration combine(java.util.List<androidx.compose.ui.text.style.TextDecoration> decorations);
+ method public androidx.compose.ui.text.style.TextDecoration getLineThrough();
+ method public androidx.compose.ui.text.style.TextDecoration getNone();
+ method public androidx.compose.ui.text.style.TextDecoration getUnderline();
+ property public final androidx.compose.ui.text.style.TextDecoration LineThrough;
+ property public final androidx.compose.ui.text.style.TextDecoration None;
+ property public final androidx.compose.ui.text.style.TextDecoration Underline;
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextDirection {
+ field public static final androidx.compose.ui.text.style.TextDirection.Companion Companion;
+ }
+
+ public static final class TextDirection.Companion {
+ method public int getContent();
+ method public int getContentOrLtr();
+ method public int getContentOrRtl();
+ method public int getLtr();
+ method public int getRtl();
+ property public final int Content;
+ property public final int ContentOrLtr;
+ property public final int ContentOrRtl;
+ property public final int Ltr;
+ property public final int Rtl;
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
+ ctor public TextGeometricTransform(optional float scaleX, optional float skewX);
+ method public androidx.compose.ui.text.style.TextGeometricTransform copy(optional float scaleX, optional float skewX);
+ method public float getScaleX();
+ method public float getSkewX();
+ property public final float scaleX;
+ property public final float skewX;
+ field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
+ }
+
+ public static final class TextGeometricTransform.Companion {
+ }
+
+ public final class TextGeometricTransformKt {
+ method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextIndent {
+ ctor public TextIndent(optional long firstLine, optional long restLine);
+ method public androidx.compose.ui.text.style.TextIndent copy(optional long firstLine, optional long restLine);
+ method public long getFirstLine();
+ method public long getRestLine();
+ property public final long firstLine;
+ property public final long restLine;
+ field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
+ }
+
+ public static final class TextIndent.Companion {
+ method public androidx.compose.ui.text.style.TextIndent getNone();
+ property public final androidx.compose.ui.text.style.TextIndent None;
+ }
+
+ public final class TextIndentKt {
+ method public static androidx.compose.ui.text.style.TextIndent lerp(androidx.compose.ui.text.style.TextIndent start, androidx.compose.ui.text.style.TextIndent stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable @androidx.compose.ui.text.ExperimentalTextApi public final class TextMotion {
+ field public static final androidx.compose.ui.text.style.TextMotion.Companion Companion;
+ }
+
+ public static final class TextMotion.Companion {
+ method public androidx.compose.ui.text.style.TextMotion getAnimated();
+ method public androidx.compose.ui.text.style.TextMotion getStatic();
+ property public final androidx.compose.ui.text.style.TextMotion Animated;
+ property public final androidx.compose.ui.text.style.TextMotion Static;
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextOverflow {
+ field public static final androidx.compose.ui.text.style.TextOverflow.Companion Companion;
+ }
+
+ public static final class TextOverflow.Companion {
+ method public int getClip();
+ method public int getEllipsis();
+ method public int getVisible();
+ property public final int Clip;
+ property public final int Ellipsis;
+ property public final int Visible;
+ }
+
+}
+
diff --git a/compose/ui/ui-text/api/res-1.4.0-beta02.txt b/compose/ui/ui-text/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-text/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-text/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-text/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..1d00051
--- /dev/null
+++ b/compose/ui/ui-text/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,1414 @@
+// Signature format: 4.0
+package androidx.compose.ui.text {
+
+ public final class AndroidTextStyle_androidKt {
+ method public static androidx.compose.ui.text.PlatformParagraphStyle lerp(androidx.compose.ui.text.PlatformParagraphStyle start, androidx.compose.ui.text.PlatformParagraphStyle stop, float fraction);
+ method public static androidx.compose.ui.text.PlatformSpanStyle lerp(androidx.compose.ui.text.PlatformSpanStyle start, androidx.compose.ui.text.PlatformSpanStyle stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class AnnotatedString implements java.lang.CharSequence {
+ ctor public AnnotatedString(String text, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
+ method public operator char get(int index);
+ method public int getLength();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+ method public String getText();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.TtsAnnotation>> getTtsAnnotations(int start, int end);
+ method public boolean hasStringAnnotations(String tag, int start, int end);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
+ method public androidx.compose.ui.text.AnnotatedString subSequence(int startIndex, int endIndex);
+ method public androidx.compose.ui.text.AnnotatedString subSequence(long range);
+ property public int length;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles;
+ property public final String text;
+ }
+
+ public static final class AnnotatedString.Builder implements java.lang.Appendable {
+ ctor public AnnotatedString.Builder(optional int capacity);
+ ctor public AnnotatedString.Builder(String text);
+ ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
+ method public void addStringAnnotation(String tag, String annotation, int start, int end);
+ method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
+ method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
+ method public void append(String text);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text, int start, int end);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(char char);
+ method public void append(androidx.compose.ui.text.AnnotatedString text);
+ method public void append(androidx.compose.ui.text.AnnotatedString text, int start, int end);
+ method @Deprecated public void deprecated_append_returning_void(char char);
+ method public int getLength();
+ method public void pop();
+ method public void pop(int index);
+ method public int pushStringAnnotation(String tag, String annotation);
+ method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
+ method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+ method public int pushTtsAnnotation(androidx.compose.ui.text.TtsAnnotation ttsAnnotation);
+ method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
+ property public final int length;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
+ ctor public AnnotatedString.Range(T? item, int start, int end, String tag);
+ ctor public AnnotatedString.Range(T? item, int start, int end);
+ method public T! component1();
+ method public int component2();
+ method public int component3();
+ method public String component4();
+ method public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+ method public int getEnd();
+ method public T! getItem();
+ method public int getStart();
+ method public String getTag();
+ property public final int end;
+ property public final T! item;
+ property public final int start;
+ property public final String tag;
+ }
+
+ public final class AnnotatedStringKt {
+ method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, optional androidx.compose.ui.text.ParagraphStyle? paragraphStyle);
+ method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+ method public static inline androidx.compose.ui.text.AnnotatedString buildAnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+ method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ }
+
+ @kotlin.jvm.JvmInline public final value class EmojiSupportMatch {
+ field public static final androidx.compose.ui.text.EmojiSupportMatch.Companion Companion;
+ }
+
+ public static final class EmojiSupportMatch.Companion {
+ method public int getDefault();
+ method public int getNone();
+ property public final int Default;
+ property public final int None;
+ }
+
+ public final class MultiParagraph {
+ ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+ method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+ method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public androidx.compose.ui.text.MultiParagraphIntrinsics getIntrinsics();
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineEnd(int lineIndex, optional boolean visibleEnd);
+ method public int getLineForOffset(int offset);
+ method public int getLineForVerticalPosition(float vertical);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public int getLineStart(int lineIndex);
+ method public float getLineTop(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public int getMaxLines();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(long position);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+ method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
+ method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
+ method public float getWidth();
+ method public long getWordBoundary(int offset);
+ method public boolean isLineEllipsized(int lineIndex);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration);
+ property public final boolean didExceedMaxLines;
+ property public final float firstBaseline;
+ property public final float height;
+ property public final androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics;
+ property public final float lastBaseline;
+ property public final int lineCount;
+ property public final float maxIntrinsicWidth;
+ property public final int maxLines;
+ property public final float minIntrinsicWidth;
+ property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
+ property public final float width;
+ }
+
+ public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
+ ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
+ ctor @Deprecated public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public boolean hasStaleResolvedFonts;
+ property public float maxIntrinsicWidth;
+ property public float minIntrinsicWidth;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders;
+ }
+
+ public sealed interface Paragraph {
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+ method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+ method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineEnd(int lineIndex, boolean visibleEnd);
+ method public int getLineForOffset(int offset);
+ method public int getLineForVerticalPosition(float vertical);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public int getLineStart(int lineIndex);
+ method public float getLineTop(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(long position);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+ method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
+ method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
+ method public float getWidth();
+ method public long getWordBoundary(int offset);
+ method public boolean isLineEllipsized(int lineIndex);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, long color, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration);
+ property public abstract boolean didExceedMaxLines;
+ property public abstract float firstBaseline;
+ property public abstract float height;
+ property public abstract float lastBaseline;
+ property public abstract int lineCount;
+ property public abstract float maxIntrinsicWidth;
+ property public abstract float minIntrinsicWidth;
+ property public abstract java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
+ property public abstract float width;
+ }
+
+ public interface ParagraphIntrinsics {
+ method public default boolean getHasStaleResolvedFonts();
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ property public default boolean hasStaleResolvedFonts;
+ property public abstract float maxIntrinsicWidth;
+ property public abstract float minIntrinsicWidth;
+ }
+
+ public final class ParagraphIntrinsicsKt {
+ method @Deprecated public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
+ }
+
+ public final class ParagraphKt {
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, optional int maxLines, optional boolean ellipsis, float width);
+ method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
+ }
+
+ @androidx.compose.runtime.Immutable public final class ParagraphStyle {
+ ctor public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method public androidx.compose.ui.text.style.Hyphens? getHyphens();
+ method public androidx.compose.ui.text.style.LineBreak? getLineBreak();
+ method public long getLineHeight();
+ method public androidx.compose.ui.text.style.LineHeightStyle? getLineHeightStyle();
+ method public androidx.compose.ui.text.PlatformParagraphStyle? getPlatformStyle();
+ method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+ method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+ method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle merge(optional androidx.compose.ui.text.ParagraphStyle? other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+ property public final androidx.compose.ui.text.style.Hyphens? hyphens;
+ property public final androidx.compose.ui.text.style.LineBreak? lineBreak;
+ property public final long lineHeight;
+ property public final androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle;
+ property public final androidx.compose.ui.text.PlatformParagraphStyle? platformStyle;
+ property public final androidx.compose.ui.text.style.TextAlign? textAlign;
+ property public final androidx.compose.ui.text.style.TextDirection? textDirection;
+ property public final androidx.compose.ui.text.style.TextIndent? textIndent;
+ }
+
+ public final class ParagraphStyleKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class Placeholder {
+ ctor public Placeholder(long width, long height, int placeholderVerticalAlign);
+ method public androidx.compose.ui.text.Placeholder copy(optional long width, optional long height, optional int placeholderVerticalAlign);
+ method public long getHeight();
+ method public int getPlaceholderVerticalAlign();
+ method public long getWidth();
+ property public final long height;
+ property public final int placeholderVerticalAlign;
+ property public final long width;
+ }
+
+ @kotlin.jvm.JvmInline public final value class PlaceholderVerticalAlign {
+ field public static final androidx.compose.ui.text.PlaceholderVerticalAlign.Companion Companion;
+ }
+
+ public static final class PlaceholderVerticalAlign.Companion {
+ method public int getAboveBaseline();
+ method public int getBottom();
+ method public int getCenter();
+ method public int getTextBottom();
+ method public int getTextCenter();
+ method public int getTextTop();
+ method public int getTop();
+ property public final int AboveBaseline;
+ property public final int Bottom;
+ property public final int Center;
+ property public final int TextBottom;
+ property public final int TextCenter;
+ property public final int TextTop;
+ property public final int Top;
+ }
+
+ public final class PlatformParagraphStyle {
+ ctor @Deprecated public PlatformParagraphStyle(optional boolean includeFontPadding);
+ ctor @Deprecated public PlatformParagraphStyle(optional int emojiSupportMatch, optional boolean includeFontPadding);
+ ctor public PlatformParagraphStyle(optional int emojiSupportMatch);
+ method public int getEmojiSupportMatch();
+ method @Deprecated public boolean getIncludeFontPadding();
+ method public androidx.compose.ui.text.PlatformParagraphStyle merge(androidx.compose.ui.text.PlatformParagraphStyle? other);
+ property public final int emojiSupportMatch;
+ property @Deprecated public final boolean includeFontPadding;
+ field public static final androidx.compose.ui.text.PlatformParagraphStyle.Companion Companion;
+ }
+
+ public static final class PlatformParagraphStyle.Companion {
+ method public androidx.compose.ui.text.PlatformParagraphStyle getDefault();
+ property public final androidx.compose.ui.text.PlatformParagraphStyle Default;
+ }
+
+ public final class PlatformSpanStyle {
+ ctor public PlatformSpanStyle();
+ method public androidx.compose.ui.text.PlatformSpanStyle merge(androidx.compose.ui.text.PlatformSpanStyle? other);
+ field public static final androidx.compose.ui.text.PlatformSpanStyle.Companion Companion;
+ }
+
+ public static final class PlatformSpanStyle.Companion {
+ method public androidx.compose.ui.text.PlatformSpanStyle getDefault();
+ property public final androidx.compose.ui.text.PlatformSpanStyle Default;
+ }
+
+ public final class PlatformTextStyle {
+ ctor public PlatformTextStyle(androidx.compose.ui.text.PlatformSpanStyle? spanStyle, androidx.compose.ui.text.PlatformParagraphStyle? paragraphStyle);
+ ctor @Deprecated public PlatformTextStyle(optional boolean includeFontPadding);
+ ctor public PlatformTextStyle(int emojiSupportMatch);
+ method public androidx.compose.ui.text.PlatformParagraphStyle? getParagraphStyle();
+ method public androidx.compose.ui.text.PlatformSpanStyle? getSpanStyle();
+ property public final androidx.compose.ui.text.PlatformParagraphStyle? paragraphStyle;
+ property public final androidx.compose.ui.text.PlatformSpanStyle? spanStyle;
+ }
+
+ @androidx.compose.runtime.Immutable public final class SpanStyle {
+ ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
+ ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
+ method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
+ method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
+ method public long getBackground();
+ method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
+ method public long getColor();
+ method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+ method public String? getFontFeatureSettings();
+ method public long getFontSize();
+ method public androidx.compose.ui.text.font.FontStyle? getFontStyle();
+ method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+ method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
+ method public long getLetterSpacing();
+ method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
+ method public androidx.compose.ui.text.PlatformSpanStyle? getPlatformStyle();
+ method public androidx.compose.ui.graphics.Shadow? getShadow();
+ method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+ method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle merge(optional androidx.compose.ui.text.SpanStyle? other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
+ property public final long background;
+ property public final androidx.compose.ui.text.style.BaselineShift? baselineShift;
+ property public final long color;
+ property public final androidx.compose.ui.text.font.FontFamily? fontFamily;
+ property public final String? fontFeatureSettings;
+ property public final long fontSize;
+ property public final androidx.compose.ui.text.font.FontStyle? fontStyle;
+ property public final androidx.compose.ui.text.font.FontSynthesis? fontSynthesis;
+ property public final androidx.compose.ui.text.font.FontWeight? fontWeight;
+ property public final long letterSpacing;
+ property public final androidx.compose.ui.text.intl.LocaleList? localeList;
+ property public final androidx.compose.ui.text.PlatformSpanStyle? platformStyle;
+ property public final androidx.compose.ui.graphics.Shadow? shadow;
+ property public final androidx.compose.ui.text.style.TextDecoration? textDecoration;
+ property public final androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform;
+ }
+
+ public final class SpanStyleKt {
+ method public static androidx.compose.ui.text.SpanStyle lerp(androidx.compose.ui.text.SpanStyle start, androidx.compose.ui.text.SpanStyle stop, float fraction);
+ }
+
+ public final class StringKt {
+ method public static String capitalize(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String capitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static String decapitalize(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String decapitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static String toLowerCase(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String toLowerCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ method public static String toUpperCase(String, androidx.compose.ui.text.intl.Locale locale);
+ method public static String toUpperCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+ }
+
+ public final class TextLayoutInput {
+ ctor @Deprecated public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, int overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, long constraints);
+ ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, int overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, long constraints);
+ method @Deprecated public androidx.compose.ui.text.TextLayoutInput copy(optional androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean softWrap, optional int overflow, optional androidx.compose.ui.unit.Density density, optional androidx.compose.ui.unit.LayoutDirection layoutDirection, optional androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, optional long constraints);
+ method public long getConstraints();
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.text.font.FontFamily.Resolver getFontFamilyResolver();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public int getMaxLines();
+ method public int getOverflow();
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+ method @Deprecated public androidx.compose.ui.text.font.Font.ResourceLoader getResourceLoader();
+ method public boolean getSoftWrap();
+ method public androidx.compose.ui.text.TextStyle getStyle();
+ method public androidx.compose.ui.text.AnnotatedString getText();
+ property public final long constraints;
+ property public final androidx.compose.ui.unit.Density density;
+ property public final androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver;
+ property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public final int maxLines;
+ property public final int overflow;
+ property public final java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders;
+ property @Deprecated public final androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader;
+ property public final boolean softWrap;
+ property public final androidx.compose.ui.text.TextStyle style;
+ property public final androidx.compose.ui.text.AnnotatedString text;
+ }
+
+ public final class TextLayoutResult {
+ ctor public TextLayoutResult(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, long size);
+ method public androidx.compose.ui.text.TextLayoutResult copy(optional androidx.compose.ui.text.TextLayoutInput layoutInput, optional long size);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+ method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+ method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidOverflowHeight();
+ method public boolean getDidOverflowWidth();
+ method public float getFirstBaseline();
+ method public boolean getHasVisualOverflow();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public float getLastBaseline();
+ method public androidx.compose.ui.text.TextLayoutInput getLayoutInput();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineEnd(int lineIndex, optional boolean visibleEnd);
+ method public int getLineForOffset(int offset);
+ method public int getLineForVerticalPosition(float vertical);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public int getLineStart(int lineIndex);
+ method public float getLineTop(int lineIndex);
+ method public androidx.compose.ui.text.MultiParagraph getMultiParagraph();
+ method public int getOffsetForPosition(long position);
+ method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+ method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
+ method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
+ method public long getSize();
+ method public long getWordBoundary(int offset);
+ method public boolean isLineEllipsized(int lineIndex);
+ property public final boolean didOverflowHeight;
+ property public final boolean didOverflowWidth;
+ property public final float firstBaseline;
+ property public final boolean hasVisualOverflow;
+ property public final float lastBaseline;
+ property public final androidx.compose.ui.text.TextLayoutInput layoutInput;
+ property public final int lineCount;
+ property public final androidx.compose.ui.text.MultiParagraph multiParagraph;
+ property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
+ property public final long size;
+ }
+
+ public final class TextPainter {
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.text.TextLayoutResult textLayoutResult);
+ field public static final androidx.compose.ui.text.TextPainter INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextRange {
+ method public operator boolean contains(long other);
+ method public operator boolean contains(int offset);
+ method public boolean getCollapsed();
+ method public int getEnd();
+ method public int getLength();
+ method public int getMax();
+ method public int getMin();
+ method public boolean getReversed();
+ method public int getStart();
+ method public boolean intersects(long other);
+ property public final boolean collapsed;
+ property public final int end;
+ property public final int length;
+ property public final int max;
+ property public final int min;
+ property public final boolean reversed;
+ property public final int start;
+ field public static final androidx.compose.ui.text.TextRange.Companion Companion;
+ }
+
+ public static final class TextRange.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class TextRangeKt {
+ method public static long TextRange(int start, int end);
+ method public static long TextRange(int index);
+ method public static String substring(CharSequence, long range);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextStyle {
+ ctor public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
+ method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
+ method public long getBackground();
+ method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
+ method public long getColor();
+ method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+ method public String? getFontFeatureSettings();
+ method public long getFontSize();
+ method public androidx.compose.ui.text.font.FontStyle? getFontStyle();
+ method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+ method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
+ method public androidx.compose.ui.text.style.Hyphens? getHyphens();
+ method public long getLetterSpacing();
+ method public androidx.compose.ui.text.style.LineBreak? getLineBreak();
+ method public long getLineHeight();
+ method public androidx.compose.ui.text.style.LineHeightStyle? getLineHeightStyle();
+ method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
+ method public androidx.compose.ui.text.PlatformTextStyle? getPlatformStyle();
+ method public androidx.compose.ui.graphics.Shadow? getShadow();
+ method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+ method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+ method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+ method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+ method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+ method public boolean hasSameLayoutAffectingAttributes(androidx.compose.ui.text.TextStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(optional androidx.compose.ui.text.TextStyle? other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+ property public final long background;
+ property public final androidx.compose.ui.text.style.BaselineShift? baselineShift;
+ property public final long color;
+ property public final androidx.compose.ui.text.font.FontFamily? fontFamily;
+ property public final String? fontFeatureSettings;
+ property public final long fontSize;
+ property public final androidx.compose.ui.text.font.FontStyle? fontStyle;
+ property public final androidx.compose.ui.text.font.FontSynthesis? fontSynthesis;
+ property public final androidx.compose.ui.text.font.FontWeight? fontWeight;
+ property public final androidx.compose.ui.text.style.Hyphens? hyphens;
+ property public final long letterSpacing;
+ property public final androidx.compose.ui.text.style.LineBreak? lineBreak;
+ property public final long lineHeight;
+ property public final androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle;
+ property public final androidx.compose.ui.text.intl.LocaleList? localeList;
+ property public final androidx.compose.ui.text.PlatformTextStyle? platformStyle;
+ property public final androidx.compose.ui.graphics.Shadow? shadow;
+ property public final androidx.compose.ui.text.style.TextAlign? textAlign;
+ property public final androidx.compose.ui.text.style.TextDecoration? textDecoration;
+ property public final androidx.compose.ui.text.style.TextDirection? textDirection;
+ property public final androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform;
+ property public final androidx.compose.ui.text.style.TextIndent? textIndent;
+ field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
+ }
+
+ public static final class TextStyle.Companion {
+ method public androidx.compose.ui.text.TextStyle getDefault();
+ property public final androidx.compose.ui.text.TextStyle Default;
+ }
+
+ public final class TextStyleKt {
+ method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
+ method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.compose.ui.unit.LayoutDirection direction);
+ }
+
+ public abstract sealed class TtsAnnotation {
+ }
+
+ public final class VerbatimTtsAnnotation extends androidx.compose.ui.text.TtsAnnotation {
+ ctor public VerbatimTtsAnnotation(String verbatim);
+ method public String getVerbatim();
+ property public final String verbatim;
+ }
+
+}
+
+package androidx.compose.ui.text.font {
+
+ public abstract class AndroidFont implements androidx.compose.ui.text.font.Font {
+ ctor public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader, androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ ctor @Deprecated public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader);
+ method public final int getLoadingStrategy();
+ method public final androidx.compose.ui.text.font.AndroidFont.TypefaceLoader getTypefaceLoader();
+ method public final androidx.compose.ui.text.font.FontVariation.Settings getVariationSettings();
+ property public final int loadingStrategy;
+ property public final androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader;
+ property public final androidx.compose.ui.text.font.FontVariation.Settings variationSettings;
+ }
+
+ public static interface AndroidFont.TypefaceLoader {
+ method public suspend Object? awaitLoad(android.content.Context context, androidx.compose.ui.text.font.AndroidFont font, kotlin.coroutines.Continuation<? super android.graphics.Typeface>);
+ method public android.graphics.Typeface? loadBlocking(android.content.Context context, androidx.compose.ui.text.font.AndroidFont font);
+ }
+
+ public final class AndroidFontKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(String path, android.content.res.AssetManager assetManager, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(java.io.File file, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @RequiresApi(26) @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(android.os.ParcelFileDescriptor fileDescriptor, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ }
+
+ public final class AndroidTypeface_androidKt {
+ method public static androidx.compose.ui.text.font.FontFamily FontFamily(android.graphics.Typeface typeface);
+ method @Deprecated public static androidx.compose.ui.text.font.Typeface Typeface(android.content.Context context, androidx.compose.ui.text.font.FontFamily fontFamily, optional java.util.List<kotlin.Pair<androidx.compose.ui.text.font.FontWeight,androidx.compose.ui.text.font.FontStyle>>? styles);
+ method public static androidx.compose.ui.text.font.Typeface Typeface(android.graphics.Typeface typeface);
+ }
+
+ public final class DelegatingFontLoaderForDeprecatedUsage_androidKt {
+ method @Deprecated public static androidx.compose.ui.text.font.FontFamily.Resolver createFontFamilyResolver(androidx.compose.ui.text.font.Font.ResourceLoader fontResourceLoader, android.content.Context context);
+ }
+
+ @kotlin.jvm.JvmInline public final value class DeviceFontFamilyName {
+ ctor public DeviceFontFamilyName(String name);
+ method public String getName();
+ property public final String name;
+ }
+
+ public final class DeviceFontFamilyNameFontKt {
+ method public static androidx.compose.ui.text.font.Font Font(String familyName, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ }
+
+ public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+ }
+
+ @androidx.compose.runtime.Immutable public interface Font {
+ method public default int getLoadingStrategy();
+ method public int getStyle();
+ method public androidx.compose.ui.text.font.FontWeight getWeight();
+ property public default int loadingStrategy;
+ property public abstract int style;
+ property public abstract androidx.compose.ui.text.font.FontWeight weight;
+ field public static final androidx.compose.ui.text.font.Font.Companion Companion;
+ field public static final long MaximumAsyncTimeoutMillis = 15000L; // 0x3a98L
+ }
+
+ public static final class Font.Companion {
+ field public static final long MaximumAsyncTimeoutMillis = 15000L; // 0x3a98L
+ }
+
+ @Deprecated public static interface Font.ResourceLoader {
+ method @Deprecated public Object load(androidx.compose.ui.text.font.Font font);
+ }
+
+ @androidx.compose.runtime.Immutable public abstract sealed class FontFamily {
+ method @Deprecated public final boolean getCanLoadSynchronously();
+ property @Deprecated public final boolean canLoadSynchronously;
+ field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
+ }
+
+ public static final class FontFamily.Companion {
+ method public androidx.compose.ui.text.font.GenericFontFamily getCursive();
+ method public androidx.compose.ui.text.font.SystemFontFamily getDefault();
+ method public androidx.compose.ui.text.font.GenericFontFamily getMonospace();
+ method public androidx.compose.ui.text.font.GenericFontFamily getSansSerif();
+ method public androidx.compose.ui.text.font.GenericFontFamily getSerif();
+ property public final androidx.compose.ui.text.font.GenericFontFamily Cursive;
+ property public final androidx.compose.ui.text.font.SystemFontFamily Default;
+ property public final androidx.compose.ui.text.font.GenericFontFamily Monospace;
+ property public final androidx.compose.ui.text.font.GenericFontFamily SansSerif;
+ property public final androidx.compose.ui.text.font.GenericFontFamily Serif;
+ }
+
+ public static sealed interface FontFamily.Resolver {
+ method public suspend Object? preload(androidx.compose.ui.text.font.FontFamily fontFamily, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public androidx.compose.runtime.State<java.lang.Object> resolve(optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight fontWeight, optional int fontStyle, optional int fontSynthesis);
+ }
+
+ public final class FontFamilyKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Font... fonts);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Typeface typeface);
+ }
+
+ 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 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);
+ }
+
+ public final class FontKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional int loadingStrategy);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily toFontFamily(androidx.compose.ui.text.font.Font);
+ }
+
+ @androidx.compose.runtime.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+ method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
+ property public final java.util.List<androidx.compose.ui.text.font.Font> fonts;
+ }
+
+ @kotlin.jvm.JvmInline public final value class FontLoadingStrategy {
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.text.font.FontLoadingStrategy.Companion Companion;
+ }
+
+ public static final class FontLoadingStrategy.Companion {
+ method public int getAsync();
+ method public int getBlocking();
+ method public int getOptionalLocal();
+ property public final int Async;
+ property public final int Blocking;
+ property public final int OptionalLocal;
+ }
+
+ @kotlin.jvm.JvmInline public final value class FontStyle {
+ ctor public FontStyle(int value);
+ method public int getValue();
+ property public final int value;
+ field public static final androidx.compose.ui.text.font.FontStyle.Companion Companion;
+ }
+
+ public static final class FontStyle.Companion {
+ method public int getItalic();
+ method public int getNormal();
+ method public java.util.List<androidx.compose.ui.text.font.FontStyle> values();
+ property public final int Italic;
+ property public final int Normal;
+ }
+
+ @kotlin.jvm.JvmInline public final value class FontSynthesis {
+ field public static final androidx.compose.ui.text.font.FontSynthesis.Companion Companion;
+ }
+
+ public static final class FontSynthesis.Companion {
+ method public int getAll();
+ method public int getNone();
+ method public int getStyle();
+ method public int getWeight();
+ property public final int All;
+ property public final int None;
+ property public final int Style;
+ property public final int Weight;
+ }
+
+ public final class FontVariation {
+ method public androidx.compose.ui.text.font.FontVariation.Setting Setting(String name, float value);
+ method public androidx.compose.ui.text.font.FontVariation.Settings Settings(androidx.compose.ui.text.font.FontWeight weight, int style, androidx.compose.ui.text.font.FontVariation.Setting... settings);
+ method public androidx.compose.ui.text.font.FontVariation.Setting grade(int value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting italic(float value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting opticalSizing(long textSize);
+ method public androidx.compose.ui.text.font.FontVariation.Setting slant(float value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting weight(int value);
+ method public androidx.compose.ui.text.font.FontVariation.Setting width(float value);
+ field public static final androidx.compose.ui.text.font.FontVariation INSTANCE;
+ }
+
+ @androidx.compose.runtime.Immutable public static sealed interface FontVariation.Setting {
+ method public String getAxisName();
+ method public boolean getNeedsDensity();
+ method public float toVariationValue(androidx.compose.ui.unit.Density? density);
+ property public abstract String axisName;
+ property public abstract boolean needsDensity;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class FontVariation.Settings {
+ ctor public FontVariation.Settings(androidx.compose.ui.text.font.FontVariation.Setting... settings);
+ method public java.util.List<androidx.compose.ui.text.font.FontVariation.Setting> getSettings();
+ property public final java.util.List<androidx.compose.ui.text.font.FontVariation.Setting> settings;
+ }
+
+ @androidx.compose.runtime.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
+ ctor public FontWeight(int weight);
+ method public operator int compareTo(androidx.compose.ui.text.font.FontWeight other);
+ method public int getWeight();
+ property public final int weight;
+ field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
+ }
+
+ public static final class FontWeight.Companion {
+ method public androidx.compose.ui.text.font.FontWeight getBlack();
+ method public androidx.compose.ui.text.font.FontWeight getBold();
+ method public androidx.compose.ui.text.font.FontWeight getExtraBold();
+ method public androidx.compose.ui.text.font.FontWeight getExtraLight();
+ method public androidx.compose.ui.text.font.FontWeight getLight();
+ method public androidx.compose.ui.text.font.FontWeight getMedium();
+ method public androidx.compose.ui.text.font.FontWeight getNormal();
+ method public androidx.compose.ui.text.font.FontWeight getSemiBold();
+ method public androidx.compose.ui.text.font.FontWeight getThin();
+ method public androidx.compose.ui.text.font.FontWeight getW100();
+ method public androidx.compose.ui.text.font.FontWeight getW200();
+ method public androidx.compose.ui.text.font.FontWeight getW300();
+ method public androidx.compose.ui.text.font.FontWeight getW400();
+ method public androidx.compose.ui.text.font.FontWeight getW500();
+ method public androidx.compose.ui.text.font.FontWeight getW600();
+ method public androidx.compose.ui.text.font.FontWeight getW700();
+ method public androidx.compose.ui.text.font.FontWeight getW800();
+ method public androidx.compose.ui.text.font.FontWeight getW900();
+ property public final androidx.compose.ui.text.font.FontWeight Black;
+ property public final androidx.compose.ui.text.font.FontWeight Bold;
+ property public final androidx.compose.ui.text.font.FontWeight ExtraBold;
+ property public final androidx.compose.ui.text.font.FontWeight ExtraLight;
+ property public final androidx.compose.ui.text.font.FontWeight Light;
+ property public final androidx.compose.ui.text.font.FontWeight Medium;
+ property public final androidx.compose.ui.text.font.FontWeight Normal;
+ property public final androidx.compose.ui.text.font.FontWeight SemiBold;
+ property public final androidx.compose.ui.text.font.FontWeight Thin;
+ property public final androidx.compose.ui.text.font.FontWeight W100;
+ property public final androidx.compose.ui.text.font.FontWeight W200;
+ property public final androidx.compose.ui.text.font.FontWeight W300;
+ property public final androidx.compose.ui.text.font.FontWeight W400;
+ property public final androidx.compose.ui.text.font.FontWeight W500;
+ property public final androidx.compose.ui.text.font.FontWeight W600;
+ property public final androidx.compose.ui.text.font.FontWeight W700;
+ property public final androidx.compose.ui.text.font.FontWeight W800;
+ property public final androidx.compose.ui.text.font.FontWeight W900;
+ }
+
+ public final class FontWeightKt {
+ method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
+ method public String getName();
+ property public final String name;
+ }
+
+ public final class LoadedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+ method public androidx.compose.ui.text.font.Typeface getTypeface();
+ property public final androidx.compose.ui.text.font.Typeface typeface;
+ }
+
+ public final class ResourceFont implements androidx.compose.ui.text.font.Font {
+ method public androidx.compose.ui.text.font.ResourceFont copy(optional int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
+ method public int getResId();
+ method public int getStyle();
+ method public androidx.compose.ui.text.font.FontWeight getWeight();
+ property public final int resId;
+ property public int style;
+ property public androidx.compose.ui.text.font.FontWeight weight;
+ }
+
+ public abstract sealed class SystemFontFamily extends androidx.compose.ui.text.font.FontFamily {
+ }
+
+ public interface Typeface {
+ method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+ property public abstract androidx.compose.ui.text.font.FontFamily? fontFamily;
+ }
+
+}
+
+package androidx.compose.ui.text.input {
+
+ public final class BackspaceCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public BackspaceCommand();
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ public final class CommitTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public CommitTextCommand(androidx.compose.ui.text.AnnotatedString annotatedString, int newCursorPosition);
+ ctor public CommitTextCommand(String text, int newCursorPosition);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public int getNewCursorPosition();
+ method public String getText();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public final int newCursorPosition;
+ property public final String text;
+ }
+
+ public final class DeleteAllCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public DeleteAllCommand();
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ public final class DeleteSurroundingTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public DeleteSurroundingTextCommand(int lengthBeforeCursor, int lengthAfterCursor);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getLengthAfterCursor();
+ method public int getLengthBeforeCursor();
+ property public final int lengthAfterCursor;
+ property public final int lengthBeforeCursor;
+ }
+
+ public final class DeleteSurroundingTextInCodePointsCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public DeleteSurroundingTextInCodePointsCommand(int lengthBeforeCursor, int lengthAfterCursor);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getLengthAfterCursor();
+ method public int getLengthBeforeCursor();
+ property public final int lengthAfterCursor;
+ property public final int lengthBeforeCursor;
+ }
+
+ public interface EditCommand {
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ public final class EditProcessor {
+ ctor public EditProcessor();
+ method public androidx.compose.ui.text.input.TextFieldValue apply(java.util.List<? extends androidx.compose.ui.text.input.EditCommand> editCommands);
+ method public void reset(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.TextInputSession? textInputSession);
+ method public androidx.compose.ui.text.input.TextFieldValue toTextFieldValue();
+ }
+
+ public final class EditingBuffer {
+ ctor public EditingBuffer(androidx.compose.ui.text.AnnotatedString text, long selection);
+ }
+
+ public final class FinishComposingTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public FinishComposingTextCommand();
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ }
+
+ @kotlin.jvm.JvmInline public final value class ImeAction {
+ field public static final androidx.compose.ui.text.input.ImeAction.Companion Companion;
+ }
+
+ public static final class ImeAction.Companion {
+ method public int getDefault();
+ method public int getDone();
+ method public int getGo();
+ method public int getNext();
+ method public int getNone();
+ method public int getPrevious();
+ method public int getSearch();
+ method public int getSend();
+ property public final int Default;
+ property public final int Done;
+ property public final int Go;
+ property public final int Next;
+ property public final int None;
+ property public final int Previous;
+ property public final int Search;
+ property public final int Send;
+ }
+
+ @androidx.compose.runtime.Immutable public final class ImeOptions {
+ ctor public ImeOptions(optional boolean singleLine, optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public androidx.compose.ui.text.input.ImeOptions copy(optional boolean singleLine, optional int capitalization, optional boolean autoCorrect, optional int keyboardType, optional int imeAction);
+ method public boolean getAutoCorrect();
+ method public int getCapitalization();
+ method public int getImeAction();
+ method public int getKeyboardType();
+ method public boolean getSingleLine();
+ property public final boolean autoCorrect;
+ property public final int capitalization;
+ property public final int imeAction;
+ property public final int keyboardType;
+ property public final boolean singleLine;
+ field public static final androidx.compose.ui.text.input.ImeOptions.Companion Companion;
+ }
+
+ public static final class ImeOptions.Companion {
+ method public androidx.compose.ui.text.input.ImeOptions getDefault();
+ property public final androidx.compose.ui.text.input.ImeOptions Default;
+ }
+
+ @Deprecated public interface InputEventCallback {
+ method @Deprecated public void onEditCommands(java.util.List<? extends androidx.compose.ui.text.input.EditCommand> editCommands);
+ method @Deprecated public void onImeAction(int imeAction);
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyboardCapitalization {
+ field public static final androidx.compose.ui.text.input.KeyboardCapitalization.Companion Companion;
+ }
+
+ public static final class KeyboardCapitalization.Companion {
+ method public int getCharacters();
+ method public int getNone();
+ method public int getSentences();
+ method public int getWords();
+ property public final int Characters;
+ property public final int None;
+ property public final int Sentences;
+ property public final int Words;
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyboardType {
+ field public static final androidx.compose.ui.text.input.KeyboardType.Companion Companion;
+ }
+
+ public static final class KeyboardType.Companion {
+ method public int getAscii();
+ method public int getDecimal();
+ method public int getEmail();
+ method public int getNumber();
+ method public int getNumberPassword();
+ method public int getPassword();
+ method public int getPhone();
+ method public int getText();
+ method public int getUri();
+ property public final int Ascii;
+ property public final int Decimal;
+ property public final int Email;
+ property public final int Number;
+ property public final int NumberPassword;
+ property public final int Password;
+ property public final int Phone;
+ property public final int Text;
+ property public final int Uri;
+ }
+
+ public final class MoveCursorCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public MoveCursorCommand(int amount);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getAmount();
+ property public final int amount;
+ }
+
+ public interface OffsetMapping {
+ method public int originalToTransformed(int offset);
+ method public int transformedToOriginal(int offset);
+ field public static final androidx.compose.ui.text.input.OffsetMapping.Companion Companion;
+ }
+
+ public static final class OffsetMapping.Companion {
+ method public androidx.compose.ui.text.input.OffsetMapping getIdentity();
+ property public final androidx.compose.ui.text.input.OffsetMapping Identity;
+ }
+
+ 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);
+ method public char getMask();
+ property public final char mask;
+ }
+
+ public interface PlatformTextInputService {
+ method public void hideSoftwareKeyboard();
+ method public default void notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
+ method public void showSoftwareKeyboard();
+ method public void startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.ImeOptions imeOptions, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditCommand>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+ method public void stopInput();
+ method public void updateState(androidx.compose.ui.text.input.TextFieldValue? oldValue, androidx.compose.ui.text.input.TextFieldValue newValue);
+ }
+
+ public final class SetComposingRegionCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public SetComposingRegionCommand(int start, int end);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getEnd();
+ method public int getStart();
+ property public final int end;
+ property public final int start;
+ }
+
+ public final class SetComposingTextCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public SetComposingTextCommand(androidx.compose.ui.text.AnnotatedString annotatedString, int newCursorPosition);
+ ctor public SetComposingTextCommand(String text, int newCursorPosition);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public int getNewCursorPosition();
+ method public String getText();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public final int newCursorPosition;
+ property public final String text;
+ }
+
+ public final class SetSelectionCommand implements androidx.compose.ui.text.input.EditCommand {
+ ctor public SetSelectionCommand(int start, int end);
+ method public void applyTo(androidx.compose.ui.text.input.EditingBuffer buffer);
+ method public int getEnd();
+ method public int getStart();
+ property public final int end;
+ property public final int start;
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextFieldValue {
+ ctor public TextFieldValue(androidx.compose.ui.text.AnnotatedString annotatedString, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ ctor public TextFieldValue(optional String text, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ method public androidx.compose.ui.text.input.TextFieldValue copy(optional androidx.compose.ui.text.AnnotatedString annotatedString, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ method public androidx.compose.ui.text.input.TextFieldValue copy(String text, optional long selection, optional androidx.compose.ui.text.TextRange? composition);
+ method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
+ method public androidx.compose.ui.text.TextRange? getComposition();
+ method public long getSelection();
+ method public String getText();
+ property public final androidx.compose.ui.text.AnnotatedString annotatedString;
+ property public final androidx.compose.ui.text.TextRange? composition;
+ property public final long selection;
+ property public final String text;
+ field public static final androidx.compose.ui.text.input.TextFieldValue.Companion Companion;
+ }
+
+ public static final class TextFieldValue.Companion {
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> getSaver();
+ property public final androidx.compose.runtime.saveable.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> Saver;
+ }
+
+ public final class TextFieldValueKt {
+ method public static androidx.compose.ui.text.AnnotatedString getSelectedText(androidx.compose.ui.text.input.TextFieldValue);
+ method public static androidx.compose.ui.text.AnnotatedString getTextAfterSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+ method public static androidx.compose.ui.text.AnnotatedString getTextBeforeSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+ }
+
+ public class TextInputService {
+ ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+ method @Deprecated public final void hideSoftwareKeyboard();
+ method @Deprecated public final void showSoftwareKeyboard();
+ method public androidx.compose.ui.text.input.TextInputSession startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.ImeOptions imeOptions, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditCommand>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+ method public void stopInput(androidx.compose.ui.text.input.TextInputSession session);
+ }
+
+ public final class TextInputSession {
+ ctor public TextInputSession(androidx.compose.ui.text.input.TextInputService textInputService, androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+ method public void dispose();
+ method public boolean hideSoftwareKeyboard();
+ method public boolean isOpen();
+ method public boolean notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
+ method public boolean showSoftwareKeyboard();
+ method public boolean updateState(androidx.compose.ui.text.input.TextFieldValue? oldValue, androidx.compose.ui.text.input.TextFieldValue newValue);
+ property public final boolean isOpen;
+ }
+
+ public final class TransformedText {
+ ctor public TransformedText(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.input.OffsetMapping offsetMapping);
+ method public androidx.compose.ui.text.input.OffsetMapping getOffsetMapping();
+ method public androidx.compose.ui.text.AnnotatedString getText();
+ property public final androidx.compose.ui.text.input.OffsetMapping offsetMapping;
+ property public final androidx.compose.ui.text.AnnotatedString text;
+ }
+
+ @androidx.compose.runtime.Immutable public fun interface VisualTransformation {
+ method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+ field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
+ }
+
+ public static final class VisualTransformation.Companion {
+ method public androidx.compose.ui.text.input.VisualTransformation getNone();
+ property public final androidx.compose.ui.text.input.VisualTransformation None;
+ }
+
+}
+
+package androidx.compose.ui.text.intl {
+
+ @androidx.compose.runtime.Immutable public final class Locale {
+ ctor public Locale(String languageTag);
+ method public String getLanguage();
+ method public String getRegion();
+ method public String getScript();
+ method public String toLanguageTag();
+ property public final String language;
+ property public final String region;
+ property public final String script;
+ field public static final androidx.compose.ui.text.intl.Locale.Companion Companion;
+ }
+
+ public static final class Locale.Companion {
+ method public androidx.compose.ui.text.intl.Locale getCurrent();
+ property public final androidx.compose.ui.text.intl.Locale current;
+ }
+
+ @androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+ ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+ ctor public LocaleList(String languageTags);
+ ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+ method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
+ method public boolean containsAll(java.util.Collection<E!> elements);
+ method public operator androidx.compose.ui.text.intl.Locale get(int i);
+ method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
+ method public int getSize();
+ method public boolean isEmpty();
+ method public java.util.Iterator<androidx.compose.ui.text.intl.Locale> iterator();
+ property public final java.util.List<androidx.compose.ui.text.intl.Locale> localeList;
+ property public int size;
+ field public static final androidx.compose.ui.text.intl.LocaleList.Companion Companion;
+ }
+
+ public static final class LocaleList.Companion {
+ method public androidx.compose.ui.text.intl.LocaleList getCurrent();
+ property public final androidx.compose.ui.text.intl.LocaleList current;
+ }
+
+}
+
+package androidx.compose.ui.text.platform.extensions {
+
+ public final class TtsAnnotationExtensions_androidKt {
+ method public static android.text.style.TtsSpan toSpan(androidx.compose.ui.text.TtsAnnotation);
+ method public static android.text.style.TtsSpan toSpan(androidx.compose.ui.text.VerbatimTtsAnnotation);
+ }
+
+}
+
+package androidx.compose.ui.text.style {
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BaselineShift {
+ ctor public BaselineShift(float multiplier);
+ method public float getMultiplier();
+ property public final float multiplier;
+ field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
+ }
+
+ public static final class BaselineShift.Companion {
+ method public float getNone();
+ method public float getSubscript();
+ method public float getSuperscript();
+ property public final float None;
+ property public final float Subscript;
+ property public final float Superscript;
+ }
+
+ public final class BaselineShiftKt {
+ method @androidx.compose.runtime.Stable public static float lerp(float start, float stop, float fraction);
+ }
+
+ @kotlin.jvm.JvmInline public final value class Hyphens {
+ field public static final androidx.compose.ui.text.style.Hyphens.Companion Companion;
+ }
+
+ public static final class Hyphens.Companion {
+ method public int getAuto();
+ method public int getNone();
+ property public final int Auto;
+ property public final int None;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class LineBreak {
+ ctor public LineBreak(int strategy, int strictness, int wordBreak);
+ method public int copy(optional int strategy, optional int strictness, optional int wordBreak);
+ method public int getStrategy();
+ method public int getStrictness();
+ method public int getWordBreak();
+ property public final int strategy;
+ property public final int strictness;
+ property public final int wordBreak;
+ field public static final androidx.compose.ui.text.style.LineBreak.Companion Companion;
+ }
+
+ public static final class LineBreak.Companion {
+ method public int getHeading();
+ method public int getParagraph();
+ method public int getSimple();
+ property public final int Heading;
+ property public final int Paragraph;
+ property public final int Simple;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineBreak.Strategy {
+ field public static final androidx.compose.ui.text.style.LineBreak.Strategy.Companion Companion;
+ }
+
+ public static final class LineBreak.Strategy.Companion {
+ method public int getBalanced();
+ method public int getHighQuality();
+ method public int getSimple();
+ property public final int Balanced;
+ property public final int HighQuality;
+ property public final int Simple;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineBreak.Strictness {
+ field public static final androidx.compose.ui.text.style.LineBreak.Strictness.Companion Companion;
+ }
+
+ public static final class LineBreak.Strictness.Companion {
+ method public int getDefault();
+ method public int getLoose();
+ method public int getNormal();
+ method public int getStrict();
+ property public final int Default;
+ property public final int Loose;
+ property public final int Normal;
+ property public final int Strict;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineBreak.WordBreak {
+ field public static final androidx.compose.ui.text.style.LineBreak.WordBreak.Companion Companion;
+ }
+
+ public static final class LineBreak.WordBreak.Companion {
+ method public int getDefault();
+ method public int getPhrase();
+ property public final int Default;
+ property public final int Phrase;
+ }
+
+ public final class LineHeightStyle {
+ ctor public LineHeightStyle(float alignment, int trim);
+ method public float getAlignment();
+ method public int getTrim();
+ property public final float alignment;
+ property public final int trim;
+ field public static final androidx.compose.ui.text.style.LineHeightStyle.Companion Companion;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineHeightStyle.Alignment {
+ field public static final androidx.compose.ui.text.style.LineHeightStyle.Alignment.Companion Companion;
+ }
+
+ public static final class LineHeightStyle.Alignment.Companion {
+ method public float getBottom();
+ method public float getCenter();
+ method public float getProportional();
+ method public float getTop();
+ property public final float Bottom;
+ property public final float Center;
+ property public final float Proportional;
+ property public final float Top;
+ }
+
+ public static final class LineHeightStyle.Companion {
+ method public androidx.compose.ui.text.style.LineHeightStyle getDefault();
+ property public final androidx.compose.ui.text.style.LineHeightStyle Default;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class LineHeightStyle.Trim {
+ field public static final androidx.compose.ui.text.style.LineHeightStyle.Trim.Companion Companion;
+ }
+
+ public static final class LineHeightStyle.Trim.Companion {
+ method public int getBoth();
+ method public int getFirstLineTop();
+ method public int getLastLineBottom();
+ method public int getNone();
+ property public final int Both;
+ property public final int FirstLineTop;
+ property public final int LastLineBottom;
+ property public final int None;
+ }
+
+ public enum ResolvedTextDirection {
+ method public static androidx.compose.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.text.style.ResolvedTextDirection[] values();
+ enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Ltr;
+ enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Rtl;
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextAlign {
+ field public static final androidx.compose.ui.text.style.TextAlign.Companion Companion;
+ }
+
+ public static final class TextAlign.Companion {
+ method public int getCenter();
+ method public int getEnd();
+ method public int getJustify();
+ method public int getLeft();
+ method public int getRight();
+ method public int getStart();
+ method public java.util.List<androidx.compose.ui.text.style.TextAlign> values();
+ property public final int Center;
+ property public final int End;
+ property public final int Justify;
+ property public final int Left;
+ property public final int Right;
+ property public final int Start;
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextDecoration {
+ method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
+ method public int getMask();
+ method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
+ property public final int mask;
+ field public static final androidx.compose.ui.text.style.TextDecoration.Companion Companion;
+ }
+
+ public static final class TextDecoration.Companion {
+ method public androidx.compose.ui.text.style.TextDecoration combine(java.util.List<androidx.compose.ui.text.style.TextDecoration> decorations);
+ method public androidx.compose.ui.text.style.TextDecoration getLineThrough();
+ method public androidx.compose.ui.text.style.TextDecoration getNone();
+ method public androidx.compose.ui.text.style.TextDecoration getUnderline();
+ property public final androidx.compose.ui.text.style.TextDecoration LineThrough;
+ property public final androidx.compose.ui.text.style.TextDecoration None;
+ property public final androidx.compose.ui.text.style.TextDecoration Underline;
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextDirection {
+ field public static final androidx.compose.ui.text.style.TextDirection.Companion Companion;
+ }
+
+ public static final class TextDirection.Companion {
+ method public int getContent();
+ method public int getContentOrLtr();
+ method public int getContentOrRtl();
+ method public int getLtr();
+ method public int getRtl();
+ property public final int Content;
+ property public final int ContentOrLtr;
+ property public final int ContentOrRtl;
+ property public final int Ltr;
+ property public final int Rtl;
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
+ ctor public TextGeometricTransform(optional float scaleX, optional float skewX);
+ method public androidx.compose.ui.text.style.TextGeometricTransform copy(optional float scaleX, optional float skewX);
+ method public float getScaleX();
+ method public float getSkewX();
+ property public final float scaleX;
+ property public final float skewX;
+ field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
+ }
+
+ public static final class TextGeometricTransform.Companion {
+ }
+
+ public final class TextGeometricTransformKt {
+ method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
+ }
+
+ @androidx.compose.runtime.Immutable public final class TextIndent {
+ ctor public TextIndent(optional long firstLine, optional long restLine);
+ method public androidx.compose.ui.text.style.TextIndent copy(optional long firstLine, optional long restLine);
+ method public long getFirstLine();
+ method public long getRestLine();
+ property public final long firstLine;
+ property public final long restLine;
+ field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
+ }
+
+ public static final class TextIndent.Companion {
+ method public androidx.compose.ui.text.style.TextIndent getNone();
+ property public final androidx.compose.ui.text.style.TextIndent None;
+ }
+
+ public final class TextIndentKt {
+ method public static androidx.compose.ui.text.style.TextIndent lerp(androidx.compose.ui.text.style.TextIndent start, androidx.compose.ui.text.style.TextIndent stop, float fraction);
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextOverflow {
+ field public static final androidx.compose.ui.text.style.TextOverflow.Companion Companion;
+ }
+
+ public static final class TextOverflow.Companion {
+ method public int getClip();
+ method public int getEllipsis();
+ method public int getVisible();
+ property public final int Clip;
+ property public final int Ellipsis;
+ property public final int Visible;
+ }
+
+}
+
diff --git a/compose/ui/ui-text/api/restricted_current.ignore b/compose/ui/ui-text/api/restricted_current.ignore
deleted file mode 100644
index 8b45dbb..0000000
--- a/compose/ui/ui-text/api/restricted_current.ignore
+++ /dev/null
@@ -1,75 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.compose.ui.text.AnnotatedString.Builder#append(char):
- Method androidx.compose.ui.text.AnnotatedString.Builder.append has changed return type from void to androidx.compose.ui.text.AnnotatedString.Builder
-
-
-RemovedClass: androidx.compose.ui.text.ActualAtomicReferenceJvmKt:
- Removed class androidx.compose.ui.text.ActualAtomicReferenceJvmKt
-RemovedClass: androidx.compose.ui.text.AndroidParagraph_androidKt:
- Removed class androidx.compose.ui.text.AndroidParagraph_androidKt
-RemovedClass: androidx.compose.ui.text.JvmAnnotatedString_jvmKt:
- Removed class androidx.compose.ui.text.JvmAnnotatedString_jvmKt
-RemovedClass: androidx.compose.ui.text.JvmCharHelpers_androidKt:
- Removed class androidx.compose.ui.text.JvmCharHelpers_androidKt
-RemovedClass: androidx.compose.ui.text.MultiParagraphIntrinsicsKt:
- Removed class androidx.compose.ui.text.MultiParagraphIntrinsicsKt
-RemovedClass: androidx.compose.ui.text.MultiParagraphKt:
- Removed class androidx.compose.ui.text.MultiParagraphKt
-RemovedClass: androidx.compose.ui.text.SaversKt:
- Removed class androidx.compose.ui.text.SaversKt
-RemovedClass: androidx.compose.ui.text.TempListUtilsKt:
- Removed class androidx.compose.ui.text.TempListUtilsKt
-RemovedClass: androidx.compose.ui.text.TextMeasurerKt:
- Removed class androidx.compose.ui.text.TextMeasurerKt
-RemovedClass: androidx.compose.ui.text.TextPainterKt:
- Removed class androidx.compose.ui.text.TextPainterKt
-RemovedClass: androidx.compose.ui.text.font.AndroidFontLoader_androidKt:
- Removed class androidx.compose.ui.text.font.AndroidFontLoader_androidKt
-RemovedClass: androidx.compose.ui.text.font.AndroidFontResolveInterceptor_androidKt:
- Removed class androidx.compose.ui.text.font.AndroidFontResolveInterceptor_androidKt
-RemovedClass: androidx.compose.ui.text.font.AndroidFontUtils_androidKt:
- Removed class androidx.compose.ui.text.font.AndroidFontUtils_androidKt
-RemovedClass: androidx.compose.ui.text.font.FontFamilyResolverKt:
- Removed class androidx.compose.ui.text.font.FontFamilyResolverKt
-RemovedClass: androidx.compose.ui.text.font.FontListFontFamilyTypefaceAdapterKt:
- Removed class androidx.compose.ui.text.font.FontListFontFamilyTypefaceAdapterKt
-RemovedClass: androidx.compose.ui.text.font.FontSynthesis_androidKt:
- Removed class androidx.compose.ui.text.font.FontSynthesis_androidKt
-RemovedClass: androidx.compose.ui.text.font.PlatformTypefacesKt:
- Removed class androidx.compose.ui.text.font.PlatformTypefacesKt
-RemovedClass: androidx.compose.ui.text.input.EditCommandKt:
- Removed class androidx.compose.ui.text.input.EditCommandKt
-RemovedClass: androidx.compose.ui.text.input.EditingBufferKt:
- Removed class androidx.compose.ui.text.input.EditingBufferKt
-RemovedClass: androidx.compose.ui.text.input.GapBufferKt:
- Removed class androidx.compose.ui.text.input.GapBufferKt
-RemovedClass: androidx.compose.ui.text.input.GapBuffer_jvmKt:
- Removed class androidx.compose.ui.text.input.GapBuffer_jvmKt
-RemovedClass: androidx.compose.ui.text.intl.AndroidPlatformLocale_androidKt:
- Removed class androidx.compose.ui.text.intl.AndroidPlatformLocale_androidKt
-RemovedClass: androidx.compose.ui.text.intl.PlatformLocaleKt:
- Removed class androidx.compose.ui.text.intl.PlatformLocaleKt
-RemovedClass: androidx.compose.ui.text.platform.extensions.LocaleExtensions_androidKt:
- Removed class androidx.compose.ui.text.platform.extensions.LocaleExtensions_androidKt
-RemovedClass: androidx.compose.ui.text.platform.extensions.PlaceholderExtensions_androidKt:
- Removed class androidx.compose.ui.text.platform.extensions.PlaceholderExtensions_androidKt
-RemovedClass: androidx.compose.ui.text.platform.extensions.SpannableExtensions_androidKt:
- Removed class androidx.compose.ui.text.platform.extensions.SpannableExtensions_androidKt
-RemovedClass: androidx.compose.ui.text.platform.extensions.TextPaintExtensions_androidKt:
- Removed class androidx.compose.ui.text.platform.extensions.TextPaintExtensions_androidKt
-RemovedClass: androidx.compose.ui.text.platform.extensions.UrlAnnotationExtensions_androidKt:
- Removed class androidx.compose.ui.text.platform.extensions.UrlAnnotationExtensions_androidKt
-RemovedClass: androidx.compose.ui.text.style.TextDrawStyleKt:
- Removed class androidx.compose.ui.text.style.TextDrawStyleKt
-
-
-RemovedPackage: androidx.compose.ui.text.android:
- Removed package androidx.compose.ui.text.android
-RemovedPackage: androidx.compose.ui.text.android.style:
- Removed package androidx.compose.ui.text.android.style
-RemovedPackage: androidx.compose.ui.text.caches:
- Removed package androidx.compose.ui.text.caches
-RemovedPackage: androidx.compose.ui.text.internal:
- Removed package androidx.compose.ui.text.internal
-RemovedPackage: androidx.compose.ui.text.platform:
- Removed package androidx.compose.ui.text.platform
diff --git a/compose/ui/ui-tooling-data/api/1.4.0-beta02.txt b/compose/ui/ui-tooling-data/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/compose/ui/ui-tooling-data/api/1.4.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/compose/ui/ui-tooling-data/api/current.ignore b/compose/ui/ui-tooling-data/api/current.ignore
deleted file mode 100644
index 4f21a78..0000000
--- a/compose/ui/ui-tooling-data/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedPackage: androidx.compose.ui.tooling.data:
- Removed package androidx.compose.ui.tooling.data
diff --git a/compose/ui/ui-tooling-data/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-tooling-data/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..899fa9f
--- /dev/null
+++ b/compose/ui/ui-tooling-data/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,127 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling.data {
+
+ @androidx.compose.ui.tooling.data.UiToolingDataApi public final class CallGroup extends androidx.compose.ui.tooling.data.Group {
+ ctor public CallGroup(Object? key, String? name, androidx.compose.ui.unit.IntRect box, androidx.compose.ui.tooling.data.SourceLocation? location, Object? identity, java.util.List<androidx.compose.ui.tooling.data.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.compose.ui.tooling.data.Group> children, boolean isInline);
+ property public java.util.List<androidx.compose.ui.tooling.data.ParameterInformation> parameters;
+ }
+
+ @androidx.compose.ui.tooling.data.UiToolingDataApi public final class ContextCache {
+ ctor public ContextCache();
+ method public void clear();
+ }
+
+ @androidx.compose.ui.tooling.data.UiToolingDataApi public abstract sealed class Group {
+ method public final androidx.compose.ui.unit.IntRect getBox();
+ method public final java.util.Collection<androidx.compose.ui.tooling.data.Group> getChildren();
+ method public final java.util.Collection<java.lang.Object> getData();
+ method public final Object? getIdentity();
+ method public final Object? getKey();
+ method public final androidx.compose.ui.tooling.data.SourceLocation? getLocation();
+ method public java.util.List<androidx.compose.ui.layout.ModifierInfo> getModifierInfo();
+ method public final String? getName();
+ method public java.util.List<androidx.compose.ui.tooling.data.ParameterInformation> getParameters();
+ method public final boolean isInline();
+ property public final androidx.compose.ui.unit.IntRect box;
+ property public final java.util.Collection<androidx.compose.ui.tooling.data.Group> children;
+ property public final java.util.Collection<java.lang.Object> data;
+ property public final Object? identity;
+ property public final boolean isInline;
+ property public final Object? key;
+ property public final androidx.compose.ui.tooling.data.SourceLocation? location;
+ property public java.util.List<androidx.compose.ui.layout.ModifierInfo> modifierInfo;
+ property public final String? name;
+ property public java.util.List<androidx.compose.ui.tooling.data.ParameterInformation> parameters;
+ }
+
+ @androidx.compose.ui.tooling.data.UiToolingDataApi public final class JoinedKey {
+ ctor public JoinedKey(Object? left, Object? right);
+ method public Object? component1();
+ method public Object? component2();
+ method public androidx.compose.ui.tooling.data.JoinedKey copy(Object? left, Object? right);
+ method public Object? getLeft();
+ method public Object? getRight();
+ property public final Object? left;
+ property public final Object? right;
+ }
+
+ @androidx.compose.ui.tooling.data.UiToolingDataApi public final class NodeGroup extends androidx.compose.ui.tooling.data.Group {
+ ctor public NodeGroup(Object? key, Object node, androidx.compose.ui.unit.IntRect box, java.util.Collection<?> data, java.util.List<androidx.compose.ui.layout.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.compose.ui.tooling.data.Group> children);
+ method public Object getNode();
+ property public java.util.List<androidx.compose.ui.layout.ModifierInfo> modifierInfo;
+ property public final Object node;
+ }
+
+ @androidx.compose.ui.tooling.data.UiToolingDataApi public final class ParameterInformation {
+ ctor public ParameterInformation(String name, Object? value, boolean fromDefault, boolean static, boolean compared, String? inlineClass, boolean stable);
+ method public String component1();
+ method public Object? component2();
+ method public boolean component3();
+ method public boolean component4();
+ method public boolean component5();
+ method public String? component6();
+ method public boolean component7();
+ method public androidx.compose.ui.tooling.data.ParameterInformation copy(String name, Object? value, boolean fromDefault, boolean static, boolean compared, String? inlineClass, boolean stable);
+ method public boolean getCompared();
+ method public boolean getFromDefault();
+ method public String? getInlineClass();
+ method public String getName();
+ method public boolean getStable();
+ method public boolean getStatic();
+ method public Object? getValue();
+ property public final boolean compared;
+ property public final boolean fromDefault;
+ property public final String? inlineClass;
+ property public final String name;
+ property public final boolean stable;
+ property public final boolean static;
+ property public final Object? value;
+ }
+
+ public final class SlotTreeKt {
+ method @androidx.compose.ui.tooling.data.UiToolingDataApi public static androidx.compose.ui.tooling.data.Group asTree(androidx.compose.runtime.tooling.CompositionData);
+ method @androidx.compose.ui.tooling.data.UiToolingDataApi public static java.util.List<androidx.compose.ui.tooling.data.ParameterInformation> findParameters(androidx.compose.runtime.tooling.CompositionGroup, optional androidx.compose.ui.tooling.data.ContextCache? cache);
+ method @androidx.compose.ui.tooling.data.UiToolingDataApi public static String? getPosition(androidx.compose.ui.tooling.data.Group);
+ method @androidx.compose.ui.tooling.data.UiToolingDataApi public static <T> T? mapTree(androidx.compose.runtime.tooling.CompositionData, kotlin.jvm.functions.Function3<? super androidx.compose.runtime.tooling.CompositionGroup,? super androidx.compose.ui.tooling.data.SourceContext,? super java.util.List<? extends T>,? extends T> factory, optional androidx.compose.ui.tooling.data.ContextCache cache);
+ }
+
+ @androidx.compose.ui.tooling.data.UiToolingDataApi public interface SourceContext {
+ method public androidx.compose.ui.unit.IntRect getBounds();
+ method public int getDepth();
+ method public androidx.compose.ui.tooling.data.SourceLocation? getLocation();
+ method public String? getName();
+ method public java.util.List<androidx.compose.ui.tooling.data.ParameterInformation> getParameters();
+ method public default boolean isInline();
+ property public abstract androidx.compose.ui.unit.IntRect bounds;
+ property public abstract int depth;
+ property public default boolean isInline;
+ property public abstract androidx.compose.ui.tooling.data.SourceLocation? location;
+ property public abstract String? name;
+ property public abstract java.util.List<androidx.compose.ui.tooling.data.ParameterInformation> parameters;
+ }
+
+ @androidx.compose.ui.tooling.data.UiToolingDataApi public final class SourceLocation {
+ ctor public SourceLocation(int lineNumber, int offset, int length, String? sourceFile, int packageHash);
+ method public int component1();
+ method public int component2();
+ method public int component3();
+ method public String? component4();
+ method public int component5();
+ method public androidx.compose.ui.tooling.data.SourceLocation copy(int lineNumber, int offset, int length, String? sourceFile, int packageHash);
+ method public int getLength();
+ method public int getLineNumber();
+ method public int getOffset();
+ method public int getPackageHash();
+ method public String? getSourceFile();
+ property public final int length;
+ property public final int lineNumber;
+ property public final int offset;
+ property public final int packageHash;
+ property public final String? sourceFile;
+ }
+
+ @kotlin.RequiresOptIn(message="This API is for tooling only and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface UiToolingDataApi {
+ }
+
+}
+
diff --git a/compose/ui/ui-tooling-data/api/res-1.4.0-beta02.txt b/compose/ui/ui-tooling-data/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-tooling-data/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-tooling-data/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-tooling-data/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/compose/ui/ui-tooling-data/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/compose/ui/ui-tooling-data/api/restricted_current.ignore b/compose/ui/ui-tooling-data/api/restricted_current.ignore
deleted file mode 100644
index 4f21a78..0000000
--- a/compose/ui/ui-tooling-data/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedPackage: androidx.compose.ui.tooling.data:
- Removed package androidx.compose.ui.tooling.data
diff --git a/compose/ui/ui-tooling-preview/api/1.4.0-beta02.txt b/compose/ui/ui-tooling-preview/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..a5363d9
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/1.4.0-beta02.txt
@@ -0,0 +1,113 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling.preview {
+
+ public final class Devices {
+ field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
+ field public static final String DEFAULT = "";
+ field public static final String DESKTOP = "spec:shape=Normal,width=1920,height=1080,unit=dp,dpi=420";
+ field public static final String FOLDABLE = "spec:shape=Normal,width=673,height=841,unit=dp,dpi=480";
+ field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
+ field public static final String NEXUS_10 = "name:Nexus 10";
+ field public static final String NEXUS_5 = "id:Nexus 5";
+ field public static final String NEXUS_5X = "id:Nexus 5X";
+ field public static final String NEXUS_6 = "id:Nexus 6";
+ field public static final String NEXUS_6P = "id:Nexus 6P";
+ field public static final String NEXUS_7 = "id:Nexus 7";
+ field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
+ field public static final String NEXUS_9 = "id:Nexus 9";
+ field public static final String PHONE = "spec:id=reference_phone,shape=Normal,width=411,height=891,unit=dp,dpi=420";
+ field public static final String PIXEL = "id:pixel";
+ field public static final String PIXEL_2 = "id:pixel_2";
+ field public static final String PIXEL_2_XL = "id:pixel_2_xl";
+ field public static final String PIXEL_3 = "id:pixel_3";
+ field public static final String PIXEL_3A = "id:pixel_3a";
+ field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
+ field public static final String PIXEL_3_XL = "id:pixel_3_xl";
+ field public static final String PIXEL_4 = "id:pixel_4";
+ field public static final String PIXEL_4_XL = "id:pixel_4_xl";
+ field public static final String PIXEL_C = "id:pixel_c";
+ field public static final String PIXEL_XL = "id:pixel_xl";
+ field public static final String TABLET = "spec:shape=Normal,width=1280,height=800,unit=dp,dpi=420";
+ field public static final String TV_1080p = "spec:shape=Normal,width=1920,height=1080,unit=dp,dpi=420";
+ field public static final String TV_720p = "spec:shape=Normal,width=1280,height=720,unit=dp,dpi=420";
+ field public static final String WEAR_OS_LARGE_ROUND = "id:wearos_large_round";
+ field public static final String WEAR_OS_RECT = "id:wearos_rect";
+ field public static final String WEAR_OS_SMALL_ROUND = "id:wearos_small_round";
+ field public static final String WEAR_OS_SQUARE = "id:wearos_square";
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface Preview {
+ method public abstract int apiLevel() default -1;
+ method public abstract long backgroundColor() default 0;
+ method public abstract String device() default androidx.compose.ui.tooling.preview.Devices.DEFAULT;
+ method public abstract float fontScale() default 1.0;
+ method public abstract String group() default "";
+ method public abstract int heightDp() default -1;
+ method public abstract String locale() default "";
+ method public abstract String name() default "";
+ method public abstract boolean showBackground() default false;
+ method public abstract boolean showSystemUi() default false;
+ method public abstract int uiMode() default 0;
+ method public abstract int wallpaper() default androidx.compose.ui.tooling.preview.Wallpapers.NONE;
+ method public abstract int widthDp() default -1;
+ property public abstract int apiLevel;
+ property public abstract long backgroundColor;
+ property public abstract String device;
+ property public abstract float fontScale;
+ property public abstract String group;
+ property public abstract int heightDp;
+ property public abstract String locale;
+ property public abstract String name;
+ property public abstract boolean showBackground;
+ property public abstract boolean showSystemUi;
+ property public abstract int uiMode;
+ property public abstract int wallpaper;
+ property public abstract int widthDp;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface Preview.Container {
+ method public abstract androidx.compose.ui.tooling.preview.Preview[] value();
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
+ method public abstract int limit() default kotlin.jvm.internal.IntCompanionObject.MAX_VALUE;
+ method public abstract kotlin.reflect.KClass<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
+ property public abstract int limit;
+ property public abstract kotlin.reflect.KClass<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PreviewParameterProvider<T> {
+ method public default int getCount();
+ method public kotlin.sequences.Sequence<T> getValues();
+ property public default int count;
+ property public abstract kotlin.sequences.Sequence<T> values;
+ }
+
+ public final class Wallpapers {
+ field public static final int BLUE_DOMINATED_EXAMPLE = 2; // 0x2
+ field public static final int GREEN_DOMINATED_EXAMPLE = 1; // 0x1
+ field public static final androidx.compose.ui.tooling.preview.Wallpapers INSTANCE;
+ field public static final int NONE = -1; // 0xffffffff
+ field public static final int RED_DOMINATED_EXAMPLE = 0; // 0x0
+ field public static final int YELLOW_DOMINATED_EXAMPLE = 3; // 0x3
+ }
+
+}
+
+package androidx.compose.ui.tooling.preview.datasource {
+
+ public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
+ ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
+ method public kotlin.sequences.Sequence<T> getValues();
+ property public kotlin.sequences.Sequence<T> values;
+ }
+
+ public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
+ ctor public LoremIpsum(int words);
+ ctor public LoremIpsum();
+ method public kotlin.sequences.Sequence<java.lang.String> getValues();
+ property public kotlin.sequences.Sequence<java.lang.String> values;
+ }
+
+}
+
diff --git a/compose/ui/ui-tooling-preview/api/current.ignore b/compose/ui/ui-tooling-preview/api/current.ignore
deleted file mode 100644
index b7d9b38..0000000
--- a/compose/ui/ui-tooling-preview/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.tooling.preview.datasource.LoremIpsumKt:
- Removed class androidx.compose.ui.tooling.preview.datasource.LoremIpsumKt
diff --git a/compose/ui/ui-tooling-preview/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-tooling-preview/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..a5363d9
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,113 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling.preview {
+
+ public final class Devices {
+ field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
+ field public static final String DEFAULT = "";
+ field public static final String DESKTOP = "spec:shape=Normal,width=1920,height=1080,unit=dp,dpi=420";
+ field public static final String FOLDABLE = "spec:shape=Normal,width=673,height=841,unit=dp,dpi=480";
+ field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
+ field public static final String NEXUS_10 = "name:Nexus 10";
+ field public static final String NEXUS_5 = "id:Nexus 5";
+ field public static final String NEXUS_5X = "id:Nexus 5X";
+ field public static final String NEXUS_6 = "id:Nexus 6";
+ field public static final String NEXUS_6P = "id:Nexus 6P";
+ field public static final String NEXUS_7 = "id:Nexus 7";
+ field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
+ field public static final String NEXUS_9 = "id:Nexus 9";
+ field public static final String PHONE = "spec:id=reference_phone,shape=Normal,width=411,height=891,unit=dp,dpi=420";
+ field public static final String PIXEL = "id:pixel";
+ field public static final String PIXEL_2 = "id:pixel_2";
+ field public static final String PIXEL_2_XL = "id:pixel_2_xl";
+ field public static final String PIXEL_3 = "id:pixel_3";
+ field public static final String PIXEL_3A = "id:pixel_3a";
+ field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
+ field public static final String PIXEL_3_XL = "id:pixel_3_xl";
+ field public static final String PIXEL_4 = "id:pixel_4";
+ field public static final String PIXEL_4_XL = "id:pixel_4_xl";
+ field public static final String PIXEL_C = "id:pixel_c";
+ field public static final String PIXEL_XL = "id:pixel_xl";
+ field public static final String TABLET = "spec:shape=Normal,width=1280,height=800,unit=dp,dpi=420";
+ field public static final String TV_1080p = "spec:shape=Normal,width=1920,height=1080,unit=dp,dpi=420";
+ field public static final String TV_720p = "spec:shape=Normal,width=1280,height=720,unit=dp,dpi=420";
+ field public static final String WEAR_OS_LARGE_ROUND = "id:wearos_large_round";
+ field public static final String WEAR_OS_RECT = "id:wearos_rect";
+ field public static final String WEAR_OS_SMALL_ROUND = "id:wearos_small_round";
+ field public static final String WEAR_OS_SQUARE = "id:wearos_square";
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface Preview {
+ method public abstract int apiLevel() default -1;
+ method public abstract long backgroundColor() default 0;
+ method public abstract String device() default androidx.compose.ui.tooling.preview.Devices.DEFAULT;
+ method public abstract float fontScale() default 1.0;
+ method public abstract String group() default "";
+ method public abstract int heightDp() default -1;
+ method public abstract String locale() default "";
+ method public abstract String name() default "";
+ method public abstract boolean showBackground() default false;
+ method public abstract boolean showSystemUi() default false;
+ method public abstract int uiMode() default 0;
+ method public abstract int wallpaper() default androidx.compose.ui.tooling.preview.Wallpapers.NONE;
+ method public abstract int widthDp() default -1;
+ property public abstract int apiLevel;
+ property public abstract long backgroundColor;
+ property public abstract String device;
+ property public abstract float fontScale;
+ property public abstract String group;
+ property public abstract int heightDp;
+ property public abstract String locale;
+ property public abstract String name;
+ property public abstract boolean showBackground;
+ property public abstract boolean showSystemUi;
+ property public abstract int uiMode;
+ property public abstract int wallpaper;
+ property public abstract int widthDp;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface Preview.Container {
+ method public abstract androidx.compose.ui.tooling.preview.Preview[] value();
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
+ method public abstract int limit() default kotlin.jvm.internal.IntCompanionObject.MAX_VALUE;
+ method public abstract kotlin.reflect.KClass<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
+ property public abstract int limit;
+ property public abstract kotlin.reflect.KClass<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PreviewParameterProvider<T> {
+ method public default int getCount();
+ method public kotlin.sequences.Sequence<T> getValues();
+ property public default int count;
+ property public abstract kotlin.sequences.Sequence<T> values;
+ }
+
+ public final class Wallpapers {
+ field public static final int BLUE_DOMINATED_EXAMPLE = 2; // 0x2
+ field public static final int GREEN_DOMINATED_EXAMPLE = 1; // 0x1
+ field public static final androidx.compose.ui.tooling.preview.Wallpapers INSTANCE;
+ field public static final int NONE = -1; // 0xffffffff
+ field public static final int RED_DOMINATED_EXAMPLE = 0; // 0x0
+ field public static final int YELLOW_DOMINATED_EXAMPLE = 3; // 0x3
+ }
+
+}
+
+package androidx.compose.ui.tooling.preview.datasource {
+
+ public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
+ ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
+ method public kotlin.sequences.Sequence<T> getValues();
+ property public kotlin.sequences.Sequence<T> values;
+ }
+
+ public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
+ ctor public LoremIpsum(int words);
+ ctor public LoremIpsum();
+ method public kotlin.sequences.Sequence<java.lang.String> getValues();
+ property public kotlin.sequences.Sequence<java.lang.String> values;
+ }
+
+}
+
diff --git a/compose/ui/ui-tooling-preview/api/res-1.4.0-beta02.txt b/compose/ui/ui-tooling-preview/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-tooling-preview/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-tooling-preview/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..a5363d9
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,113 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling.preview {
+
+ public final class Devices {
+ field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
+ field public static final String DEFAULT = "";
+ field public static final String DESKTOP = "spec:shape=Normal,width=1920,height=1080,unit=dp,dpi=420";
+ field public static final String FOLDABLE = "spec:shape=Normal,width=673,height=841,unit=dp,dpi=480";
+ field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
+ field public static final String NEXUS_10 = "name:Nexus 10";
+ field public static final String NEXUS_5 = "id:Nexus 5";
+ field public static final String NEXUS_5X = "id:Nexus 5X";
+ field public static final String NEXUS_6 = "id:Nexus 6";
+ field public static final String NEXUS_6P = "id:Nexus 6P";
+ field public static final String NEXUS_7 = "id:Nexus 7";
+ field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
+ field public static final String NEXUS_9 = "id:Nexus 9";
+ field public static final String PHONE = "spec:id=reference_phone,shape=Normal,width=411,height=891,unit=dp,dpi=420";
+ field public static final String PIXEL = "id:pixel";
+ field public static final String PIXEL_2 = "id:pixel_2";
+ field public static final String PIXEL_2_XL = "id:pixel_2_xl";
+ field public static final String PIXEL_3 = "id:pixel_3";
+ field public static final String PIXEL_3A = "id:pixel_3a";
+ field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
+ field public static final String PIXEL_3_XL = "id:pixel_3_xl";
+ field public static final String PIXEL_4 = "id:pixel_4";
+ field public static final String PIXEL_4_XL = "id:pixel_4_xl";
+ field public static final String PIXEL_C = "id:pixel_c";
+ field public static final String PIXEL_XL = "id:pixel_xl";
+ field public static final String TABLET = "spec:shape=Normal,width=1280,height=800,unit=dp,dpi=420";
+ field public static final String TV_1080p = "spec:shape=Normal,width=1920,height=1080,unit=dp,dpi=420";
+ field public static final String TV_720p = "spec:shape=Normal,width=1280,height=720,unit=dp,dpi=420";
+ field public static final String WEAR_OS_LARGE_ROUND = "id:wearos_large_round";
+ field public static final String WEAR_OS_RECT = "id:wearos_rect";
+ field public static final String WEAR_OS_SMALL_ROUND = "id:wearos_small_round";
+ field public static final String WEAR_OS_SQUARE = "id:wearos_square";
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface Preview {
+ method public abstract int apiLevel() default -1;
+ method public abstract long backgroundColor() default 0;
+ method public abstract String device() default androidx.compose.ui.tooling.preview.Devices.DEFAULT;
+ method public abstract float fontScale() default 1.0;
+ method public abstract String group() default "";
+ method public abstract int heightDp() default -1;
+ method public abstract String locale() default "";
+ method public abstract String name() default "";
+ method public abstract boolean showBackground() default false;
+ method public abstract boolean showSystemUi() default false;
+ method public abstract int uiMode() default 0;
+ method public abstract int wallpaper() default androidx.compose.ui.tooling.preview.Wallpapers.NONE;
+ method public abstract int widthDp() default -1;
+ property public abstract int apiLevel;
+ property public abstract long backgroundColor;
+ property public abstract String device;
+ property public abstract float fontScale;
+ property public abstract String group;
+ property public abstract int heightDp;
+ property public abstract String locale;
+ property public abstract String name;
+ property public abstract boolean showBackground;
+ property public abstract boolean showSystemUi;
+ property public abstract int uiMode;
+ property public abstract int wallpaper;
+ property public abstract int widthDp;
+ }
+
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface Preview.Container {
+ method public abstract androidx.compose.ui.tooling.preview.Preview[] value();
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
+ method public abstract int limit() default kotlin.jvm.internal.IntCompanionObject.MAX_VALUE;
+ method public abstract kotlin.reflect.KClass<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
+ property public abstract int limit;
+ property public abstract kotlin.reflect.KClass<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PreviewParameterProvider<T> {
+ method public default int getCount();
+ method public kotlin.sequences.Sequence<T> getValues();
+ property public default int count;
+ property public abstract kotlin.sequences.Sequence<T> values;
+ }
+
+ public final class Wallpapers {
+ field public static final int BLUE_DOMINATED_EXAMPLE = 2; // 0x2
+ field public static final int GREEN_DOMINATED_EXAMPLE = 1; // 0x1
+ field public static final androidx.compose.ui.tooling.preview.Wallpapers INSTANCE;
+ field public static final int NONE = -1; // 0xffffffff
+ field public static final int RED_DOMINATED_EXAMPLE = 0; // 0x0
+ field public static final int YELLOW_DOMINATED_EXAMPLE = 3; // 0x3
+ }
+
+}
+
+package androidx.compose.ui.tooling.preview.datasource {
+
+ public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
+ ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
+ method public kotlin.sequences.Sequence<T> getValues();
+ property public kotlin.sequences.Sequence<T> values;
+ }
+
+ public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
+ ctor public LoremIpsum(int words);
+ ctor public LoremIpsum();
+ method public kotlin.sequences.Sequence<java.lang.String> getValues();
+ property public kotlin.sequences.Sequence<java.lang.String> values;
+ }
+
+}
+
diff --git a/compose/ui/ui-tooling-preview/api/restricted_current.ignore b/compose/ui/ui-tooling-preview/api/restricted_current.ignore
deleted file mode 100644
index b7d9b38..0000000
--- a/compose/ui/ui-tooling-preview/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.tooling.preview.datasource.LoremIpsumKt:
- Removed class androidx.compose.ui.tooling.preview.datasource.LoremIpsumKt
diff --git a/compose/ui/ui-tooling/api/1.4.0-beta02.txt b/compose/ui/ui-tooling/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..94b79be
--- /dev/null
+++ b/compose/ui/ui-tooling/api/1.4.0-beta02.txt
@@ -0,0 +1,20 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling {
+
+ public final class InspectableKt {
+ method @Deprecated @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+}
+
+package androidx.compose.ui.tooling.animation {
+
+ public final class ToolingState<T> implements androidx.compose.runtime.State<T> {
+ ctor public ToolingState(T? default);
+ method public T! getValue();
+ method public void setValue(T!);
+ property public T! value;
+ }
+
+}
+
diff --git a/compose/ui/ui-tooling/api/current.ignore b/compose/ui/ui-tooling/api/current.ignore
deleted file mode 100644
index 5c14f2e..0000000
--- a/compose/ui/ui-tooling/api/current.ignore
+++ /dev/null
@@ -1,7 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.tooling.ComposeViewAdapterKt:
- Removed class androidx.compose.ui.tooling.ComposeViewAdapterKt
-RemovedClass: androidx.compose.ui.tooling.PreviewUtilsKt:
- Removed class androidx.compose.ui.tooling.PreviewUtilsKt
-RemovedClass: androidx.compose.ui.tooling.animation.ComposeAnimationParserKt:
- Removed class androidx.compose.ui.tooling.animation.ComposeAnimationParserKt
diff --git a/compose/ui/ui-tooling/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-tooling/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..e9656ce
--- /dev/null
+++ b/compose/ui/ui-tooling/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,25 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling {
+
+ @Deprecated @androidx.compose.ui.ExperimentalComposeUiApi public final class ComposableInvoker {
+ method @Deprecated @androidx.compose.ui.ExperimentalComposeUiApi public void invokeComposable(String className, String methodName, androidx.compose.runtime.Composer composer, java.lang.Object?... args);
+ field @Deprecated public static final androidx.compose.ui.tooling.ComposableInvoker INSTANCE;
+ }
+
+ public final class InspectableKt {
+ method @Deprecated @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+}
+
+package androidx.compose.ui.tooling.animation {
+
+ public final class ToolingState<T> implements androidx.compose.runtime.State<T> {
+ ctor public ToolingState(T? default);
+ method public T! getValue();
+ method public void setValue(T!);
+ property public T! value;
+ }
+
+}
+
diff --git a/compose/ui/ui-tooling/api/res-1.4.0-beta02.txt b/compose/ui/ui-tooling/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-tooling/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-tooling/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-tooling/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..94b79be
--- /dev/null
+++ b/compose/ui/ui-tooling/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,20 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling {
+
+ public final class InspectableKt {
+ method @Deprecated @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+}
+
+package androidx.compose.ui.tooling.animation {
+
+ public final class ToolingState<T> implements androidx.compose.runtime.State<T> {
+ ctor public ToolingState(T? default);
+ method public T! getValue();
+ method public void setValue(T!);
+ property public T! value;
+ }
+
+}
+
diff --git a/compose/ui/ui-tooling/api/restricted_current.ignore b/compose/ui/ui-tooling/api/restricted_current.ignore
deleted file mode 100644
index 5c14f2e..0000000
--- a/compose/ui/ui-tooling/api/restricted_current.ignore
+++ /dev/null
@@ -1,7 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.compose.ui.tooling.ComposeViewAdapterKt:
- Removed class androidx.compose.ui.tooling.ComposeViewAdapterKt
-RemovedClass: androidx.compose.ui.tooling.PreviewUtilsKt:
- Removed class androidx.compose.ui.tooling.PreviewUtilsKt
-RemovedClass: androidx.compose.ui.tooling.animation.ComposeAnimationParserKt:
- Removed class androidx.compose.ui.tooling.animation.ComposeAnimationParserKt
diff --git a/compose/ui/ui-unit/api/1.4.0-beta02.txt b/compose/ui/ui-unit/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..3826e65
--- /dev/null
+++ b/compose/ui/ui-unit/api/1.4.0-beta02.txt
@@ -0,0 +1,414 @@
+// Signature format: 4.0
+package androidx.compose.ui.unit {
+
+ public final class AndroidDensity_androidKt {
+ method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Constraints {
+ ctor public Constraints(@kotlin.PublishedApi long value);
+ method public long copy(optional int minWidth, optional int maxWidth, optional int minHeight, optional int maxHeight);
+ method public boolean getHasBoundedHeight();
+ method public boolean getHasBoundedWidth();
+ method public boolean getHasFixedHeight();
+ method public boolean getHasFixedWidth();
+ method public int getMaxHeight();
+ method public int getMaxWidth();
+ method public int getMinHeight();
+ method public int getMinWidth();
+ method public boolean isZero();
+ property public final boolean hasBoundedHeight;
+ property public final boolean hasBoundedWidth;
+ property @androidx.compose.runtime.Stable public final boolean hasFixedHeight;
+ property @androidx.compose.runtime.Stable public final boolean hasFixedWidth;
+ property @androidx.compose.runtime.Stable public final boolean isZero;
+ property public final int maxHeight;
+ property public final int maxWidth;
+ property public final int minHeight;
+ property public final int minWidth;
+ field public static final androidx.compose.ui.unit.Constraints.Companion Companion;
+ field public static final int Infinity = 2147483647; // 0x7fffffff
+ }
+
+ public static final class Constraints.Companion {
+ method @androidx.compose.runtime.Stable public long fixed(int width, int height);
+ method @androidx.compose.runtime.Stable public long fixedHeight(int height);
+ method @androidx.compose.runtime.Stable public long fixedWidth(int width);
+ }
+
+ public final class ConstraintsKt {
+ method @androidx.compose.runtime.Stable public static long Constraints(optional int minWidth, optional int maxWidth, optional int minHeight, optional int maxHeight);
+ method public static long constrain(long, long otherConstraints);
+ method @androidx.compose.runtime.Stable public static long constrain(long, long size);
+ method @androidx.compose.runtime.Stable public static int constrainHeight(long, int height);
+ method @androidx.compose.runtime.Stable public static int constrainWidth(long, int width);
+ method @androidx.compose.runtime.Stable public static boolean isSatisfiedBy(long, long size);
+ method @androidx.compose.runtime.Stable public static long offset(long, optional int horizontal, optional int vertical);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface Density {
+ method public float getDensity();
+ method public float getFontScale();
+ method @androidx.compose.runtime.Stable public default int roundToPx(float);
+ method @androidx.compose.runtime.Stable public default int roundToPx(long);
+ method @androidx.compose.runtime.Stable public default float toDp(long);
+ method @androidx.compose.runtime.Stable public default float toDp(int);
+ method @androidx.compose.runtime.Stable public default float toDp(float);
+ method @androidx.compose.runtime.Stable public default long toDpSize(long);
+ method @androidx.compose.runtime.Stable public default float toPx(float);
+ method @androidx.compose.runtime.Stable public default float toPx(long);
+ method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.DpRect);
+ method @androidx.compose.runtime.Stable public default long toSize(long);
+ method @androidx.compose.runtime.Stable public default long toSp(float);
+ method @androidx.compose.runtime.Stable public default long toSp(int);
+ method @androidx.compose.runtime.Stable public default long toSp(float);
+ property public abstract float density;
+ property public abstract float fontScale;
+ }
+
+ public final class DensityKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Density Density(float density, optional float fontScale);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Dp implements java.lang.Comparable<androidx.compose.ui.unit.Dp> {
+ ctor public Dp(float value);
+ method @androidx.compose.runtime.Stable public operator int compareTo(float other);
+ method @androidx.compose.runtime.Stable public inline operator float div(float other);
+ method @androidx.compose.runtime.Stable public inline operator float div(int other);
+ method @androidx.compose.runtime.Stable public inline operator float div(float other);
+ method public float getValue();
+ method @androidx.compose.runtime.Stable public inline operator float minus(float other);
+ method @androidx.compose.runtime.Stable public inline operator float plus(float other);
+ method @androidx.compose.runtime.Stable public inline operator float times(float other);
+ method @androidx.compose.runtime.Stable public inline operator float times(int other);
+ method @androidx.compose.runtime.Stable public inline operator float unaryMinus();
+ property public final float value;
+ field public static final androidx.compose.ui.unit.Dp.Companion Companion;
+ }
+
+ public static final class Dp.Companion {
+ method public float getHairline();
+ method public float getInfinity();
+ method public float getUnspecified();
+ property public final float Hairline;
+ property public final float Infinity;
+ property public final float Unspecified;
+ }
+
+ public final class DpKt {
+ method @androidx.compose.runtime.Stable public static long DpOffset(float x, float y);
+ method @androidx.compose.runtime.Stable public static long DpSize(float width, float height);
+ method @androidx.compose.runtime.Stable public static inline float coerceAtLeast(float, float minimumValue);
+ method @androidx.compose.runtime.Stable public static inline float coerceAtMost(float, float maximumValue);
+ method @androidx.compose.runtime.Stable public static inline float coerceIn(float, float minimumValue, float maximumValue);
+ method public static long getCenter(long);
+ method public static inline float getDp(int);
+ method public static inline float getDp(double);
+ method public static inline float getDp(float);
+ method public static inline float getHeight(androidx.compose.ui.unit.DpRect);
+ method public static inline long getSize(androidx.compose.ui.unit.DpRect);
+ method public static inline float getWidth(androidx.compose.ui.unit.DpRect);
+ method public static inline boolean isFinite(float);
+ method public static inline boolean isSpecified(float);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(float);
+ method public static inline boolean isUnspecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static float lerp(float start, float stop, float fraction);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static inline float max(float a, float b);
+ method @androidx.compose.runtime.Stable public static inline float min(float a, float b);
+ method public static inline float takeOrElse(float, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.Dp> block);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpOffset> block);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpSize> block);
+ method @androidx.compose.runtime.Stable public static inline operator float times(float, float other);
+ method @androidx.compose.runtime.Stable public static inline operator float times(double, float other);
+ method @androidx.compose.runtime.Stable public static inline operator float times(int, float other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class DpOffset {
+ method public long copy(optional float x, optional float y);
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public inline operator long minus(long other);
+ method @androidx.compose.runtime.Stable public inline operator long plus(long other);
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.unit.DpOffset.Companion Companion;
+ }
+
+ public static final class DpOffset.Companion {
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ @androidx.compose.runtime.Immutable public final class DpRect {
+ ctor public DpRect(@androidx.compose.runtime.Stable float left, @androidx.compose.runtime.Stable float top, @androidx.compose.runtime.Stable float right, @androidx.compose.runtime.Stable float bottom);
+ ctor public DpRect(long origin, long size);
+ method public float component1-D9Ej5fM();
+ method public float component2-D9Ej5fM();
+ method public float component3-D9Ej5fM();
+ method public float component4-D9Ej5fM();
+ method public androidx.compose.ui.unit.DpRect copy-a9UjIt4(float left, float top, float right, float bottom);
+ method public float getBottom();
+ method public float getLeft();
+ method public float getRight();
+ method public float getTop();
+ property public final float bottom;
+ property public final float left;
+ property public final float right;
+ property public final float top;
+ field public static final androidx.compose.ui.unit.DpRect.Companion Companion;
+ }
+
+ public static final class DpRect.Companion {
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class DpSize {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float width, optional float height);
+ method @androidx.compose.runtime.Stable public operator long div(int other);
+ method @androidx.compose.runtime.Stable public operator long div(float other);
+ method public float getHeight();
+ method public float getWidth();
+ method @androidx.compose.runtime.Stable public inline operator long minus(long other);
+ method @androidx.compose.runtime.Stable public inline operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long times(int other);
+ method @androidx.compose.runtime.Stable public operator long times(float other);
+ property @androidx.compose.runtime.Stable public final float height;
+ property @androidx.compose.runtime.Stable public final float width;
+ field public static final androidx.compose.ui.unit.DpSize.Companion Companion;
+ }
+
+ public static final class DpSize.Companion {
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class IntOffset {
+ method @androidx.compose.runtime.Stable public operator int component1();
+ method @androidx.compose.runtime.Stable public operator int component2();
+ method public long copy(optional int x, optional int y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public int getX();
+ method public int getY();
+ method @androidx.compose.runtime.Stable public inline operator long minus(long other);
+ method @androidx.compose.runtime.Stable public inline operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long rem(int operand);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public inline operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final int x;
+ property @androidx.compose.runtime.Stable public final int y;
+ field public static final androidx.compose.ui.unit.IntOffset.Companion Companion;
+ }
+
+ public static final class IntOffset.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class IntOffsetKt {
+ method @androidx.compose.runtime.Stable public static long IntOffset(int x, int y);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static operator long minus(long, long offset);
+ method @androidx.compose.runtime.Stable public static operator long minus(long, long offset);
+ method @androidx.compose.runtime.Stable public static operator long plus(long, long offset);
+ method @androidx.compose.runtime.Stable public static operator long plus(long, long offset);
+ method @androidx.compose.runtime.Stable public static inline long round(long);
+ method @androidx.compose.runtime.Stable public static inline long toOffset(long);
+ }
+
+ @androidx.compose.runtime.Immutable public final class IntRect {
+ ctor public IntRect(@androidx.compose.runtime.Stable int left, @androidx.compose.runtime.Stable int top, @androidx.compose.runtime.Stable int right, @androidx.compose.runtime.Stable int bottom);
+ method public int component1();
+ method public int component2();
+ method public int component3();
+ method public int component4();
+ method public boolean contains(long offset);
+ method public androidx.compose.ui.unit.IntRect copy(int left, int top, int right, int bottom);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect deflate(int delta);
+ method public int getBottom();
+ method public long getBottomCenter();
+ method public long getBottomLeft();
+ method public long getBottomRight();
+ method public long getCenter();
+ method public long getCenterLeft();
+ method public long getCenterRight();
+ method public int getHeight();
+ method public int getLeft();
+ method public int getMaxDimension();
+ method public int getMinDimension();
+ method public int getRight();
+ method public long getSize();
+ method public int getTop();
+ method public long getTopCenter();
+ method public long getTopLeft();
+ method public long getTopRight();
+ method public int getWidth();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect inflate(int delta);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect intersect(androidx.compose.ui.unit.IntRect other);
+ method public boolean isEmpty();
+ method public boolean overlaps(androidx.compose.ui.unit.IntRect other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(long offset);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(int translateX, int translateY);
+ property public final int bottom;
+ property public final long bottomCenter;
+ property public final long bottomLeft;
+ property public final long bottomRight;
+ property public final long center;
+ property public final long centerLeft;
+ property public final long centerRight;
+ property @androidx.compose.runtime.Stable public final int height;
+ property @androidx.compose.runtime.Stable public final boolean isEmpty;
+ property public final int left;
+ property public final int maxDimension;
+ property public final int minDimension;
+ property public final int right;
+ property @androidx.compose.runtime.Stable public final long size;
+ property public final int top;
+ property public final long topCenter;
+ property public final long topLeft;
+ property public final long topRight;
+ property @androidx.compose.runtime.Stable public final int width;
+ field public static final androidx.compose.ui.unit.IntRect.Companion Companion;
+ }
+
+ public static final class IntRect.Companion {
+ method public androidx.compose.ui.unit.IntRect getZero();
+ property public final androidx.compose.ui.unit.IntRect Zero;
+ }
+
+ public final class IntRectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long offset, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long topLeft, long bottomRight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long center, int radius);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect lerp(androidx.compose.ui.unit.IntRect start, androidx.compose.ui.unit.IntRect stop, float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect roundToIntRect(androidx.compose.ui.geometry.Rect);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntRect);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class IntSize {
+ method @androidx.compose.runtime.Stable public inline operator int component1();
+ method @androidx.compose.runtime.Stable public inline operator int component2();
+ method @androidx.compose.runtime.Stable public operator long div(int other);
+ method public int getHeight();
+ method public int getWidth();
+ method @androidx.compose.runtime.Stable public operator long times(int other);
+ property @androidx.compose.runtime.Stable public final int height;
+ property @androidx.compose.runtime.Stable public final int width;
+ field public static final androidx.compose.ui.unit.IntSize.Companion Companion;
+ }
+
+ public static final class IntSize.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class IntSizeKt {
+ method @androidx.compose.runtime.Stable public static long IntSize(int width, int height);
+ method public static long getCenter(long);
+ method @androidx.compose.runtime.Stable public static operator long times(int, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect toIntRect(long);
+ method @androidx.compose.runtime.Stable public static long toSize(long);
+ }
+
+ public enum LayoutDirection {
+ method public static androidx.compose.ui.unit.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.unit.LayoutDirection[] values();
+ enum_constant public static final androidx.compose.ui.unit.LayoutDirection Ltr;
+ enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextUnit {
+ method public inline operator int compareTo(long other);
+ method public inline operator long div(float other);
+ method public inline operator long div(double other);
+ method public inline operator long div(int other);
+ method public long getType();
+ method public float getValue();
+ method public boolean isEm();
+ method public boolean isSp();
+ method public inline operator long times(float other);
+ method public inline operator long times(double other);
+ method public inline operator long times(int other);
+ method public inline operator long unaryMinus();
+ property public final boolean isEm;
+ property public final boolean isSp;
+ property public final long type;
+ property public final float value;
+ field public static final androidx.compose.ui.unit.TextUnit.Companion Companion;
+ }
+
+ public static final class TextUnit.Companion {
+ method public long getUnspecified();
+ property public final long Unspecified;
+ }
+
+ public final class TextUnitKt {
+ method public static long TextUnit(float value, long type);
+ method public static long getEm(float);
+ method public static long getEm(double);
+ method public static long getEm(int);
+ method public static long getSp(float);
+ method public static long getSp(double);
+ method public static long getSp(int);
+ method public static inline boolean isSpecified(long);
+ method public static boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.TextUnit> block);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(double, long other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long other);
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextUnitType {
+ ctor public TextUnitType(long type);
+ field public static final androidx.compose.ui.unit.TextUnitType.Companion Companion;
+ }
+
+ public static final class TextUnitType.Companion {
+ method public long getEm();
+ method public long getSp();
+ method public long getUnspecified();
+ property public final long Em;
+ property public final long Sp;
+ property public final long Unspecified;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Velocity {
+ method @androidx.compose.runtime.Stable public operator float component1();
+ method @androidx.compose.runtime.Stable public operator float component2();
+ method public long copy(optional float x, optional float y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public operator long minus(long other);
+ method @androidx.compose.runtime.Stable public operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long rem(float operand);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
+ }
+
+ public static final class Velocity.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class VelocityKt {
+ method @androidx.compose.runtime.Stable public static long Velocity(float x, float y);
+ }
+
+}
+
diff --git a/compose/ui/ui-unit/api/current.ignore b/compose/ui/ui-unit/api/current.ignore
deleted file mode 100644
index 9db0c14..0000000
--- a/compose/ui/ui-unit/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedPackage: androidx.compose.ui.unit.internal:
- Removed package androidx.compose.ui.unit.internal
diff --git a/compose/ui/ui-unit/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-unit/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..b5b90002
--- /dev/null
+++ b/compose/ui/ui-unit/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,417 @@
+// Signature format: 4.0
+package androidx.compose.ui.unit {
+
+ public final class AndroidDensity_androidKt {
+ method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Constraints {
+ ctor public Constraints(@kotlin.PublishedApi long value);
+ method public long copy(optional int minWidth, optional int maxWidth, optional int minHeight, optional int maxHeight);
+ method public boolean getHasBoundedHeight();
+ method public boolean getHasBoundedWidth();
+ method public boolean getHasFixedHeight();
+ method public boolean getHasFixedWidth();
+ method public int getMaxHeight();
+ method public int getMaxWidth();
+ method public int getMinHeight();
+ method public int getMinWidth();
+ method public boolean isZero();
+ property public final boolean hasBoundedHeight;
+ property public final boolean hasBoundedWidth;
+ property @androidx.compose.runtime.Stable public final boolean hasFixedHeight;
+ property @androidx.compose.runtime.Stable public final boolean hasFixedWidth;
+ property @androidx.compose.runtime.Stable public final boolean isZero;
+ property public final int maxHeight;
+ property public final int maxWidth;
+ property public final int minHeight;
+ property public final int minWidth;
+ field public static final androidx.compose.ui.unit.Constraints.Companion Companion;
+ field public static final int Infinity = 2147483647; // 0x7fffffff
+ }
+
+ public static final class Constraints.Companion {
+ method @androidx.compose.runtime.Stable public long fixed(int width, int height);
+ method @androidx.compose.runtime.Stable public long fixedHeight(int height);
+ method @androidx.compose.runtime.Stable public long fixedWidth(int width);
+ }
+
+ public final class ConstraintsKt {
+ method @androidx.compose.runtime.Stable public static long Constraints(optional int minWidth, optional int maxWidth, optional int minHeight, optional int maxHeight);
+ method public static long constrain(long, long otherConstraints);
+ method @androidx.compose.runtime.Stable public static long constrain(long, long size);
+ method @androidx.compose.runtime.Stable public static int constrainHeight(long, int height);
+ method @androidx.compose.runtime.Stable public static int constrainWidth(long, int width);
+ method @androidx.compose.runtime.Stable public static boolean isSatisfiedBy(long, long size);
+ method @androidx.compose.runtime.Stable public static long offset(long, optional int horizontal, optional int vertical);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface Density {
+ method public float getDensity();
+ method public float getFontScale();
+ method @androidx.compose.runtime.Stable public default int roundToPx(float);
+ method @androidx.compose.runtime.Stable public default int roundToPx(long);
+ method @androidx.compose.runtime.Stable public default float toDp(long);
+ method @androidx.compose.runtime.Stable public default float toDp(int);
+ method @androidx.compose.runtime.Stable public default float toDp(float);
+ method @androidx.compose.runtime.Stable public default long toDpSize(long);
+ method @androidx.compose.runtime.Stable public default float toPx(float);
+ method @androidx.compose.runtime.Stable public default float toPx(long);
+ method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.DpRect);
+ method @androidx.compose.runtime.Stable public default long toSize(long);
+ method @androidx.compose.runtime.Stable public default long toSp(float);
+ method @androidx.compose.runtime.Stable public default long toSp(int);
+ method @androidx.compose.runtime.Stable public default long toSp(float);
+ property public abstract float density;
+ property public abstract float fontScale;
+ }
+
+ public final class DensityKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Density Density(float density, optional float fontScale);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Dp implements java.lang.Comparable<androidx.compose.ui.unit.Dp> {
+ ctor public Dp(float value);
+ method @androidx.compose.runtime.Stable public operator int compareTo(float other);
+ method @androidx.compose.runtime.Stable public inline operator float div(float other);
+ method @androidx.compose.runtime.Stable public inline operator float div(int other);
+ method @androidx.compose.runtime.Stable public inline operator float div(float other);
+ method public float getValue();
+ method @androidx.compose.runtime.Stable public inline operator float minus(float other);
+ method @androidx.compose.runtime.Stable public inline operator float plus(float other);
+ method @androidx.compose.runtime.Stable public inline operator float times(float other);
+ method @androidx.compose.runtime.Stable public inline operator float times(int other);
+ method @androidx.compose.runtime.Stable public inline operator float unaryMinus();
+ property public final float value;
+ field public static final androidx.compose.ui.unit.Dp.Companion Companion;
+ }
+
+ public static final class Dp.Companion {
+ method public float getHairline();
+ method public float getInfinity();
+ method public float getUnspecified();
+ property public final float Hairline;
+ property public final float Infinity;
+ property public final float Unspecified;
+ }
+
+ public final class DpKt {
+ method @androidx.compose.runtime.Stable public static long DpOffset(float x, float y);
+ method @androidx.compose.runtime.Stable public static long DpSize(float width, float height);
+ method @androidx.compose.runtime.Stable public static inline float coerceAtLeast(float, float minimumValue);
+ method @androidx.compose.runtime.Stable public static inline float coerceAtMost(float, float maximumValue);
+ method @androidx.compose.runtime.Stable public static inline float coerceIn(float, float minimumValue, float maximumValue);
+ method public static long getCenter(long);
+ method public static inline float getDp(int);
+ method public static inline float getDp(double);
+ method public static inline float getDp(float);
+ method public static inline float getHeight(androidx.compose.ui.unit.DpRect);
+ method public static inline long getSize(androidx.compose.ui.unit.DpRect);
+ method public static inline float getWidth(androidx.compose.ui.unit.DpRect);
+ method public static inline boolean isFinite(float);
+ method public static inline boolean isSpecified(float);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(float);
+ method public static inline boolean isUnspecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static float lerp(float start, float stop, float fraction);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static inline float max(float a, float b);
+ method @androidx.compose.runtime.Stable public static inline float min(float a, float b);
+ method public static inline float takeOrElse(float, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.Dp> block);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpOffset> block);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpSize> block);
+ method @androidx.compose.runtime.Stable public static inline operator float times(float, float other);
+ method @androidx.compose.runtime.Stable public static inline operator float times(double, float other);
+ method @androidx.compose.runtime.Stable public static inline operator float times(int, float other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class DpOffset {
+ method public long copy(optional float x, optional float y);
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public inline operator long minus(long other);
+ method @androidx.compose.runtime.Stable public inline operator long plus(long other);
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.unit.DpOffset.Companion Companion;
+ }
+
+ public static final class DpOffset.Companion {
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ @androidx.compose.runtime.Immutable public final class DpRect {
+ ctor public DpRect(@androidx.compose.runtime.Stable float left, @androidx.compose.runtime.Stable float top, @androidx.compose.runtime.Stable float right, @androidx.compose.runtime.Stable float bottom);
+ ctor public DpRect(long origin, long size);
+ method public float component1-D9Ej5fM();
+ method public float component2-D9Ej5fM();
+ method public float component3-D9Ej5fM();
+ method public float component4-D9Ej5fM();
+ method public androidx.compose.ui.unit.DpRect copy-a9UjIt4(float left, float top, float right, float bottom);
+ method public float getBottom();
+ method public float getLeft();
+ method public float getRight();
+ method public float getTop();
+ property public final float bottom;
+ property public final float left;
+ property public final float right;
+ property public final float top;
+ field public static final androidx.compose.ui.unit.DpRect.Companion Companion;
+ }
+
+ public static final class DpRect.Companion {
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class DpSize {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float width, optional float height);
+ method @androidx.compose.runtime.Stable public operator long div(int other);
+ method @androidx.compose.runtime.Stable public operator long div(float other);
+ method public float getHeight();
+ method public float getWidth();
+ method @androidx.compose.runtime.Stable public inline operator long minus(long other);
+ method @androidx.compose.runtime.Stable public inline operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long times(int other);
+ method @androidx.compose.runtime.Stable public operator long times(float other);
+ property @androidx.compose.runtime.Stable public final float height;
+ property @androidx.compose.runtime.Stable public final float width;
+ field public static final androidx.compose.ui.unit.DpSize.Companion Companion;
+ }
+
+ public static final class DpSize.Companion {
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalUnitApi {
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class IntOffset {
+ method @androidx.compose.runtime.Stable public operator int component1();
+ method @androidx.compose.runtime.Stable public operator int component2();
+ method public long copy(optional int x, optional int y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public int getX();
+ method public int getY();
+ method @androidx.compose.runtime.Stable public inline operator long minus(long other);
+ method @androidx.compose.runtime.Stable public inline operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long rem(int operand);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public inline operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final int x;
+ property @androidx.compose.runtime.Stable public final int y;
+ field public static final androidx.compose.ui.unit.IntOffset.Companion Companion;
+ }
+
+ public static final class IntOffset.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class IntOffsetKt {
+ method @androidx.compose.runtime.Stable public static long IntOffset(int x, int y);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static operator long minus(long, long offset);
+ method @androidx.compose.runtime.Stable public static operator long minus(long, long offset);
+ method @androidx.compose.runtime.Stable public static operator long plus(long, long offset);
+ method @androidx.compose.runtime.Stable public static operator long plus(long, long offset);
+ method @androidx.compose.runtime.Stable public static inline long round(long);
+ method @androidx.compose.runtime.Stable public static inline long toOffset(long);
+ }
+
+ @androidx.compose.runtime.Immutable public final class IntRect {
+ ctor public IntRect(@androidx.compose.runtime.Stable int left, @androidx.compose.runtime.Stable int top, @androidx.compose.runtime.Stable int right, @androidx.compose.runtime.Stable int bottom);
+ method public int component1();
+ method public int component2();
+ method public int component3();
+ method public int component4();
+ method public boolean contains(long offset);
+ method public androidx.compose.ui.unit.IntRect copy(int left, int top, int right, int bottom);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect deflate(int delta);
+ method public int getBottom();
+ method public long getBottomCenter();
+ method public long getBottomLeft();
+ method public long getBottomRight();
+ method public long getCenter();
+ method public long getCenterLeft();
+ method public long getCenterRight();
+ method public int getHeight();
+ method public int getLeft();
+ method public int getMaxDimension();
+ method public int getMinDimension();
+ method public int getRight();
+ method public long getSize();
+ method public int getTop();
+ method public long getTopCenter();
+ method public long getTopLeft();
+ method public long getTopRight();
+ method public int getWidth();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect inflate(int delta);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect intersect(androidx.compose.ui.unit.IntRect other);
+ method public boolean isEmpty();
+ method public boolean overlaps(androidx.compose.ui.unit.IntRect other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(long offset);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(int translateX, int translateY);
+ property public final int bottom;
+ property public final long bottomCenter;
+ property public final long bottomLeft;
+ property public final long bottomRight;
+ property public final long center;
+ property public final long centerLeft;
+ property public final long centerRight;
+ property @androidx.compose.runtime.Stable public final int height;
+ property @androidx.compose.runtime.Stable public final boolean isEmpty;
+ property public final int left;
+ property public final int maxDimension;
+ property public final int minDimension;
+ property public final int right;
+ property @androidx.compose.runtime.Stable public final long size;
+ property public final int top;
+ property public final long topCenter;
+ property public final long topLeft;
+ property public final long topRight;
+ property @androidx.compose.runtime.Stable public final int width;
+ field public static final androidx.compose.ui.unit.IntRect.Companion Companion;
+ }
+
+ public static final class IntRect.Companion {
+ method public androidx.compose.ui.unit.IntRect getZero();
+ property public final androidx.compose.ui.unit.IntRect Zero;
+ }
+
+ public final class IntRectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long offset, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long topLeft, long bottomRight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long center, int radius);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect lerp(androidx.compose.ui.unit.IntRect start, androidx.compose.ui.unit.IntRect stop, float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect roundToIntRect(androidx.compose.ui.geometry.Rect);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntRect);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class IntSize {
+ method @androidx.compose.runtime.Stable public inline operator int component1();
+ method @androidx.compose.runtime.Stable public inline operator int component2();
+ method @androidx.compose.runtime.Stable public operator long div(int other);
+ method public int getHeight();
+ method public int getWidth();
+ method @androidx.compose.runtime.Stable public operator long times(int other);
+ property @androidx.compose.runtime.Stable public final int height;
+ property @androidx.compose.runtime.Stable public final int width;
+ field public static final androidx.compose.ui.unit.IntSize.Companion Companion;
+ }
+
+ public static final class IntSize.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class IntSizeKt {
+ method @androidx.compose.runtime.Stable public static long IntSize(int width, int height);
+ method public static long getCenter(long);
+ method @androidx.compose.runtime.Stable public static operator long times(int, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect toIntRect(long);
+ method @androidx.compose.runtime.Stable public static long toSize(long);
+ }
+
+ public enum LayoutDirection {
+ method public static androidx.compose.ui.unit.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.unit.LayoutDirection[] values();
+ enum_constant public static final androidx.compose.ui.unit.LayoutDirection Ltr;
+ enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextUnit {
+ method public inline operator int compareTo(long other);
+ method public inline operator long div(float other);
+ method public inline operator long div(double other);
+ method public inline operator long div(int other);
+ method public long getType();
+ method public float getValue();
+ method public boolean isEm();
+ method public boolean isSp();
+ method public inline operator long times(float other);
+ method public inline operator long times(double other);
+ method public inline operator long times(int other);
+ method public inline operator long unaryMinus();
+ property public final boolean isEm;
+ property public final boolean isSp;
+ property public final long type;
+ property public final float value;
+ field public static final androidx.compose.ui.unit.TextUnit.Companion Companion;
+ }
+
+ public static final class TextUnit.Companion {
+ method public long getUnspecified();
+ property public final long Unspecified;
+ }
+
+ public final class TextUnitKt {
+ method public static long TextUnit(float value, long type);
+ method public static long getEm(float);
+ method public static long getEm(double);
+ method public static long getEm(int);
+ method public static long getSp(float);
+ method public static long getSp(double);
+ method public static long getSp(int);
+ method public static inline boolean isSpecified(long);
+ method public static boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.TextUnit> block);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(double, long other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long other);
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextUnitType {
+ ctor public TextUnitType(long type);
+ field public static final androidx.compose.ui.unit.TextUnitType.Companion Companion;
+ }
+
+ public static final class TextUnitType.Companion {
+ method public long getEm();
+ method public long getSp();
+ method public long getUnspecified();
+ property public final long Em;
+ property public final long Sp;
+ property public final long Unspecified;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Velocity {
+ method @androidx.compose.runtime.Stable public operator float component1();
+ method @androidx.compose.runtime.Stable public operator float component2();
+ method public long copy(optional float x, optional float y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public operator long minus(long other);
+ method @androidx.compose.runtime.Stable public operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long rem(float operand);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
+ }
+
+ public static final class Velocity.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class VelocityKt {
+ method @androidx.compose.runtime.Stable public static long Velocity(float x, float y);
+ }
+
+}
+
diff --git a/compose/ui/ui-unit/api/res-1.4.0-beta02.txt b/compose/ui/ui-unit/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-unit/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-unit/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-unit/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..4572e24
--- /dev/null
+++ b/compose/ui/ui-unit/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,419 @@
+// Signature format: 4.0
+package androidx.compose.ui.unit {
+
+ public final class AndroidDensity_androidKt {
+ method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Constraints {
+ ctor public Constraints(@kotlin.PublishedApi long value);
+ method public long copy(optional int minWidth, optional int maxWidth, optional int minHeight, optional int maxHeight);
+ method public boolean getHasBoundedHeight();
+ method public boolean getHasBoundedWidth();
+ method public boolean getHasFixedHeight();
+ method public boolean getHasFixedWidth();
+ method public int getMaxHeight();
+ method public int getMaxWidth();
+ method public int getMinHeight();
+ method public int getMinWidth();
+ method public boolean isZero();
+ property public final boolean hasBoundedHeight;
+ property public final boolean hasBoundedWidth;
+ property @androidx.compose.runtime.Stable public final boolean hasFixedHeight;
+ property @androidx.compose.runtime.Stable public final boolean hasFixedWidth;
+ property @androidx.compose.runtime.Stable public final boolean isZero;
+ property public final int maxHeight;
+ property public final int maxWidth;
+ property public final int minHeight;
+ property public final int minWidth;
+ field public static final androidx.compose.ui.unit.Constraints.Companion Companion;
+ field public static final int Infinity = 2147483647; // 0x7fffffff
+ }
+
+ public static final class Constraints.Companion {
+ method @androidx.compose.runtime.Stable public long fixed(int width, int height);
+ method @androidx.compose.runtime.Stable public long fixedHeight(int height);
+ method @androidx.compose.runtime.Stable public long fixedWidth(int width);
+ }
+
+ public final class ConstraintsKt {
+ method @androidx.compose.runtime.Stable public static long Constraints(optional int minWidth, optional int maxWidth, optional int minHeight, optional int maxHeight);
+ method public static long constrain(long, long otherConstraints);
+ method @androidx.compose.runtime.Stable public static long constrain(long, long size);
+ method @androidx.compose.runtime.Stable public static int constrainHeight(long, int height);
+ method @androidx.compose.runtime.Stable public static int constrainWidth(long, int width);
+ method @androidx.compose.runtime.Stable public static boolean isSatisfiedBy(long, long size);
+ method @androidx.compose.runtime.Stable public static long offset(long, optional int horizontal, optional int vertical);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface Density {
+ method public float getDensity();
+ method public float getFontScale();
+ method @androidx.compose.runtime.Stable public default int roundToPx(float);
+ method @androidx.compose.runtime.Stable public default int roundToPx(long);
+ method @androidx.compose.runtime.Stable public default float toDp(long);
+ method @androidx.compose.runtime.Stable public default float toDp(int);
+ method @androidx.compose.runtime.Stable public default float toDp(float);
+ method @androidx.compose.runtime.Stable public default long toDpSize(long);
+ method @androidx.compose.runtime.Stable public default float toPx(float);
+ method @androidx.compose.runtime.Stable public default float toPx(long);
+ method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.DpRect);
+ method @androidx.compose.runtime.Stable public default long toSize(long);
+ method @androidx.compose.runtime.Stable public default long toSp(float);
+ method @androidx.compose.runtime.Stable public default long toSp(int);
+ method @androidx.compose.runtime.Stable public default long toSp(float);
+ property public abstract float density;
+ property public abstract float fontScale;
+ }
+
+ public final class DensityKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Density Density(float density, optional float fontScale);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Dp implements java.lang.Comparable<androidx.compose.ui.unit.Dp> {
+ ctor public Dp(float value);
+ method @androidx.compose.runtime.Stable public operator int compareTo(float other);
+ method @androidx.compose.runtime.Stable public inline operator float div(float other);
+ method @androidx.compose.runtime.Stable public inline operator float div(int other);
+ method @androidx.compose.runtime.Stable public inline operator float div(float other);
+ method public float getValue();
+ method @androidx.compose.runtime.Stable public inline operator float minus(float other);
+ method @androidx.compose.runtime.Stable public inline operator float plus(float other);
+ method @androidx.compose.runtime.Stable public inline operator float times(float other);
+ method @androidx.compose.runtime.Stable public inline operator float times(int other);
+ method @androidx.compose.runtime.Stable public inline operator float unaryMinus();
+ property public final float value;
+ field public static final androidx.compose.ui.unit.Dp.Companion Companion;
+ }
+
+ public static final class Dp.Companion {
+ method public float getHairline();
+ method public float getInfinity();
+ method public float getUnspecified();
+ property public final float Hairline;
+ property public final float Infinity;
+ property public final float Unspecified;
+ }
+
+ public final class DpKt {
+ method @androidx.compose.runtime.Stable public static long DpOffset(float x, float y);
+ method @androidx.compose.runtime.Stable public static long DpSize(float width, float height);
+ method @androidx.compose.runtime.Stable public static inline float coerceAtLeast(float, float minimumValue);
+ method @androidx.compose.runtime.Stable public static inline float coerceAtMost(float, float maximumValue);
+ method @androidx.compose.runtime.Stable public static inline float coerceIn(float, float minimumValue, float maximumValue);
+ method public static long getCenter(long);
+ method public static inline float getDp(int);
+ method public static inline float getDp(double);
+ method public static inline float getDp(float);
+ method public static inline float getHeight(androidx.compose.ui.unit.DpRect);
+ method public static inline long getSize(androidx.compose.ui.unit.DpRect);
+ method public static inline float getWidth(androidx.compose.ui.unit.DpRect);
+ method public static inline boolean isFinite(float);
+ method public static inline boolean isSpecified(float);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(float);
+ method public static inline boolean isUnspecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static float lerp(float start, float stop, float fraction);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static inline float max(float a, float b);
+ method @androidx.compose.runtime.Stable public static inline float min(float a, float b);
+ method public static inline float takeOrElse(float, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.Dp> block);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpOffset> block);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpSize> block);
+ method @androidx.compose.runtime.Stable public static inline operator float times(float, float other);
+ method @androidx.compose.runtime.Stable public static inline operator float times(double, float other);
+ method @androidx.compose.runtime.Stable public static inline operator float times(int, float other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class DpOffset {
+ method public long copy(optional float x, optional float y);
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public inline operator long minus(long other);
+ method @androidx.compose.runtime.Stable public inline operator long plus(long other);
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.unit.DpOffset.Companion Companion;
+ }
+
+ public static final class DpOffset.Companion {
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ @androidx.compose.runtime.Immutable public final class DpRect {
+ ctor public DpRect(@androidx.compose.runtime.Stable float left, @androidx.compose.runtime.Stable float top, @androidx.compose.runtime.Stable float right, @androidx.compose.runtime.Stable float bottom);
+ ctor public DpRect(long origin, long size);
+ method public float component1-D9Ej5fM();
+ method public float component2-D9Ej5fM();
+ method public float component3-D9Ej5fM();
+ method public float component4-D9Ej5fM();
+ method public androidx.compose.ui.unit.DpRect copy-a9UjIt4(float left, float top, float right, float bottom);
+ method public float getBottom();
+ method public float getLeft();
+ method public float getRight();
+ method public float getTop();
+ property public final float bottom;
+ property public final float left;
+ property public final float right;
+ property public final float top;
+ field public static final androidx.compose.ui.unit.DpRect.Companion Companion;
+ }
+
+ public static final class DpRect.Companion {
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class DpSize {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float width, optional float height);
+ method @androidx.compose.runtime.Stable public operator long div(int other);
+ method @androidx.compose.runtime.Stable public operator long div(float other);
+ method public float getHeight();
+ method public float getWidth();
+ method @androidx.compose.runtime.Stable public inline operator long minus(long other);
+ method @androidx.compose.runtime.Stable public inline operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long times(int other);
+ method @androidx.compose.runtime.Stable public operator long times(float other);
+ property @androidx.compose.runtime.Stable public final float height;
+ property @androidx.compose.runtime.Stable public final float width;
+ field public static final androidx.compose.ui.unit.DpSize.Companion Companion;
+ }
+
+ public static final class DpSize.Companion {
+ method public long getUnspecified();
+ method public long getZero();
+ property public final long Unspecified;
+ property public final long Zero;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class IntOffset {
+ method @androidx.compose.runtime.Stable public operator int component1();
+ method @androidx.compose.runtime.Stable public operator int component2();
+ method public long copy(optional int x, optional int y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public int getX();
+ method public int getY();
+ method @androidx.compose.runtime.Stable public inline operator long minus(long other);
+ method @androidx.compose.runtime.Stable public inline operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long rem(int operand);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public inline operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final int x;
+ property @androidx.compose.runtime.Stable public final int y;
+ field public static final androidx.compose.ui.unit.IntOffset.Companion Companion;
+ }
+
+ public static final class IntOffset.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class IntOffsetKt {
+ method @androidx.compose.runtime.Stable public static long IntOffset(int x, int y);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @androidx.compose.runtime.Stable public static operator long minus(long, long offset);
+ method @androidx.compose.runtime.Stable public static operator long minus(long, long offset);
+ method @androidx.compose.runtime.Stable public static operator long plus(long, long offset);
+ method @androidx.compose.runtime.Stable public static operator long plus(long, long offset);
+ method @androidx.compose.runtime.Stable public static inline long round(long);
+ method @androidx.compose.runtime.Stable public static inline long toOffset(long);
+ }
+
+ @androidx.compose.runtime.Immutable public final class IntRect {
+ ctor public IntRect(@androidx.compose.runtime.Stable int left, @androidx.compose.runtime.Stable int top, @androidx.compose.runtime.Stable int right, @androidx.compose.runtime.Stable int bottom);
+ method public int component1();
+ method public int component2();
+ method public int component3();
+ method public int component4();
+ method public boolean contains(long offset);
+ method public androidx.compose.ui.unit.IntRect copy(int left, int top, int right, int bottom);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect deflate(int delta);
+ method public int getBottom();
+ method public long getBottomCenter();
+ method public long getBottomLeft();
+ method public long getBottomRight();
+ method public long getCenter();
+ method public long getCenterLeft();
+ method public long getCenterRight();
+ method public int getHeight();
+ method public int getLeft();
+ method public int getMaxDimension();
+ method public int getMinDimension();
+ method public int getRight();
+ method public long getSize();
+ method public int getTop();
+ method public long getTopCenter();
+ method public long getTopLeft();
+ method public long getTopRight();
+ method public int getWidth();
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect inflate(int delta);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect intersect(androidx.compose.ui.unit.IntRect other);
+ method public boolean isEmpty();
+ method public boolean overlaps(androidx.compose.ui.unit.IntRect other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(long offset);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(int translateX, int translateY);
+ property public final int bottom;
+ property public final long bottomCenter;
+ property public final long bottomLeft;
+ property public final long bottomRight;
+ property public final long center;
+ property public final long centerLeft;
+ property public final long centerRight;
+ property @androidx.compose.runtime.Stable public final int height;
+ property @androidx.compose.runtime.Stable public final boolean isEmpty;
+ property public final int left;
+ property public final int maxDimension;
+ property public final int minDimension;
+ property public final int right;
+ property @androidx.compose.runtime.Stable public final long size;
+ property public final int top;
+ property public final long topCenter;
+ property public final long topLeft;
+ property public final long topRight;
+ property @androidx.compose.runtime.Stable public final int width;
+ field public static final androidx.compose.ui.unit.IntRect.Companion Companion;
+ }
+
+ public static final class IntRect.Companion {
+ method public androidx.compose.ui.unit.IntRect getZero();
+ property public final androidx.compose.ui.unit.IntRect Zero;
+ }
+
+ public final class IntRectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long offset, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long topLeft, long bottomRight);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long center, int radius);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect lerp(androidx.compose.ui.unit.IntRect start, androidx.compose.ui.unit.IntRect stop, float fraction);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect roundToIntRect(androidx.compose.ui.geometry.Rect);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntRect);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class IntSize {
+ method @androidx.compose.runtime.Stable public inline operator int component1();
+ method @androidx.compose.runtime.Stable public inline operator int component2();
+ method @androidx.compose.runtime.Stable public operator long div(int other);
+ method public int getHeight();
+ method public int getWidth();
+ method @androidx.compose.runtime.Stable public operator long times(int other);
+ property @androidx.compose.runtime.Stable public final int height;
+ property @androidx.compose.runtime.Stable public final int width;
+ field public static final androidx.compose.ui.unit.IntSize.Companion Companion;
+ }
+
+ public static final class IntSize.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class IntSizeKt {
+ method @androidx.compose.runtime.Stable public static long IntSize(int width, int height);
+ method public static long getCenter(long);
+ method @androidx.compose.runtime.Stable public static operator long times(int, long size);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect toIntRect(long);
+ method @androidx.compose.runtime.Stable public static long toSize(long);
+ }
+
+ public enum LayoutDirection {
+ method public static androidx.compose.ui.unit.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.unit.LayoutDirection[] values();
+ enum_constant public static final androidx.compose.ui.unit.LayoutDirection Ltr;
+ enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextUnit {
+ method public inline operator int compareTo(long other);
+ method public inline operator long div(float other);
+ method public inline operator long div(double other);
+ method public inline operator long div(int other);
+ method public long getType();
+ method public float getValue();
+ method public boolean isEm();
+ method public boolean isSp();
+ method public inline operator long times(float other);
+ method public inline operator long times(double other);
+ method public inline operator long times(int other);
+ method public inline operator long unaryMinus();
+ property public final boolean isEm;
+ property public final boolean isSp;
+ property @kotlin.PublishedApi internal final long rawType;
+ property public final long type;
+ property public final float value;
+ field public static final androidx.compose.ui.unit.TextUnit.Companion Companion;
+ }
+
+ public static final class TextUnit.Companion {
+ method public long getUnspecified();
+ property public final long Unspecified;
+ }
+
+ public final class TextUnitKt {
+ method public static long TextUnit(float value, long type);
+ method @kotlin.PublishedApi internal static void checkArithmetic(long a);
+ method @kotlin.PublishedApi internal static void checkArithmetic(long a, long b);
+ method @kotlin.PublishedApi internal static void checkArithmetic(long a, long b, long c);
+ method public static long getEm(float);
+ method public static long getEm(double);
+ method public static long getEm(int);
+ method public static long getSp(float);
+ method public static long getSp(double);
+ method public static long getSp(int);
+ method public static inline boolean isSpecified(long);
+ method public static boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method @kotlin.PublishedApi internal static long pack(long unitType, float v);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.TextUnit> block);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(double, long other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long other);
+ }
+
+ @kotlin.jvm.JvmInline public final value class TextUnitType {
+ ctor public TextUnitType(long type);
+ field public static final androidx.compose.ui.unit.TextUnitType.Companion Companion;
+ }
+
+ public static final class TextUnitType.Companion {
+ method public long getEm();
+ method public long getSp();
+ method public long getUnspecified();
+ property public final long Em;
+ property public final long Sp;
+ property public final long Unspecified;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Velocity {
+ method @androidx.compose.runtime.Stable public operator float component1();
+ method @androidx.compose.runtime.Stable public operator float component2();
+ method public long copy(optional float x, optional float y);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getX();
+ method public float getY();
+ method @androidx.compose.runtime.Stable public operator long minus(long other);
+ method @androidx.compose.runtime.Stable public operator long plus(long other);
+ method @androidx.compose.runtime.Stable public operator long rem(float operand);
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ method @androidx.compose.runtime.Stable public operator long unaryMinus();
+ property @androidx.compose.runtime.Stable public final float x;
+ property @androidx.compose.runtime.Stable public final float y;
+ field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
+ }
+
+ public static final class Velocity.Companion {
+ method public long getZero();
+ property public final long Zero;
+ }
+
+ public final class VelocityKt {
+ method @androidx.compose.runtime.Stable public static long Velocity(float x, float y);
+ }
+
+}
+
diff --git a/compose/ui/ui-unit/api/restricted_current.ignore b/compose/ui/ui-unit/api/restricted_current.ignore
deleted file mode 100644
index 9db0c14..0000000
--- a/compose/ui/ui-unit/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedPackage: androidx.compose.ui.unit.internal:
- Removed package androidx.compose.ui.unit.internal
diff --git a/compose/ui/ui-util/api/1.4.0-beta02.txt b/compose/ui/ui-util/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..e80820a
--- /dev/null
+++ b/compose/ui/ui-util/api/1.4.0-beta02.txt
@@ -0,0 +1,37 @@
+// Signature format: 4.0
+package androidx.compose.ui.util {
+
+ public final class AndroidTrace_androidKt {
+ method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+ }
+
+ public final class InlineClassHelperKt {
+ method public static inline long packFloats(float val1, float val2);
+ method public static inline long packInts(int val1, int val2);
+ method public static inline float unpackFloat1(long value);
+ method public static inline float unpackFloat2(long value);
+ method public static inline int unpackInt1(long value);
+ method public static inline int unpackInt2(long value);
+ }
+
+ public final class ListUtilsKt {
+ method public static inline <T> boolean fastAll(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public static inline <T> boolean fastAny(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public static inline <T> T? fastFirstOrNull(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+ method public static inline <T> void fastForEachIndexed(java.util.List<? extends T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+ method public static inline <T> void fastForEachReversed(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+ method public static inline <T, R> java.util.List<R> fastMap(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public static inline <T, R, C extends java.util.Collection<? super R>> C fastMapTo(java.util.List<? extends T>, C destination, kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public static inline <T, R extends java.lang.Comparable<? super R>> T? fastMaxBy(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,? extends R> selector);
+ method public static inline <T> int fastSumBy(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Integer> selector);
+ }
+
+ public final class MathHelpersKt {
+ method public static float lerp(float start, float stop, float fraction);
+ method public static int lerp(int start, int stop, float fraction);
+ method public static long lerp(long start, long stop, float fraction);
+ }
+
+}
+
diff --git a/compose/ui/ui-util/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-util/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..e80820a
--- /dev/null
+++ b/compose/ui/ui-util/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,37 @@
+// Signature format: 4.0
+package androidx.compose.ui.util {
+
+ public final class AndroidTrace_androidKt {
+ method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+ }
+
+ public final class InlineClassHelperKt {
+ method public static inline long packFloats(float val1, float val2);
+ method public static inline long packInts(int val1, int val2);
+ method public static inline float unpackFloat1(long value);
+ method public static inline float unpackFloat2(long value);
+ method public static inline int unpackInt1(long value);
+ method public static inline int unpackInt2(long value);
+ }
+
+ public final class ListUtilsKt {
+ method public static inline <T> boolean fastAll(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public static inline <T> boolean fastAny(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public static inline <T> T? fastFirstOrNull(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+ method public static inline <T> void fastForEachIndexed(java.util.List<? extends T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+ method public static inline <T> void fastForEachReversed(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+ method public static inline <T, R> java.util.List<R> fastMap(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public static inline <T, R, C extends java.util.Collection<? super R>> C fastMapTo(java.util.List<? extends T>, C destination, kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public static inline <T, R extends java.lang.Comparable<? super R>> T? fastMaxBy(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,? extends R> selector);
+ method public static inline <T> int fastSumBy(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Integer> selector);
+ }
+
+ public final class MathHelpersKt {
+ method public static float lerp(float start, float stop, float fraction);
+ method public static int lerp(int start, int stop, float fraction);
+ method public static long lerp(long start, long stop, float fraction);
+ }
+
+}
+
diff --git a/compose/ui/ui-util/api/res-1.4.0-beta02.txt b/compose/ui/ui-util/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-util/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-util/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-util/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..e80820a
--- /dev/null
+++ b/compose/ui/ui-util/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,37 @@
+// Signature format: 4.0
+package androidx.compose.ui.util {
+
+ public final class AndroidTrace_androidKt {
+ method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+ }
+
+ public final class InlineClassHelperKt {
+ method public static inline long packFloats(float val1, float val2);
+ method public static inline long packInts(int val1, int val2);
+ method public static inline float unpackFloat1(long value);
+ method public static inline float unpackFloat2(long value);
+ method public static inline int unpackInt1(long value);
+ method public static inline int unpackInt2(long value);
+ }
+
+ public final class ListUtilsKt {
+ method public static inline <T> boolean fastAll(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public static inline <T> boolean fastAny(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public static inline <T> T? fastFirstOrNull(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method public static inline <T> void fastForEach(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+ method public static inline <T> void fastForEachIndexed(java.util.List<? extends T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+ method public static inline <T> void fastForEachReversed(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action);
+ method public static inline <T, R> java.util.List<R> fastMap(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public static inline <T, R, C extends java.util.Collection<? super R>> C fastMapTo(java.util.List<? extends T>, C destination, kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ method public static inline <T, R extends java.lang.Comparable<? super R>> T? fastMaxBy(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,? extends R> selector);
+ method public static inline <T> int fastSumBy(java.util.List<? extends T>, kotlin.jvm.functions.Function1<? super T,java.lang.Integer> selector);
+ }
+
+ public final class MathHelpersKt {
+ method public static float lerp(float start, float stop, float fraction);
+ method public static int lerp(int start, int stop, float fraction);
+ method public static long lerp(long start, long stop, float fraction);
+ }
+
+}
+
diff --git a/compose/ui/ui-viewbinding/api/1.4.0-beta02.txt b/compose/ui/ui-viewbinding/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..07ba909
--- /dev/null
+++ b/compose/ui/ui-viewbinding/api/1.4.0-beta02.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.compose.ui.viewinterop {
+
+ public final class AndroidViewBindingKt {
+ method @androidx.compose.runtime.Composable public static <T extends androidx.viewbinding.ViewBinding> void AndroidViewBinding(kotlin.jvm.functions.Function3<? super android.view.LayoutInflater,? super android.view.ViewGroup,? super java.lang.Boolean,? extends T> factory, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+ }
+
+}
+
diff --git a/compose/ui/ui-viewbinding/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui-viewbinding/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..07ba909
--- /dev/null
+++ b/compose/ui/ui-viewbinding/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.compose.ui.viewinterop {
+
+ public final class AndroidViewBindingKt {
+ method @androidx.compose.runtime.Composable public static <T extends androidx.viewbinding.ViewBinding> void AndroidViewBinding(kotlin.jvm.functions.Function3<? super android.view.LayoutInflater,? super android.view.ViewGroup,? super java.lang.Boolean,? extends T> factory, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+ }
+
+}
+
diff --git a/compose/ui/ui-viewbinding/api/res-1.4.0-beta02.txt b/compose/ui/ui-viewbinding/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-viewbinding/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui-viewbinding/api/restricted_1.4.0-beta02.txt b/compose/ui/ui-viewbinding/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..07ba909
--- /dev/null
+++ b/compose/ui/ui-viewbinding/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.compose.ui.viewinterop {
+
+ public final class AndroidViewBindingKt {
+ method @androidx.compose.runtime.Composable public static <T extends androidx.viewbinding.ViewBinding> void AndroidViewBinding(kotlin.jvm.functions.Function3<? super android.view.LayoutInflater,? super android.view.ViewGroup,? super java.lang.Boolean,? extends T> factory, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+ }
+
+}
+
diff --git a/compose/ui/ui/api/1.4.0-beta02.txt b/compose/ui/ui/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..d27c2ed
--- /dev/null
+++ b/compose/ui/ui/api/1.4.0-beta02.txt
@@ -0,0 +1,2996 @@
+// Signature format: 4.0
+package androidx.compose.ui {
+
+ public final class AbsoluteAlignment {
+ method public androidx.compose.ui.Alignment getBottomLeft();
+ method public androidx.compose.ui.Alignment getBottomRight();
+ method public androidx.compose.ui.Alignment getCenterLeft();
+ method public androidx.compose.ui.Alignment getCenterRight();
+ method public androidx.compose.ui.Alignment.Horizontal getLeft();
+ method public androidx.compose.ui.Alignment.Horizontal getRight();
+ method public androidx.compose.ui.Alignment getTopLeft();
+ method public androidx.compose.ui.Alignment getTopRight();
+ property public final androidx.compose.ui.Alignment BottomLeft;
+ property public final androidx.compose.ui.Alignment BottomRight;
+ property public final androidx.compose.ui.Alignment CenterLeft;
+ property public final androidx.compose.ui.Alignment CenterRight;
+ property public final androidx.compose.ui.Alignment.Horizontal Left;
+ property public final androidx.compose.ui.Alignment.Horizontal Right;
+ property public final androidx.compose.ui.Alignment TopLeft;
+ property public final androidx.compose.ui.Alignment TopRight;
+ field public static final androidx.compose.ui.AbsoluteAlignment INSTANCE;
+ }
+
+ @androidx.compose.runtime.Stable public fun interface Alignment {
+ method public long align(long size, long space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ field public static final androidx.compose.ui.Alignment.Companion Companion;
+ }
+
+ public static final class Alignment.Companion {
+ method public androidx.compose.ui.Alignment.Vertical getBottom();
+ method public androidx.compose.ui.Alignment getBottomCenter();
+ method public androidx.compose.ui.Alignment getBottomEnd();
+ method public androidx.compose.ui.Alignment getBottomStart();
+ method public androidx.compose.ui.Alignment getCenter();
+ method public androidx.compose.ui.Alignment getCenterEnd();
+ method public androidx.compose.ui.Alignment.Horizontal getCenterHorizontally();
+ method public androidx.compose.ui.Alignment getCenterStart();
+ method public androidx.compose.ui.Alignment.Vertical getCenterVertically();
+ method public androidx.compose.ui.Alignment.Horizontal getEnd();
+ method public androidx.compose.ui.Alignment.Horizontal getStart();
+ method public androidx.compose.ui.Alignment.Vertical getTop();
+ method public androidx.compose.ui.Alignment getTopCenter();
+ method public androidx.compose.ui.Alignment getTopEnd();
+ method public androidx.compose.ui.Alignment getTopStart();
+ property public final androidx.compose.ui.Alignment.Vertical Bottom;
+ property public final androidx.compose.ui.Alignment BottomCenter;
+ property public final androidx.compose.ui.Alignment BottomEnd;
+ property public final androidx.compose.ui.Alignment BottomStart;
+ property public final androidx.compose.ui.Alignment Center;
+ property public final androidx.compose.ui.Alignment CenterEnd;
+ property public final androidx.compose.ui.Alignment.Horizontal CenterHorizontally;
+ property public final androidx.compose.ui.Alignment CenterStart;
+ property public final androidx.compose.ui.Alignment.Vertical CenterVertically;
+ property public final androidx.compose.ui.Alignment.Horizontal End;
+ property public final androidx.compose.ui.Alignment.Horizontal Start;
+ property public final androidx.compose.ui.Alignment.Vertical Top;
+ property public final androidx.compose.ui.Alignment TopCenter;
+ property public final androidx.compose.ui.Alignment TopEnd;
+ property public final androidx.compose.ui.Alignment TopStart;
+ }
+
+ @androidx.compose.runtime.Stable public static fun interface Alignment.Horizontal {
+ method public int align(int size, int space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ @androidx.compose.runtime.Stable public static fun interface Alignment.Vertical {
+ method public int align(int size, int space);
+ }
+
+ @androidx.compose.runtime.Immutable public final class BiasAbsoluteAlignment implements androidx.compose.ui.Alignment {
+ ctor public BiasAbsoluteAlignment(float horizontalBias, float verticalBias);
+ method public long align(long size, long space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public androidx.compose.ui.BiasAbsoluteAlignment copy(float horizontalBias, float verticalBias);
+ }
+
+ @androidx.compose.runtime.Immutable public static final class BiasAbsoluteAlignment.Horizontal implements androidx.compose.ui.Alignment.Horizontal {
+ ctor public BiasAbsoluteAlignment.Horizontal(float bias);
+ method public int align(int size, int space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public androidx.compose.ui.BiasAbsoluteAlignment.Horizontal copy(float bias);
+ }
+
+ @androidx.compose.runtime.Immutable public final class BiasAlignment implements androidx.compose.ui.Alignment {
+ ctor public BiasAlignment(float horizontalBias, float verticalBias);
+ method public long align(long size, long space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.BiasAlignment copy(float horizontalBias, float verticalBias);
+ method public float getHorizontalBias();
+ method public float getVerticalBias();
+ property public final float horizontalBias;
+ property public final float verticalBias;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class BiasAlignment.Horizontal implements androidx.compose.ui.Alignment.Horizontal {
+ ctor public BiasAlignment.Horizontal(float bias);
+ method public int align(int size, int space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public androidx.compose.ui.BiasAlignment.Horizontal copy(float bias);
+ }
+
+ @androidx.compose.runtime.Immutable public static final class BiasAlignment.Vertical implements androidx.compose.ui.Alignment.Vertical {
+ ctor public BiasAlignment.Vertical(float bias);
+ method public int align(int size, int space);
+ method public androidx.compose.ui.BiasAlignment.Vertical copy(float bias);
+ }
+
+ public final class CombinedModifier implements androidx.compose.ui.Modifier {
+ ctor public CombinedModifier(androidx.compose.ui.Modifier outer, androidx.compose.ui.Modifier inner);
+ method public boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ }
+
+ public final class ComposedModifierKt {
+ method public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method public static androidx.compose.ui.Modifier materialize(androidx.compose.runtime.Composer, androidx.compose.ui.Modifier modifier);
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface Modifier {
+ method public boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ method public default infix androidx.compose.ui.Modifier then(androidx.compose.ui.Modifier other);
+ field public static final androidx.compose.ui.Modifier.Companion Companion;
+ }
+
+ public static final class Modifier.Companion implements androidx.compose.ui.Modifier {
+ method public boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public static interface Modifier.Element extends androidx.compose.ui.Modifier {
+ method public default boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public default boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public default <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public default <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ }
+
+ @androidx.compose.runtime.Stable public interface MotionDurationScale extends kotlin.coroutines.CoroutineContext.Element {
+ method public default kotlin.coroutines.CoroutineContext.Key<?> getKey();
+ method public float getScaleFactor();
+ property public default kotlin.coroutines.CoroutineContext.Key<?> key;
+ property public abstract float scaleFactor;
+ field public static final androidx.compose.ui.MotionDurationScale.Key Key;
+ }
+
+ public static final class MotionDurationScale.Key implements kotlin.coroutines.CoroutineContext.Key<androidx.compose.ui.MotionDurationScale> {
+ }
+
+ @androidx.compose.runtime.ComposableTargetMarker(description="UI Composable") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface UiComposable {
+ }
+
+ public final class ZIndexModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier zIndex(androidx.compose.ui.Modifier, float zIndex);
+ }
+
+}
+
+package androidx.compose.ui.draw {
+
+ public final class AlphaKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier alpha(androidx.compose.ui.Modifier, float alpha);
+ }
+
+ public final class BlurKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radiusX, float radiusY, optional androidx.compose.ui.graphics.Shape edgeTreatment);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radius, optional androidx.compose.ui.graphics.Shape edgeTreatment);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BlurredEdgeTreatment {
+ ctor public BlurredEdgeTreatment(androidx.compose.ui.graphics.Shape? shape);
+ method public androidx.compose.ui.graphics.Shape? getShape();
+ property public final androidx.compose.ui.graphics.Shape? shape;
+ field public static final androidx.compose.ui.draw.BlurredEdgeTreatment.Companion Companion;
+ }
+
+ public static final class BlurredEdgeTreatment.Companion {
+ method public androidx.compose.ui.graphics.Shape getRectangle();
+ method public androidx.compose.ui.graphics.Shape getUnbounded();
+ property public final androidx.compose.ui.graphics.Shape Rectangle;
+ property public final androidx.compose.ui.graphics.Shape Unbounded;
+ }
+
+ public interface BuildDrawCacheParams {
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public long getSize();
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public abstract long size;
+ }
+
+ public final class CacheDrawScope implements androidx.compose.ui.unit.Density {
+ method public float getDensity();
+ method public float getFontScale();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public long getSize();
+ method public androidx.compose.ui.draw.DrawResult onDrawBehind(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public androidx.compose.ui.draw.DrawResult onDrawWithContent(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.ContentDrawScope,kotlin.Unit> block);
+ property public float density;
+ property public float fontScale;
+ property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public final long size;
+ }
+
+ public final class ClipKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier clip(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Shape shape);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier clipToBounds(androidx.compose.ui.Modifier);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawCacheModifier extends androidx.compose.ui.draw.DrawModifier {
+ method public void onBuildCache(androidx.compose.ui.draw.BuildDrawCacheParams params);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawModifier extends androidx.compose.ui.Modifier.Element {
+ method public void draw(androidx.compose.ui.graphics.drawscope.ContentDrawScope);
+ }
+
+ public final class DrawModifierKt {
+ method public static androidx.compose.ui.Modifier drawBehind(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDraw);
+ method public static androidx.compose.ui.Modifier drawWithCache(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.draw.CacheDrawScope,androidx.compose.ui.draw.DrawResult> onBuildDrawCache);
+ method public static androidx.compose.ui.Modifier drawWithContent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.ContentDrawScope,kotlin.Unit> onDraw);
+ }
+
+ public final class DrawResult {
+ }
+
+ public final class PainterModifierKt {
+ method public static androidx.compose.ui.Modifier paint(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.painter.Painter painter, optional boolean sizeToIntrinsics, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ }
+
+ public final class RotateKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier rotate(androidx.compose.ui.Modifier, float degrees);
+ }
+
+ public final class ScaleKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scaleX, float scaleY);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scale);
+ }
+
+ public final class ShadowKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+ }
+
+}
+
+package androidx.compose.ui.focus {
+
+ public final class FocusChangedModifierKt {
+ method public static androidx.compose.ui.Modifier onFocusChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusState,kotlin.Unit> onFocusChanged);
+ }
+
+ @kotlin.jvm.JvmInline public final value class FocusDirection {
+ field public static final androidx.compose.ui.focus.FocusDirection.Companion Companion;
+ }
+
+ public static final class FocusDirection.Companion {
+ method public int getDown();
+ method public int getLeft();
+ method public int getNext();
+ method public int getPrevious();
+ method public int getRight();
+ method public int getUp();
+ property public final int Down;
+ property public final int Left;
+ property public final int Next;
+ property public final int Previous;
+ property public final int Right;
+ property public final int Up;
+ }
+
+ @Deprecated @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusEventModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public void onFocusEvent(androidx.compose.ui.focus.FocusState focusState);
+ }
+
+ public final class FocusEventModifierKt {
+ method public static androidx.compose.ui.Modifier onFocusEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusState,kotlin.Unit> onFocusEvent);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusManager {
+ method public void clearFocus(optional boolean force);
+ method public boolean moveFocus(int focusDirection);
+ }
+
+ public final class FocusModifierKt {
+ method @Deprecated public static androidx.compose.ui.Modifier focusModifier(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier focusTarget(androidx.compose.ui.Modifier);
+ }
+
+ @Deprecated public final class FocusOrder {
+ ctor @Deprecated public FocusOrder();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getDown();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getEnd();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getLeft();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getNext();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getPrevious();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getRight();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getStart();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getUp();
+ method @Deprecated public void setDown(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setEnd(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setLeft(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setNext(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setPrevious(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setRight(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setStart(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setUp(androidx.compose.ui.focus.FocusRequester);
+ property public final androidx.compose.ui.focus.FocusRequester down;
+ property public final androidx.compose.ui.focus.FocusRequester end;
+ property public final androidx.compose.ui.focus.FocusRequester left;
+ property public final androidx.compose.ui.focus.FocusRequester next;
+ property public final androidx.compose.ui.focus.FocusRequester previous;
+ property public final androidx.compose.ui.focus.FocusRequester right;
+ property public final androidx.compose.ui.focus.FocusRequester start;
+ property public final androidx.compose.ui.focus.FocusRequester up;
+ }
+
+ @Deprecated @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusOrderModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public void populateFocusOrder(androidx.compose.ui.focus.FocusOrder focusOrder);
+ }
+
+ public final class FocusOrderModifierKt {
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester);
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
+ }
+
+ public interface FocusProperties {
+ method public boolean getCanFocus();
+ method public default androidx.compose.ui.focus.FocusRequester getDown();
+ method public default androidx.compose.ui.focus.FocusRequester getEnd();
+ method public default androidx.compose.ui.focus.FocusRequester getLeft();
+ method public default androidx.compose.ui.focus.FocusRequester getNext();
+ method public default androidx.compose.ui.focus.FocusRequester getPrevious();
+ method public default androidx.compose.ui.focus.FocusRequester getRight();
+ method public default androidx.compose.ui.focus.FocusRequester getStart();
+ method public default androidx.compose.ui.focus.FocusRequester getUp();
+ method public void setCanFocus(boolean);
+ method public default void setDown(androidx.compose.ui.focus.FocusRequester);
+ method public default void setEnd(androidx.compose.ui.focus.FocusRequester);
+ method public default void setLeft(androidx.compose.ui.focus.FocusRequester);
+ method public default void setNext(androidx.compose.ui.focus.FocusRequester);
+ method public default void setPrevious(androidx.compose.ui.focus.FocusRequester);
+ method public default void setRight(androidx.compose.ui.focus.FocusRequester);
+ method public default void setStart(androidx.compose.ui.focus.FocusRequester);
+ method public default void setUp(androidx.compose.ui.focus.FocusRequester);
+ property public abstract boolean canFocus;
+ property public default androidx.compose.ui.focus.FocusRequester down;
+ property public default androidx.compose.ui.focus.FocusRequester end;
+ property public default androidx.compose.ui.focus.FocusRequester left;
+ property public default androidx.compose.ui.focus.FocusRequester next;
+ property public default androidx.compose.ui.focus.FocusRequester previous;
+ property public default androidx.compose.ui.focus.FocusRequester right;
+ property public default androidx.compose.ui.focus.FocusRequester start;
+ property public default androidx.compose.ui.focus.FocusRequester up;
+ }
+
+ public final class FocusPropertiesKt {
+ method public static androidx.compose.ui.Modifier focusProperties(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusProperties,kotlin.Unit> scope);
+ }
+
+ @androidx.compose.runtime.Stable public final class FocusRequester {
+ ctor public FocusRequester();
+ method public boolean captureFocus();
+ method public boolean freeFocus();
+ method public void requestFocus();
+ field public static final androidx.compose.ui.focus.FocusRequester.Companion Companion;
+ }
+
+ public static final class FocusRequester.Companion {
+ method public androidx.compose.ui.focus.FocusRequester getDefault();
+ property public final androidx.compose.ui.focus.FocusRequester Default;
+ }
+
+ @Deprecated @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusRequesterModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getFocusRequester();
+ property public abstract androidx.compose.ui.focus.FocusRequester focusRequester;
+ }
+
+ public final class FocusRequesterModifierKt {
+ method public static androidx.compose.ui.Modifier focusRequester(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester);
+ }
+
+ public interface FocusState {
+ method public boolean getHasFocus();
+ method public boolean isCaptured();
+ method public boolean isFocused();
+ property public abstract boolean hasFocus;
+ property public abstract boolean isCaptured;
+ property public abstract boolean isFocused;
+ }
+
+}
+
+package androidx.compose.ui.graphics {
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class CompositingStrategy {
+ field public static final androidx.compose.ui.graphics.CompositingStrategy.Companion Companion;
+ }
+
+ public static final class CompositingStrategy.Companion {
+ method public int getAuto();
+ method public int getModulateAlpha();
+ method public int getOffscreen();
+ property public final int Auto;
+ property public final int ModulateAlpha;
+ property public final int Offscreen;
+ }
+
+ public final class GraphicsLayerModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier toolingGraphicsLayer(androidx.compose.ui.Modifier);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface GraphicsLayerScope extends androidx.compose.ui.unit.Density {
+ method public float getAlpha();
+ method public default long getAmbientShadowColor();
+ method public float getCameraDistance();
+ method public boolean getClip();
+ method public default int getCompositingStrategy();
+ method public default androidx.compose.ui.graphics.RenderEffect? getRenderEffect();
+ method public float getRotationX();
+ method public float getRotationY();
+ method public float getRotationZ();
+ method public float getScaleX();
+ method public float getScaleY();
+ method public float getShadowElevation();
+ method public androidx.compose.ui.graphics.Shape getShape();
+ method public default long getSize();
+ method public default long getSpotShadowColor();
+ method public long getTransformOrigin();
+ method public float getTranslationX();
+ method public float getTranslationY();
+ method public void setAlpha(float);
+ method public default void setAmbientShadowColor(long);
+ method public void setCameraDistance(float);
+ method public void setClip(boolean);
+ method public default void setCompositingStrategy(int);
+ method public default void setRenderEffect(androidx.compose.ui.graphics.RenderEffect?);
+ method public void setRotationX(float);
+ method public void setRotationY(float);
+ method public void setRotationZ(float);
+ method public void setScaleX(float);
+ method public void setScaleY(float);
+ method public void setShadowElevation(float);
+ method public void setShape(androidx.compose.ui.graphics.Shape);
+ method public default void setSpotShadowColor(long);
+ method public void setTransformOrigin(long);
+ method public void setTranslationX(float);
+ method public void setTranslationY(float);
+ property public abstract float alpha;
+ property public default long ambientShadowColor;
+ property public abstract float cameraDistance;
+ property public abstract boolean clip;
+ property public default int compositingStrategy;
+ property public default androidx.compose.ui.graphics.RenderEffect? renderEffect;
+ property public abstract float rotationX;
+ property public abstract float rotationY;
+ property public abstract float rotationZ;
+ property public abstract float scaleX;
+ property public abstract float scaleY;
+ property public abstract float shadowElevation;
+ property public abstract androidx.compose.ui.graphics.Shape shape;
+ property public default long size;
+ property public default long spotShadowColor;
+ property public abstract long transformOrigin;
+ property public abstract float translationX;
+ property public abstract float translationY;
+ }
+
+ public final class GraphicsLayerScopeKt {
+ method public static androidx.compose.ui.graphics.GraphicsLayerScope GraphicsLayerScope();
+ method public static long getDefaultShadowColor();
+ property public static final long DefaultShadowColor;
+ field public static final float DefaultCameraDistance = 8.0f;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TransformOrigin {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float pivotFractionX, optional float pivotFractionY);
+ method public float getPivotFractionX();
+ method public float getPivotFractionY();
+ property public final float pivotFractionX;
+ property public final float pivotFractionY;
+ field public static final androidx.compose.ui.graphics.TransformOrigin.Companion Companion;
+ }
+
+ public static final class TransformOrigin.Companion {
+ method public long getCenter();
+ property public final long Center;
+ }
+
+ public final class TransformOriginKt {
+ method public static long TransformOrigin(float pivotFractionX, float pivotFractionY);
+ }
+
+}
+
+package androidx.compose.ui.graphics.vector {
+
+ @androidx.compose.runtime.Immutable public final class ImageVector {
+ method public boolean getAutoMirror();
+ method public float getDefaultHeight();
+ method public float getDefaultWidth();
+ method public String getName();
+ method public androidx.compose.ui.graphics.vector.VectorGroup getRoot();
+ method public int getTintBlendMode();
+ method public long getTintColor();
+ method public float getViewportHeight();
+ method public float getViewportWidth();
+ property public final boolean autoMirror;
+ property public final float defaultHeight;
+ property public final float defaultWidth;
+ property public final String name;
+ property public final androidx.compose.ui.graphics.vector.VectorGroup root;
+ property public final int tintBlendMode;
+ property public final long tintColor;
+ property public final float viewportHeight;
+ property public final float viewportWidth;
+ field public static final androidx.compose.ui.graphics.vector.ImageVector.Companion Companion;
+ }
+
+ public static final class ImageVector.Builder {
+ ctor public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror);
+ ctor @Deprecated public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode);
+ method public androidx.compose.ui.graphics.vector.ImageVector.Builder addGroup(optional String name, optional float rotate, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData);
+ method public androidx.compose.ui.graphics.vector.ImageVector.Builder addPath(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, optional int pathFillType, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional float trimPathStart, optional float trimPathEnd, optional float trimPathOffset);
+ method public androidx.compose.ui.graphics.vector.ImageVector build();
+ method public androidx.compose.ui.graphics.vector.ImageVector.Builder clearGroup();
+ }
+
+ public static final class ImageVector.Companion {
+ }
+
+ public final class ImageVectorKt {
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector.Builder group(androidx.compose.ui.graphics.vector.ImageVector.Builder, optional String name, optional float rotate, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.ImageVector.Builder,kotlin.Unit> block);
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector.Builder path(androidx.compose.ui.graphics.vector.ImageVector.Builder, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional int pathFillType, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.PathBuilder,kotlin.Unit> pathBuilder);
+ }
+
+ public abstract sealed class VNode {
+ method public abstract void draw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ method public final void invalidate();
+ }
+
+ public final class VectorApplier extends androidx.compose.runtime.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
+ ctor public VectorApplier(androidx.compose.ui.graphics.vector.VNode root);
+ method public void insertBottomUp(int index, androidx.compose.ui.graphics.vector.VNode instance);
+ method public void insertTopDown(int index, androidx.compose.ui.graphics.vector.VNode instance);
+ method public void move(int from, int to, int count);
+ method protected void onClear();
+ method public void remove(int index, int count);
+ }
+
+ @androidx.compose.runtime.ComposableTargetMarker(description="Vector Composable") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface VectorComposable {
+ }
+
+ public final class VectorComposeKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.graphics.vector.VectorComposable public static void Group(optional String name, optional float rotation, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.graphics.vector.VectorComposable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, optional int pathFillType, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional float trimPathStart, optional float trimPathEnd, optional float trimPathOffset);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorConfig {
+ method public default <T> T! getOrDefault(androidx.compose.ui.graphics.vector.VectorProperty<T> property, T? defaultValue);
+ }
+
+ @androidx.compose.runtime.Immutable public final class VectorGroup extends androidx.compose.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.compose.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
+ method public operator androidx.compose.ui.graphics.vector.VectorNode get(int index);
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> getClipPathData();
+ method public String getName();
+ method public float getPivotX();
+ method public float getPivotY();
+ method public float getRotation();
+ method public float getScaleX();
+ method public float getScaleY();
+ method public int getSize();
+ method public float getTranslationX();
+ method public float getTranslationY();
+ method public java.util.Iterator<androidx.compose.ui.graphics.vector.VectorNode> iterator();
+ property public final java.util.List<androidx.compose.ui.graphics.vector.PathNode> clipPathData;
+ property public final String name;
+ property public final float pivotX;
+ property public final float pivotY;
+ property public final float rotation;
+ property public final float scaleX;
+ property public final float scaleY;
+ property public final int size;
+ property public final float translationX;
+ property public final float translationY;
+ }
+
+ public final class VectorKt {
+ method public static inline java.util.List<androidx.compose.ui.graphics.vector.PathNode> PathData(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.PathBuilder,kotlin.Unit> block);
+ method public static java.util.List<androidx.compose.ui.graphics.vector.PathNode> addPathNodes(String? pathStr);
+ method public static int getDefaultFillType();
+ method public static int getDefaultStrokeLineCap();
+ method public static int getDefaultStrokeLineJoin();
+ method public static int getDefaultTintBlendMode();
+ method public static long getDefaultTintColor();
+ method public static java.util.List<androidx.compose.ui.graphics.vector.PathNode> getEmptyPath();
+ property public static final int DefaultFillType;
+ property public static final int DefaultStrokeLineCap;
+ property public static final int DefaultStrokeLineJoin;
+ property public static final int DefaultTintBlendMode;
+ property public static final long DefaultTintColor;
+ property public static final java.util.List<androidx.compose.ui.graphics.vector.PathNode> EmptyPath;
+ field public static final String DefaultGroupName = "";
+ field public static final String DefaultPathName = "";
+ field public static final float DefaultPivotX = 0.0f;
+ field public static final float DefaultPivotY = 0.0f;
+ field public static final float DefaultRotation = 0.0f;
+ field public static final float DefaultScaleX = 1.0f;
+ field public static final float DefaultScaleY = 1.0f;
+ field public static final float DefaultStrokeLineMiter = 4.0f;
+ field public static final float DefaultStrokeLineWidth = 0.0f;
+ field public static final float DefaultTranslationX = 0.0f;
+ field public static final float DefaultTranslationY = 0.0f;
+ field public static final float DefaultTrimPathEnd = 1.0f;
+ field public static final float DefaultTrimPathOffset = 0.0f;
+ field public static final float DefaultTrimPathStart = 0.0f;
+ }
+
+ public abstract sealed class VectorNode {
+ }
+
+ public final class VectorPainter extends androidx.compose.ui.graphics.painter.Painter {
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public long intrinsicSize;
+ }
+
+ public final class VectorPainterKt {
+ method @androidx.compose.runtime.Composable public static void RenderVectorGroup(androidx.compose.ui.graphics.vector.VectorGroup group, optional java.util.Map<java.lang.String,? extends androidx.compose.ui.graphics.vector.VectorConfig> configs);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(androidx.compose.ui.graphics.vector.ImageVector image);
+ field public static final String RootGroupName = "VectorRootGroup";
+ }
+
+ @androidx.compose.runtime.Immutable public final class VectorPath extends androidx.compose.ui.graphics.vector.VectorNode {
+ method public androidx.compose.ui.graphics.Brush? getFill();
+ method public float getFillAlpha();
+ method public String getName();
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> getPathData();
+ method public int getPathFillType();
+ method public androidx.compose.ui.graphics.Brush? getStroke();
+ method public float getStrokeAlpha();
+ method public int getStrokeLineCap();
+ method public int getStrokeLineJoin();
+ method public float getStrokeLineMiter();
+ method public float getStrokeLineWidth();
+ method public float getTrimPathEnd();
+ method public float getTrimPathOffset();
+ method public float getTrimPathStart();
+ property public final androidx.compose.ui.graphics.Brush? fill;
+ property public final float fillAlpha;
+ property public final String name;
+ property public final java.util.List<androidx.compose.ui.graphics.vector.PathNode> pathData;
+ property public final int pathFillType;
+ property public final androidx.compose.ui.graphics.Brush? stroke;
+ property public final float strokeAlpha;
+ property public final int strokeLineCap;
+ property public final int strokeLineJoin;
+ property public final float strokeLineMiter;
+ property public final float strokeLineWidth;
+ property public final float trimPathEnd;
+ property public final float trimPathOffset;
+ property public final float trimPathStart;
+ }
+
+ public abstract sealed class VectorProperty<T> {
+ }
+
+ public static final class VectorProperty.Fill extends androidx.compose.ui.graphics.vector.VectorProperty<androidx.compose.ui.graphics.Brush> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.Fill INSTANCE;
+ }
+
+ public static final class VectorProperty.FillAlpha extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.FillAlpha INSTANCE;
+ }
+
+ public static final class VectorProperty.PathData extends androidx.compose.ui.graphics.vector.VectorProperty<java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode>> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.PathData INSTANCE;
+ }
+
+ public static final class VectorProperty.PivotX extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.PivotX INSTANCE;
+ }
+
+ public static final class VectorProperty.PivotY extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.PivotY INSTANCE;
+ }
+
+ public static final class VectorProperty.Rotation extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.Rotation INSTANCE;
+ }
+
+ public static final class VectorProperty.ScaleX extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.ScaleX INSTANCE;
+ }
+
+ public static final class VectorProperty.ScaleY extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.ScaleY INSTANCE;
+ }
+
+ public static final class VectorProperty.Stroke extends androidx.compose.ui.graphics.vector.VectorProperty<androidx.compose.ui.graphics.Brush> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.Stroke INSTANCE;
+ }
+
+ public static final class VectorProperty.StrokeAlpha extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.StrokeAlpha INSTANCE;
+ }
+
+ public static final class VectorProperty.StrokeLineWidth extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.StrokeLineWidth INSTANCE;
+ }
+
+ public static final class VectorProperty.TranslateX extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TranslateX INSTANCE;
+ }
+
+ public static final class VectorProperty.TranslateY extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TranslateY INSTANCE;
+ }
+
+ public static final class VectorProperty.TrimPathEnd extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TrimPathEnd INSTANCE;
+ }
+
+ public static final class VectorProperty.TrimPathOffset extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TrimPathOffset INSTANCE;
+ }
+
+ public static final class VectorProperty.TrimPathStart extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TrimPathStart INSTANCE;
+ }
+
+}
+
+package androidx.compose.ui.hapticfeedback {
+
+ public interface HapticFeedback {
+ method public void performHapticFeedback(int hapticFeedbackType);
+ }
+
+ @kotlin.jvm.JvmInline public final value class HapticFeedbackType {
+ ctor public HapticFeedbackType(int value);
+ field public static final androidx.compose.ui.hapticfeedback.HapticFeedbackType.Companion Companion;
+ }
+
+ public static final class HapticFeedbackType.Companion {
+ method public int getLongPress();
+ method public int getTextHandleMove();
+ method public java.util.List<androidx.compose.ui.hapticfeedback.HapticFeedbackType> values();
+ property public final int LongPress;
+ property public final int TextHandleMove;
+ }
+
+}
+
+package androidx.compose.ui.input {
+
+ @kotlin.jvm.JvmInline public final value class InputMode {
+ field public static final androidx.compose.ui.input.InputMode.Companion Companion;
+ }
+
+ public static final class InputMode.Companion {
+ method public int getKeyboard();
+ method public int getTouch();
+ property public final int Keyboard;
+ property public final int Touch;
+ }
+
+ public interface InputModeManager {
+ method public int getInputMode();
+ property public abstract int inputMode;
+ }
+
+}
+
+package androidx.compose.ui.input.key {
+
+ @kotlin.jvm.JvmInline public final value class Key {
+ ctor public Key(long keyCode);
+ method public long getKeyCode();
+ property public final long keyCode;
+ field public static final androidx.compose.ui.input.key.Key.Companion Companion;
+ }
+
+ public static final class Key.Companion {
+ method public long getA();
+ method public long getAllApps();
+ method public long getAltLeft();
+ method public long getAltRight();
+ method public long getApostrophe();
+ method public long getAppSwitch();
+ method public long getAssist();
+ method public long getAt();
+ method public long getAvReceiverInput();
+ method public long getAvReceiverPower();
+ method public long getB();
+ method public long getBack();
+ method public long getBackslash();
+ method public long getBackspace();
+ method public long getBookmark();
+ method public long getBreak();
+ method public long getBrightnessDown();
+ method public long getBrightnessUp();
+ method public long getBrowser();
+ method public long getButton1();
+ method public long getButton10();
+ method public long getButton11();
+ method public long getButton12();
+ method public long getButton13();
+ method public long getButton14();
+ method public long getButton15();
+ method public long getButton16();
+ method public long getButton2();
+ method public long getButton3();
+ method public long getButton4();
+ method public long getButton5();
+ method public long getButton6();
+ method public long getButton7();
+ method public long getButton8();
+ method public long getButton9();
+ method public long getButtonA();
+ method public long getButtonB();
+ method public long getButtonC();
+ method public long getButtonL1();
+ method public long getButtonL2();
+ method public long getButtonMode();
+ method public long getButtonR1();
+ method public long getButtonR2();
+ method public long getButtonSelect();
+ method public long getButtonStart();
+ method public long getButtonThumbLeft();
+ method public long getButtonThumbRight();
+ method public long getButtonX();
+ method public long getButtonY();
+ method public long getButtonZ();
+ method public long getC();
+ method public long getCalculator();
+ method public long getCalendar();
+ method public long getCall();
+ method public long getCamera();
+ method public long getCapsLock();
+ method public long getCaptions();
+ method public long getChannelDown();
+ method public long getChannelUp();
+ method public long getClear();
+ method public long getComma();
+ method public long getContacts();
+ method public long getCopy();
+ method public long getCtrlLeft();
+ method public long getCtrlRight();
+ method public long getCut();
+ method public long getD();
+ method public long getDelete();
+ method public long getDirectionCenter();
+ method public long getDirectionDown();
+ method public long getDirectionDownLeft();
+ method public long getDirectionDownRight();
+ method public long getDirectionLeft();
+ method public long getDirectionRight();
+ method public long getDirectionUp();
+ method public long getDirectionUpLeft();
+ method public long getDirectionUpRight();
+ method public long getDvr();
+ method public long getE();
+ method public long getEight();
+ method public long getEisu();
+ method public long getEndCall();
+ method public long getEnter();
+ method public long getEnvelope();
+ method public long getEquals();
+ method public long getEscape();
+ method public long getF();
+ method public long getF1();
+ method public long getF10();
+ method public long getF11();
+ method public long getF12();
+ method public long getF2();
+ method public long getF3();
+ method public long getF4();
+ method public long getF5();
+ method public long getF6();
+ method public long getF7();
+ method public long getF8();
+ method public long getF9();
+ method public long getFive();
+ method public long getFocus();
+ method public long getForward();
+ method public long getFour();
+ method public long getFunction();
+ method public long getG();
+ method public long getGrave();
+ method public long getGuide();
+ method public long getH();
+ method public long getHeadsetHook();
+ method public long getHelp();
+ method public long getHenkan();
+ method public long getHome();
+ method public long getI();
+ method public long getInfo();
+ method public long getInsert();
+ method public long getJ();
+ method public long getK();
+ method public long getKana();
+ method public long getKatakanaHiragana();
+ method public long getL();
+ method public long getLanguageSwitch();
+ method public long getLastChannel();
+ method public long getLeftBracket();
+ method public long getM();
+ method public long getMannerMode();
+ method public long getMediaAudioTrack();
+ method public long getMediaClose();
+ method public long getMediaEject();
+ method public long getMediaFastForward();
+ method public long getMediaNext();
+ method public long getMediaPause();
+ method public long getMediaPlay();
+ method public long getMediaPlayPause();
+ method public long getMediaPrevious();
+ method public long getMediaRecord();
+ method public long getMediaRewind();
+ method public long getMediaSkipBackward();
+ method public long getMediaSkipForward();
+ method public long getMediaStepBackward();
+ method public long getMediaStepForward();
+ method public long getMediaStop();
+ method public long getMediaTopMenu();
+ method public long getMenu();
+ method public long getMetaLeft();
+ method public long getMetaRight();
+ method public long getMicrophoneMute();
+ method public long getMinus();
+ method public long getMoveEnd();
+ method public long getMoveHome();
+ method public long getMuhenkan();
+ method public long getMultiply();
+ method public long getMusic();
+ method public long getN();
+ method public long getNavigateIn();
+ method public long getNavigateNext();
+ method public long getNavigateOut();
+ method public long getNavigatePrevious();
+ method public long getNine();
+ method public long getNotification();
+ method public long getNumLock();
+ method public long getNumPad0();
+ method public long getNumPad1();
+ method public long getNumPad2();
+ method public long getNumPad3();
+ method public long getNumPad4();
+ method public long getNumPad5();
+ method public long getNumPad6();
+ method public long getNumPad7();
+ method public long getNumPad8();
+ method public long getNumPad9();
+ method public long getNumPadAdd();
+ method public long getNumPadComma();
+ method public long getNumPadDivide();
+ method public long getNumPadDot();
+ method public long getNumPadEnter();
+ method public long getNumPadEquals();
+ method public long getNumPadLeftParenthesis();
+ method public long getNumPadMultiply();
+ method public long getNumPadRightParenthesis();
+ method public long getNumPadSubtract();
+ method public long getNumber();
+ method public long getO();
+ method public long getOne();
+ method public long getP();
+ method public long getPageDown();
+ method public long getPageUp();
+ method public long getPairing();
+ method public long getPaste();
+ method public long getPeriod();
+ method public long getPictureSymbols();
+ method public long getPlus();
+ method public long getPound();
+ method public long getPower();
+ method public long getPrintScreen();
+ method public long getProfileSwitch();
+ method public long getProgramBlue();
+ method public long getProgramGreen();
+ method public long getProgramRed();
+ method public long getProgramYellow();
+ method public long getQ();
+ method public long getR();
+ method public long getRefresh();
+ method public long getRightBracket();
+ method public long getRo();
+ method public long getS();
+ method public long getScrollLock();
+ method public long getSearch();
+ method public long getSemicolon();
+ method public long getSetTopBoxInput();
+ method public long getSetTopBoxPower();
+ method public long getSettings();
+ method public long getSeven();
+ method public long getShiftLeft();
+ method public long getShiftRight();
+ method public long getSix();
+ method public long getSlash();
+ method public long getSleep();
+ method public long getSoftLeft();
+ method public long getSoftRight();
+ method public long getSoftSleep();
+ method public long getSpacebar();
+ method public long getStem1();
+ method public long getStem2();
+ method public long getStem3();
+ method public long getStemPrimary();
+ method public long getSwitchCharset();
+ method public long getSymbol();
+ method public long getSystemNavigationDown();
+ method public long getSystemNavigationLeft();
+ method public long getSystemNavigationRight();
+ method public long getSystemNavigationUp();
+ method public long getT();
+ method public long getTab();
+ method public long getThree();
+ method public long getThumbsDown();
+ method public long getThumbsUp();
+ method public long getToggle2D3D();
+ method public long getTv();
+ method public long getTvAntennaCable();
+ method public long getTvAudioDescription();
+ method public long getTvAudioDescriptionMixingVolumeDown();
+ method public long getTvAudioDescriptionMixingVolumeUp();
+ method public long getTvContentsMenu();
+ method public long getTvDataService();
+ method public long getTvInput();
+ method public long getTvInputComponent1();
+ method public long getTvInputComponent2();
+ method public long getTvInputComposite1();
+ method public long getTvInputComposite2();
+ method public long getTvInputHdmi1();
+ method public long getTvInputHdmi2();
+ method public long getTvInputHdmi3();
+ method public long getTvInputHdmi4();
+ method public long getTvInputVga1();
+ method public long getTvMediaContextMenu();
+ method public long getTvNetwork();
+ method public long getTvNumberEntry();
+ method public long getTvPower();
+ method public long getTvRadioService();
+ method public long getTvSatellite();
+ method public long getTvSatelliteBs();
+ method public long getTvSatelliteCs();
+ method public long getTvSatelliteService();
+ method public long getTvTeletext();
+ method public long getTvTerrestrialAnalog();
+ method public long getTvTerrestrialDigital();
+ method public long getTvTimerProgramming();
+ method public long getTvZoomMode();
+ method public long getTwo();
+ method public long getU();
+ method public long getUnknown();
+ method public long getV();
+ method public long getVoiceAssist();
+ method public long getVolumeDown();
+ method public long getVolumeMute();
+ method public long getVolumeUp();
+ method public long getW();
+ method public long getWakeUp();
+ method public long getWindow();
+ method public long getX();
+ method public long getY();
+ method public long getYen();
+ method public long getZ();
+ method public long getZenkakuHankaru();
+ method public long getZero();
+ method public long getZoomIn();
+ method public long getZoomOut();
+ property public final long A;
+ property public final long AllApps;
+ property public final long AltLeft;
+ property public final long AltRight;
+ property public final long Apostrophe;
+ property public final long AppSwitch;
+ property public final long Assist;
+ property public final long At;
+ property public final long AvReceiverInput;
+ property public final long AvReceiverPower;
+ property public final long B;
+ property public final long Back;
+ property public final long Backslash;
+ property public final long Backspace;
+ property public final long Bookmark;
+ property public final long Break;
+ property public final long BrightnessDown;
+ property public final long BrightnessUp;
+ property public final long Browser;
+ property public final long Button1;
+ property public final long Button10;
+ property public final long Button11;
+ property public final long Button12;
+ property public final long Button13;
+ property public final long Button14;
+ property public final long Button15;
+ property public final long Button16;
+ property public final long Button2;
+ property public final long Button3;
+ property public final long Button4;
+ property public final long Button5;
+ property public final long Button6;
+ property public final long Button7;
+ property public final long Button8;
+ property public final long Button9;
+ property public final long ButtonA;
+ property public final long ButtonB;
+ property public final long ButtonC;
+ property public final long ButtonL1;
+ property public final long ButtonL2;
+ property public final long ButtonMode;
+ property public final long ButtonR1;
+ property public final long ButtonR2;
+ property public final long ButtonSelect;
+ property public final long ButtonStart;
+ property public final long ButtonThumbLeft;
+ property public final long ButtonThumbRight;
+ property public final long ButtonX;
+ property public final long ButtonY;
+ property public final long ButtonZ;
+ property public final long C;
+ property public final long Calculator;
+ property public final long Calendar;
+ property public final long Call;
+ property public final long Camera;
+ property public final long CapsLock;
+ property public final long Captions;
+ property public final long ChannelDown;
+ property public final long ChannelUp;
+ property public final long Clear;
+ property public final long Comma;
+ property public final long Contacts;
+ property public final long Copy;
+ property public final long CtrlLeft;
+ property public final long CtrlRight;
+ property public final long Cut;
+ property public final long D;
+ property public final long Delete;
+ property public final long DirectionCenter;
+ property public final long DirectionDown;
+ property public final long DirectionDownLeft;
+ property public final long DirectionDownRight;
+ property public final long DirectionLeft;
+ property public final long DirectionRight;
+ property public final long DirectionUp;
+ property public final long DirectionUpLeft;
+ property public final long DirectionUpRight;
+ property public final long Dvr;
+ property public final long E;
+ property public final long Eight;
+ property public final long Eisu;
+ property public final long EndCall;
+ property public final long Enter;
+ property public final long Envelope;
+ property public final long Equals;
+ property public final long Escape;
+ property public final long F;
+ property public final long F1;
+ property public final long F10;
+ property public final long F11;
+ property public final long F12;
+ property public final long F2;
+ property public final long F3;
+ property public final long F4;
+ property public final long F5;
+ property public final long F6;
+ property public final long F7;
+ property public final long F8;
+ property public final long F9;
+ property public final long Five;
+ property public final long Focus;
+ property public final long Forward;
+ property public final long Four;
+ property public final long Function;
+ property public final long G;
+ property public final long Grave;
+ property public final long Guide;
+ property public final long H;
+ property public final long HeadsetHook;
+ property public final long Help;
+ property public final long Henkan;
+ property public final long Home;
+ property public final long I;
+ property public final long Info;
+ property public final long Insert;
+ property public final long J;
+ property public final long K;
+ property public final long Kana;
+ property public final long KatakanaHiragana;
+ property public final long L;
+ property public final long LanguageSwitch;
+ property public final long LastChannel;
+ property public final long LeftBracket;
+ property public final long M;
+ property public final long MannerMode;
+ property public final long MediaAudioTrack;
+ property public final long MediaClose;
+ property public final long MediaEject;
+ property public final long MediaFastForward;
+ property public final long MediaNext;
+ property public final long MediaPause;
+ property public final long MediaPlay;
+ property public final long MediaPlayPause;
+ property public final long MediaPrevious;
+ property public final long MediaRecord;
+ property public final long MediaRewind;
+ property public final long MediaSkipBackward;
+ property public final long MediaSkipForward;
+ property public final long MediaStepBackward;
+ property public final long MediaStepForward;
+ property public final long MediaStop;
+ property public final long MediaTopMenu;
+ property public final long Menu;
+ property public final long MetaLeft;
+ property public final long MetaRight;
+ property public final long MicrophoneMute;
+ property public final long Minus;
+ property public final long MoveEnd;
+ property public final long MoveHome;
+ property public final long Muhenkan;
+ property public final long Multiply;
+ property public final long Music;
+ property public final long N;
+ property public final long NavigateIn;
+ property public final long NavigateNext;
+ property public final long NavigateOut;
+ property public final long NavigatePrevious;
+ property public final long Nine;
+ property public final long Notification;
+ property public final long NumLock;
+ property public final long NumPad0;
+ property public final long NumPad1;
+ property public final long NumPad2;
+ property public final long NumPad3;
+ property public final long NumPad4;
+ property public final long NumPad5;
+ property public final long NumPad6;
+ property public final long NumPad7;
+ property public final long NumPad8;
+ property public final long NumPad9;
+ property public final long NumPadAdd;
+ property public final long NumPadComma;
+ property public final long NumPadDivide;
+ property public final long NumPadDot;
+ property public final long NumPadEnter;
+ property public final long NumPadEquals;
+ property public final long NumPadLeftParenthesis;
+ property public final long NumPadMultiply;
+ property public final long NumPadRightParenthesis;
+ property public final long NumPadSubtract;
+ property public final long Number;
+ property public final long O;
+ property public final long One;
+ property public final long P;
+ property public final long PageDown;
+ property public final long PageUp;
+ property public final long Pairing;
+ property public final long Paste;
+ property public final long Period;
+ property public final long PictureSymbols;
+ property public final long Plus;
+ property public final long Pound;
+ property public final long Power;
+ property public final long PrintScreen;
+ property public final long ProfileSwitch;
+ property public final long ProgramBlue;
+ property public final long ProgramGreen;
+ property public final long ProgramRed;
+ property public final long ProgramYellow;
+ property public final long Q;
+ property public final long R;
+ property public final long Refresh;
+ property public final long RightBracket;
+ property public final long Ro;
+ property public final long S;
+ property public final long ScrollLock;
+ property public final long Search;
+ property public final long Semicolon;
+ property public final long SetTopBoxInput;
+ property public final long SetTopBoxPower;
+ property public final long Settings;
+ property public final long Seven;
+ property public final long ShiftLeft;
+ property public final long ShiftRight;
+ property public final long Six;
+ property public final long Slash;
+ property public final long Sleep;
+ property public final long SoftLeft;
+ property public final long SoftRight;
+ property public final long SoftSleep;
+ property public final long Spacebar;
+ property public final long Stem1;
+ property public final long Stem2;
+ property public final long Stem3;
+ property public final long StemPrimary;
+ property public final long SwitchCharset;
+ property public final long Symbol;
+ property public final long SystemNavigationDown;
+ property public final long SystemNavigationLeft;
+ property public final long SystemNavigationRight;
+ property public final long SystemNavigationUp;
+ property public final long T;
+ property public final long Tab;
+ property public final long Three;
+ property public final long ThumbsDown;
+ property public final long ThumbsUp;
+ property public final long Toggle2D3D;
+ property public final long Tv;
+ property public final long TvAntennaCable;
+ property public final long TvAudioDescription;
+ property public final long TvAudioDescriptionMixingVolumeDown;
+ property public final long TvAudioDescriptionMixingVolumeUp;
+ property public final long TvContentsMenu;
+ property public final long TvDataService;
+ property public final long TvInput;
+ property public final long TvInputComponent1;
+ property public final long TvInputComponent2;
+ property public final long TvInputComposite1;
+ property public final long TvInputComposite2;
+ property public final long TvInputHdmi1;
+ property public final long TvInputHdmi2;
+ property public final long TvInputHdmi3;
+ property public final long TvInputHdmi4;
+ property public final long TvInputVga1;
+ property public final long TvMediaContextMenu;
+ property public final long TvNetwork;
+ property public final long TvNumberEntry;
+ property public final long TvPower;
+ property public final long TvRadioService;
+ property public final long TvSatellite;
+ property public final long TvSatelliteBs;
+ property public final long TvSatelliteCs;
+ property public final long TvSatelliteService;
+ property public final long TvTeletext;
+ property public final long TvTerrestrialAnalog;
+ property public final long TvTerrestrialDigital;
+ property public final long TvTimerProgramming;
+ property public final long TvZoomMode;
+ property public final long Two;
+ property public final long U;
+ property public final long Unknown;
+ property public final long V;
+ property public final long VoiceAssist;
+ property public final long VolumeDown;
+ property public final long VolumeMute;
+ property public final long VolumeUp;
+ property public final long W;
+ property public final long WakeUp;
+ property public final long Window;
+ property public final long X;
+ property public final long Y;
+ property public final long Yen;
+ property public final long Z;
+ property public final long ZenkakuHankaru;
+ property public final long Zero;
+ property public final long ZoomIn;
+ property public final long ZoomOut;
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyEvent {
+ ctor public KeyEvent(android.view.KeyEvent nativeKeyEvent);
+ method public android.view.KeyEvent getNativeKeyEvent();
+ property public final android.view.KeyEvent nativeKeyEvent;
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyEventType {
+ field public static final androidx.compose.ui.input.key.KeyEventType.Companion Companion;
+ }
+
+ public static final class KeyEventType.Companion {
+ method public int getKeyDown();
+ method public int getKeyUp();
+ method public int getUnknown();
+ property public final int KeyDown;
+ property public final int KeyUp;
+ property public final int Unknown;
+ }
+
+ public final class KeyEvent_androidKt {
+ method public static long getKey(android.view.KeyEvent);
+ method public static int getType(android.view.KeyEvent);
+ method public static int getUtf16CodePoint(android.view.KeyEvent);
+ method public static boolean isAltPressed(android.view.KeyEvent);
+ method public static boolean isCtrlPressed(android.view.KeyEvent);
+ method public static boolean isMetaPressed(android.view.KeyEvent);
+ method public static boolean isShiftPressed(android.view.KeyEvent);
+ }
+
+ public final class KeyInputModifierKt {
+ method public static androidx.compose.ui.Modifier onKeyEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.key.KeyEvent,java.lang.Boolean> onKeyEvent);
+ method public static androidx.compose.ui.Modifier onPreviewKeyEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.key.KeyEvent,java.lang.Boolean> onPreviewKeyEvent);
+ }
+
+ public final class Key_androidKt {
+ method public static long Key(int nativeKeyCode);
+ method public static int getNativeKeyCode(long);
+ }
+
+}
+
+package androidx.compose.ui.input.nestedscroll {
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface NestedScrollConnection {
+ method public default suspend Object? onPostFling(long consumed, long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public default long onPostScroll(long consumed, long available, int source);
+ method public default suspend Object? onPreFling(long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public default long onPreScroll(long available, int source);
+ }
+
+ public final class NestedScrollDispatcher {
+ ctor public NestedScrollDispatcher();
+ method public suspend Object? dispatchPostFling(long consumed, long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public long dispatchPostScroll(long consumed, long available, int source);
+ method public suspend Object? dispatchPreFling(long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public long dispatchPreScroll(long available, int source);
+ method public kotlinx.coroutines.CoroutineScope getCoroutineScope();
+ property public final kotlinx.coroutines.CoroutineScope coroutineScope;
+ }
+
+ public final class NestedScrollModifierKt {
+ method public static androidx.compose.ui.Modifier nestedScroll(androidx.compose.ui.Modifier, androidx.compose.ui.input.nestedscroll.NestedScrollConnection connection, optional androidx.compose.ui.input.nestedscroll.NestedScrollDispatcher? dispatcher);
+ }
+
+ @kotlin.jvm.JvmInline public final value class NestedScrollSource {
+ field public static final androidx.compose.ui.input.nestedscroll.NestedScrollSource.Companion Companion;
+ }
+
+ public static final class NestedScrollSource.Companion {
+ method public int getDrag();
+ method public int getFling();
+ method @Deprecated public int getRelocate();
+ property public final int Drag;
+ property public final int Fling;
+ property @Deprecated public final int Relocate;
+ }
+
+}
+
+package androidx.compose.ui.input.pointer {
+
+ @kotlin.coroutines.RestrictsSuspension @kotlin.jvm.JvmDefaultWithCompatibility public interface AwaitPointerEventScope extends androidx.compose.ui.unit.Density {
+ method public suspend Object? awaitPointerEvent(optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerEvent>);
+ method public androidx.compose.ui.input.pointer.PointerEvent getCurrentEvent();
+ method public default long getExtendedTouchPadding();
+ method public long getSize();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public default suspend <T> Object? withTimeout(long timeMillis, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method public default suspend <T> Object? withTimeoutOrNull(long timeMillis, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ property public abstract androidx.compose.ui.input.pointer.PointerEvent currentEvent;
+ property public default long extendedTouchPadding;
+ property public abstract long size;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ }
+
+ @Deprecated public final class ConsumedData {
+ ctor @Deprecated public ConsumedData(optional @Deprecated boolean positionChange, optional @Deprecated boolean downChange);
+ method @Deprecated public boolean getDownChange();
+ method @Deprecated public boolean getPositionChange();
+ method @Deprecated public void setDownChange(boolean);
+ method @Deprecated public void setPositionChange(boolean);
+ property @Deprecated public final boolean downChange;
+ property @Deprecated public final boolean positionChange;
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerButtons {
+ ctor public PointerButtons(int packedValue);
+ }
+
+ public final class PointerEvent {
+ ctor public PointerEvent(java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> changes);
+ method public java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> component1();
+ method public androidx.compose.ui.input.pointer.PointerEvent copy(java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> changes, android.view.MotionEvent? motionEvent);
+ method public int getButtons();
+ method public java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> getChanges();
+ method public int getKeyboardModifiers();
+ method public int getType();
+ property public final int buttons;
+ property public final java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> changes;
+ property public final int keyboardModifiers;
+ property public final int type;
+ }
+
+ public final class PointerEventKt {
+ method @Deprecated public static boolean anyChangeConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToDown(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToDownIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToUp(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToUpIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static void consumeAllChanges(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static void consumeDownChange(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static void consumePositionChange(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static int indexOfFirstPressed(int);
+ method public static int indexOfLastPressed(int);
+ method @Deprecated public static boolean isOutOfBounds(androidx.compose.ui.input.pointer.PointerInputChange, long size);
+ method public static boolean isOutOfBounds(androidx.compose.ui.input.pointer.PointerInputChange, long size, long extendedTouchPadding);
+ method public static boolean isPressed(int, int buttonIndex);
+ method public static long positionChange(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static boolean positionChangeConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static long positionChangeIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean positionChanged(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean positionChangedIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ }
+
+ public enum PointerEventPass {
+ method public static androidx.compose.ui.input.pointer.PointerEventPass valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.input.pointer.PointerEventPass[] values();
+ enum_constant public static final androidx.compose.ui.input.pointer.PointerEventPass Final;
+ enum_constant public static final androidx.compose.ui.input.pointer.PointerEventPass Initial;
+ enum_constant public static final androidx.compose.ui.input.pointer.PointerEventPass Main;
+ }
+
+ public final class PointerEventTimeoutCancellationException extends java.util.concurrent.CancellationException {
+ ctor public PointerEventTimeoutCancellationException(long time);
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerEventType {
+ field public static final androidx.compose.ui.input.pointer.PointerEventType.Companion Companion;
+ }
+
+ public static final class PointerEventType.Companion {
+ method public int getEnter();
+ method public int getExit();
+ method public int getMove();
+ method public int getPress();
+ method public int getRelease();
+ method public int getScroll();
+ method public int getUnknown();
+ property public final int Enter;
+ property public final int Exit;
+ property public final int Move;
+ property public final int Press;
+ property public final int Release;
+ property public final int Scroll;
+ property public final int Unknown;
+ }
+
+ public final class PointerEvent_androidKt {
+ method public static boolean getAreAnyPressed(int);
+ method public static int indexOfFirstPressed(int);
+ method public static int indexOfLastPressed(int);
+ method public static boolean isAltGraphPressed(int);
+ method public static boolean isAltPressed(int);
+ method public static boolean isBackPressed(int);
+ method public static boolean isCapsLockOn(int);
+ method public static boolean isCtrlPressed(int);
+ method public static boolean isForwardPressed(int);
+ method public static boolean isFunctionPressed(int);
+ method public static boolean isMetaPressed(int);
+ method public static boolean isNumLockOn(int);
+ method public static boolean isPressed(int, int buttonIndex);
+ method public static boolean isPrimaryPressed(int);
+ method public static boolean isScrollLockOn(int);
+ method public static boolean isSecondaryPressed(int);
+ method public static boolean isShiftPressed(int);
+ method public static boolean isSymPressed(int);
+ method public static boolean isTertiaryPressed(int);
+ }
+
+ @androidx.compose.runtime.Stable public interface PointerIcon {
+ field public static final androidx.compose.ui.input.pointer.PointerIcon.Companion Companion;
+ }
+
+ public static final class PointerIcon.Companion {
+ method public androidx.compose.ui.input.pointer.PointerIcon getCrosshair();
+ method public androidx.compose.ui.input.pointer.PointerIcon getDefault();
+ method public androidx.compose.ui.input.pointer.PointerIcon getHand();
+ method public androidx.compose.ui.input.pointer.PointerIcon getText();
+ property public final androidx.compose.ui.input.pointer.PointerIcon Crosshair;
+ property public final androidx.compose.ui.input.pointer.PointerIcon Default;
+ property public final androidx.compose.ui.input.pointer.PointerIcon Hand;
+ property public final androidx.compose.ui.input.pointer.PointerIcon Text;
+ }
+
+ public final class PointerIconKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier pointerHoverIcon(androidx.compose.ui.Modifier, androidx.compose.ui.input.pointer.PointerIcon icon, optional boolean overrideDescendants);
+ }
+
+ public final class PointerIcon_androidKt {
+ method public static androidx.compose.ui.input.pointer.PointerIcon PointerIcon(android.view.PointerIcon pointerIcon);
+ method public static androidx.compose.ui.input.pointer.PointerIcon PointerIcon(int pointerIconType);
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerId {
+ ctor public PointerId(long value);
+ method public long getValue();
+ property public final long value;
+ }
+
+ @androidx.compose.runtime.Immutable public final class PointerInputChange {
+ ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
+ ctor @Deprecated public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ method public void consume();
+ method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
+ method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type, optional long scrollDelta);
+ method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ method @Deprecated public androidx.compose.ui.input.pointer.ConsumedData getConsumed();
+ method public long getId();
+ method public long getPosition();
+ method public boolean getPressed();
+ method public long getPreviousPosition();
+ method public boolean getPreviousPressed();
+ method public long getPreviousUptimeMillis();
+ method public long getScrollDelta();
+ method public int getType();
+ method public long getUptimeMillis();
+ method public boolean isConsumed();
+ property @Deprecated public final androidx.compose.ui.input.pointer.ConsumedData consumed;
+ property public final long id;
+ property public final boolean isConsumed;
+ property public final long position;
+ property public final boolean pressed;
+ property public final long previousPosition;
+ property public final boolean previousPressed;
+ property public final long previousUptimeMillis;
+ property public final long scrollDelta;
+ property public final int type;
+ property public final long uptimeMillis;
+ }
+
+ public abstract class PointerInputFilter {
+ ctor public PointerInputFilter();
+ method public boolean getInterceptOutOfBoundsChildEvents();
+ method public final long getSize();
+ method public abstract void onCancel();
+ method public abstract void onPointerEvent(androidx.compose.ui.input.pointer.PointerEvent pointerEvent, androidx.compose.ui.input.pointer.PointerEventPass pass, long bounds);
+ property public boolean interceptOutOfBoundsChildEvents;
+ property public final long size;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PointerInputModifier extends androidx.compose.ui.Modifier.Element {
+ method public androidx.compose.ui.input.pointer.PointerInputFilter getPointerInputFilter();
+ property public abstract androidx.compose.ui.input.pointer.PointerInputFilter pointerInputFilter;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PointerInputScope extends androidx.compose.ui.unit.Density {
+ method public suspend <R> Object? awaitPointerEventScope(kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ method public default long getExtendedTouchPadding();
+ method public default boolean getInterceptOutOfBoundsChildEvents();
+ method public long getSize();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public default void setInterceptOutOfBoundsChildEvents(boolean);
+ property public default long extendedTouchPadding;
+ property public default boolean interceptOutOfBoundsChildEvents;
+ property public abstract long size;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerKeyboardModifiers {
+ ctor public PointerKeyboardModifiers(int packedValue);
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerType {
+ field public static final androidx.compose.ui.input.pointer.PointerType.Companion Companion;
+ }
+
+ public static final class PointerType.Companion {
+ method public int getEraser();
+ method public int getMouse();
+ method public int getStylus();
+ method public int getTouch();
+ method public int getUnknown();
+ property public final int Eraser;
+ property public final int Mouse;
+ property public final int Stylus;
+ property public final int Touch;
+ property public final int Unknown;
+ }
+
+ public final class SuspendingPointerInputFilterKt {
+ method @Deprecated public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ }
+
+}
+
+package androidx.compose.ui.input.pointer.util {
+
+ public final class VelocityTracker {
+ ctor public VelocityTracker();
+ method public void addPosition(long timeMillis, long position);
+ method public long calculateVelocity();
+ method public void resetTracking();
+ }
+
+ public final class VelocityTracker1D {
+ ctor public VelocityTracker1D(boolean isDataDifferential);
+ method public void addDataPoint(long timeMillis, float dataPoint);
+ method public float calculateVelocity();
+ method public boolean isDataDifferential();
+ method public void resetTracking();
+ property public final boolean isDataDifferential;
+ }
+
+ public final class VelocityTrackerKt {
+ method public static void addPointerInputChange(androidx.compose.ui.input.pointer.util.VelocityTracker, androidx.compose.ui.input.pointer.PointerInputChange event);
+ }
+
+}
+
+package androidx.compose.ui.input.rotary {
+
+ public final class RotaryInputModifierKt {
+ method public static androidx.compose.ui.Modifier onPreRotaryScrollEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.rotary.RotaryScrollEvent,java.lang.Boolean> onPreRotaryScrollEvent);
+ method public static androidx.compose.ui.Modifier onRotaryScrollEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.rotary.RotaryScrollEvent,java.lang.Boolean> onRotaryScrollEvent);
+ }
+
+ public final class RotaryScrollEvent {
+ method public float getHorizontalScrollPixels();
+ method public long getUptimeMillis();
+ method public float getVerticalScrollPixels();
+ property public final float horizontalScrollPixels;
+ property public final long uptimeMillis;
+ property public final float verticalScrollPixels;
+ }
+
+}
+
+package androidx.compose.ui.layout {
+
+ @androidx.compose.runtime.Immutable public abstract sealed class AlignmentLine {
+ field public static final androidx.compose.ui.layout.AlignmentLine.Companion Companion;
+ field public static final int Unspecified = -2147483648; // 0x80000000
+ }
+
+ public static final class AlignmentLine.Companion {
+ }
+
+ public final class AlignmentLineKt {
+ method public static androidx.compose.ui.layout.HorizontalAlignmentLine getFirstBaseline();
+ method public static androidx.compose.ui.layout.HorizontalAlignmentLine getLastBaseline();
+ property public static final androidx.compose.ui.layout.HorizontalAlignmentLine FirstBaseline;
+ property public static final androidx.compose.ui.layout.HorizontalAlignmentLine LastBaseline;
+ }
+
+ public interface BeyondBoundsLayout {
+ method public <T> T? layout(int direction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.BeyondBoundsLayout.BeyondBoundsScope,? extends T> block);
+ }
+
+ public static interface BeyondBoundsLayout.BeyondBoundsScope {
+ method public boolean getHasMoreContent();
+ property public abstract boolean hasMoreContent;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class BeyondBoundsLayout.LayoutDirection {
+ field public static final androidx.compose.ui.layout.BeyondBoundsLayout.LayoutDirection.Companion Companion;
+ }
+
+ public static final class BeyondBoundsLayout.LayoutDirection.Companion {
+ method public int getAbove();
+ method public int getAfter();
+ method public int getBefore();
+ method public int getBelow();
+ method public int getLeft();
+ method public int getRight();
+ property public final int Above;
+ property public final int After;
+ property public final int Before;
+ property public final int Below;
+ property public final int Left;
+ property public final int Right;
+ }
+
+ public final class BeyondBoundsLayoutKt {
+ method public static androidx.compose.ui.modifier.ProvidableModifierLocal<androidx.compose.ui.layout.BeyondBoundsLayout> getModifierLocalBeyondBoundsLayout();
+ property public static final androidx.compose.ui.modifier.ProvidableModifierLocal<androidx.compose.ui.layout.BeyondBoundsLayout> ModifierLocalBeyondBoundsLayout;
+ }
+
+ @androidx.compose.runtime.Stable public interface ContentScale {
+ method public long computeScaleFactor(long srcSize, long dstSize);
+ field public static final androidx.compose.ui.layout.ContentScale.Companion Companion;
+ }
+
+ public static final class ContentScale.Companion {
+ method public androidx.compose.ui.layout.ContentScale getCrop();
+ method public androidx.compose.ui.layout.ContentScale getFillBounds();
+ method public androidx.compose.ui.layout.ContentScale getFillHeight();
+ method public androidx.compose.ui.layout.ContentScale getFillWidth();
+ method public androidx.compose.ui.layout.ContentScale getFit();
+ method public androidx.compose.ui.layout.ContentScale getInside();
+ method public androidx.compose.ui.layout.FixedScale getNone();
+ property public final androidx.compose.ui.layout.ContentScale Crop;
+ property public final androidx.compose.ui.layout.ContentScale FillBounds;
+ property public final androidx.compose.ui.layout.ContentScale FillHeight;
+ property public final androidx.compose.ui.layout.ContentScale FillWidth;
+ property public final androidx.compose.ui.layout.ContentScale Fit;
+ property public final androidx.compose.ui.layout.ContentScale Inside;
+ property public final androidx.compose.ui.layout.FixedScale None;
+ }
+
+ @androidx.compose.runtime.Immutable public final class FixedScale implements androidx.compose.ui.layout.ContentScale {
+ ctor public FixedScale(float value);
+ method public float component1();
+ method public long computeScaleFactor(long srcSize, long dstSize);
+ method public androidx.compose.ui.layout.FixedScale copy(float value);
+ method public float getValue();
+ property public final float value;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface GraphicLayerInfo {
+ method public long getLayerId();
+ method public default long getOwnerViewId();
+ property public abstract long layerId;
+ property public default long ownerViewId;
+ }
+
+ public final class HorizontalAlignmentLine extends androidx.compose.ui.layout.AlignmentLine {
+ ctor public HorizontalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
+ }
+
+ public interface IntrinsicMeasurable {
+ method public Object? getParentData();
+ method public int maxIntrinsicHeight(int width);
+ method public int maxIntrinsicWidth(int height);
+ method public int minIntrinsicHeight(int width);
+ method public int minIntrinsicWidth(int height);
+ property public abstract Object? parentData;
+ }
+
+ public interface IntrinsicMeasureScope extends androidx.compose.ui.unit.Density {
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface LayoutCoordinates {
+ method public operator int get(androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public androidx.compose.ui.layout.LayoutCoordinates? getParentCoordinates();
+ method public androidx.compose.ui.layout.LayoutCoordinates? getParentLayoutCoordinates();
+ method public java.util.Set<androidx.compose.ui.layout.AlignmentLine> getProvidedAlignmentLines();
+ method public long getSize();
+ method public boolean isAttached();
+ method public androidx.compose.ui.geometry.Rect localBoundingBoxOf(androidx.compose.ui.layout.LayoutCoordinates sourceCoordinates, optional boolean clipBounds);
+ method public long localPositionOf(androidx.compose.ui.layout.LayoutCoordinates sourceCoordinates, long relativeToSource);
+ method public long localToRoot(long relativeToLocal);
+ method public long localToWindow(long relativeToLocal);
+ method public default void transformFrom(androidx.compose.ui.layout.LayoutCoordinates sourceCoordinates, float[] matrix);
+ method public long windowToLocal(long relativeToWindow);
+ property public abstract boolean isAttached;
+ property public abstract androidx.compose.ui.layout.LayoutCoordinates? parentCoordinates;
+ property public abstract androidx.compose.ui.layout.LayoutCoordinates? parentLayoutCoordinates;
+ property public abstract java.util.Set<androidx.compose.ui.layout.AlignmentLine> providedAlignmentLines;
+ property public abstract long size;
+ }
+
+ public final class LayoutCoordinatesKt {
+ method public static androidx.compose.ui.geometry.Rect boundsInParent(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static androidx.compose.ui.geometry.Rect boundsInRoot(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static androidx.compose.ui.geometry.Rect boundsInWindow(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static androidx.compose.ui.layout.LayoutCoordinates findRootCoordinates(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static long positionInParent(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static long positionInRoot(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static long positionInWindow(androidx.compose.ui.layout.LayoutCoordinates);
+ }
+
+ public final class LayoutIdKt {
+ method public static Object? getLayoutId(androidx.compose.ui.layout.Measurable);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier layoutId(androidx.compose.ui.Modifier, Object layoutId);
+ }
+
+ public interface LayoutIdParentData {
+ method public Object getLayoutId();
+ property public abstract Object layoutId;
+ }
+
+ public interface LayoutInfo {
+ method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public int getHeight();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public java.util.List<androidx.compose.ui.layout.ModifierInfo> getModifierInfo();
+ method public androidx.compose.ui.layout.LayoutInfo? getParentInfo();
+ method public int getSemanticsId();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public int getWidth();
+ method public boolean isAttached();
+ method public boolean isPlaced();
+ property public abstract androidx.compose.ui.layout.LayoutCoordinates coordinates;
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract int height;
+ property public abstract boolean isAttached;
+ property public abstract boolean isPlaced;
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public abstract androidx.compose.ui.layout.LayoutInfo? parentInfo;
+ property public abstract int semanticsId;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ property public abstract int width;
+ }
+
+ public final class LayoutKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> content, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(java.util.List<? extends kotlin.jvm.functions.Function0<kotlin.Unit>> contents, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MultiContentMeasurePolicy measurePolicy);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void MultiMeasureLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface LayoutModifier extends androidx.compose.ui.Modifier.Element {
+ method public default int maxIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int width);
+ method public default int maxIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int height);
+ method public androidx.compose.ui.layout.MeasureResult measure(androidx.compose.ui.layout.MeasureScope, androidx.compose.ui.layout.Measurable measurable, long constraints);
+ method public default int minIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int width);
+ method public default int minIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int height);
+ }
+
+ public final class LayoutModifierKt {
+ method public static androidx.compose.ui.Modifier layout(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function3<? super androidx.compose.ui.layout.MeasureScope,? super androidx.compose.ui.layout.Measurable,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measure);
+ }
+
+ public interface Measurable extends androidx.compose.ui.layout.IntrinsicMeasurable {
+ method public androidx.compose.ui.layout.Placeable measure(long constraints);
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public fun interface MeasurePolicy {
+ method public default int maxIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int width);
+ method public default int maxIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int height);
+ method public androidx.compose.ui.layout.MeasureResult measure(androidx.compose.ui.layout.MeasureScope, java.util.List<? extends androidx.compose.ui.layout.Measurable> measurables, long constraints);
+ method public default int minIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int width);
+ method public default int minIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int height);
+ }
+
+ public interface MeasureResult {
+ method public java.util.Map<androidx.compose.ui.layout.AlignmentLine,java.lang.Integer> getAlignmentLines();
+ method public int getHeight();
+ method public int getWidth();
+ method public void placeChildren();
+ property public abstract java.util.Map<androidx.compose.ui.layout.AlignmentLine,java.lang.Integer> alignmentLines;
+ property public abstract int height;
+ property public abstract int width;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface MeasureScope extends androidx.compose.ui.layout.IntrinsicMeasureScope {
+ method public default androidx.compose.ui.layout.MeasureResult layout(int width, int height, optional java.util.Map<androidx.compose.ui.layout.AlignmentLine,java.lang.Integer> alignmentLines, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Placeable.PlacementScope,kotlin.Unit> placementBlock);
+ }
+
+ public interface Measured {
+ method public operator int get(androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public int getMeasuredHeight();
+ method public int getMeasuredWidth();
+ method public default Object? getParentData();
+ property public abstract int measuredHeight;
+ property public abstract int measuredWidth;
+ property public default Object? parentData;
+ }
+
+ public final class ModifierInfo {
+ ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, optional Object? extra);
+ method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
+ method public Object? getExtra();
+ method public androidx.compose.ui.Modifier getModifier();
+ property public final androidx.compose.ui.layout.LayoutCoordinates coordinates;
+ property public final Object? extra;
+ property public final androidx.compose.ui.Modifier modifier;
+ }
+
+ @androidx.compose.runtime.Stable public fun interface MultiContentMeasurePolicy {
+ method public default int maxIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int width);
+ method public default int maxIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int height);
+ method public androidx.compose.ui.layout.MeasureResult measure(androidx.compose.ui.layout.MeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.Measurable>> measurables, long constraints);
+ method public default int minIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int width);
+ method public default int minIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int height);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface OnGloballyPositionedModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onGloballyPositioned(androidx.compose.ui.layout.LayoutCoordinates coordinates);
+ }
+
+ public final class OnGloballyPositionedModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onGloballyPositioned(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,kotlin.Unit> onGloballyPositioned);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface OnPlacedModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onPlaced(androidx.compose.ui.layout.LayoutCoordinates coordinates);
+ }
+
+ public final class OnPlacedModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onPlaced(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,kotlin.Unit> onPlaced);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface OnRemeasuredModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onRemeasured(long size);
+ }
+
+ public final class OnRemeasuredModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onSizeChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit> onSizeChanged);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ParentDataModifier extends androidx.compose.ui.Modifier.Element {
+ method public Object? modifyParentData(androidx.compose.ui.unit.Density, Object? parentData);
+ }
+
+ @androidx.compose.runtime.Stable public interface PinnableContainer {
+ method public androidx.compose.ui.layout.PinnableContainer.PinnedHandle pin();
+ }
+
+ public static fun interface PinnableContainer.PinnedHandle {
+ method public void release();
+ }
+
+ public final class PinnableContainerKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.layout.PinnableContainer> getLocalPinnableContainer();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.layout.PinnableContainer> LocalPinnableContainer;
+ }
+
+ public abstract class Placeable implements androidx.compose.ui.layout.Measured {
+ ctor public Placeable();
+ method protected final long getApparentToRealOffset();
+ method public final int getHeight();
+ method public int getMeasuredHeight();
+ method protected final long getMeasuredSize();
+ method public int getMeasuredWidth();
+ method protected final long getMeasurementConstraints();
+ method public final int getWidth();
+ method protected abstract void placeAt(long position, float zIndex, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit>? layerBlock);
+ method protected final void setMeasuredSize(long);
+ method protected final void setMeasurementConstraints(long);
+ property protected final long apparentToRealOffset;
+ property public final int height;
+ property public int measuredHeight;
+ property protected final long measuredSize;
+ property public int measuredWidth;
+ property protected final long measurementConstraints;
+ property public final int width;
+ }
+
+ public abstract static class Placeable.PlacementScope {
+ ctor public Placeable.PlacementScope();
+ method protected abstract androidx.compose.ui.unit.LayoutDirection getParentLayoutDirection();
+ method protected abstract int getParentWidth();
+ method public final void place(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
+ method public final void place(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
+ method public final void placeRelative(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
+ method public final void placeRelative(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
+ method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ property protected abstract androidx.compose.ui.unit.LayoutDirection parentLayoutDirection;
+ property protected abstract int parentWidth;
+ }
+
+ public interface Remeasurement {
+ method public void forceRemeasure();
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface RemeasurementModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onRemeasurementAvailable(androidx.compose.ui.layout.Remeasurement remeasurement);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ScaleFactor {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float scaleX, optional float scaleY);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getScaleX();
+ method public float getScaleY();
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ property @androidx.compose.runtime.Stable public final float scaleX;
+ property @androidx.compose.runtime.Stable public final float scaleY;
+ field public static final androidx.compose.ui.layout.ScaleFactor.Companion Companion;
+ }
+
+ public static final class ScaleFactor.Companion {
+ method public long getUnspecified();
+ property public final long Unspecified;
+ }
+
+ public final class ScaleFactorKt {
+ method @androidx.compose.runtime.Stable public static long ScaleFactor(float scaleX, float scaleY);
+ method @androidx.compose.runtime.Stable public static operator long div(long, long scaleFactor);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.layout.ScaleFactor> block);
+ method @androidx.compose.runtime.Stable public static operator long times(long, long scaleFactor);
+ method @androidx.compose.runtime.Stable public static operator long times(long, long size);
+ }
+
+ public final class SubcomposeLayoutKt {
+ method @androidx.compose.runtime.Composable public static void SubcomposeLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void SubcomposeLayout(androidx.compose.ui.layout.SubcomposeLayoutState state, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
+ method public static androidx.compose.ui.layout.SubcomposeSlotReusePolicy SubcomposeSlotReusePolicy(int maxSlotsToRetainForReuse);
+ }
+
+ public final class SubcomposeLayoutState {
+ ctor public SubcomposeLayoutState(androidx.compose.ui.layout.SubcomposeSlotReusePolicy slotReusePolicy);
+ ctor public SubcomposeLayoutState();
+ ctor @Deprecated public SubcomposeLayoutState(int maxSlotsToRetainForReuse);
+ method public androidx.compose.ui.layout.SubcomposeLayoutState.PrecomposedSlotHandle precompose(Object? slotId, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public static interface SubcomposeLayoutState.PrecomposedSlotHandle {
+ method public void dispose();
+ method public default int getPlaceablesCount();
+ method public default void premeasure(int index, long constraints);
+ property public default int placeablesCount;
+ }
+
+ public interface SubcomposeMeasureScope extends androidx.compose.ui.layout.MeasureScope {
+ method public java.util.List<androidx.compose.ui.layout.Measurable> subcompose(Object? slotId, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public interface SubcomposeSlotReusePolicy {
+ method public boolean areCompatible(Object? slotId, Object? reusableSlotId);
+ method public void getSlotsToRetain(androidx.compose.ui.layout.SubcomposeSlotReusePolicy.SlotIdsSet slotIds);
+ }
+
+ public static final class SubcomposeSlotReusePolicy.SlotIdsSet implements java.util.Collection<java.lang.Object> kotlin.jvm.internal.markers.KMappedMarker {
+ method public void clear();
+ method public java.util.Iterator<java.lang.Object> iterator();
+ method public boolean remove(Object? slotId);
+ method public boolean removeAll(java.util.Collection<?> slotIds);
+ method public boolean removeAll(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
+ method public boolean retainAll(java.util.Collection<?> slotIds);
+ method public boolean retainAll(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
+ }
+
+ public final class TestModifierUpdaterKt {
+ }
+
+ public final class VerticalAlignmentLine extends androidx.compose.ui.layout.AlignmentLine {
+ ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
+ }
+
+}
+
+package androidx.compose.ui.modifier {
+
+ @androidx.compose.runtime.Stable public abstract sealed class ModifierLocal<T> {
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface ModifierLocalConsumer extends androidx.compose.ui.Modifier.Element {
+ method public void onModifierLocalsUpdated(androidx.compose.ui.modifier.ModifierLocalReadScope scope);
+ }
+
+ public final class ModifierLocalKt {
+ method public static <T> androidx.compose.ui.modifier.ProvidableModifierLocal<T> modifierLocalOf(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface ModifierLocalProvider<T> extends androidx.compose.ui.Modifier.Element {
+ method public androidx.compose.ui.modifier.ProvidableModifierLocal<T> getKey();
+ method public T! getValue();
+ property public abstract androidx.compose.ui.modifier.ProvidableModifierLocal<T> key;
+ property public abstract T! value;
+ }
+
+ public interface ModifierLocalReadScope {
+ method public <T> T! getCurrent(androidx.compose.ui.modifier.ModifierLocal<T>);
+ }
+
+ @androidx.compose.runtime.Stable public final class ProvidableModifierLocal<T> extends androidx.compose.ui.modifier.ModifierLocal<T> {
+ ctor public ProvidableModifierLocal(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ }
+
+}
+
+package androidx.compose.ui.node {
+
+ public final class Ref<T> {
+ ctor public Ref();
+ method public T? getValue();
+ method public void setValue(T?);
+ property public final T? value;
+ }
+
+ public interface RootForTest {
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.semantics.SemanticsOwner getSemanticsOwner();
+ method public androidx.compose.ui.text.input.TextInputService getTextInputService();
+ method public boolean sendKeyEvent(android.view.KeyEvent keyEvent);
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract androidx.compose.ui.semantics.SemanticsOwner semanticsOwner;
+ property public abstract androidx.compose.ui.text.input.TextInputService textInputService;
+ }
+
+}
+
+package androidx.compose.ui.platform {
+
+ public abstract class AbstractComposeView extends android.view.ViewGroup {
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public AbstractComposeView(android.content.Context context);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public abstract void Content();
+ method public final void createComposition();
+ method public final void disposeComposition();
+ method public final boolean getHasComposition();
+ method protected boolean getShouldCreateCompositionOnAttachedToWindow();
+ method public final boolean getShowLayoutBounds();
+ method protected final void onLayout(boolean changed, int left, int top, int right, int bottom);
+ method protected final void onMeasure(int widthMeasureSpec, int heightMeasureSpec);
+ method public final void setParentCompositionContext(androidx.compose.runtime.CompositionContext? parent);
+ method public final void setShowLayoutBounds(boolean);
+ method public final void setViewCompositionStrategy(androidx.compose.ui.platform.ViewCompositionStrategy strategy);
+ property public final boolean hasComposition;
+ property protected boolean shouldCreateCompositionOnAttachedToWindow;
+ property public final boolean showLayoutBounds;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface AccessibilityManager {
+ method public long calculateRecommendedTimeoutMillis(long originalTimeoutMillis, optional boolean containsIcons, optional boolean containsText, optional boolean containsControls);
+ }
+
+ public final class AndroidComposeView_androidKt {
+ }
+
+ public final class AndroidCompositionLocals_androidKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<android.content.res.Configuration> getLocalConfiguration();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<android.content.Context> getLocalContext();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.lifecycle.LifecycleOwner> getLocalLifecycleOwner();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.savedstate.SavedStateRegistryOwner> getLocalSavedStateRegistryOwner();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<android.view.View> getLocalView();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<android.content.res.Configuration> LocalConfiguration;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<android.content.Context> LocalContext;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.lifecycle.LifecycleOwner> LocalLifecycleOwner;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.savedstate.SavedStateRegistryOwner> LocalSavedStateRegistryOwner;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<android.view.View> LocalView;
+ }
+
+ public final class AndroidUiDispatcher extends kotlinx.coroutines.CoroutineDispatcher {
+ method public void dispatch(kotlin.coroutines.CoroutineContext context, Runnable block);
+ method public android.view.Choreographer getChoreographer();
+ method public androidx.compose.runtime.MonotonicFrameClock getFrameClock();
+ property public final android.view.Choreographer choreographer;
+ property public final androidx.compose.runtime.MonotonicFrameClock frameClock;
+ field public static final androidx.compose.ui.platform.AndroidUiDispatcher.Companion Companion;
+ }
+
+ public static final class AndroidUiDispatcher.Companion {
+ method public kotlin.coroutines.CoroutineContext getCurrentThread();
+ method public kotlin.coroutines.CoroutineContext getMain();
+ property public final kotlin.coroutines.CoroutineContext CurrentThread;
+ property public final kotlin.coroutines.CoroutineContext Main;
+ }
+
+ public final class AndroidUiFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
+ ctor public AndroidUiFrameClock(android.view.Choreographer choreographer);
+ method public android.view.Choreographer getChoreographer();
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public final android.view.Choreographer choreographer;
+ }
+
+ public final class AndroidUriHandler implements androidx.compose.ui.platform.UriHandler {
+ ctor public AndroidUriHandler(android.content.Context context);
+ method public void openUri(String uri);
+ }
+
+ public final class AndroidViewConfiguration implements androidx.compose.ui.platform.ViewConfiguration {
+ ctor public AndroidViewConfiguration(android.view.ViewConfiguration viewConfiguration);
+ method public long getDoubleTapMinTimeMillis();
+ method public long getDoubleTapTimeoutMillis();
+ method public long getLongPressTimeoutMillis();
+ method public float getTouchSlop();
+ property public long doubleTapMinTimeMillis;
+ property public long doubleTapTimeoutMillis;
+ property public long longPressTimeoutMillis;
+ property public float touchSlop;
+ }
+
+ public interface ClipboardManager {
+ method public androidx.compose.ui.text.AnnotatedString? getText();
+ method public default boolean hasText();
+ method public void setText(androidx.compose.ui.text.AnnotatedString annotatedString);
+ }
+
+ public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public ComposeView(android.content.Context context);
+ method @androidx.compose.runtime.Composable public void Content();
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ property protected boolean shouldCreateCompositionOnAttachedToWindow;
+ }
+
+ public final class CompositionLocalsKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.AccessibilityManager> getLocalAccessibilityManager();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ClipboardManager> getLocalClipboardManager();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Density> getLocalDensity();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.focus.FocusManager> getLocalFocusManager();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.font.FontFamily.Resolver> getLocalFontFamilyResolver();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.hapticfeedback.HapticFeedback> getLocalHapticFeedback();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.input.InputModeManager> getLocalInputModeManager();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.LayoutDirection> getLocalLayoutDirection();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.input.TextInputService> getLocalTextInputService();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.TextToolbar> getLocalTextToolbar();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.UriHandler> getLocalUriHandler();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ViewConfiguration> getLocalViewConfiguration();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.WindowInfo> getLocalWindowInfo();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.AccessibilityManager> LocalAccessibilityManager;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ClipboardManager> LocalClipboardManager;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Density> LocalDensity;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.focus.FocusManager> LocalFocusManager;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.font.FontFamily.Resolver> LocalFontFamilyResolver;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.hapticfeedback.HapticFeedback> LocalHapticFeedback;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.input.InputModeManager> LocalInputModeManager;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.LayoutDirection> LocalLayoutDirection;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.input.TextInputService> LocalTextInputService;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.TextToolbar> LocalTextToolbar;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.UriHandler> LocalUriHandler;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ViewConfiguration> LocalViewConfiguration;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.WindowInfo> LocalWindowInfo;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface InfiniteAnimationPolicy extends kotlin.coroutines.CoroutineContext.Element {
+ method public default kotlin.coroutines.CoroutineContext.Key<?> getKey();
+ method public suspend <R> Object? onInfiniteOperation(kotlin.jvm.functions.Function1<? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ property public default kotlin.coroutines.CoroutineContext.Key<?> key;
+ field public static final androidx.compose.ui.platform.InfiniteAnimationPolicy.Key Key;
+ }
+
+ public static final class InfiniteAnimationPolicy.Key implements kotlin.coroutines.CoroutineContext.Key<androidx.compose.ui.platform.InfiniteAnimationPolicy> {
+ }
+
+ public final class InspectableModifier extends androidx.compose.ui.platform.InspectorValueInfo implements androidx.compose.ui.Modifier.Element {
+ ctor public InspectableModifier(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo);
+ method public androidx.compose.ui.platform.InspectableModifier.End getEnd();
+ property public final androidx.compose.ui.platform.InspectableModifier.End end;
+ }
+
+ public final class InspectableModifier.End implements androidx.compose.ui.Modifier.Element {
+ ctor public InspectableModifier.End();
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface InspectableValue {
+ method public default kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> getInspectableElements();
+ method public default String? getNameFallback();
+ method public default Object? getValueOverride();
+ property public default kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> inspectableElements;
+ property public default String? nameFallback;
+ property public default Object? valueOverride;
+ }
+
+ public final class InspectableValueKt {
+ method public static inline kotlin.jvm.functions.Function1<androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> debugInspectorInfo(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> definitions);
+ method public static kotlin.jvm.functions.Function1<androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> getNoInspectorInfo();
+ method public static inline androidx.compose.ui.Modifier inspectable(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method public static boolean isDebugInspectorInfoEnabled();
+ method public static void setDebugInspectorInfoEnabled(boolean);
+ property public static final kotlin.jvm.functions.Function1<androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> NoInspectorInfo;
+ property public static final boolean isDebugInspectorInfoEnabled;
+ }
+
+ public final class InspectionModeKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Boolean> getLocalInspectionMode();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Boolean> LocalInspectionMode;
+ }
+
+ public final class InspectorInfo {
+ ctor public InspectorInfo();
+ method public String? getName();
+ method public androidx.compose.ui.platform.ValueElementSequence getProperties();
+ method public Object? getValue();
+ method public void setName(String?);
+ method public void setValue(Object?);
+ property public final String? name;
+ property public final androidx.compose.ui.platform.ValueElementSequence properties;
+ property public final Object? value;
+ }
+
+ public abstract class InspectorValueInfo implements androidx.compose.ui.platform.InspectableValue {
+ ctor public InspectorValueInfo(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> info);
+ property public kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> inspectableElements;
+ property public String? nameFallback;
+ property public Object? valueOverride;
+ }
+
+ public final class NestedScrollInteropConnectionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.input.nestedscroll.NestedScrollConnection rememberNestedScrollInteropConnection(optional android.view.View hostView);
+ }
+
+ public final class TestTagKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier testTag(androidx.compose.ui.Modifier, String tag);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TextToolbar {
+ method public androidx.compose.ui.platform.TextToolbarStatus getStatus();
+ method public void hide();
+ method public void showMenu(androidx.compose.ui.geometry.Rect rect, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onSelectAllRequested);
+ property public abstract androidx.compose.ui.platform.TextToolbarStatus status;
+ }
+
+ public enum TextToolbarStatus {
+ method public static androidx.compose.ui.platform.TextToolbarStatus valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.platform.TextToolbarStatus[] values();
+ enum_constant public static final androidx.compose.ui.platform.TextToolbarStatus Hidden;
+ enum_constant public static final androidx.compose.ui.platform.TextToolbarStatus Shown;
+ }
+
+ public interface UriHandler {
+ method public void openUri(String uri);
+ }
+
+ public final class ValueElement {
+ ctor public ValueElement(String name, Object? value);
+ method public String component1();
+ method public Object? component2();
+ method public androidx.compose.ui.platform.ValueElement copy(String name, Object? value);
+ method public String getName();
+ method public Object? getValue();
+ property public final String name;
+ property public final Object? value;
+ }
+
+ public final class ValueElementSequence implements kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> {
+ ctor public ValueElementSequence();
+ method public java.util.Iterator<androidx.compose.ui.platform.ValueElement> iterator();
+ method public operator void set(String name, Object? value);
+ }
+
+ public interface ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.Companion Companion;
+ }
+
+ public static final class ViewCompositionStrategy.Companion {
+ method public androidx.compose.ui.platform.ViewCompositionStrategy getDefault();
+ property public final androidx.compose.ui.platform.ViewCompositionStrategy Default;
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnDetachedFromWindow implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.DisposeOnDetachedFromWindow INSTANCE;
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool INSTANCE;
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnLifecycleDestroyed implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ ctor public ViewCompositionStrategy.DisposeOnLifecycleDestroyed(androidx.lifecycle.Lifecycle lifecycle);
+ ctor public ViewCompositionStrategy.DisposeOnLifecycleDestroyed(androidx.lifecycle.LifecycleOwner lifecycleOwner);
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed INSTANCE;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ViewConfiguration {
+ method public long getDoubleTapMinTimeMillis();
+ method public long getDoubleTapTimeoutMillis();
+ method public long getLongPressTimeoutMillis();
+ method public default long getMinimumTouchTargetSize();
+ method public float getTouchSlop();
+ property public abstract long doubleTapMinTimeMillis;
+ property public abstract long doubleTapTimeoutMillis;
+ property public abstract long longPressTimeoutMillis;
+ property public default long minimumTouchTargetSize;
+ property public abstract float touchSlop;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ViewRootForInspector {
+ method public default androidx.compose.ui.platform.AbstractComposeView? getSubCompositionView();
+ method public default android.view.View? getViewRoot();
+ property public default androidx.compose.ui.platform.AbstractComposeView? subCompositionView;
+ property public default android.view.View? viewRoot;
+ }
+
+ @VisibleForTesting public interface ViewRootForTest extends androidx.compose.ui.node.RootForTest {
+ method public boolean getHasPendingMeasureOrLayout();
+ method public android.view.View getView();
+ method public void invalidateDescendants();
+ method public boolean isLifecycleInResumedState();
+ property public abstract boolean hasPendingMeasureOrLayout;
+ property public abstract boolean isLifecycleInResumedState;
+ property public abstract android.view.View view;
+ field public static final androidx.compose.ui.platform.ViewRootForTest.Companion Companion;
+ }
+
+ public static final class ViewRootForTest.Companion {
+ method public kotlin.jvm.functions.Function1<androidx.compose.ui.platform.ViewRootForTest,kotlin.Unit>? getOnViewCreatedCallback();
+ method public void setOnViewCreatedCallback(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.ViewRootForTest,kotlin.Unit>?);
+ property public final kotlin.jvm.functions.Function1<androidx.compose.ui.platform.ViewRootForTest,kotlin.Unit>? onViewCreatedCallback;
+ }
+
+ @androidx.compose.runtime.Stable public interface WindowInfo {
+ method public boolean isWindowFocused();
+ property public abstract boolean isWindowFocused;
+ }
+
+ public final class WindowRecomposer_androidKt {
+ method public static androidx.compose.runtime.CompositionContext? findViewTreeCompositionContext(android.view.View);
+ method public static androidx.compose.runtime.CompositionContext? getCompositionContext(android.view.View);
+ method public static void setCompositionContext(android.view.View, androidx.compose.runtime.CompositionContext?);
+ }
+
+}
+
+package androidx.compose.ui.res {
+
+ public final class ColorResources_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long colorResource(@ColorRes int id);
+ }
+
+ public final class FontResources_androidKt {
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.ui.text.font.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+ }
+
+ public final class ImageResources_androidKt {
+ method public static androidx.compose.ui.graphics.ImageBitmap imageResource(androidx.compose.ui.graphics.ImageBitmap.Companion, android.content.res.Resources res, @DrawableRes int id);
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.ImageBitmap imageResource(androidx.compose.ui.graphics.ImageBitmap.Companion, @DrawableRes int id);
+ }
+
+ public final class PainterResources_androidKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.painter.Painter painterResource(@DrawableRes int id);
+ }
+
+ public final class PrimitiveResources_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static boolean booleanResource(@BoolRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static float dimensionResource(@DimenRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static int[] integerArrayResource(@ArrayRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static int integerResource(@IntegerRes int id);
+ }
+
+ public final class StringResources_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String pluralStringResource(@PluralsRes int id, int count);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String pluralStringResource(@PluralsRes int id, int count, java.lang.Object... formatArgs);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String![] stringArrayResource(@ArrayRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String stringResource(@StringRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
+ }
+
+ public final class VectorResources_androidKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, @DrawableRes int id);
+ method @kotlin.jvm.Throws(exceptionClasses=XmlPullParserException::class) public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, optional android.content.res.Resources.Theme? theme, android.content.res.Resources res, int resId) throws org.xmlpull.v1.XmlPullParserException;
+ }
+
+}
+
+package androidx.compose.ui.semantics {
+
+ public final class AccessibilityAction<T extends kotlin.Function<? extends java.lang.Boolean>> {
+ ctor public AccessibilityAction(String? label, T? action);
+ method public T? getAction();
+ method public String? getLabel();
+ property public final T? action;
+ property public final String? label;
+ }
+
+ public final class CollectionInfo {
+ ctor public CollectionInfo(int rowCount, int columnCount);
+ method public int getColumnCount();
+ method public int getRowCount();
+ property public final int columnCount;
+ property public final int rowCount;
+ }
+
+ public final class CollectionItemInfo {
+ ctor public CollectionItemInfo(int rowIndex, int rowSpan, int columnIndex, int columnSpan);
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ property public final int columnIndex;
+ property public final int columnSpan;
+ property public final int rowIndex;
+ property public final int rowSpan;
+ }
+
+ public final class CustomAccessibilityAction {
+ ctor public CustomAccessibilityAction(String label, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
+ method public kotlin.jvm.functions.Function0<java.lang.Boolean> getAction();
+ method public String getLabel();
+ property public final kotlin.jvm.functions.Function0<java.lang.Boolean> action;
+ property public final String label;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class LiveRegionMode {
+ field public static final androidx.compose.ui.semantics.LiveRegionMode.Companion Companion;
+ }
+
+ public static final class LiveRegionMode.Companion {
+ method public int getAssertive();
+ method public int getPolite();
+ property public final int Assertive;
+ property public final int Polite;
+ }
+
+ public final class ProgressBarRangeInfo {
+ ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional int steps);
+ method public float getCurrent();
+ method public kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> getRange();
+ method public int getSteps();
+ property public final float current;
+ property public final kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range;
+ property public final int steps;
+ field public static final androidx.compose.ui.semantics.ProgressBarRangeInfo.Companion Companion;
+ }
+
+ public static final class ProgressBarRangeInfo.Companion {
+ method public androidx.compose.ui.semantics.ProgressBarRangeInfo getIndeterminate();
+ property public final androidx.compose.ui.semantics.ProgressBarRangeInfo Indeterminate;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Role {
+ field public static final androidx.compose.ui.semantics.Role.Companion Companion;
+ }
+
+ public static final class Role.Companion {
+ method public int getButton();
+ method public int getCheckbox();
+ method public int getDropdownList();
+ method public int getImage();
+ method public int getRadioButton();
+ method public int getSwitch();
+ method public int getTab();
+ property public final int Button;
+ property public final int Checkbox;
+ property public final int DropdownList;
+ property public final int Image;
+ property public final int RadioButton;
+ property public final int Switch;
+ property public final int Tab;
+ }
+
+ public final class ScrollAxisRange {
+ ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, optional boolean reverseScrolling);
+ method public kotlin.jvm.functions.Function0<java.lang.Float> getMaxValue();
+ method public boolean getReverseScrolling();
+ method public kotlin.jvm.functions.Function0<java.lang.Float> getValue();
+ property public final kotlin.jvm.functions.Function0<java.lang.Float> maxValue;
+ property public final boolean reverseScrolling;
+ property public final kotlin.jvm.functions.Function0<java.lang.Float> value;
+ }
+
+ public final class SemanticsActions {
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getCollapse();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getCopyText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction>> getCustomActions();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getCutText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getDismiss();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getExpand();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnLongClick();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageDown();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageLeft();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageRight();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageUp();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPasteText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getRequestFocus();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Integer,java.lang.Boolean>>> getScrollToIndex();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> getSetProgress();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> Collapse;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> CopyText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction>> CustomActions;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> CutText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> Dismiss;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> Expand;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnLongClick;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageDown;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageLeft;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageRight;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageUp;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PasteText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> RequestFocus;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Integer,java.lang.Boolean>>> ScrollToIndex;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> SetProgress;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> SetSelection;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
+ field public static final androidx.compose.ui.semantics.SemanticsActions INSTANCE;
+ }
+
+ public final class SemanticsConfiguration implements java.lang.Iterable<java.util.Map.Entry<? extends androidx.compose.ui.semantics.SemanticsPropertyKey<?>,?>> kotlin.jvm.internal.markers.KMappedMarker androidx.compose.ui.semantics.SemanticsPropertyReceiver {
+ ctor public SemanticsConfiguration();
+ method public operator <T> boolean contains(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ method public androidx.compose.ui.semantics.SemanticsConfiguration copy();
+ method public operator <T> T! get(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ method public <T> T! getOrElse(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public <T> T? getOrElseNullable(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public boolean isClearingSemantics();
+ method public boolean isMergingSemanticsOfDescendants();
+ method public java.util.Iterator<java.util.Map.Entry<androidx.compose.ui.semantics.SemanticsPropertyKey<?>,java.lang.Object>> iterator();
+ method public <T> void set(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, T? value);
+ method public void setClearingSemantics(boolean);
+ method public void setMergingSemanticsOfDescendants(boolean);
+ property public final boolean isClearingSemantics;
+ property public final boolean isMergingSemanticsOfDescendants;
+ }
+
+ public final class SemanticsConfigurationKt {
+ method public static <T> T? getOrNull(androidx.compose.ui.semantics.SemanticsConfiguration, androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface SemanticsModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public default int getId();
+ method public androidx.compose.ui.semantics.SemanticsConfiguration getSemanticsConfiguration();
+ property @Deprecated public default int id;
+ property public abstract androidx.compose.ui.semantics.SemanticsConfiguration semanticsConfiguration;
+ }
+
+ public final class SemanticsModifierKt {
+ method public static androidx.compose.ui.Modifier clearAndSetSemantics(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.semantics.SemanticsPropertyReceiver,kotlin.Unit> properties);
+ method public static androidx.compose.ui.Modifier semantics(androidx.compose.ui.Modifier, optional boolean mergeDescendants, kotlin.jvm.functions.Function1<? super androidx.compose.ui.semantics.SemanticsPropertyReceiver,kotlin.Unit> properties);
+ }
+
+ public final class SemanticsNode {
+ method public int getAlignmentLinePosition(androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public androidx.compose.ui.geometry.Rect getBoundsInRoot();
+ method public androidx.compose.ui.geometry.Rect getBoundsInWindow();
+ method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getChildren();
+ method public androidx.compose.ui.semantics.SemanticsConfiguration getConfig();
+ method public int getId();
+ method public androidx.compose.ui.layout.LayoutInfo getLayoutInfo();
+ method public boolean getMergingEnabled();
+ method public androidx.compose.ui.semantics.SemanticsNode? getParent();
+ method public long getPositionInRoot();
+ method public long getPositionInWindow();
+ method public androidx.compose.ui.node.RootForTest? getRoot();
+ method public long getSize();
+ method public androidx.compose.ui.geometry.Rect getTouchBoundsInRoot();
+ method public boolean isRoot();
+ property public final androidx.compose.ui.geometry.Rect boundsInRoot;
+ property public final androidx.compose.ui.geometry.Rect boundsInWindow;
+ property public final java.util.List<androidx.compose.ui.semantics.SemanticsNode> children;
+ property public final androidx.compose.ui.semantics.SemanticsConfiguration config;
+ property public final int id;
+ property public final boolean isRoot;
+ property public final androidx.compose.ui.layout.LayoutInfo layoutInfo;
+ property public final boolean mergingEnabled;
+ property public final androidx.compose.ui.semantics.SemanticsNode? parent;
+ property public final long positionInRoot;
+ property public final long positionInWindow;
+ property public final androidx.compose.ui.node.RootForTest? root;
+ property public final long size;
+ property public final androidx.compose.ui.geometry.Rect touchBoundsInRoot;
+ }
+
+ public final class SemanticsOwner {
+ method public androidx.compose.ui.semantics.SemanticsNode getRootSemanticsNode();
+ method public androidx.compose.ui.semantics.SemanticsNode getUnmergedRootSemanticsNode();
+ property public final androidx.compose.ui.semantics.SemanticsNode rootSemanticsNode;
+ property public final androidx.compose.ui.semantics.SemanticsNode unmergedRootSemanticsNode;
+ }
+
+ public final class SemanticsOwnerKt {
+ method public static java.util.List<androidx.compose.ui.semantics.SemanticsNode> getAllSemanticsNodes(androidx.compose.ui.semantics.SemanticsOwner, boolean mergingEnabled);
+ }
+
+ public final class SemanticsProperties {
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionInfo> getCollectionInfo();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionItemInfo> getCollectionItemInfo();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<java.lang.String>> getContentDescription();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getDisabled();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> getEditableText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getError();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getFocused();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getHeading();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> getHorizontalScrollAxisRange();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> getImeAction();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Integer>> getIndexForKey();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getInvisibleToUser();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getIsContainer();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsDialog();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsPopup();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.LiveRegionMode> getLiveRegion();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getPaneTitle();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getPassword();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ProgressBarRangeInfo> getProgressBarRangeInfo();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.Role> getRole();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getSelectableGroup();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getSelected();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getStateDescription();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getTestTag();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.text.AnnotatedString>> getText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> getTextSelectionRange();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.state.ToggleableState> getToggleableState();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> getVerticalScrollAxisRange();
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionInfo> CollectionInfo;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionItemInfo> CollectionItemInfo;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<java.lang.String>> ContentDescription;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Disabled;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> EditableText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> Error;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> Focused;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Heading;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> HorizontalScrollAxisRange;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> ImeAction;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Integer>> IndexForKey;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> InvisibleToUser;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> IsContainer;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsDialog;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsPopup;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.LiveRegionMode> LiveRegion;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> PaneTitle;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Password;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ProgressBarRangeInfo> ProgressBarRangeInfo;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.Role> Role;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> SelectableGroup;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> Selected;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> StateDescription;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> TestTag;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.text.AnnotatedString>> Text;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> TextSelectionRange;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.state.ToggleableState> ToggleableState;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> VerticalScrollAxisRange;
+ field public static final androidx.compose.ui.semantics.SemanticsProperties INSTANCE;
+ }
+
+ public final class SemanticsPropertiesKt {
+ method public static void collapse(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void copyText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void cutText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void dialog(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void disabled(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void dismiss(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void error(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String description);
+ method public static void expand(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static androidx.compose.ui.semantics.CollectionInfo getCollectionInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.CollectionItemInfo getCollectionItemInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getContentDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction> getCustomActions(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.text.AnnotatedString getEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static boolean getFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.ScrollAxisRange getHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static int getImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static int getLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.ProgressBarRangeInfo getProgressBarRangeInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static int getRole(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static boolean getSelected(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getStateDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getTestTag(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.text.AnnotatedString getText(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void getTextLayoutResult(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>? action);
+ method public static long getTextSelectionRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.state.ToggleableState getToggleableState(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.ScrollAxisRange getVerticalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void heading(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void indexForKey(androidx.compose.ui.semantics.SemanticsPropertyReceiver, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Integer> mapping);
+ method public static boolean isContainer(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void onClick(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void onLongClick(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageDown(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageLeft(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageRight(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageUp(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void password(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void pasteText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void popup(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void requestFocus(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void scrollBy(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,java.lang.Boolean>? action);
+ method public static void scrollToIndex(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Boolean> action);
+ method public static void selectableGroup(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void setCollectionInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.CollectionInfo);
+ method public static void setCollectionItemInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.CollectionItemInfo);
+ method public static void setContainer(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
+ method public static void setContentDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setCustomActions(androidx.compose.ui.semantics.SemanticsPropertyReceiver, java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction>);
+ method public static void setEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString);
+ method public static void setFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
+ method public static void setHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ScrollAxisRange);
+ method public static void setImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method public static void setLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method public static void setPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setProgress(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean>? action);
+ method public static void setProgressBarRangeInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ProgressBarRangeInfo);
+ method public static void setRole(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method public static void setSelected(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
+ method public static void setSelection(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Boolean,java.lang.Boolean>? action);
+ method public static void setStateDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setTestTag(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString);
+ method public static void setText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>? action);
+ method public static void setTextSelectionRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, long);
+ method public static void setToggleableState(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.state.ToggleableState);
+ method public static void setVerticalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ScrollAxisRange);
+ }
+
+ public final class SemanticsPropertyKey<T> {
+ ctor public SemanticsPropertyKey(String name, optional kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
+ method public String getName();
+ method public operator T! getValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property);
+ method public T? merge(T? parentValue, T? childValue);
+ method public operator void setValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property, T? value);
+ property public final String name;
+ }
+
+ public interface SemanticsPropertyReceiver {
+ method public operator <T> void set(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, T? value);
+ }
+
+}
+
+package androidx.compose.ui.state {
+
+ public enum ToggleableState {
+ method public static androidx.compose.ui.state.ToggleableState valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.state.ToggleableState[] values();
+ enum_constant public static final androidx.compose.ui.state.ToggleableState Indeterminate;
+ enum_constant public static final androidx.compose.ui.state.ToggleableState Off;
+ enum_constant public static final androidx.compose.ui.state.ToggleableState On;
+ }
+
+ public final class ToggleableStateKt {
+ method public static androidx.compose.ui.state.ToggleableState ToggleableState(boolean value);
+ }
+
+}
+
+package androidx.compose.ui.viewinterop {
+
+ public final class AndroidView_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> factory, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+ method public static kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> getNoOpUpdate();
+ property public static final kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> NoOpUpdate;
+ }
+
+}
+
+package androidx.compose.ui.window {
+
+ public final class AndroidDialog_androidKt {
+ method @androidx.compose.runtime.Composable public static void Dialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class AndroidPopup_androidKt {
+ method @androidx.compose.runtime.Composable public static void Popup(optional androidx.compose.ui.Alignment alignment, optional long offset, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Popup(androidx.compose.ui.window.PopupPositionProvider popupPositionProvider, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @org.jetbrains.annotations.TestOnly public static boolean isPopupLayout(android.view.View view, optional String? testTag);
+ }
+
+ @androidx.compose.runtime.Immutable public final class DialogProperties {
+ ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean usePlatformDefaultWidth, optional boolean decorFitsSystemWindows);
+ ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
+ method public boolean getDecorFitsSystemWindows();
+ method public boolean getDismissOnBackPress();
+ method public boolean getDismissOnClickOutside();
+ method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
+ method public boolean getUsePlatformDefaultWidth();
+ property public final boolean decorFitsSystemWindows;
+ property public final boolean dismissOnBackPress;
+ property public final boolean dismissOnClickOutside;
+ property public final androidx.compose.ui.window.SecureFlagPolicy securePolicy;
+ property public final boolean usePlatformDefaultWidth;
+ }
+
+ public interface DialogWindowProvider {
+ method public android.view.Window getWindow();
+ property public abstract android.view.Window window;
+ }
+
+ @androidx.compose.runtime.Immutable public interface PopupPositionProvider {
+ method public long calculatePosition(androidx.compose.ui.unit.IntRect anchorBounds, long windowSize, androidx.compose.ui.unit.LayoutDirection layoutDirection, long popupContentSize);
+ }
+
+ @androidx.compose.runtime.Immutable public final class PopupProperties {
+ ctor public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean excludeFromSystemGesture, optional boolean clippingEnabled);
+ method public boolean getClippingEnabled();
+ method public boolean getDismissOnBackPress();
+ method public boolean getDismissOnClickOutside();
+ method public boolean getExcludeFromSystemGesture();
+ method public boolean getFocusable();
+ method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
+ method public boolean getUsePlatformDefaultWidth();
+ property public final boolean clippingEnabled;
+ property public final boolean dismissOnBackPress;
+ property public final boolean dismissOnClickOutside;
+ property public final boolean excludeFromSystemGesture;
+ property public final boolean focusable;
+ property public final androidx.compose.ui.window.SecureFlagPolicy securePolicy;
+ property public final boolean usePlatformDefaultWidth;
+ }
+
+ public enum SecureFlagPolicy {
+ method public static androidx.compose.ui.window.SecureFlagPolicy valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.window.SecureFlagPolicy[] values();
+ enum_constant public static final androidx.compose.ui.window.SecureFlagPolicy Inherit;
+ enum_constant public static final androidx.compose.ui.window.SecureFlagPolicy SecureOff;
+ enum_constant public static final androidx.compose.ui.window.SecureFlagPolicy SecureOn;
+ }
+
+}
+
diff --git a/compose/ui/ui/api/current.ignore b/compose/ui/ui/api/current.ignore
deleted file mode 100644
index c3a979a..0000000
--- a/compose/ui/ui/api/current.ignore
+++ /dev/null
@@ -1,139 +0,0 @@
-// Baseline format: 1.0
-InvalidNullConversion: androidx.compose.ui.graphics.GraphicsLayerModifierKt#graphicsLayer(androidx.compose.ui.Modifier, float, float, float, float, float, float, float, float, float, float, long, androidx.compose.ui.graphics.Shape, boolean, androidx.compose.ui.graphics.RenderEffect, long, long):
- Attempted to remove @NonNull annotation from method androidx.compose.ui.graphics.GraphicsLayerModifierKt.graphicsLayer(androidx.compose.ui.Modifier,float,float,float,float,float,float,float,float,float,float,long,androidx.compose.ui.graphics.Shape,boolean,androidx.compose.ui.graphics.RenderEffect,long,long)
-
-
-RemovedClass: androidx.compose.ui.ActualKt:
- Removed class androidx.compose.ui.ActualKt
-RemovedClass: androidx.compose.ui.TempListUtilsKt:
- Removed class androidx.compose.ui.TempListUtilsKt
-RemovedClass: androidx.compose.ui.focus.BeyondBoundsLayoutKt:
- Removed class androidx.compose.ui.focus.BeyondBoundsLayoutKt
-RemovedClass: androidx.compose.ui.focus.FocusManagerKt:
- Removed class androidx.compose.ui.focus.FocusManagerKt
-RemovedClass: androidx.compose.ui.focus.FocusRequesterKt:
- Removed class androidx.compose.ui.focus.FocusRequesterKt
-RemovedClass: androidx.compose.ui.focus.FocusTransactionsKt:
- Removed class androidx.compose.ui.focus.FocusTransactionsKt
-RemovedClass: androidx.compose.ui.focus.FocusTraversalKt:
- Removed class androidx.compose.ui.focus.FocusTraversalKt
-RemovedClass: androidx.compose.ui.focus.OneDimensionalFocusSearchKt:
- Removed class androidx.compose.ui.focus.OneDimensionalFocusSearchKt
-RemovedClass: androidx.compose.ui.focus.TwoDimensionalFocusSearchKt:
- Removed class androidx.compose.ui.focus.TwoDimensionalFocusSearchKt
-RemovedClass: androidx.compose.ui.input.nestedscroll.NestedScrollModifierLocalKt:
- Removed class androidx.compose.ui.input.nestedscroll.NestedScrollModifierLocalKt
-RemovedClass: androidx.compose.ui.input.pointer.PointerInputEventProcessorKt:
- Removed class androidx.compose.ui.input.pointer.PointerInputEventProcessorKt
-RemovedClass: androidx.compose.ui.input.pointer.PointerInputTestUtilKt:
- Removed class androidx.compose.ui.input.pointer.PointerInputTestUtilKt
-RemovedClass: androidx.compose.ui.input.pointer.PointerInteropFilter_androidKt:
- Removed class androidx.compose.ui.input.pointer.PointerInteropFilter_androidKt
-RemovedClass: androidx.compose.ui.input.pointer.PointerInteropUtils_androidKt:
- Removed class androidx.compose.ui.input.pointer.PointerInteropUtils_androidKt
-RemovedClass: androidx.compose.ui.layout.ContentScaleKt:
- Removed class androidx.compose.ui.layout.ContentScaleKt
-RemovedClass: androidx.compose.ui.layout.LookaheadLayoutCoordinatesKt:
- Removed class androidx.compose.ui.layout.LookaheadLayoutCoordinatesKt
-RemovedClass: androidx.compose.ui.layout.LookaheadLayoutKt:
- Removed class androidx.compose.ui.layout.LookaheadLayoutKt
-RemovedClass: androidx.compose.ui.layout.MultiContentMeasurePolicyKt:
- Removed class androidx.compose.ui.layout.MultiContentMeasurePolicyKt
-RemovedClass: androidx.compose.ui.layout.PlaceableKt:
- Removed class androidx.compose.ui.layout.PlaceableKt
-RemovedClass: androidx.compose.ui.layout.RelocationModifierKt:
- Removed class androidx.compose.ui.layout.RelocationModifierKt
-RemovedClass: androidx.compose.ui.layout.RelocationRequesterModifierKt:
- Removed class androidx.compose.ui.layout.RelocationRequesterModifierKt
-RemovedClass: androidx.compose.ui.modifier.ModifierLocalConsumerKt:
- Removed class androidx.compose.ui.modifier.ModifierLocalConsumerKt
-RemovedClass: androidx.compose.ui.modifier.ModifierLocalNodeKt:
- Removed class androidx.compose.ui.modifier.ModifierLocalNodeKt
-RemovedClass: androidx.compose.ui.modifier.ModifierLocalProviderKt:
- Removed class androidx.compose.ui.modifier.ModifierLocalProviderKt
-RemovedClass: androidx.compose.ui.node.BackwardsCompatNodeKt:
- Removed class androidx.compose.ui.node.BackwardsCompatNodeKt
-RemovedClass: androidx.compose.ui.node.DelegatableNodeKt:
- Removed class androidx.compose.ui.node.DelegatableNodeKt
-RemovedClass: androidx.compose.ui.node.DrawModifierNodeKt:
- Removed class androidx.compose.ui.node.DrawModifierNodeKt
-RemovedClass: androidx.compose.ui.node.HitTestResultKt:
- Removed class androidx.compose.ui.node.HitTestResultKt
-RemovedClass: androidx.compose.ui.node.LayoutModifierNodeCoordinatorKt:
- Removed class androidx.compose.ui.node.LayoutModifierNodeCoordinatorKt
-RemovedClass: androidx.compose.ui.node.LayoutModifierNodeKt:
- Removed class androidx.compose.ui.node.LayoutModifierNodeKt
-RemovedClass: androidx.compose.ui.node.LayoutNodeDrawScopeKt:
- Removed class androidx.compose.ui.node.LayoutNodeDrawScopeKt
-RemovedClass: androidx.compose.ui.node.LayoutNodeKt:
- Removed class androidx.compose.ui.node.LayoutNodeKt
-RemovedClass: androidx.compose.ui.node.LayoutNodeLayoutDelegateKt:
- Removed class androidx.compose.ui.node.LayoutNodeLayoutDelegateKt
-RemovedClass: androidx.compose.ui.node.MeasureScopeWithLayoutNodeKt:
- Removed class androidx.compose.ui.node.MeasureScopeWithLayoutNodeKt
-RemovedClass: androidx.compose.ui.node.ModifierNodeElementKt:
- Removed class androidx.compose.ui.node.ModifierNodeElementKt
-RemovedClass: androidx.compose.ui.node.MyersDiffKt:
- Removed class androidx.compose.ui.node.MyersDiffKt
-RemovedClass: androidx.compose.ui.node.NodeChainKt:
- Removed class androidx.compose.ui.node.NodeChainKt
-RemovedClass: androidx.compose.ui.node.NodeCoordinatorKt:
- Removed class androidx.compose.ui.node.NodeCoordinatorKt
-RemovedClass: androidx.compose.ui.node.NodeKindKt:
- Removed class androidx.compose.ui.node.NodeKindKt
-RemovedClass: androidx.compose.ui.node.PointerInputModifierNodeKt:
- Removed class androidx.compose.ui.node.PointerInputModifierNodeKt
-RemovedClass: androidx.compose.ui.node.SemanticsModifierNodeKt:
- Removed class androidx.compose.ui.node.SemanticsModifierNodeKt
-RemovedClass: androidx.compose.ui.node.ViewInterop_androidKt:
- Removed class androidx.compose.ui.node.ViewInterop_androidKt
-RemovedClass: androidx.compose.ui.platform.AndroidClipboardManager_androidKt:
- Removed class androidx.compose.ui.platform.AndroidClipboardManager_androidKt
-RemovedClass: androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt:
- Removed class androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt
-RemovedClass: androidx.compose.ui.platform.AndroidUiDispatcher_androidKt:
- Removed class androidx.compose.ui.platform.AndroidUiDispatcher_androidKt
-RemovedClass: androidx.compose.ui.platform.DebugUtilsKt:
- Removed class androidx.compose.ui.platform.DebugUtilsKt
-RemovedClass: androidx.compose.ui.platform.DisposableSaveableStateRegistry_androidKt:
- Removed class androidx.compose.ui.platform.DisposableSaveableStateRegistry_androidKt
-RemovedClass: androidx.compose.ui.platform.InfiniteAnimationPolicyKt:
- Removed class androidx.compose.ui.platform.InfiniteAnimationPolicyKt
-RemovedClass: androidx.compose.ui.platform.InvertMatrixKt:
- Removed class androidx.compose.ui.platform.InvertMatrixKt
-RemovedClass: androidx.compose.ui.platform.JvmActuals_jvmKt:
- Removed class androidx.compose.ui.platform.JvmActuals_jvmKt
-RemovedClass: androidx.compose.ui.platform.ShapeContainingUtilKt:
- Removed class androidx.compose.ui.platform.ShapeContainingUtilKt
-RemovedClass: androidx.compose.ui.platform.ViewCompositionStrategy_androidKt:
- Removed class androidx.compose.ui.platform.ViewCompositionStrategy_androidKt
-RemovedClass: androidx.compose.ui.platform.WindowInfoKt:
- Removed class androidx.compose.ui.platform.WindowInfoKt
-RemovedClass: androidx.compose.ui.platform.Wrapper_androidKt:
- Removed class androidx.compose.ui.platform.Wrapper_androidKt
-RemovedClass: androidx.compose.ui.res.Resources_androidKt:
- Removed class androidx.compose.ui.res.Resources_androidKt
-RemovedClass: androidx.compose.ui.semantics.SemanticsNodeKt:
- Removed class androidx.compose.ui.semantics.SemanticsNodeKt
-RemovedClass: androidx.compose.ui.semantics.SemanticsProperties_androidKt:
- Removed class androidx.compose.ui.semantics.SemanticsProperties_androidKt
-RemovedClass: androidx.compose.ui.semantics.SemanticsSortKt:
- Removed class androidx.compose.ui.semantics.SemanticsSortKt
-RemovedClass: androidx.compose.ui.viewinterop.AndroidViewHolder_androidKt:
- Removed class androidx.compose.ui.viewinterop.AndroidViewHolder_androidKt
-RemovedClass: androidx.compose.ui.window.SecureFlagPolicy_androidKt:
- Removed class androidx.compose.ui.window.SecureFlagPolicy_androidKt
-
-
-RemovedPackage: androidx.compose.ui.autofill:
- Removed package androidx.compose.ui.autofill
-RemovedPackage: androidx.compose.ui.graphics.vector.compat:
- Removed package androidx.compose.ui.graphics.vector.compat
-RemovedPackage: androidx.compose.ui.internal:
- Removed package androidx.compose.ui.internal
-RemovedPackage: androidx.compose.ui.platform.accessibility:
- Removed package androidx.compose.ui.platform.accessibility
-RemovedPackage: androidx.compose.ui.text:
- Removed package androidx.compose.ui.text
-RemovedPackage: androidx.compose.ui.text.input:
- Removed package androidx.compose.ui.text.input
diff --git a/compose/ui/ui/api/public_plus_experimental_1.4.0-beta02.txt b/compose/ui/ui/api/public_plus_experimental_1.4.0-beta02.txt
new file mode 100644
index 0000000..5462832
--- /dev/null
+++ b/compose/ui/ui/api/public_plus_experimental_1.4.0-beta02.txt
@@ -0,0 +1,3413 @@
+// Signature format: 4.0
+package androidx.compose.ui {
+
+ public final class AbsoluteAlignment {
+ method public androidx.compose.ui.Alignment getBottomLeft();
+ method public androidx.compose.ui.Alignment getBottomRight();
+ method public androidx.compose.ui.Alignment getCenterLeft();
+ method public androidx.compose.ui.Alignment getCenterRight();
+ method public androidx.compose.ui.Alignment.Horizontal getLeft();
+ method public androidx.compose.ui.Alignment.Horizontal getRight();
+ method public androidx.compose.ui.Alignment getTopLeft();
+ method public androidx.compose.ui.Alignment getTopRight();
+ property public final androidx.compose.ui.Alignment BottomLeft;
+ property public final androidx.compose.ui.Alignment BottomRight;
+ property public final androidx.compose.ui.Alignment CenterLeft;
+ property public final androidx.compose.ui.Alignment CenterRight;
+ property public final androidx.compose.ui.Alignment.Horizontal Left;
+ property public final androidx.compose.ui.Alignment.Horizontal Right;
+ property public final androidx.compose.ui.Alignment TopLeft;
+ property public final androidx.compose.ui.Alignment TopRight;
+ field public static final androidx.compose.ui.AbsoluteAlignment INSTANCE;
+ }
+
+ @androidx.compose.runtime.Stable public fun interface Alignment {
+ method public long align(long size, long space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ field public static final androidx.compose.ui.Alignment.Companion Companion;
+ }
+
+ public static final class Alignment.Companion {
+ method public androidx.compose.ui.Alignment.Vertical getBottom();
+ method public androidx.compose.ui.Alignment getBottomCenter();
+ method public androidx.compose.ui.Alignment getBottomEnd();
+ method public androidx.compose.ui.Alignment getBottomStart();
+ method public androidx.compose.ui.Alignment getCenter();
+ method public androidx.compose.ui.Alignment getCenterEnd();
+ method public androidx.compose.ui.Alignment.Horizontal getCenterHorizontally();
+ method public androidx.compose.ui.Alignment getCenterStart();
+ method public androidx.compose.ui.Alignment.Vertical getCenterVertically();
+ method public androidx.compose.ui.Alignment.Horizontal getEnd();
+ method public androidx.compose.ui.Alignment.Horizontal getStart();
+ method public androidx.compose.ui.Alignment.Vertical getTop();
+ method public androidx.compose.ui.Alignment getTopCenter();
+ method public androidx.compose.ui.Alignment getTopEnd();
+ method public androidx.compose.ui.Alignment getTopStart();
+ property public final androidx.compose.ui.Alignment.Vertical Bottom;
+ property public final androidx.compose.ui.Alignment BottomCenter;
+ property public final androidx.compose.ui.Alignment BottomEnd;
+ property public final androidx.compose.ui.Alignment BottomStart;
+ property public final androidx.compose.ui.Alignment Center;
+ property public final androidx.compose.ui.Alignment CenterEnd;
+ property public final androidx.compose.ui.Alignment.Horizontal CenterHorizontally;
+ property public final androidx.compose.ui.Alignment CenterStart;
+ property public final androidx.compose.ui.Alignment.Vertical CenterVertically;
+ property public final androidx.compose.ui.Alignment.Horizontal End;
+ property public final androidx.compose.ui.Alignment.Horizontal Start;
+ property public final androidx.compose.ui.Alignment.Vertical Top;
+ property public final androidx.compose.ui.Alignment TopCenter;
+ property public final androidx.compose.ui.Alignment TopEnd;
+ property public final androidx.compose.ui.Alignment TopStart;
+ }
+
+ @androidx.compose.runtime.Stable public static fun interface Alignment.Horizontal {
+ method public int align(int size, int space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ @androidx.compose.runtime.Stable public static fun interface Alignment.Vertical {
+ method public int align(int size, int space);
+ }
+
+ @androidx.compose.runtime.Immutable public final class BiasAbsoluteAlignment implements androidx.compose.ui.Alignment {
+ ctor public BiasAbsoluteAlignment(float horizontalBias, float verticalBias);
+ method public long align(long size, long space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public androidx.compose.ui.BiasAbsoluteAlignment copy(float horizontalBias, float verticalBias);
+ }
+
+ @androidx.compose.runtime.Immutable public static final class BiasAbsoluteAlignment.Horizontal implements androidx.compose.ui.Alignment.Horizontal {
+ ctor public BiasAbsoluteAlignment.Horizontal(float bias);
+ method public int align(int size, int space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public androidx.compose.ui.BiasAbsoluteAlignment.Horizontal copy(float bias);
+ }
+
+ @androidx.compose.runtime.Immutable public final class BiasAlignment implements androidx.compose.ui.Alignment {
+ ctor public BiasAlignment(float horizontalBias, float verticalBias);
+ method public long align(long size, long space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.BiasAlignment copy(float horizontalBias, float verticalBias);
+ method public float getHorizontalBias();
+ method public float getVerticalBias();
+ property public final float horizontalBias;
+ property public final float verticalBias;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class BiasAlignment.Horizontal implements androidx.compose.ui.Alignment.Horizontal {
+ ctor public BiasAlignment.Horizontal(float bias);
+ method public int align(int size, int space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public androidx.compose.ui.BiasAlignment.Horizontal copy(float bias);
+ }
+
+ @androidx.compose.runtime.Immutable public static final class BiasAlignment.Vertical implements androidx.compose.ui.Alignment.Vertical {
+ ctor public BiasAlignment.Vertical(float bias);
+ method public int align(int size, int space);
+ method public androidx.compose.ui.BiasAlignment.Vertical copy(float bias);
+ }
+
+ public final class CombinedModifier implements androidx.compose.ui.Modifier {
+ ctor public CombinedModifier(androidx.compose.ui.Modifier outer, androidx.compose.ui.Modifier inner);
+ method public boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ }
+
+ public final class ComposedModifierKt {
+ method public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, String fullyQualifiedName, Object? key1, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, String fullyQualifiedName, Object? key1, Object? key2, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, String fullyQualifiedName, Object? key1, Object? key2, Object? key3, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, String fullyQualifiedName, Object![]? keys, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method public static androidx.compose.ui.Modifier materialize(androidx.compose.runtime.Composer, androidx.compose.ui.Modifier modifier);
+ }
+
+ @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalComposeUiApi {
+ }
+
+ @kotlin.RequiresOptIn(message="Unstable API for use only between compose-ui modules sharing the same exact version, " + "subject to change without notice in major, minor, or patch releases.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface InternalComposeUiApi {
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface Modifier {
+ method public boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ method public default infix androidx.compose.ui.Modifier then(androidx.compose.ui.Modifier other);
+ field public static final androidx.compose.ui.Modifier.Companion Companion;
+ }
+
+ public static final class Modifier.Companion implements androidx.compose.ui.Modifier {
+ method public boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public static interface Modifier.Element extends androidx.compose.ui.Modifier {
+ method public default boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public default boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public default <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public default <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public abstract static class Modifier.Node implements androidx.compose.ui.node.DelegatableNode {
+ ctor public Modifier.Node();
+ method public final androidx.compose.ui.Modifier.Node getNode();
+ method public final boolean isAttached();
+ method public void onAttach();
+ method public void onDetach();
+ method public void onReset();
+ method public final void sideEffect(kotlin.jvm.functions.Function0<kotlin.Unit> effect);
+ property public final boolean isAttached;
+ property public final androidx.compose.ui.Modifier.Node node;
+ }
+
+ @androidx.compose.runtime.Stable public interface MotionDurationScale extends kotlin.coroutines.CoroutineContext.Element {
+ method public default kotlin.coroutines.CoroutineContext.Key<?> getKey();
+ method public float getScaleFactor();
+ property public default kotlin.coroutines.CoroutineContext.Key<?> key;
+ property public abstract float scaleFactor;
+ field public static final androidx.compose.ui.MotionDurationScale.Key Key;
+ }
+
+ public static final class MotionDurationScale.Key implements kotlin.coroutines.CoroutineContext.Key<androidx.compose.ui.MotionDurationScale> {
+ }
+
+ @androidx.compose.runtime.ComposableTargetMarker(description="UI Composable") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface UiComposable {
+ }
+
+ public final class ZIndexModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier zIndex(androidx.compose.ui.Modifier, float zIndex);
+ }
+
+}
+
+package androidx.compose.ui.autofill {
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface Autofill {
+ method public void cancelAutofillForNode(androidx.compose.ui.autofill.AutofillNode autofillNode);
+ method public void requestAutofillForNode(androidx.compose.ui.autofill.AutofillNode autofillNode);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public final class AutofillNode {
+ ctor public AutofillNode(optional java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, optional androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+ method public java.util.List<androidx.compose.ui.autofill.AutofillType> getAutofillTypes();
+ method public androidx.compose.ui.geometry.Rect? getBoundingBox();
+ method public int getId();
+ method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? getOnFill();
+ method public void setBoundingBox(androidx.compose.ui.geometry.Rect?);
+ property public final java.util.List<androidx.compose.ui.autofill.AutofillType> autofillTypes;
+ property public final androidx.compose.ui.geometry.Rect? boundingBox;
+ property public final int id;
+ property public final kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? onFill;
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public final class AutofillTree {
+ ctor public AutofillTree();
+ method public java.util.Map<java.lang.Integer,androidx.compose.ui.autofill.AutofillNode> getChildren();
+ method public kotlin.Unit? performAutofill(int id, String value);
+ method public operator void plusAssign(androidx.compose.ui.autofill.AutofillNode autofillNode);
+ property public final java.util.Map<java.lang.Integer,androidx.compose.ui.autofill.AutofillNode> children;
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public enum AutofillType {
+ method public static androidx.compose.ui.autofill.AutofillType valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.autofill.AutofillType[] values();
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType AddressAuxiliaryDetails;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType AddressCountry;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType AddressLocality;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType AddressRegion;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType AddressStreet;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType BirthDateDay;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType BirthDateFull;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType BirthDateMonth;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType BirthDateYear;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType CreditCardExpirationDate;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType CreditCardExpirationDay;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType CreditCardExpirationMonth;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType CreditCardExpirationYear;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType CreditCardNumber;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType CreditCardSecurityCode;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType EmailAddress;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType Gender;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType NewPassword;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType NewUsername;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType Password;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PersonFirstName;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PersonFullName;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PersonLastName;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PersonMiddleInitial;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PersonMiddleName;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PersonNamePrefix;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PersonNameSuffix;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PhoneCountryCode;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PhoneNumber;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PhoneNumberDevice;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PhoneNumberNational;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PostalAddress;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PostalCode;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType PostalCodeExtended;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType SmsOtpCode;
+ enum_constant public static final androidx.compose.ui.autofill.AutofillType Username;
+ }
+
+}
+
+package androidx.compose.ui.draw {
+
+ public final class AlphaKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier alpha(androidx.compose.ui.Modifier, float alpha);
+ }
+
+ public final class BlurKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radiusX, float radiusY, optional androidx.compose.ui.graphics.Shape edgeTreatment);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radius, optional androidx.compose.ui.graphics.Shape edgeTreatment);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BlurredEdgeTreatment {
+ ctor public BlurredEdgeTreatment(androidx.compose.ui.graphics.Shape? shape);
+ method public androidx.compose.ui.graphics.Shape? getShape();
+ property public final androidx.compose.ui.graphics.Shape? shape;
+ field public static final androidx.compose.ui.draw.BlurredEdgeTreatment.Companion Companion;
+ }
+
+ public static final class BlurredEdgeTreatment.Companion {
+ method public androidx.compose.ui.graphics.Shape getRectangle();
+ method public androidx.compose.ui.graphics.Shape getUnbounded();
+ property public final androidx.compose.ui.graphics.Shape Rectangle;
+ property public final androidx.compose.ui.graphics.Shape Unbounded;
+ }
+
+ public interface BuildDrawCacheParams {
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public long getSize();
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public abstract long size;
+ }
+
+ public final class CacheDrawScope implements androidx.compose.ui.unit.Density {
+ method public float getDensity();
+ method public float getFontScale();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public long getSize();
+ method public androidx.compose.ui.draw.DrawResult onDrawBehind(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public androidx.compose.ui.draw.DrawResult onDrawWithContent(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.ContentDrawScope,kotlin.Unit> block);
+ property public float density;
+ property public float fontScale;
+ property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public final long size;
+ }
+
+ public final class ClipKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier clip(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Shape shape);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier clipToBounds(androidx.compose.ui.Modifier);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawCacheModifier extends androidx.compose.ui.draw.DrawModifier {
+ method public void onBuildCache(androidx.compose.ui.draw.BuildDrawCacheParams params);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawModifier extends androidx.compose.ui.Modifier.Element {
+ method public void draw(androidx.compose.ui.graphics.drawscope.ContentDrawScope);
+ }
+
+ public final class DrawModifierKt {
+ method public static androidx.compose.ui.Modifier drawBehind(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDraw);
+ method public static androidx.compose.ui.Modifier drawWithCache(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.draw.CacheDrawScope,androidx.compose.ui.draw.DrawResult> onBuildDrawCache);
+ method public static androidx.compose.ui.Modifier drawWithContent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.ContentDrawScope,kotlin.Unit> onDraw);
+ }
+
+ public final class DrawResult {
+ }
+
+ public final class PainterModifierKt {
+ method public static androidx.compose.ui.Modifier paint(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.painter.Painter painter, optional boolean sizeToIntrinsics, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ }
+
+ public final class RotateKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier rotate(androidx.compose.ui.Modifier, float degrees);
+ }
+
+ public final class ScaleKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scaleX, float scaleY);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scale);
+ }
+
+ public final class ShadowKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+ }
+
+}
+
+package androidx.compose.ui.focus {
+
+ public final class FocusChangedModifierKt {
+ method public static androidx.compose.ui.Modifier onFocusChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusState,kotlin.Unit> onFocusChanged);
+ }
+
+ @kotlin.jvm.JvmInline public final value class FocusDirection {
+ field public static final androidx.compose.ui.focus.FocusDirection.Companion Companion;
+ }
+
+ public static final class FocusDirection.Companion {
+ method public int getDown();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public int getEnter();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public int getExit();
+ method @Deprecated @androidx.compose.ui.ExperimentalComposeUiApi public int getIn();
+ method public int getLeft();
+ method public int getNext();
+ method @Deprecated @androidx.compose.ui.ExperimentalComposeUiApi public int getOut();
+ method public int getPrevious();
+ method public int getRight();
+ method public int getUp();
+ property public final int Down;
+ property @androidx.compose.ui.ExperimentalComposeUiApi public final int Enter;
+ property @androidx.compose.ui.ExperimentalComposeUiApi public final int Exit;
+ property @Deprecated @androidx.compose.ui.ExperimentalComposeUiApi public final int In;
+ property public final int Left;
+ property public final int Next;
+ property @Deprecated @androidx.compose.ui.ExperimentalComposeUiApi public final int Out;
+ property public final int Previous;
+ property public final int Right;
+ property public final int Up;
+ }
+
+ @Deprecated @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusEventModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public void onFocusEvent(androidx.compose.ui.focus.FocusState focusState);
+ }
+
+ public final class FocusEventModifierKt {
+ method public static androidx.compose.ui.Modifier onFocusEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusState,kotlin.Unit> onFocusEvent);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface FocusEventModifierNode extends androidx.compose.ui.node.DelegatableNode {
+ method public void onFocusEvent(androidx.compose.ui.focus.FocusState focusState);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusManager {
+ method public void clearFocus(optional boolean force);
+ method public boolean moveFocus(int focusDirection);
+ }
+
+ public final class FocusModifierKt {
+ method @Deprecated public static androidx.compose.ui.Modifier focusModifier(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier focusTarget(androidx.compose.ui.Modifier);
+ }
+
+ @Deprecated public final class FocusOrder {
+ ctor @Deprecated public FocusOrder();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getDown();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getEnd();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getLeft();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getNext();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getPrevious();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getRight();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getStart();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getUp();
+ method @Deprecated public void setDown(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setEnd(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setLeft(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setNext(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setPrevious(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setRight(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setStart(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setUp(androidx.compose.ui.focus.FocusRequester);
+ property public final androidx.compose.ui.focus.FocusRequester down;
+ property public final androidx.compose.ui.focus.FocusRequester end;
+ property public final androidx.compose.ui.focus.FocusRequester left;
+ property public final androidx.compose.ui.focus.FocusRequester next;
+ property public final androidx.compose.ui.focus.FocusRequester previous;
+ property public final androidx.compose.ui.focus.FocusRequester right;
+ property public final androidx.compose.ui.focus.FocusRequester start;
+ property public final androidx.compose.ui.focus.FocusRequester up;
+ }
+
+ @Deprecated @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusOrderModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public void populateFocusOrder(androidx.compose.ui.focus.FocusOrder focusOrder);
+ }
+
+ public final class FocusOrderModifierKt {
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester);
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
+ }
+
+ public interface FocusProperties {
+ method public boolean getCanFocus();
+ method public default androidx.compose.ui.focus.FocusRequester getDown();
+ method public default androidx.compose.ui.focus.FocusRequester getEnd();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public default kotlin.jvm.functions.Function1<androidx.compose.ui.focus.FocusDirection,androidx.compose.ui.focus.FocusRequester> getEnter();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public default kotlin.jvm.functions.Function1<androidx.compose.ui.focus.FocusDirection,androidx.compose.ui.focus.FocusRequester> getExit();
+ method public default androidx.compose.ui.focus.FocusRequester getLeft();
+ method public default androidx.compose.ui.focus.FocusRequester getNext();
+ method public default androidx.compose.ui.focus.FocusRequester getPrevious();
+ method public default androidx.compose.ui.focus.FocusRequester getRight();
+ method public default androidx.compose.ui.focus.FocusRequester getStart();
+ method public default androidx.compose.ui.focus.FocusRequester getUp();
+ method public void setCanFocus(boolean);
+ method public default void setDown(androidx.compose.ui.focus.FocusRequester);
+ method public default void setEnd(androidx.compose.ui.focus.FocusRequester);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public default void setEnter(kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusDirection,androidx.compose.ui.focus.FocusRequester>);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public default void setExit(kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusDirection,androidx.compose.ui.focus.FocusRequester>);
+ method public default void setLeft(androidx.compose.ui.focus.FocusRequester);
+ method public default void setNext(androidx.compose.ui.focus.FocusRequester);
+ method public default void setPrevious(androidx.compose.ui.focus.FocusRequester);
+ method public default void setRight(androidx.compose.ui.focus.FocusRequester);
+ method public default void setStart(androidx.compose.ui.focus.FocusRequester);
+ method public default void setUp(androidx.compose.ui.focus.FocusRequester);
+ property public abstract boolean canFocus;
+ property public default androidx.compose.ui.focus.FocusRequester down;
+ property public default androidx.compose.ui.focus.FocusRequester end;
+ property @androidx.compose.ui.ExperimentalComposeUiApi public default kotlin.jvm.functions.Function1<androidx.compose.ui.focus.FocusDirection,androidx.compose.ui.focus.FocusRequester> enter;
+ property @androidx.compose.ui.ExperimentalComposeUiApi public default kotlin.jvm.functions.Function1<androidx.compose.ui.focus.FocusDirection,androidx.compose.ui.focus.FocusRequester> exit;
+ property public default androidx.compose.ui.focus.FocusRequester left;
+ property public default androidx.compose.ui.focus.FocusRequester next;
+ property public default androidx.compose.ui.focus.FocusRequester previous;
+ property public default androidx.compose.ui.focus.FocusRequester right;
+ property public default androidx.compose.ui.focus.FocusRequester start;
+ property public default androidx.compose.ui.focus.FocusRequester up;
+ }
+
+ public final class FocusPropertiesKt {
+ method public static androidx.compose.ui.Modifier focusProperties(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusProperties,kotlin.Unit> scope);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface FocusPropertiesModifierNode extends androidx.compose.ui.node.DelegatableNode {
+ method public void modifyFocusProperties(androidx.compose.ui.focus.FocusProperties focusProperties);
+ }
+
+ @androidx.compose.runtime.Stable public final class FocusRequester {
+ ctor public FocusRequester();
+ method public boolean captureFocus();
+ method public boolean freeFocus();
+ method public void requestFocus();
+ field public static final androidx.compose.ui.focus.FocusRequester.Companion Companion;
+ }
+
+ public static final class FocusRequester.Companion {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public androidx.compose.ui.focus.FocusRequester.Companion.FocusRequesterFactory createRefs();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public androidx.compose.ui.focus.FocusRequester getCancel();
+ method public androidx.compose.ui.focus.FocusRequester getDefault();
+ property @androidx.compose.ui.ExperimentalComposeUiApi public final androidx.compose.ui.focus.FocusRequester Cancel;
+ property public final androidx.compose.ui.focus.FocusRequester Default;
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public static final class FocusRequester.Companion.FocusRequesterFactory {
+ method public operator androidx.compose.ui.focus.FocusRequester component1();
+ method public operator androidx.compose.ui.focus.FocusRequester component10();
+ method public operator androidx.compose.ui.focus.FocusRequester component11();
+ method public operator androidx.compose.ui.focus.FocusRequester component12();
+ method public operator androidx.compose.ui.focus.FocusRequester component13();
+ method public operator androidx.compose.ui.focus.FocusRequester component14();
+ method public operator androidx.compose.ui.focus.FocusRequester component15();
+ method public operator androidx.compose.ui.focus.FocusRequester component16();
+ method public operator androidx.compose.ui.focus.FocusRequester component2();
+ method public operator androidx.compose.ui.focus.FocusRequester component3();
+ method public operator androidx.compose.ui.focus.FocusRequester component4();
+ method public operator androidx.compose.ui.focus.FocusRequester component5();
+ method public operator androidx.compose.ui.focus.FocusRequester component6();
+ method public operator androidx.compose.ui.focus.FocusRequester component7();
+ method public operator androidx.compose.ui.focus.FocusRequester component8();
+ method public operator androidx.compose.ui.focus.FocusRequester component9();
+ field public static final androidx.compose.ui.focus.FocusRequester.Companion.FocusRequesterFactory INSTANCE;
+ }
+
+ @Deprecated @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusRequesterModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getFocusRequester();
+ property public abstract androidx.compose.ui.focus.FocusRequester focusRequester;
+ }
+
+ public final class FocusRequesterModifierKt {
+ method public static androidx.compose.ui.Modifier focusRequester(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface FocusRequesterModifierNode extends androidx.compose.ui.node.DelegatableNode {
+ }
+
+ public final class FocusRequesterModifierNodeKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static boolean captureFocus(androidx.compose.ui.focus.FocusRequesterModifierNode);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static boolean freeFocus(androidx.compose.ui.focus.FocusRequesterModifierNode);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static boolean requestFocus(androidx.compose.ui.focus.FocusRequesterModifierNode);
+ }
+
+ public interface FocusState {
+ method public boolean getHasFocus();
+ method public boolean isCaptured();
+ method public boolean isFocused();
+ property public abstract boolean hasFocus;
+ property public abstract boolean isCaptured;
+ property public abstract boolean isFocused;
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public final class FocusTargetModifierNode extends androidx.compose.ui.Modifier.Node implements androidx.compose.ui.modifier.ModifierLocalNode androidx.compose.ui.node.ObserverNode {
+ ctor public FocusTargetModifierNode();
+ method public androidx.compose.ui.focus.FocusState getFocusState();
+ method public void onObservedReadsChanged();
+ property public final androidx.compose.ui.focus.FocusState focusState;
+ }
+
+}
+
+package androidx.compose.ui.graphics {
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class CompositingStrategy {
+ field public static final androidx.compose.ui.graphics.CompositingStrategy.Companion Companion;
+ }
+
+ public static final class CompositingStrategy.Companion {
+ method public int getAuto();
+ method public int getModulateAlpha();
+ method public int getOffscreen();
+ property public final int Auto;
+ property public final int ModulateAlpha;
+ property public final int Offscreen;
+ }
+
+ public final class GraphicsLayerModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier toolingGraphicsLayer(androidx.compose.ui.Modifier);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface GraphicsLayerScope extends androidx.compose.ui.unit.Density {
+ method public float getAlpha();
+ method public default long getAmbientShadowColor();
+ method public float getCameraDistance();
+ method public boolean getClip();
+ method public default int getCompositingStrategy();
+ method public default androidx.compose.ui.graphics.RenderEffect? getRenderEffect();
+ method public float getRotationX();
+ method public float getRotationY();
+ method public float getRotationZ();
+ method public float getScaleX();
+ method public float getScaleY();
+ method public float getShadowElevation();
+ method public androidx.compose.ui.graphics.Shape getShape();
+ method public default long getSize();
+ method public default long getSpotShadowColor();
+ method public long getTransformOrigin();
+ method public float getTranslationX();
+ method public float getTranslationY();
+ method public void setAlpha(float);
+ method public default void setAmbientShadowColor(long);
+ method public void setCameraDistance(float);
+ method public void setClip(boolean);
+ method public default void setCompositingStrategy(int);
+ method public default void setRenderEffect(androidx.compose.ui.graphics.RenderEffect?);
+ method public void setRotationX(float);
+ method public void setRotationY(float);
+ method public void setRotationZ(float);
+ method public void setScaleX(float);
+ method public void setScaleY(float);
+ method public void setShadowElevation(float);
+ method public void setShape(androidx.compose.ui.graphics.Shape);
+ method public default void setSpotShadowColor(long);
+ method public void setTransformOrigin(long);
+ method public void setTranslationX(float);
+ method public void setTranslationY(float);
+ property public abstract float alpha;
+ property public default long ambientShadowColor;
+ property public abstract float cameraDistance;
+ property public abstract boolean clip;
+ property public default int compositingStrategy;
+ property public default androidx.compose.ui.graphics.RenderEffect? renderEffect;
+ property public abstract float rotationX;
+ property public abstract float rotationY;
+ property public abstract float rotationZ;
+ property public abstract float scaleX;
+ property public abstract float scaleY;
+ property public abstract float shadowElevation;
+ property public abstract androidx.compose.ui.graphics.Shape shape;
+ property public default long size;
+ property public default long spotShadowColor;
+ property public abstract long transformOrigin;
+ property public abstract float translationX;
+ property public abstract float translationY;
+ }
+
+ public final class GraphicsLayerScopeKt {
+ method public static androidx.compose.ui.graphics.GraphicsLayerScope GraphicsLayerScope();
+ method public static long getDefaultShadowColor();
+ property public static final long DefaultShadowColor;
+ field public static final float DefaultCameraDistance = 8.0f;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TransformOrigin {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float pivotFractionX, optional float pivotFractionY);
+ method public float getPivotFractionX();
+ method public float getPivotFractionY();
+ property public final float pivotFractionX;
+ property public final float pivotFractionY;
+ field public static final androidx.compose.ui.graphics.TransformOrigin.Companion Companion;
+ }
+
+ public static final class TransformOrigin.Companion {
+ method public long getCenter();
+ property public final long Center;
+ }
+
+ public final class TransformOriginKt {
+ method public static long TransformOrigin(float pivotFractionX, float pivotFractionY);
+ }
+
+}
+
+package androidx.compose.ui.graphics.vector {
+
+ @androidx.compose.runtime.Immutable public final class ImageVector {
+ method public boolean getAutoMirror();
+ method public float getDefaultHeight();
+ method public float getDefaultWidth();
+ method public String getName();
+ method public androidx.compose.ui.graphics.vector.VectorGroup getRoot();
+ method public int getTintBlendMode();
+ method public long getTintColor();
+ method public float getViewportHeight();
+ method public float getViewportWidth();
+ property public final boolean autoMirror;
+ property public final float defaultHeight;
+ property public final float defaultWidth;
+ property public final String name;
+ property public final androidx.compose.ui.graphics.vector.VectorGroup root;
+ property public final int tintBlendMode;
+ property public final long tintColor;
+ property public final float viewportHeight;
+ property public final float viewportWidth;
+ field public static final androidx.compose.ui.graphics.vector.ImageVector.Companion Companion;
+ }
+
+ public static final class ImageVector.Builder {
+ ctor public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror);
+ ctor @Deprecated public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode);
+ method public androidx.compose.ui.graphics.vector.ImageVector.Builder addGroup(optional String name, optional float rotate, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData);
+ method public androidx.compose.ui.graphics.vector.ImageVector.Builder addPath(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, optional int pathFillType, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional float trimPathStart, optional float trimPathEnd, optional float trimPathOffset);
+ method public androidx.compose.ui.graphics.vector.ImageVector build();
+ method public androidx.compose.ui.graphics.vector.ImageVector.Builder clearGroup();
+ }
+
+ public static final class ImageVector.Companion {
+ }
+
+ public final class ImageVectorKt {
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector.Builder group(androidx.compose.ui.graphics.vector.ImageVector.Builder, optional String name, optional float rotate, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.ImageVector.Builder,kotlin.Unit> block);
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector.Builder path(androidx.compose.ui.graphics.vector.ImageVector.Builder, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional int pathFillType, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.PathBuilder,kotlin.Unit> pathBuilder);
+ }
+
+ public abstract sealed class VNode {
+ method public abstract void draw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ method public final void invalidate();
+ }
+
+ public final class VectorApplier extends androidx.compose.runtime.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
+ ctor public VectorApplier(androidx.compose.ui.graphics.vector.VNode root);
+ method public void insertBottomUp(int index, androidx.compose.ui.graphics.vector.VNode instance);
+ method public void insertTopDown(int index, androidx.compose.ui.graphics.vector.VNode instance);
+ method public void move(int from, int to, int count);
+ method protected void onClear();
+ method public void remove(int index, int count);
+ }
+
+ @androidx.compose.runtime.ComposableTargetMarker(description="Vector Composable") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface VectorComposable {
+ }
+
+ public final class VectorComposeKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.graphics.vector.VectorComposable public static void Group(optional String name, optional float rotation, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.graphics.vector.VectorComposable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, optional int pathFillType, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional float trimPathStart, optional float trimPathEnd, optional float trimPathOffset);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorConfig {
+ method public default <T> T! getOrDefault(androidx.compose.ui.graphics.vector.VectorProperty<T> property, T? defaultValue);
+ }
+
+ @androidx.compose.runtime.Immutable public final class VectorGroup extends androidx.compose.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.compose.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
+ method public operator androidx.compose.ui.graphics.vector.VectorNode get(int index);
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> getClipPathData();
+ method public String getName();
+ method public float getPivotX();
+ method public float getPivotY();
+ method public float getRotation();
+ method public float getScaleX();
+ method public float getScaleY();
+ method public int getSize();
+ method public float getTranslationX();
+ method public float getTranslationY();
+ method public java.util.Iterator<androidx.compose.ui.graphics.vector.VectorNode> iterator();
+ property public final java.util.List<androidx.compose.ui.graphics.vector.PathNode> clipPathData;
+ property public final String name;
+ property public final float pivotX;
+ property public final float pivotY;
+ property public final float rotation;
+ property public final float scaleX;
+ property public final float scaleY;
+ property public final int size;
+ property public final float translationX;
+ property public final float translationY;
+ }
+
+ public final class VectorKt {
+ method public static inline java.util.List<androidx.compose.ui.graphics.vector.PathNode> PathData(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.PathBuilder,kotlin.Unit> block);
+ method public static java.util.List<androidx.compose.ui.graphics.vector.PathNode> addPathNodes(String? pathStr);
+ method public static int getDefaultFillType();
+ method public static int getDefaultStrokeLineCap();
+ method public static int getDefaultStrokeLineJoin();
+ method public static int getDefaultTintBlendMode();
+ method public static long getDefaultTintColor();
+ method public static java.util.List<androidx.compose.ui.graphics.vector.PathNode> getEmptyPath();
+ property public static final int DefaultFillType;
+ property public static final int DefaultStrokeLineCap;
+ property public static final int DefaultStrokeLineJoin;
+ property public static final int DefaultTintBlendMode;
+ property public static final long DefaultTintColor;
+ property public static final java.util.List<androidx.compose.ui.graphics.vector.PathNode> EmptyPath;
+ field public static final String DefaultGroupName = "";
+ field public static final String DefaultPathName = "";
+ field public static final float DefaultPivotX = 0.0f;
+ field public static final float DefaultPivotY = 0.0f;
+ field public static final float DefaultRotation = 0.0f;
+ field public static final float DefaultScaleX = 1.0f;
+ field public static final float DefaultScaleY = 1.0f;
+ field public static final float DefaultStrokeLineMiter = 4.0f;
+ field public static final float DefaultStrokeLineWidth = 0.0f;
+ field public static final float DefaultTranslationX = 0.0f;
+ field public static final float DefaultTranslationY = 0.0f;
+ field public static final float DefaultTrimPathEnd = 1.0f;
+ field public static final float DefaultTrimPathOffset = 0.0f;
+ field public static final float DefaultTrimPathStart = 0.0f;
+ }
+
+ public abstract sealed class VectorNode {
+ }
+
+ public final class VectorPainter extends androidx.compose.ui.graphics.painter.Painter {
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public long intrinsicSize;
+ }
+
+ public final class VectorPainterKt {
+ method @androidx.compose.runtime.Composable public static void RenderVectorGroup(androidx.compose.ui.graphics.vector.VectorGroup group, optional java.util.Map<java.lang.String,? extends androidx.compose.ui.graphics.vector.VectorConfig> configs);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(androidx.compose.ui.graphics.vector.ImageVector image);
+ field public static final String RootGroupName = "VectorRootGroup";
+ }
+
+ @androidx.compose.runtime.Immutable public final class VectorPath extends androidx.compose.ui.graphics.vector.VectorNode {
+ method public androidx.compose.ui.graphics.Brush? getFill();
+ method public float getFillAlpha();
+ method public String getName();
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> getPathData();
+ method public int getPathFillType();
+ method public androidx.compose.ui.graphics.Brush? getStroke();
+ method public float getStrokeAlpha();
+ method public int getStrokeLineCap();
+ method public int getStrokeLineJoin();
+ method public float getStrokeLineMiter();
+ method public float getStrokeLineWidth();
+ method public float getTrimPathEnd();
+ method public float getTrimPathOffset();
+ method public float getTrimPathStart();
+ property public final androidx.compose.ui.graphics.Brush? fill;
+ property public final float fillAlpha;
+ property public final String name;
+ property public final java.util.List<androidx.compose.ui.graphics.vector.PathNode> pathData;
+ property public final int pathFillType;
+ property public final androidx.compose.ui.graphics.Brush? stroke;
+ property public final float strokeAlpha;
+ property public final int strokeLineCap;
+ property public final int strokeLineJoin;
+ property public final float strokeLineMiter;
+ property public final float strokeLineWidth;
+ property public final float trimPathEnd;
+ property public final float trimPathOffset;
+ property public final float trimPathStart;
+ }
+
+ public abstract sealed class VectorProperty<T> {
+ }
+
+ public static final class VectorProperty.Fill extends androidx.compose.ui.graphics.vector.VectorProperty<androidx.compose.ui.graphics.Brush> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.Fill INSTANCE;
+ }
+
+ public static final class VectorProperty.FillAlpha extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.FillAlpha INSTANCE;
+ }
+
+ public static final class VectorProperty.PathData extends androidx.compose.ui.graphics.vector.VectorProperty<java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode>> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.PathData INSTANCE;
+ }
+
+ public static final class VectorProperty.PivotX extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.PivotX INSTANCE;
+ }
+
+ public static final class VectorProperty.PivotY extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.PivotY INSTANCE;
+ }
+
+ public static final class VectorProperty.Rotation extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.Rotation INSTANCE;
+ }
+
+ public static final class VectorProperty.ScaleX extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.ScaleX INSTANCE;
+ }
+
+ public static final class VectorProperty.ScaleY extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.ScaleY INSTANCE;
+ }
+
+ public static final class VectorProperty.Stroke extends androidx.compose.ui.graphics.vector.VectorProperty<androidx.compose.ui.graphics.Brush> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.Stroke INSTANCE;
+ }
+
+ public static final class VectorProperty.StrokeAlpha extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.StrokeAlpha INSTANCE;
+ }
+
+ public static final class VectorProperty.StrokeLineWidth extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.StrokeLineWidth INSTANCE;
+ }
+
+ public static final class VectorProperty.TranslateX extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TranslateX INSTANCE;
+ }
+
+ public static final class VectorProperty.TranslateY extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TranslateY INSTANCE;
+ }
+
+ public static final class VectorProperty.TrimPathEnd extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TrimPathEnd INSTANCE;
+ }
+
+ public static final class VectorProperty.TrimPathOffset extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TrimPathOffset INSTANCE;
+ }
+
+ public static final class VectorProperty.TrimPathStart extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TrimPathStart INSTANCE;
+ }
+
+}
+
+package androidx.compose.ui.hapticfeedback {
+
+ public interface HapticFeedback {
+ method public void performHapticFeedback(int hapticFeedbackType);
+ }
+
+ @kotlin.jvm.JvmInline public final value class HapticFeedbackType {
+ ctor public HapticFeedbackType(int value);
+ field public static final androidx.compose.ui.hapticfeedback.HapticFeedbackType.Companion Companion;
+ }
+
+ public static final class HapticFeedbackType.Companion {
+ method public int getLongPress();
+ method public int getTextHandleMove();
+ method public java.util.List<androidx.compose.ui.hapticfeedback.HapticFeedbackType> values();
+ property public final int LongPress;
+ property public final int TextHandleMove;
+ }
+
+}
+
+package androidx.compose.ui.input {
+
+ @kotlin.jvm.JvmInline public final value class InputMode {
+ field public static final androidx.compose.ui.input.InputMode.Companion Companion;
+ }
+
+ public static final class InputMode.Companion {
+ method public int getKeyboard();
+ method public int getTouch();
+ property public final int Keyboard;
+ property public final int Touch;
+ }
+
+ public interface InputModeManager {
+ method public int getInputMode();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public boolean requestInputMode(int inputMode);
+ property public abstract int inputMode;
+ }
+
+}
+
+package androidx.compose.ui.input.key {
+
+ @kotlin.jvm.JvmInline public final value class Key {
+ ctor public Key(long keyCode);
+ method public long getKeyCode();
+ property public final long keyCode;
+ field public static final androidx.compose.ui.input.key.Key.Companion Companion;
+ }
+
+ public static final class Key.Companion {
+ method public long getA();
+ method public long getAllApps();
+ method public long getAltLeft();
+ method public long getAltRight();
+ method public long getApostrophe();
+ method public long getAppSwitch();
+ method public long getAssist();
+ method public long getAt();
+ method public long getAvReceiverInput();
+ method public long getAvReceiverPower();
+ method public long getB();
+ method public long getBack();
+ method public long getBackslash();
+ method public long getBackspace();
+ method public long getBookmark();
+ method public long getBreak();
+ method public long getBrightnessDown();
+ method public long getBrightnessUp();
+ method public long getBrowser();
+ method public long getButton1();
+ method public long getButton10();
+ method public long getButton11();
+ method public long getButton12();
+ method public long getButton13();
+ method public long getButton14();
+ method public long getButton15();
+ method public long getButton16();
+ method public long getButton2();
+ method public long getButton3();
+ method public long getButton4();
+ method public long getButton5();
+ method public long getButton6();
+ method public long getButton7();
+ method public long getButton8();
+ method public long getButton9();
+ method public long getButtonA();
+ method public long getButtonB();
+ method public long getButtonC();
+ method public long getButtonL1();
+ method public long getButtonL2();
+ method public long getButtonMode();
+ method public long getButtonR1();
+ method public long getButtonR2();
+ method public long getButtonSelect();
+ method public long getButtonStart();
+ method public long getButtonThumbLeft();
+ method public long getButtonThumbRight();
+ method public long getButtonX();
+ method public long getButtonY();
+ method public long getButtonZ();
+ method public long getC();
+ method public long getCalculator();
+ method public long getCalendar();
+ method public long getCall();
+ method public long getCamera();
+ method public long getCapsLock();
+ method public long getCaptions();
+ method public long getChannelDown();
+ method public long getChannelUp();
+ method public long getClear();
+ method public long getComma();
+ method public long getContacts();
+ method public long getCopy();
+ method public long getCtrlLeft();
+ method public long getCtrlRight();
+ method public long getCut();
+ method public long getD();
+ method public long getDelete();
+ method public long getDirectionCenter();
+ method public long getDirectionDown();
+ method public long getDirectionDownLeft();
+ method public long getDirectionDownRight();
+ method public long getDirectionLeft();
+ method public long getDirectionRight();
+ method public long getDirectionUp();
+ method public long getDirectionUpLeft();
+ method public long getDirectionUpRight();
+ method public long getDvr();
+ method public long getE();
+ method public long getEight();
+ method public long getEisu();
+ method public long getEndCall();
+ method public long getEnter();
+ method public long getEnvelope();
+ method public long getEquals();
+ method public long getEscape();
+ method public long getF();
+ method public long getF1();
+ method public long getF10();
+ method public long getF11();
+ method public long getF12();
+ method public long getF2();
+ method public long getF3();
+ method public long getF4();
+ method public long getF5();
+ method public long getF6();
+ method public long getF7();
+ method public long getF8();
+ method public long getF9();
+ method public long getFive();
+ method public long getFocus();
+ method public long getForward();
+ method public long getFour();
+ method public long getFunction();
+ method public long getG();
+ method public long getGrave();
+ method public long getGuide();
+ method public long getH();
+ method public long getHeadsetHook();
+ method public long getHelp();
+ method public long getHenkan();
+ method public long getHome();
+ method public long getI();
+ method public long getInfo();
+ method public long getInsert();
+ method public long getJ();
+ method public long getK();
+ method public long getKana();
+ method public long getKatakanaHiragana();
+ method public long getL();
+ method public long getLanguageSwitch();
+ method public long getLastChannel();
+ method public long getLeftBracket();
+ method public long getM();
+ method public long getMannerMode();
+ method public long getMediaAudioTrack();
+ method public long getMediaClose();
+ method public long getMediaEject();
+ method public long getMediaFastForward();
+ method public long getMediaNext();
+ method public long getMediaPause();
+ method public long getMediaPlay();
+ method public long getMediaPlayPause();
+ method public long getMediaPrevious();
+ method public long getMediaRecord();
+ method public long getMediaRewind();
+ method public long getMediaSkipBackward();
+ method public long getMediaSkipForward();
+ method public long getMediaStepBackward();
+ method public long getMediaStepForward();
+ method public long getMediaStop();
+ method public long getMediaTopMenu();
+ method public long getMenu();
+ method public long getMetaLeft();
+ method public long getMetaRight();
+ method public long getMicrophoneMute();
+ method public long getMinus();
+ method public long getMoveEnd();
+ method public long getMoveHome();
+ method public long getMuhenkan();
+ method public long getMultiply();
+ method public long getMusic();
+ method public long getN();
+ method public long getNavigateIn();
+ method public long getNavigateNext();
+ method public long getNavigateOut();
+ method public long getNavigatePrevious();
+ method public long getNine();
+ method public long getNotification();
+ method public long getNumLock();
+ method public long getNumPad0();
+ method public long getNumPad1();
+ method public long getNumPad2();
+ method public long getNumPad3();
+ method public long getNumPad4();
+ method public long getNumPad5();
+ method public long getNumPad6();
+ method public long getNumPad7();
+ method public long getNumPad8();
+ method public long getNumPad9();
+ method public long getNumPadAdd();
+ method public long getNumPadComma();
+ method public long getNumPadDivide();
+ method public long getNumPadDot();
+ method public long getNumPadEnter();
+ method public long getNumPadEquals();
+ method public long getNumPadLeftParenthesis();
+ method public long getNumPadMultiply();
+ method public long getNumPadRightParenthesis();
+ method public long getNumPadSubtract();
+ method public long getNumber();
+ method public long getO();
+ method public long getOne();
+ method public long getP();
+ method public long getPageDown();
+ method public long getPageUp();
+ method public long getPairing();
+ method public long getPaste();
+ method public long getPeriod();
+ method public long getPictureSymbols();
+ method public long getPlus();
+ method public long getPound();
+ method public long getPower();
+ method public long getPrintScreen();
+ method public long getProfileSwitch();
+ method public long getProgramBlue();
+ method public long getProgramGreen();
+ method public long getProgramRed();
+ method public long getProgramYellow();
+ method public long getQ();
+ method public long getR();
+ method public long getRefresh();
+ method public long getRightBracket();
+ method public long getRo();
+ method public long getS();
+ method public long getScrollLock();
+ method public long getSearch();
+ method public long getSemicolon();
+ method public long getSetTopBoxInput();
+ method public long getSetTopBoxPower();
+ method public long getSettings();
+ method public long getSeven();
+ method public long getShiftLeft();
+ method public long getShiftRight();
+ method public long getSix();
+ method public long getSlash();
+ method public long getSleep();
+ method public long getSoftLeft();
+ method public long getSoftRight();
+ method public long getSoftSleep();
+ method public long getSpacebar();
+ method public long getStem1();
+ method public long getStem2();
+ method public long getStem3();
+ method public long getStemPrimary();
+ method public long getSwitchCharset();
+ method public long getSymbol();
+ method public long getSystemNavigationDown();
+ method public long getSystemNavigationLeft();
+ method public long getSystemNavigationRight();
+ method public long getSystemNavigationUp();
+ method public long getT();
+ method public long getTab();
+ method public long getThree();
+ method public long getThumbsDown();
+ method public long getThumbsUp();
+ method public long getToggle2D3D();
+ method public long getTv();
+ method public long getTvAntennaCable();
+ method public long getTvAudioDescription();
+ method public long getTvAudioDescriptionMixingVolumeDown();
+ method public long getTvAudioDescriptionMixingVolumeUp();
+ method public long getTvContentsMenu();
+ method public long getTvDataService();
+ method public long getTvInput();
+ method public long getTvInputComponent1();
+ method public long getTvInputComponent2();
+ method public long getTvInputComposite1();
+ method public long getTvInputComposite2();
+ method public long getTvInputHdmi1();
+ method public long getTvInputHdmi2();
+ method public long getTvInputHdmi3();
+ method public long getTvInputHdmi4();
+ method public long getTvInputVga1();
+ method public long getTvMediaContextMenu();
+ method public long getTvNetwork();
+ method public long getTvNumberEntry();
+ method public long getTvPower();
+ method public long getTvRadioService();
+ method public long getTvSatellite();
+ method public long getTvSatelliteBs();
+ method public long getTvSatelliteCs();
+ method public long getTvSatelliteService();
+ method public long getTvTeletext();
+ method public long getTvTerrestrialAnalog();
+ method public long getTvTerrestrialDigital();
+ method public long getTvTimerProgramming();
+ method public long getTvZoomMode();
+ method public long getTwo();
+ method public long getU();
+ method public long getUnknown();
+ method public long getV();
+ method public long getVoiceAssist();
+ method public long getVolumeDown();
+ method public long getVolumeMute();
+ method public long getVolumeUp();
+ method public long getW();
+ method public long getWakeUp();
+ method public long getWindow();
+ method public long getX();
+ method public long getY();
+ method public long getYen();
+ method public long getZ();
+ method public long getZenkakuHankaru();
+ method public long getZero();
+ method public long getZoomIn();
+ method public long getZoomOut();
+ property public final long A;
+ property public final long AllApps;
+ property public final long AltLeft;
+ property public final long AltRight;
+ property public final long Apostrophe;
+ property public final long AppSwitch;
+ property public final long Assist;
+ property public final long At;
+ property public final long AvReceiverInput;
+ property public final long AvReceiverPower;
+ property public final long B;
+ property public final long Back;
+ property public final long Backslash;
+ property public final long Backspace;
+ property public final long Bookmark;
+ property public final long Break;
+ property public final long BrightnessDown;
+ property public final long BrightnessUp;
+ property public final long Browser;
+ property public final long Button1;
+ property public final long Button10;
+ property public final long Button11;
+ property public final long Button12;
+ property public final long Button13;
+ property public final long Button14;
+ property public final long Button15;
+ property public final long Button16;
+ property public final long Button2;
+ property public final long Button3;
+ property public final long Button4;
+ property public final long Button5;
+ property public final long Button6;
+ property public final long Button7;
+ property public final long Button8;
+ property public final long Button9;
+ property public final long ButtonA;
+ property public final long ButtonB;
+ property public final long ButtonC;
+ property public final long ButtonL1;
+ property public final long ButtonL2;
+ property public final long ButtonMode;
+ property public final long ButtonR1;
+ property public final long ButtonR2;
+ property public final long ButtonSelect;
+ property public final long ButtonStart;
+ property public final long ButtonThumbLeft;
+ property public final long ButtonThumbRight;
+ property public final long ButtonX;
+ property public final long ButtonY;
+ property public final long ButtonZ;
+ property public final long C;
+ property public final long Calculator;
+ property public final long Calendar;
+ property public final long Call;
+ property public final long Camera;
+ property public final long CapsLock;
+ property public final long Captions;
+ property public final long ChannelDown;
+ property public final long ChannelUp;
+ property public final long Clear;
+ property public final long Comma;
+ property public final long Contacts;
+ property public final long Copy;
+ property public final long CtrlLeft;
+ property public final long CtrlRight;
+ property public final long Cut;
+ property public final long D;
+ property public final long Delete;
+ property public final long DirectionCenter;
+ property public final long DirectionDown;
+ property public final long DirectionDownLeft;
+ property public final long DirectionDownRight;
+ property public final long DirectionLeft;
+ property public final long DirectionRight;
+ property public final long DirectionUp;
+ property public final long DirectionUpLeft;
+ property public final long DirectionUpRight;
+ property public final long Dvr;
+ property public final long E;
+ property public final long Eight;
+ property public final long Eisu;
+ property public final long EndCall;
+ property public final long Enter;
+ property public final long Envelope;
+ property public final long Equals;
+ property public final long Escape;
+ property public final long F;
+ property public final long F1;
+ property public final long F10;
+ property public final long F11;
+ property public final long F12;
+ property public final long F2;
+ property public final long F3;
+ property public final long F4;
+ property public final long F5;
+ property public final long F6;
+ property public final long F7;
+ property public final long F8;
+ property public final long F9;
+ property public final long Five;
+ property public final long Focus;
+ property public final long Forward;
+ property public final long Four;
+ property public final long Function;
+ property public final long G;
+ property public final long Grave;
+ property public final long Guide;
+ property public final long H;
+ property public final long HeadsetHook;
+ property public final long Help;
+ property public final long Henkan;
+ property public final long Home;
+ property public final long I;
+ property public final long Info;
+ property public final long Insert;
+ property public final long J;
+ property public final long K;
+ property public final long Kana;
+ property public final long KatakanaHiragana;
+ property public final long L;
+ property public final long LanguageSwitch;
+ property public final long LastChannel;
+ property public final long LeftBracket;
+ property public final long M;
+ property public final long MannerMode;
+ property public final long MediaAudioTrack;
+ property public final long MediaClose;
+ property public final long MediaEject;
+ property public final long MediaFastForward;
+ property public final long MediaNext;
+ property public final long MediaPause;
+ property public final long MediaPlay;
+ property public final long MediaPlayPause;
+ property public final long MediaPrevious;
+ property public final long MediaRecord;
+ property public final long MediaRewind;
+ property public final long MediaSkipBackward;
+ property public final long MediaSkipForward;
+ property public final long MediaStepBackward;
+ property public final long MediaStepForward;
+ property public final long MediaStop;
+ property public final long MediaTopMenu;
+ property public final long Menu;
+ property public final long MetaLeft;
+ property public final long MetaRight;
+ property public final long MicrophoneMute;
+ property public final long Minus;
+ property public final long MoveEnd;
+ property public final long MoveHome;
+ property public final long Muhenkan;
+ property public final long Multiply;
+ property public final long Music;
+ property public final long N;
+ property public final long NavigateIn;
+ property public final long NavigateNext;
+ property public final long NavigateOut;
+ property public final long NavigatePrevious;
+ property public final long Nine;
+ property public final long Notification;
+ property public final long NumLock;
+ property public final long NumPad0;
+ property public final long NumPad1;
+ property public final long NumPad2;
+ property public final long NumPad3;
+ property public final long NumPad4;
+ property public final long NumPad5;
+ property public final long NumPad6;
+ property public final long NumPad7;
+ property public final long NumPad8;
+ property public final long NumPad9;
+ property public final long NumPadAdd;
+ property public final long NumPadComma;
+ property public final long NumPadDivide;
+ property public final long NumPadDot;
+ property public final long NumPadEnter;
+ property public final long NumPadEquals;
+ property public final long NumPadLeftParenthesis;
+ property public final long NumPadMultiply;
+ property public final long NumPadRightParenthesis;
+ property public final long NumPadSubtract;
+ property public final long Number;
+ property public final long O;
+ property public final long One;
+ property public final long P;
+ property public final long PageDown;
+ property public final long PageUp;
+ property public final long Pairing;
+ property public final long Paste;
+ property public final long Period;
+ property public final long PictureSymbols;
+ property public final long Plus;
+ property public final long Pound;
+ property public final long Power;
+ property public final long PrintScreen;
+ property public final long ProfileSwitch;
+ property public final long ProgramBlue;
+ property public final long ProgramGreen;
+ property public final long ProgramRed;
+ property public final long ProgramYellow;
+ property public final long Q;
+ property public final long R;
+ property public final long Refresh;
+ property public final long RightBracket;
+ property public final long Ro;
+ property public final long S;
+ property public final long ScrollLock;
+ property public final long Search;
+ property public final long Semicolon;
+ property public final long SetTopBoxInput;
+ property public final long SetTopBoxPower;
+ property public final long Settings;
+ property public final long Seven;
+ property public final long ShiftLeft;
+ property public final long ShiftRight;
+ property public final long Six;
+ property public final long Slash;
+ property public final long Sleep;
+ property public final long SoftLeft;
+ property public final long SoftRight;
+ property public final long SoftSleep;
+ property public final long Spacebar;
+ property public final long Stem1;
+ property public final long Stem2;
+ property public final long Stem3;
+ property public final long StemPrimary;
+ property public final long SwitchCharset;
+ property public final long Symbol;
+ property public final long SystemNavigationDown;
+ property public final long SystemNavigationLeft;
+ property public final long SystemNavigationRight;
+ property public final long SystemNavigationUp;
+ property public final long T;
+ property public final long Tab;
+ property public final long Three;
+ property public final long ThumbsDown;
+ property public final long ThumbsUp;
+ property public final long Toggle2D3D;
+ property public final long Tv;
+ property public final long TvAntennaCable;
+ property public final long TvAudioDescription;
+ property public final long TvAudioDescriptionMixingVolumeDown;
+ property public final long TvAudioDescriptionMixingVolumeUp;
+ property public final long TvContentsMenu;
+ property public final long TvDataService;
+ property public final long TvInput;
+ property public final long TvInputComponent1;
+ property public final long TvInputComponent2;
+ property public final long TvInputComposite1;
+ property public final long TvInputComposite2;
+ property public final long TvInputHdmi1;
+ property public final long TvInputHdmi2;
+ property public final long TvInputHdmi3;
+ property public final long TvInputHdmi4;
+ property public final long TvInputVga1;
+ property public final long TvMediaContextMenu;
+ property public final long TvNetwork;
+ property public final long TvNumberEntry;
+ property public final long TvPower;
+ property public final long TvRadioService;
+ property public final long TvSatellite;
+ property public final long TvSatelliteBs;
+ property public final long TvSatelliteCs;
+ property public final long TvSatelliteService;
+ property public final long TvTeletext;
+ property public final long TvTerrestrialAnalog;
+ property public final long TvTerrestrialDigital;
+ property public final long TvTimerProgramming;
+ property public final long TvZoomMode;
+ property public final long Two;
+ property public final long U;
+ property public final long Unknown;
+ property public final long V;
+ property public final long VoiceAssist;
+ property public final long VolumeDown;
+ property public final long VolumeMute;
+ property public final long VolumeUp;
+ property public final long W;
+ property public final long WakeUp;
+ property public final long Window;
+ property public final long X;
+ property public final long Y;
+ property public final long Yen;
+ property public final long Z;
+ property public final long ZenkakuHankaru;
+ property public final long Zero;
+ property public final long ZoomIn;
+ property public final long ZoomOut;
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyEvent {
+ ctor public KeyEvent(android.view.KeyEvent nativeKeyEvent);
+ method public android.view.KeyEvent getNativeKeyEvent();
+ property public final android.view.KeyEvent nativeKeyEvent;
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyEventType {
+ field public static final androidx.compose.ui.input.key.KeyEventType.Companion Companion;
+ }
+
+ public static final class KeyEventType.Companion {
+ method public int getKeyDown();
+ method public int getKeyUp();
+ method public int getUnknown();
+ property public final int KeyDown;
+ property public final int KeyUp;
+ property public final int Unknown;
+ }
+
+ public final class KeyEvent_androidKt {
+ method public static long getKey(android.view.KeyEvent);
+ method public static int getType(android.view.KeyEvent);
+ method public static int getUtf16CodePoint(android.view.KeyEvent);
+ method public static boolean isAltPressed(android.view.KeyEvent);
+ method public static boolean isCtrlPressed(android.view.KeyEvent);
+ method public static boolean isMetaPressed(android.view.KeyEvent);
+ method public static boolean isShiftPressed(android.view.KeyEvent);
+ }
+
+ public final class KeyInputModifierKt {
+ method public static androidx.compose.ui.Modifier onKeyEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.key.KeyEvent,java.lang.Boolean> onKeyEvent);
+ method public static androidx.compose.ui.Modifier onPreviewKeyEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.key.KeyEvent,java.lang.Boolean> onPreviewKeyEvent);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface KeyInputModifierNode extends androidx.compose.ui.node.DelegatableNode {
+ method public boolean onKeyEvent(android.view.KeyEvent event);
+ method public boolean onPreKeyEvent(android.view.KeyEvent event);
+ }
+
+ public final class Key_androidKt {
+ method public static long Key(int nativeKeyCode);
+ method public static int getNativeKeyCode(long);
+ }
+
+}
+
+package androidx.compose.ui.input.nestedscroll {
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface NestedScrollConnection {
+ method public default suspend Object? onPostFling(long consumed, long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public default long onPostScroll(long consumed, long available, int source);
+ method public default suspend Object? onPreFling(long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public default long onPreScroll(long available, int source);
+ }
+
+ public final class NestedScrollDispatcher {
+ ctor public NestedScrollDispatcher();
+ method public suspend Object? dispatchPostFling(long consumed, long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public long dispatchPostScroll(long consumed, long available, int source);
+ method public suspend Object? dispatchPreFling(long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public long dispatchPreScroll(long available, int source);
+ method public kotlinx.coroutines.CoroutineScope getCoroutineScope();
+ property public final kotlinx.coroutines.CoroutineScope coroutineScope;
+ }
+
+ public final class NestedScrollModifierKt {
+ method public static androidx.compose.ui.Modifier nestedScroll(androidx.compose.ui.Modifier, androidx.compose.ui.input.nestedscroll.NestedScrollConnection connection, optional androidx.compose.ui.input.nestedscroll.NestedScrollDispatcher? dispatcher);
+ }
+
+ @kotlin.jvm.JvmInline public final value class NestedScrollSource {
+ field public static final androidx.compose.ui.input.nestedscroll.NestedScrollSource.Companion Companion;
+ }
+
+ public static final class NestedScrollSource.Companion {
+ method public int getDrag();
+ method public int getFling();
+ method @Deprecated public int getRelocate();
+ property public final int Drag;
+ property public final int Fling;
+ property @Deprecated public final int Relocate;
+ }
+
+}
+
+package androidx.compose.ui.input.pointer {
+
+ @kotlin.coroutines.RestrictsSuspension @kotlin.jvm.JvmDefaultWithCompatibility public interface AwaitPointerEventScope extends androidx.compose.ui.unit.Density {
+ method public suspend Object? awaitPointerEvent(optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerEvent>);
+ method public androidx.compose.ui.input.pointer.PointerEvent getCurrentEvent();
+ method public default long getExtendedTouchPadding();
+ method public long getSize();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public default suspend <T> Object? withTimeout(long timeMillis, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method public default suspend <T> Object? withTimeoutOrNull(long timeMillis, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ property public abstract androidx.compose.ui.input.pointer.PointerEvent currentEvent;
+ property public default long extendedTouchPadding;
+ property public abstract long size;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ }
+
+ @Deprecated public final class ConsumedData {
+ ctor @Deprecated public ConsumedData(optional @Deprecated boolean positionChange, optional @Deprecated boolean downChange);
+ method @Deprecated public boolean getDownChange();
+ method @Deprecated public boolean getPositionChange();
+ method @Deprecated public void setDownChange(boolean);
+ method @Deprecated public void setPositionChange(boolean);
+ property @Deprecated public final boolean downChange;
+ property @Deprecated public final boolean positionChange;
+ }
+
+ @androidx.compose.runtime.Immutable @androidx.compose.ui.ExperimentalComposeUiApi public final class HistoricalChange {
+ ctor public HistoricalChange(long uptimeMillis, long position);
+ method public long getPosition();
+ method public long getUptimeMillis();
+ property public final long position;
+ property public final long uptimeMillis;
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerButtons {
+ ctor public PointerButtons(int packedValue);
+ }
+
+ public final class PointerEvent {
+ ctor public PointerEvent(java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> changes);
+ method public java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> component1();
+ method public androidx.compose.ui.input.pointer.PointerEvent copy(java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> changes, android.view.MotionEvent? motionEvent);
+ method public int getButtons();
+ method public java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> getChanges();
+ method public int getKeyboardModifiers();
+ method public int getType();
+ property public final int buttons;
+ property public final java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> changes;
+ property public final int keyboardModifiers;
+ property public final int type;
+ }
+
+ public final class PointerEventKt {
+ method @Deprecated public static boolean anyChangeConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToDown(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToDownIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToUp(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToUpIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static void consumeAllChanges(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static void consumeDownChange(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static void consumePositionChange(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static int indexOfFirstPressed(int);
+ method public static int indexOfLastPressed(int);
+ method @Deprecated public static boolean isOutOfBounds(androidx.compose.ui.input.pointer.PointerInputChange, long size);
+ method public static boolean isOutOfBounds(androidx.compose.ui.input.pointer.PointerInputChange, long size, long extendedTouchPadding);
+ method public static boolean isPressed(int, int buttonIndex);
+ method public static long positionChange(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static boolean positionChangeConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static long positionChangeIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean positionChanged(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean positionChangedIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ }
+
+ public enum PointerEventPass {
+ method public static androidx.compose.ui.input.pointer.PointerEventPass valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.input.pointer.PointerEventPass[] values();
+ enum_constant public static final androidx.compose.ui.input.pointer.PointerEventPass Final;
+ enum_constant public static final androidx.compose.ui.input.pointer.PointerEventPass Initial;
+ enum_constant public static final androidx.compose.ui.input.pointer.PointerEventPass Main;
+ }
+
+ public final class PointerEventTimeoutCancellationException extends java.util.concurrent.CancellationException {
+ ctor public PointerEventTimeoutCancellationException(long time);
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerEventType {
+ field public static final androidx.compose.ui.input.pointer.PointerEventType.Companion Companion;
+ }
+
+ public static final class PointerEventType.Companion {
+ method public int getEnter();
+ method public int getExit();
+ method public int getMove();
+ method public int getPress();
+ method public int getRelease();
+ method public int getScroll();
+ method public int getUnknown();
+ property public final int Enter;
+ property public final int Exit;
+ property public final int Move;
+ property public final int Press;
+ property public final int Release;
+ property public final int Scroll;
+ property public final int Unknown;
+ }
+
+ public final class PointerEvent_androidKt {
+ method public static boolean getAreAnyPressed(int);
+ method public static int indexOfFirstPressed(int);
+ method public static int indexOfLastPressed(int);
+ method public static boolean isAltGraphPressed(int);
+ method public static boolean isAltPressed(int);
+ method public static boolean isBackPressed(int);
+ method public static boolean isCapsLockOn(int);
+ method public static boolean isCtrlPressed(int);
+ method public static boolean isForwardPressed(int);
+ method public static boolean isFunctionPressed(int);
+ method public static boolean isMetaPressed(int);
+ method public static boolean isNumLockOn(int);
+ method public static boolean isPressed(int, int buttonIndex);
+ method public static boolean isPrimaryPressed(int);
+ method public static boolean isScrollLockOn(int);
+ method public static boolean isSecondaryPressed(int);
+ method public static boolean isShiftPressed(int);
+ method public static boolean isSymPressed(int);
+ method public static boolean isTertiaryPressed(int);
+ }
+
+ @androidx.compose.runtime.Stable public interface PointerIcon {
+ field public static final androidx.compose.ui.input.pointer.PointerIcon.Companion Companion;
+ }
+
+ public static final class PointerIcon.Companion {
+ method public androidx.compose.ui.input.pointer.PointerIcon getCrosshair();
+ method public androidx.compose.ui.input.pointer.PointerIcon getDefault();
+ method public androidx.compose.ui.input.pointer.PointerIcon getHand();
+ method public androidx.compose.ui.input.pointer.PointerIcon getText();
+ property public final androidx.compose.ui.input.pointer.PointerIcon Crosshair;
+ property public final androidx.compose.ui.input.pointer.PointerIcon Default;
+ property public final androidx.compose.ui.input.pointer.PointerIcon Hand;
+ property public final androidx.compose.ui.input.pointer.PointerIcon Text;
+ }
+
+ public final class PointerIconKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier pointerHoverIcon(androidx.compose.ui.Modifier, androidx.compose.ui.input.pointer.PointerIcon icon, optional boolean overrideDescendants);
+ }
+
+ public final class PointerIcon_androidKt {
+ method public static androidx.compose.ui.input.pointer.PointerIcon PointerIcon(android.view.PointerIcon pointerIcon);
+ method public static androidx.compose.ui.input.pointer.PointerIcon PointerIcon(int pointerIconType);
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerId {
+ ctor public PointerId(long value);
+ method public long getValue();
+ property public final long value;
+ }
+
+ @androidx.compose.runtime.Immutable public final class PointerInputChange {
+ ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
+ ctor @androidx.compose.ui.ExperimentalComposeUiApi public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, float pressure, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
+ ctor @Deprecated public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ method public void consume();
+ method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
+ method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type, optional long scrollDelta);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, java.util.List<androidx.compose.ui.input.pointer.HistoricalChange> historical, optional long scrollDelta);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional float pressure, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, java.util.List<androidx.compose.ui.input.pointer.HistoricalChange> historical, optional long scrollDelta);
+ method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ method @Deprecated public androidx.compose.ui.input.pointer.ConsumedData getConsumed();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public java.util.List<androidx.compose.ui.input.pointer.HistoricalChange> getHistorical();
+ method public long getId();
+ method public long getPosition();
+ method public boolean getPressed();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public float getPressure();
+ method public long getPreviousPosition();
+ method public boolean getPreviousPressed();
+ method public long getPreviousUptimeMillis();
+ method public long getScrollDelta();
+ method public int getType();
+ method public long getUptimeMillis();
+ method public boolean isConsumed();
+ property @Deprecated public final androidx.compose.ui.input.pointer.ConsumedData consumed;
+ property @androidx.compose.ui.ExperimentalComposeUiApi public final java.util.List<androidx.compose.ui.input.pointer.HistoricalChange> historical;
+ property public final long id;
+ property public final boolean isConsumed;
+ property public final long position;
+ property public final boolean pressed;
+ property @androidx.compose.ui.ExperimentalComposeUiApi public final float pressure;
+ property public final long previousPosition;
+ property public final boolean previousPressed;
+ property public final long previousUptimeMillis;
+ property public final long scrollDelta;
+ property public final int type;
+ property public final long uptimeMillis;
+ }
+
+ public abstract class PointerInputFilter {
+ ctor public PointerInputFilter();
+ method public boolean getInterceptOutOfBoundsChildEvents();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public boolean getShareWithSiblings();
+ method public final long getSize();
+ method public abstract void onCancel();
+ method public abstract void onPointerEvent(androidx.compose.ui.input.pointer.PointerEvent pointerEvent, androidx.compose.ui.input.pointer.PointerEventPass pass, long bounds);
+ property public boolean interceptOutOfBoundsChildEvents;
+ property @androidx.compose.ui.ExperimentalComposeUiApi public boolean shareWithSiblings;
+ property public final long size;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PointerInputModifier extends androidx.compose.ui.Modifier.Element {
+ method public androidx.compose.ui.input.pointer.PointerInputFilter getPointerInputFilter();
+ property public abstract androidx.compose.ui.input.pointer.PointerInputFilter pointerInputFilter;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PointerInputScope extends androidx.compose.ui.unit.Density {
+ method public suspend <R> Object? awaitPointerEventScope(kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ method public default long getExtendedTouchPadding();
+ method public default boolean getInterceptOutOfBoundsChildEvents();
+ method public long getSize();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public default void setInterceptOutOfBoundsChildEvents(boolean);
+ property public default long extendedTouchPadding;
+ property public default boolean interceptOutOfBoundsChildEvents;
+ property public abstract long size;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ }
+
+ public final class PointerInteropFilter_androidKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier motionEventSpy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super android.view.MotionEvent,kotlin.Unit> watcher);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier pointerInteropFilter(androidx.compose.ui.Modifier, optional androidx.compose.ui.input.pointer.RequestDisallowInterceptTouchEvent? requestDisallowInterceptTouchEvent, kotlin.jvm.functions.Function1<? super android.view.MotionEvent,java.lang.Boolean> onTouchEvent);
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerKeyboardModifiers {
+ ctor public PointerKeyboardModifiers(int packedValue);
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerType {
+ field public static final androidx.compose.ui.input.pointer.PointerType.Companion Companion;
+ }
+
+ public static final class PointerType.Companion {
+ method public int getEraser();
+ method public int getMouse();
+ method public int getStylus();
+ method public int getTouch();
+ method public int getUnknown();
+ property public final int Eraser;
+ property public final int Mouse;
+ property public final int Stylus;
+ property public final int Touch;
+ property public final int Unknown;
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public final class RequestDisallowInterceptTouchEvent implements kotlin.jvm.functions.Function1<java.lang.Boolean,kotlin.Unit> {
+ ctor public RequestDisallowInterceptTouchEvent();
+ method public void invoke(boolean disallowIntercept);
+ }
+
+ public final class SuspendingPointerInputFilterKt {
+ method @Deprecated public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ }
+
+}
+
+package androidx.compose.ui.input.pointer.util {
+
+ public final class VelocityTracker {
+ ctor public VelocityTracker();
+ method public void addPosition(long timeMillis, long position);
+ method public long calculateVelocity();
+ method public void resetTracking();
+ }
+
+ public final class VelocityTracker1D {
+ ctor public VelocityTracker1D(boolean isDataDifferential);
+ method public void addDataPoint(long timeMillis, float dataPoint);
+ method public float calculateVelocity();
+ method public boolean isDataDifferential();
+ method public void resetTracking();
+ property public final boolean isDataDifferential;
+ }
+
+ public final class VelocityTrackerKt {
+ method public static void addPointerInputChange(androidx.compose.ui.input.pointer.util.VelocityTracker, androidx.compose.ui.input.pointer.PointerInputChange event);
+ }
+
+}
+
+package androidx.compose.ui.input.rotary {
+
+ public final class RotaryInputModifierKt {
+ method public static androidx.compose.ui.Modifier onPreRotaryScrollEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.rotary.RotaryScrollEvent,java.lang.Boolean> onPreRotaryScrollEvent);
+ method public static androidx.compose.ui.Modifier onRotaryScrollEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.rotary.RotaryScrollEvent,java.lang.Boolean> onRotaryScrollEvent);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface RotaryInputModifierNode extends androidx.compose.ui.node.DelegatableNode {
+ method public boolean onPreRotaryScrollEvent(androidx.compose.ui.input.rotary.RotaryScrollEvent event);
+ method public boolean onRotaryScrollEvent(androidx.compose.ui.input.rotary.RotaryScrollEvent event);
+ }
+
+ public final class RotaryScrollEvent {
+ method public float getHorizontalScrollPixels();
+ method public long getUptimeMillis();
+ method public float getVerticalScrollPixels();
+ property public final float horizontalScrollPixels;
+ property public final long uptimeMillis;
+ property public final float verticalScrollPixels;
+ }
+
+}
+
+package androidx.compose.ui.layout {
+
+ @androidx.compose.runtime.Immutable public abstract sealed class AlignmentLine {
+ field public static final androidx.compose.ui.layout.AlignmentLine.Companion Companion;
+ field public static final int Unspecified = -2147483648; // 0x80000000
+ }
+
+ public static final class AlignmentLine.Companion {
+ }
+
+ public final class AlignmentLineKt {
+ method public static androidx.compose.ui.layout.HorizontalAlignmentLine getFirstBaseline();
+ method public static androidx.compose.ui.layout.HorizontalAlignmentLine getLastBaseline();
+ property public static final androidx.compose.ui.layout.HorizontalAlignmentLine FirstBaseline;
+ property public static final androidx.compose.ui.layout.HorizontalAlignmentLine LastBaseline;
+ }
+
+ public interface BeyondBoundsLayout {
+ method public <T> T? layout(int direction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.BeyondBoundsLayout.BeyondBoundsScope,? extends T> block);
+ }
+
+ public static interface BeyondBoundsLayout.BeyondBoundsScope {
+ method public boolean getHasMoreContent();
+ property public abstract boolean hasMoreContent;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class BeyondBoundsLayout.LayoutDirection {
+ field public static final androidx.compose.ui.layout.BeyondBoundsLayout.LayoutDirection.Companion Companion;
+ }
+
+ public static final class BeyondBoundsLayout.LayoutDirection.Companion {
+ method public int getAbove();
+ method public int getAfter();
+ method public int getBefore();
+ method public int getBelow();
+ method public int getLeft();
+ method public int getRight();
+ property public final int Above;
+ property public final int After;
+ property public final int Before;
+ property public final int Below;
+ property public final int Left;
+ property public final int Right;
+ }
+
+ public final class BeyondBoundsLayoutKt {
+ method public static androidx.compose.ui.modifier.ProvidableModifierLocal<androidx.compose.ui.layout.BeyondBoundsLayout> getModifierLocalBeyondBoundsLayout();
+ property public static final androidx.compose.ui.modifier.ProvidableModifierLocal<androidx.compose.ui.layout.BeyondBoundsLayout> ModifierLocalBeyondBoundsLayout;
+ }
+
+ @androidx.compose.runtime.Stable public interface ContentScale {
+ method public long computeScaleFactor(long srcSize, long dstSize);
+ field public static final androidx.compose.ui.layout.ContentScale.Companion Companion;
+ }
+
+ public static final class ContentScale.Companion {
+ method public androidx.compose.ui.layout.ContentScale getCrop();
+ method public androidx.compose.ui.layout.ContentScale getFillBounds();
+ method public androidx.compose.ui.layout.ContentScale getFillHeight();
+ method public androidx.compose.ui.layout.ContentScale getFillWidth();
+ method public androidx.compose.ui.layout.ContentScale getFit();
+ method public androidx.compose.ui.layout.ContentScale getInside();
+ method public androidx.compose.ui.layout.FixedScale getNone();
+ property public final androidx.compose.ui.layout.ContentScale Crop;
+ property public final androidx.compose.ui.layout.ContentScale FillBounds;
+ property public final androidx.compose.ui.layout.ContentScale FillHeight;
+ property public final androidx.compose.ui.layout.ContentScale FillWidth;
+ property public final androidx.compose.ui.layout.ContentScale Fit;
+ property public final androidx.compose.ui.layout.ContentScale Inside;
+ property public final androidx.compose.ui.layout.FixedScale None;
+ }
+
+ @androidx.compose.runtime.Immutable public final class FixedScale implements androidx.compose.ui.layout.ContentScale {
+ ctor public FixedScale(float value);
+ method public float component1();
+ method public long computeScaleFactor(long srcSize, long dstSize);
+ method public androidx.compose.ui.layout.FixedScale copy(float value);
+ method public float getValue();
+ property public final float value;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface GraphicLayerInfo {
+ method public long getLayerId();
+ method public default long getOwnerViewId();
+ property public abstract long layerId;
+ property public default long ownerViewId;
+ }
+
+ public final class HorizontalAlignmentLine extends androidx.compose.ui.layout.AlignmentLine {
+ ctor public HorizontalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
+ }
+
+ public interface IntrinsicMeasurable {
+ method public Object? getParentData();
+ method public int maxIntrinsicHeight(int width);
+ method public int maxIntrinsicWidth(int height);
+ method public int minIntrinsicHeight(int width);
+ method public int minIntrinsicWidth(int height);
+ property public abstract Object? parentData;
+ }
+
+ public interface IntrinsicMeasureScope extends androidx.compose.ui.unit.Density {
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface LayoutCoordinates {
+ method public operator int get(androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public androidx.compose.ui.layout.LayoutCoordinates? getParentCoordinates();
+ method public androidx.compose.ui.layout.LayoutCoordinates? getParentLayoutCoordinates();
+ method public java.util.Set<androidx.compose.ui.layout.AlignmentLine> getProvidedAlignmentLines();
+ method public long getSize();
+ method public boolean isAttached();
+ method public androidx.compose.ui.geometry.Rect localBoundingBoxOf(androidx.compose.ui.layout.LayoutCoordinates sourceCoordinates, optional boolean clipBounds);
+ method public long localPositionOf(androidx.compose.ui.layout.LayoutCoordinates sourceCoordinates, long relativeToSource);
+ method public long localToRoot(long relativeToLocal);
+ method public long localToWindow(long relativeToLocal);
+ method public default void transformFrom(androidx.compose.ui.layout.LayoutCoordinates sourceCoordinates, float[] matrix);
+ method public long windowToLocal(long relativeToWindow);
+ property public abstract boolean isAttached;
+ property public abstract androidx.compose.ui.layout.LayoutCoordinates? parentCoordinates;
+ property public abstract androidx.compose.ui.layout.LayoutCoordinates? parentLayoutCoordinates;
+ property public abstract java.util.Set<androidx.compose.ui.layout.AlignmentLine> providedAlignmentLines;
+ property public abstract long size;
+ }
+
+ public final class LayoutCoordinatesKt {
+ method public static androidx.compose.ui.geometry.Rect boundsInParent(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static androidx.compose.ui.geometry.Rect boundsInRoot(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static androidx.compose.ui.geometry.Rect boundsInWindow(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static androidx.compose.ui.layout.LayoutCoordinates findRootCoordinates(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static long positionInParent(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static long positionInRoot(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static long positionInWindow(androidx.compose.ui.layout.LayoutCoordinates);
+ }
+
+ public final class LayoutIdKt {
+ method public static Object? getLayoutId(androidx.compose.ui.layout.Measurable);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier layoutId(androidx.compose.ui.Modifier, Object layoutId);
+ }
+
+ public interface LayoutIdParentData {
+ method public Object getLayoutId();
+ property public abstract Object layoutId;
+ }
+
+ public interface LayoutInfo {
+ method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public int getHeight();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public java.util.List<androidx.compose.ui.layout.ModifierInfo> getModifierInfo();
+ method public androidx.compose.ui.layout.LayoutInfo? getParentInfo();
+ method public int getSemanticsId();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public int getWidth();
+ method public boolean isAttached();
+ method public boolean isPlaced();
+ property public abstract androidx.compose.ui.layout.LayoutCoordinates coordinates;
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract int height;
+ property public abstract boolean isAttached;
+ property public abstract boolean isPlaced;
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public abstract androidx.compose.ui.layout.LayoutInfo? parentInfo;
+ property public abstract int semanticsId;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ property public abstract int width;
+ }
+
+ public final class LayoutKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> content, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(java.util.List<? extends kotlin.jvm.functions.Function0<kotlin.Unit>> contents, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MultiContentMeasurePolicy measurePolicy);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void MultiMeasureLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface LayoutModifier extends androidx.compose.ui.Modifier.Element {
+ method public default int maxIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int width);
+ method public default int maxIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int height);
+ method public androidx.compose.ui.layout.MeasureResult measure(androidx.compose.ui.layout.MeasureScope, androidx.compose.ui.layout.Measurable measurable, long constraints);
+ method public default int minIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int width);
+ method public default int minIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int height);
+ }
+
+ public final class LayoutModifierKt {
+ method public static androidx.compose.ui.Modifier layout(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function3<? super androidx.compose.ui.layout.MeasureScope,? super androidx.compose.ui.layout.Measurable,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measure);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public sealed interface LookaheadLayoutCoordinates extends androidx.compose.ui.layout.LayoutCoordinates {
+ method public long localLookaheadPositionOf(androidx.compose.ui.layout.LookaheadLayoutCoordinates sourceCoordinates, optional long relativeToSource);
+ }
+
+ public final class LookaheadLayoutKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.ExperimentalComposeUiApi @androidx.compose.ui.UiComposable public static void LookaheadLayout(kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LookaheadLayoutScope,kotlin.Unit> content, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface LookaheadLayoutScope {
+ method public androidx.compose.ui.Modifier intermediateLayout(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function4<? super androidx.compose.ui.layout.MeasureScope,? super androidx.compose.ui.layout.Measurable,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.IntSize,? extends androidx.compose.ui.layout.MeasureResult> measure);
+ method public androidx.compose.ui.Modifier onPlaced(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.LookaheadLayoutCoordinates,? super androidx.compose.ui.layout.LookaheadLayoutCoordinates,kotlin.Unit> onPlaced);
+ }
+
+ public interface Measurable extends androidx.compose.ui.layout.IntrinsicMeasurable {
+ method public androidx.compose.ui.layout.Placeable measure(long constraints);
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public fun interface MeasurePolicy {
+ method public default int maxIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int width);
+ method public default int maxIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int height);
+ method public androidx.compose.ui.layout.MeasureResult measure(androidx.compose.ui.layout.MeasureScope, java.util.List<? extends androidx.compose.ui.layout.Measurable> measurables, long constraints);
+ method public default int minIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int width);
+ method public default int minIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int height);
+ }
+
+ public interface MeasureResult {
+ method public java.util.Map<androidx.compose.ui.layout.AlignmentLine,java.lang.Integer> getAlignmentLines();
+ method public int getHeight();
+ method public int getWidth();
+ method public void placeChildren();
+ property public abstract java.util.Map<androidx.compose.ui.layout.AlignmentLine,java.lang.Integer> alignmentLines;
+ property public abstract int height;
+ property public abstract int width;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface MeasureScope extends androidx.compose.ui.layout.IntrinsicMeasureScope {
+ method public default androidx.compose.ui.layout.MeasureResult layout(int width, int height, optional java.util.Map<androidx.compose.ui.layout.AlignmentLine,java.lang.Integer> alignmentLines, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Placeable.PlacementScope,kotlin.Unit> placementBlock);
+ }
+
+ public interface Measured {
+ method public operator int get(androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public int getMeasuredHeight();
+ method public int getMeasuredWidth();
+ method public default Object? getParentData();
+ property public abstract int measuredHeight;
+ property public abstract int measuredWidth;
+ property public default Object? parentData;
+ }
+
+ public final class ModifierInfo {
+ ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, optional Object? extra);
+ method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
+ method public Object? getExtra();
+ method public androidx.compose.ui.Modifier getModifier();
+ property public final androidx.compose.ui.layout.LayoutCoordinates coordinates;
+ property public final Object? extra;
+ property public final androidx.compose.ui.Modifier modifier;
+ }
+
+ @androidx.compose.runtime.Stable public fun interface MultiContentMeasurePolicy {
+ method public default int maxIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int width);
+ method public default int maxIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int height);
+ method public androidx.compose.ui.layout.MeasureResult measure(androidx.compose.ui.layout.MeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.Measurable>> measurables, long constraints);
+ method public default int minIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int width);
+ method public default int minIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int height);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface OnGloballyPositionedModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onGloballyPositioned(androidx.compose.ui.layout.LayoutCoordinates coordinates);
+ }
+
+ public final class OnGloballyPositionedModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onGloballyPositioned(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,kotlin.Unit> onGloballyPositioned);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface OnPlacedModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onPlaced(androidx.compose.ui.layout.LayoutCoordinates coordinates);
+ }
+
+ public final class OnPlacedModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onPlaced(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,kotlin.Unit> onPlaced);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface OnRemeasuredModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onRemeasured(long size);
+ }
+
+ public final class OnRemeasuredModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onSizeChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit> onSizeChanged);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ParentDataModifier extends androidx.compose.ui.Modifier.Element {
+ method public Object? modifyParentData(androidx.compose.ui.unit.Density, Object? parentData);
+ }
+
+ @androidx.compose.runtime.Stable public interface PinnableContainer {
+ method public androidx.compose.ui.layout.PinnableContainer.PinnedHandle pin();
+ }
+
+ public static fun interface PinnableContainer.PinnedHandle {
+ method public void release();
+ }
+
+ public final class PinnableContainerKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.layout.PinnableContainer> getLocalPinnableContainer();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.layout.PinnableContainer> LocalPinnableContainer;
+ }
+
+ public abstract class Placeable implements androidx.compose.ui.layout.Measured {
+ ctor public Placeable();
+ method protected final long getApparentToRealOffset();
+ method public final int getHeight();
+ method public int getMeasuredHeight();
+ method protected final long getMeasuredSize();
+ method public int getMeasuredWidth();
+ method protected final long getMeasurementConstraints();
+ method public final int getWidth();
+ method protected abstract void placeAt(long position, float zIndex, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit>? layerBlock);
+ method protected final void setMeasuredSize(long);
+ method protected final void setMeasurementConstraints(long);
+ property protected final long apparentToRealOffset;
+ property public final int height;
+ property public int measuredHeight;
+ property protected final long measuredSize;
+ property public int measuredWidth;
+ property protected final long measurementConstraints;
+ property public final int width;
+ }
+
+ public abstract static class Placeable.PlacementScope {
+ ctor public Placeable.PlacementScope();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public androidx.compose.ui.layout.LayoutCoordinates? getCoordinates();
+ method protected abstract androidx.compose.ui.unit.LayoutDirection getParentLayoutDirection();
+ method protected abstract int getParentWidth();
+ method public final void place(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
+ method public final void place(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
+ method public final void placeRelative(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
+ method public final void placeRelative(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
+ method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ property @androidx.compose.ui.ExperimentalComposeUiApi public androidx.compose.ui.layout.LayoutCoordinates? coordinates;
+ property protected abstract androidx.compose.ui.unit.LayoutDirection parentLayoutDirection;
+ property protected abstract int parentWidth;
+ }
+
+ @Deprecated @androidx.compose.ui.ExperimentalComposeUiApi @kotlin.jvm.JvmDefaultWithCompatibility public interface RelocationModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public androidx.compose.ui.geometry.Rect computeDestination(androidx.compose.ui.geometry.Rect source, androidx.compose.ui.layout.LayoutCoordinates layoutCoordinates);
+ method @Deprecated public suspend Object? performRelocation(androidx.compose.ui.geometry.Rect source, androidx.compose.ui.geometry.Rect destination, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class RelocationModifierKt {
+ method @Deprecated @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier onRelocationRequest(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.geometry.Rect,? super androidx.compose.ui.layout.LayoutCoordinates,androidx.compose.ui.geometry.Rect> onProvideDestination, kotlin.jvm.functions.Function3<? super androidx.compose.ui.geometry.Rect,? super androidx.compose.ui.geometry.Rect,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onPerformRelocation);
+ }
+
+ @Deprecated @androidx.compose.ui.ExperimentalComposeUiApi public final class RelocationRequester {
+ ctor @Deprecated public RelocationRequester();
+ method @Deprecated public suspend Object? bringIntoView(optional androidx.compose.ui.geometry.Rect? rect, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class RelocationRequesterModifierKt {
+ method @Deprecated @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier relocationRequester(androidx.compose.ui.Modifier, Object relocationRequester);
+ }
+
+ public interface Remeasurement {
+ method public void forceRemeasure();
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface RemeasurementModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onRemeasurementAvailable(androidx.compose.ui.layout.Remeasurement remeasurement);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ScaleFactor {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float scaleX, optional float scaleY);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getScaleX();
+ method public float getScaleY();
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ property @androidx.compose.runtime.Stable public final float scaleX;
+ property @androidx.compose.runtime.Stable public final float scaleY;
+ field public static final androidx.compose.ui.layout.ScaleFactor.Companion Companion;
+ }
+
+ public static final class ScaleFactor.Companion {
+ method public long getUnspecified();
+ property public final long Unspecified;
+ }
+
+ public final class ScaleFactorKt {
+ method @androidx.compose.runtime.Stable public static long ScaleFactor(float scaleX, float scaleY);
+ method @androidx.compose.runtime.Stable public static operator long div(long, long scaleFactor);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.layout.ScaleFactor> block);
+ method @androidx.compose.runtime.Stable public static operator long times(long, long scaleFactor);
+ method @androidx.compose.runtime.Stable public static operator long times(long, long size);
+ }
+
+ public final class SubcomposeLayoutKt {
+ method @androidx.compose.runtime.Composable public static void SubcomposeLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void SubcomposeLayout(androidx.compose.ui.layout.SubcomposeLayoutState state, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
+ method public static androidx.compose.ui.layout.SubcomposeSlotReusePolicy SubcomposeSlotReusePolicy(int maxSlotsToRetainForReuse);
+ }
+
+ public final class SubcomposeLayoutState {
+ ctor public SubcomposeLayoutState(androidx.compose.ui.layout.SubcomposeSlotReusePolicy slotReusePolicy);
+ ctor public SubcomposeLayoutState();
+ ctor @Deprecated public SubcomposeLayoutState(int maxSlotsToRetainForReuse);
+ method public androidx.compose.ui.layout.SubcomposeLayoutState.PrecomposedSlotHandle precompose(Object? slotId, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public static interface SubcomposeLayoutState.PrecomposedSlotHandle {
+ method public void dispose();
+ method public default int getPlaceablesCount();
+ method public default void premeasure(int index, long constraints);
+ property public default int placeablesCount;
+ }
+
+ public interface SubcomposeMeasureScope extends androidx.compose.ui.layout.MeasureScope {
+ method public java.util.List<androidx.compose.ui.layout.Measurable> subcompose(Object? slotId, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public interface SubcomposeSlotReusePolicy {
+ method public boolean areCompatible(Object? slotId, Object? reusableSlotId);
+ method public void getSlotsToRetain(androidx.compose.ui.layout.SubcomposeSlotReusePolicy.SlotIdsSet slotIds);
+ }
+
+ public static final class SubcomposeSlotReusePolicy.SlotIdsSet implements java.util.Collection<java.lang.Object> kotlin.jvm.internal.markers.KMappedMarker {
+ method public void clear();
+ method public java.util.Iterator<java.lang.Object> iterator();
+ method public boolean remove(Object? slotId);
+ method public boolean removeAll(java.util.Collection<?> slotIds);
+ method public boolean removeAll(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
+ method public boolean retainAll(java.util.Collection<?> slotIds);
+ method public boolean retainAll(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
+ }
+
+ public final class TestModifierUpdaterKt {
+ }
+
+ public final class VerticalAlignmentLine extends androidx.compose.ui.layout.AlignmentLine {
+ ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
+ }
+
+}
+
+package androidx.compose.ui.modifier {
+
+ @androidx.compose.runtime.Stable public abstract sealed class ModifierLocal<T> {
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface ModifierLocalConsumer extends androidx.compose.ui.Modifier.Element {
+ method public void onModifierLocalsUpdated(androidx.compose.ui.modifier.ModifierLocalReadScope scope);
+ }
+
+ public final class ModifierLocalConsumerKt {
+ method @androidx.compose.runtime.Stable @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier modifierLocalConsumer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.modifier.ModifierLocalReadScope,kotlin.Unit> consumer);
+ }
+
+ public final class ModifierLocalKt {
+ method public static <T> androidx.compose.ui.modifier.ProvidableModifierLocal<T> modifierLocalOf(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public abstract sealed class ModifierLocalMap {
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface ModifierLocalNode extends androidx.compose.ui.modifier.ModifierLocalReadScope androidx.compose.ui.node.DelegatableNode {
+ method public default <T> T! getCurrent(androidx.compose.ui.modifier.ModifierLocal<T>);
+ method public default androidx.compose.ui.modifier.ModifierLocalMap getProvidedValues();
+ method public default <T> void provide(androidx.compose.ui.modifier.ModifierLocal<T> key, T? value);
+ property public default androidx.compose.ui.modifier.ModifierLocalMap providedValues;
+ }
+
+ public final class ModifierLocalNodeKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal<T> key);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(kotlin.Pair<? extends androidx.compose.ui.modifier.ModifierLocal<T>,? extends T> entry);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal<?>... keys);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(kotlin.Pair<? extends androidx.compose.ui.modifier.ModifierLocal<?>,?>... entries);
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface ModifierLocalProvider<T> extends androidx.compose.ui.Modifier.Element {
+ method public androidx.compose.ui.modifier.ProvidableModifierLocal<T> getKey();
+ method public T! getValue();
+ property public abstract androidx.compose.ui.modifier.ProvidableModifierLocal<T> key;
+ property public abstract T! value;
+ }
+
+ public final class ModifierLocalProviderKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static <T> androidx.compose.ui.Modifier modifierLocalProvider(androidx.compose.ui.Modifier, androidx.compose.ui.modifier.ProvidableModifierLocal<T> key, kotlin.jvm.functions.Function0<? extends T> value);
+ }
+
+ public interface ModifierLocalReadScope {
+ method public <T> T! getCurrent(androidx.compose.ui.modifier.ModifierLocal<T>);
+ }
+
+ @androidx.compose.runtime.Stable public final class ProvidableModifierLocal<T> extends androidx.compose.ui.modifier.ModifierLocal<T> {
+ ctor public ProvidableModifierLocal(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ }
+
+}
+
+package androidx.compose.ui.node {
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface DelegatableNode {
+ method public androidx.compose.ui.Modifier.Node getNode();
+ property public abstract androidx.compose.ui.Modifier.Node node;
+ }
+
+ public final class DelegatableNodeKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static void invalidateSubtree(androidx.compose.ui.node.DelegatableNode);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public abstract class DelegatingNode extends androidx.compose.ui.Modifier.Node {
+ ctor public DelegatingNode();
+ method public final <T extends androidx.compose.ui.Modifier.Node> T delegated(kotlin.jvm.functions.Function0<? extends T> fn);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface DrawModifierNode extends androidx.compose.ui.node.DelegatableNode {
+ method public void draw(androidx.compose.ui.graphics.drawscope.ContentDrawScope);
+ method public default void onMeasureResultChanged();
+ }
+
+ public final class DrawModifierNodeKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static void invalidateDraw(androidx.compose.ui.node.DrawModifierNode);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface GlobalPositionAwareModifierNode extends androidx.compose.ui.node.DelegatableNode {
+ method public void onGloballyPositioned(androidx.compose.ui.layout.LayoutCoordinates coordinates);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface IntermediateLayoutModifierNode extends androidx.compose.ui.node.LayoutModifierNode {
+ method public long getTargetSize();
+ method public void setTargetSize(long);
+ property public abstract long targetSize;
+ }
+
+ @kotlin.RequiresOptIn(message="This API is internal to library.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY_SETTER}) public @interface InternalCoreApi {
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface LayoutAwareModifierNode extends androidx.compose.ui.node.DelegatableNode {
+ method public default void onLookaheadPlaced(androidx.compose.ui.layout.LookaheadLayoutCoordinates coordinates);
+ method public default void onPlaced(androidx.compose.ui.layout.LayoutCoordinates coordinates);
+ method public default void onRemeasured(long size);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface LayoutModifierNode extends androidx.compose.ui.layout.Remeasurement androidx.compose.ui.node.DelegatableNode {
+ method public default void forceRemeasure();
+ method public default int maxIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int width);
+ method public default int maxIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int height);
+ method public androidx.compose.ui.layout.MeasureResult measure(androidx.compose.ui.layout.MeasureScope, androidx.compose.ui.layout.Measurable measurable, long constraints);
+ method public default int minIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int width);
+ method public default int minIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int height);
+ }
+
+ public final class LayoutModifierNodeKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static void invalidateLayer(androidx.compose.ui.node.LayoutModifierNode);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static void invalidateLayout(androidx.compose.ui.node.LayoutModifierNode);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static void invalidateMeasurements(androidx.compose.ui.node.LayoutModifierNode);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public abstract class ModifierNodeElement<N extends androidx.compose.ui.Modifier.Node> implements androidx.compose.ui.platform.InspectableValue androidx.compose.ui.Modifier.Element {
+ ctor public ModifierNodeElement();
+ method public abstract N create();
+ method public abstract boolean equals(Object? other);
+ method public boolean getAutoInvalidate();
+ method public final kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> getInspectableElements();
+ method public final String? getNameFallback();
+ method public final Object? getValueOverride();
+ method public abstract int hashCode();
+ method public void inspectableProperties(androidx.compose.ui.platform.InspectorInfo);
+ method public abstract N update(N node);
+ property public boolean autoInvalidate;
+ property public final kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> inspectableElements;
+ property public final String? nameFallback;
+ property public final Object? valueOverride;
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface ObserverNode extends androidx.compose.ui.node.DelegatableNode {
+ method public void onObservedReadsChanged();
+ }
+
+ public final class ObserverNodeKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static <T extends androidx.compose.ui.Modifier.Node & androidx.compose.ui.node.ObserverNode> void observeReads(T, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface ParentDataModifierNode extends androidx.compose.ui.node.DelegatableNode {
+ method public Object? modifyParentData(androidx.compose.ui.unit.Density, Object? parentData);
+ }
+
+ public final class ParentDataModifierNodeKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static void invalidateParentData(androidx.compose.ui.node.ParentDataModifierNode);
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface PointerInputModifierNode extends androidx.compose.ui.node.DelegatableNode {
+ method public default boolean interceptOutOfBoundsChildEvents();
+ method public void onCancelPointerInput();
+ method public void onPointerEvent(androidx.compose.ui.input.pointer.PointerEvent pointerEvent, androidx.compose.ui.input.pointer.PointerEventPass pass, long bounds);
+ method public default boolean sharePointerInputWithSiblings();
+ }
+
+ public final class Ref<T> {
+ ctor public Ref();
+ method public T? getValue();
+ method public void setValue(T?);
+ property public final T? value;
+ }
+
+ public interface RootForTest {
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.semantics.SemanticsOwner getSemanticsOwner();
+ method public androidx.compose.ui.text.input.TextInputService getTextInputService();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public default void measureAndLayoutForTest();
+ method public boolean sendKeyEvent(android.view.KeyEvent keyEvent);
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract androidx.compose.ui.semantics.SemanticsOwner semanticsOwner;
+ property public abstract androidx.compose.ui.text.input.TextInputService textInputService;
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public interface SemanticsModifierNode extends androidx.compose.ui.node.DelegatableNode {
+ method public androidx.compose.ui.semantics.SemanticsConfiguration getSemanticsConfiguration();
+ property public abstract androidx.compose.ui.semantics.SemanticsConfiguration semanticsConfiguration;
+ }
+
+ public final class SemanticsModifierNodeKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.semantics.SemanticsConfiguration collapsedSemanticsConfiguration(androidx.compose.ui.node.SemanticsModifierNode);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static void invalidateSemantics(androidx.compose.ui.node.SemanticsModifierNode);
+ }
+
+}
+
+package androidx.compose.ui.platform {
+
+ public abstract class AbstractComposeView extends android.view.ViewGroup {
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public AbstractComposeView(android.content.Context context);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public abstract void Content();
+ method public final void createComposition();
+ method public final void disposeComposition();
+ method public final boolean getHasComposition();
+ method protected boolean getShouldCreateCompositionOnAttachedToWindow();
+ method public final boolean getShowLayoutBounds();
+ method protected final void onLayout(boolean changed, int left, int top, int right, int bottom);
+ method protected final void onMeasure(int widthMeasureSpec, int heightMeasureSpec);
+ method public final void setParentCompositionContext(androidx.compose.runtime.CompositionContext? parent);
+ method public final void setShowLayoutBounds(boolean);
+ method public final void setViewCompositionStrategy(androidx.compose.ui.platform.ViewCompositionStrategy strategy);
+ property public final boolean hasComposition;
+ property protected boolean shouldCreateCompositionOnAttachedToWindow;
+ property public final boolean showLayoutBounds;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface AccessibilityManager {
+ method public long calculateRecommendedTimeoutMillis(long originalTimeoutMillis, optional boolean containsIcons, optional boolean containsText, optional boolean containsControls);
+ }
+
+ public final class AndroidComposeView_androidKt {
+ }
+
+ public final class AndroidCompositionLocals_androidKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<android.content.res.Configuration> getLocalConfiguration();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<android.content.Context> getLocalContext();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.lifecycle.LifecycleOwner> getLocalLifecycleOwner();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.savedstate.SavedStateRegistryOwner> getLocalSavedStateRegistryOwner();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<android.view.View> getLocalView();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<android.content.res.Configuration> LocalConfiguration;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<android.content.Context> LocalContext;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.lifecycle.LifecycleOwner> LocalLifecycleOwner;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.savedstate.SavedStateRegistryOwner> LocalSavedStateRegistryOwner;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<android.view.View> LocalView;
+ }
+
+ public final class AndroidUiDispatcher extends kotlinx.coroutines.CoroutineDispatcher {
+ method public void dispatch(kotlin.coroutines.CoroutineContext context, Runnable block);
+ method public android.view.Choreographer getChoreographer();
+ method public androidx.compose.runtime.MonotonicFrameClock getFrameClock();
+ property public final android.view.Choreographer choreographer;
+ property public final androidx.compose.runtime.MonotonicFrameClock frameClock;
+ field public static final androidx.compose.ui.platform.AndroidUiDispatcher.Companion Companion;
+ }
+
+ public static final class AndroidUiDispatcher.Companion {
+ method public kotlin.coroutines.CoroutineContext getCurrentThread();
+ method public kotlin.coroutines.CoroutineContext getMain();
+ property public final kotlin.coroutines.CoroutineContext CurrentThread;
+ property public final kotlin.coroutines.CoroutineContext Main;
+ }
+
+ public final class AndroidUiFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
+ ctor public AndroidUiFrameClock(android.view.Choreographer choreographer);
+ method public android.view.Choreographer getChoreographer();
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public final android.view.Choreographer choreographer;
+ }
+
+ public final class AndroidUriHandler implements androidx.compose.ui.platform.UriHandler {
+ ctor public AndroidUriHandler(android.content.Context context);
+ method public void openUri(String uri);
+ }
+
+ public final class AndroidViewConfiguration implements androidx.compose.ui.platform.ViewConfiguration {
+ ctor public AndroidViewConfiguration(android.view.ViewConfiguration viewConfiguration);
+ method public long getDoubleTapMinTimeMillis();
+ method public long getDoubleTapTimeoutMillis();
+ method public long getLongPressTimeoutMillis();
+ method public float getTouchSlop();
+ property public long doubleTapMinTimeMillis;
+ property public long doubleTapTimeoutMillis;
+ property public long longPressTimeoutMillis;
+ property public float touchSlop;
+ }
+
+ public interface ClipboardManager {
+ method public androidx.compose.ui.text.AnnotatedString? getText();
+ method public default boolean hasText();
+ method public void setText(androidx.compose.ui.text.AnnotatedString annotatedString);
+ }
+
+ public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public ComposeView(android.content.Context context);
+ method @androidx.compose.runtime.Composable public void Content();
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ property protected boolean shouldCreateCompositionOnAttachedToWindow;
+ }
+
+ public final class CompositionLocalsKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.AccessibilityManager> getLocalAccessibilityManager();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.autofill.Autofill> getLocalAutofill();
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.autofill.AutofillTree> getLocalAutofillTree();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ClipboardManager> getLocalClipboardManager();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Density> getLocalDensity();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.focus.FocusManager> getLocalFocusManager();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.font.FontFamily.Resolver> getLocalFontFamilyResolver();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.hapticfeedback.HapticFeedback> getLocalHapticFeedback();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.input.InputModeManager> getLocalInputModeManager();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.LayoutDirection> getLocalLayoutDirection();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.input.TextInputService> getLocalTextInputService();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.TextToolbar> getLocalTextToolbar();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.UriHandler> getLocalUriHandler();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ViewConfiguration> getLocalViewConfiguration();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.WindowInfo> getLocalWindowInfo();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.AccessibilityManager> LocalAccessibilityManager;
+ property @androidx.compose.ui.ExperimentalComposeUiApi public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.autofill.Autofill> LocalAutofill;
+ property @androidx.compose.ui.ExperimentalComposeUiApi public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.autofill.AutofillTree> LocalAutofillTree;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ClipboardManager> LocalClipboardManager;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Density> LocalDensity;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.focus.FocusManager> LocalFocusManager;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.font.FontFamily.Resolver> LocalFontFamilyResolver;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.hapticfeedback.HapticFeedback> LocalHapticFeedback;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.input.InputModeManager> LocalInputModeManager;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.LayoutDirection> LocalLayoutDirection;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.input.TextInputService> LocalTextInputService;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.TextToolbar> LocalTextToolbar;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.UriHandler> LocalUriHandler;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ViewConfiguration> LocalViewConfiguration;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.WindowInfo> LocalWindowInfo;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface InfiniteAnimationPolicy extends kotlin.coroutines.CoroutineContext.Element {
+ method public default kotlin.coroutines.CoroutineContext.Key<?> getKey();
+ method public suspend <R> Object? onInfiniteOperation(kotlin.jvm.functions.Function1<? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ property public default kotlin.coroutines.CoroutineContext.Key<?> key;
+ field public static final androidx.compose.ui.platform.InfiniteAnimationPolicy.Key Key;
+ }
+
+ public static final class InfiniteAnimationPolicy.Key implements kotlin.coroutines.CoroutineContext.Key<androidx.compose.ui.platform.InfiniteAnimationPolicy> {
+ }
+
+ public final class InspectableModifier extends androidx.compose.ui.platform.InspectorValueInfo implements androidx.compose.ui.Modifier.Element {
+ ctor public InspectableModifier(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo);
+ method public androidx.compose.ui.platform.InspectableModifier.End getEnd();
+ property public final androidx.compose.ui.platform.InspectableModifier.End end;
+ }
+
+ public final class InspectableModifier.End implements androidx.compose.ui.Modifier.Element {
+ ctor public InspectableModifier.End();
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface InspectableValue {
+ method public default kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> getInspectableElements();
+ method public default String? getNameFallback();
+ method public default Object? getValueOverride();
+ property public default kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> inspectableElements;
+ property public default String? nameFallback;
+ property public default Object? valueOverride;
+ }
+
+ public final class InspectableValueKt {
+ method public static inline kotlin.jvm.functions.Function1<androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> debugInspectorInfo(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> definitions);
+ method public static kotlin.jvm.functions.Function1<androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> getNoInspectorInfo();
+ method public static inline androidx.compose.ui.Modifier inspectable(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method public static boolean isDebugInspectorInfoEnabled();
+ method public static void setDebugInspectorInfoEnabled(boolean);
+ property public static final kotlin.jvm.functions.Function1<androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> NoInspectorInfo;
+ property public static final boolean isDebugInspectorInfoEnabled;
+ }
+
+ public final class InspectionModeKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Boolean> getLocalInspectionMode();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Boolean> LocalInspectionMode;
+ }
+
+ public final class InspectorInfo {
+ ctor public InspectorInfo();
+ method public String? getName();
+ method public androidx.compose.ui.platform.ValueElementSequence getProperties();
+ method public Object? getValue();
+ method public void setName(String?);
+ method public void setValue(Object?);
+ property public final String? name;
+ property public final androidx.compose.ui.platform.ValueElementSequence properties;
+ property public final Object? value;
+ }
+
+ public abstract class InspectorValueInfo implements androidx.compose.ui.platform.InspectableValue {
+ ctor public InspectorValueInfo(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> info);
+ property public kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> inspectableElements;
+ property public String? nameFallback;
+ property public Object? valueOverride;
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public final class LocalSoftwareKeyboardController {
+ method @androidx.compose.runtime.Composable public androidx.compose.ui.platform.SoftwareKeyboardController? getCurrent();
+ method public infix androidx.compose.runtime.ProvidedValue<androidx.compose.ui.platform.SoftwareKeyboardController> provides(androidx.compose.ui.platform.SoftwareKeyboardController softwareKeyboardController);
+ property @androidx.compose.runtime.Composable @androidx.compose.ui.ExperimentalComposeUiApi public final androidx.compose.ui.platform.SoftwareKeyboardController? current;
+ field public static final androidx.compose.ui.platform.LocalSoftwareKeyboardController INSTANCE;
+ }
+
+ public final class NestedScrollInteropConnectionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.input.nestedscroll.NestedScrollConnection rememberNestedScrollInteropConnection(optional android.view.View hostView);
+ }
+
+ @androidx.compose.runtime.Stable @androidx.compose.ui.ExperimentalComposeUiApi public interface SoftwareKeyboardController {
+ method public void hide();
+ method @Deprecated public default void hideSoftwareKeyboard();
+ method public void show();
+ method @Deprecated public default void showSoftwareKeyboard();
+ }
+
+ public final class TestTagKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier testTag(androidx.compose.ui.Modifier, String tag);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TextToolbar {
+ method public androidx.compose.ui.platform.TextToolbarStatus getStatus();
+ method public void hide();
+ method public void showMenu(androidx.compose.ui.geometry.Rect rect, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onSelectAllRequested);
+ property public abstract androidx.compose.ui.platform.TextToolbarStatus status;
+ }
+
+ public enum TextToolbarStatus {
+ method public static androidx.compose.ui.platform.TextToolbarStatus valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.platform.TextToolbarStatus[] values();
+ enum_constant public static final androidx.compose.ui.platform.TextToolbarStatus Hidden;
+ enum_constant public static final androidx.compose.ui.platform.TextToolbarStatus Shown;
+ }
+
+ public interface UriHandler {
+ method public void openUri(String uri);
+ }
+
+ public final class ValueElement {
+ ctor public ValueElement(String name, Object? value);
+ method public String component1();
+ method public Object? component2();
+ method public androidx.compose.ui.platform.ValueElement copy(String name, Object? value);
+ method public String getName();
+ method public Object? getValue();
+ property public final String name;
+ property public final Object? value;
+ }
+
+ public final class ValueElementSequence implements kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> {
+ ctor public ValueElementSequence();
+ method public java.util.Iterator<androidx.compose.ui.platform.ValueElement> iterator();
+ method public operator void set(String name, Object? value);
+ }
+
+ public interface ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.Companion Companion;
+ }
+
+ public static final class ViewCompositionStrategy.Companion {
+ method public androidx.compose.ui.platform.ViewCompositionStrategy getDefault();
+ property public final androidx.compose.ui.platform.ViewCompositionStrategy Default;
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnDetachedFromWindow implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.DisposeOnDetachedFromWindow INSTANCE;
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool INSTANCE;
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnLifecycleDestroyed implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ ctor public ViewCompositionStrategy.DisposeOnLifecycleDestroyed(androidx.lifecycle.Lifecycle lifecycle);
+ ctor public ViewCompositionStrategy.DisposeOnLifecycleDestroyed(androidx.lifecycle.LifecycleOwner lifecycleOwner);
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed INSTANCE;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ViewConfiguration {
+ method public long getDoubleTapMinTimeMillis();
+ method public long getDoubleTapTimeoutMillis();
+ method public long getLongPressTimeoutMillis();
+ method public default long getMinimumTouchTargetSize();
+ method public float getTouchSlop();
+ property public abstract long doubleTapMinTimeMillis;
+ property public abstract long doubleTapTimeoutMillis;
+ property public abstract long longPressTimeoutMillis;
+ property public default long minimumTouchTargetSize;
+ property public abstract float touchSlop;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ViewRootForInspector {
+ method public default androidx.compose.ui.platform.AbstractComposeView? getSubCompositionView();
+ method public default android.view.View? getViewRoot();
+ property public default androidx.compose.ui.platform.AbstractComposeView? subCompositionView;
+ property public default android.view.View? viewRoot;
+ }
+
+ @VisibleForTesting public interface ViewRootForTest extends androidx.compose.ui.node.RootForTest {
+ method public boolean getHasPendingMeasureOrLayout();
+ method public android.view.View getView();
+ method public void invalidateDescendants();
+ method public boolean isLifecycleInResumedState();
+ property public abstract boolean hasPendingMeasureOrLayout;
+ property public abstract boolean isLifecycleInResumedState;
+ property public abstract android.view.View view;
+ field public static final androidx.compose.ui.platform.ViewRootForTest.Companion Companion;
+ }
+
+ public static final class ViewRootForTest.Companion {
+ method public kotlin.jvm.functions.Function1<androidx.compose.ui.platform.ViewRootForTest,kotlin.Unit>? getOnViewCreatedCallback();
+ method public void setOnViewCreatedCallback(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.ViewRootForTest,kotlin.Unit>?);
+ property public final kotlin.jvm.functions.Function1<androidx.compose.ui.platform.ViewRootForTest,kotlin.Unit>? onViewCreatedCallback;
+ }
+
+ @androidx.compose.runtime.Stable public interface WindowInfo {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public default int getKeyboardModifiers();
+ method public boolean isWindowFocused();
+ property public abstract boolean isWindowFocused;
+ property @androidx.compose.ui.ExperimentalComposeUiApi public default int keyboardModifiers;
+ }
+
+ @androidx.compose.ui.InternalComposeUiApi public fun interface WindowRecomposerFactory {
+ method public androidx.compose.runtime.Recomposer createRecomposer(android.view.View windowRootView);
+ field public static final androidx.compose.ui.platform.WindowRecomposerFactory.Companion Companion;
+ }
+
+ public static final class WindowRecomposerFactory.Companion {
+ method public androidx.compose.ui.platform.WindowRecomposerFactory getLifecycleAware();
+ property public final androidx.compose.ui.platform.WindowRecomposerFactory LifecycleAware;
+ }
+
+ @androidx.compose.ui.InternalComposeUiApi public final class WindowRecomposerPolicy {
+ method public void setFactory(androidx.compose.ui.platform.WindowRecomposerFactory factory);
+ method public inline <R> R! withFactory(androidx.compose.ui.platform.WindowRecomposerFactory factory, kotlin.jvm.functions.Function0<? extends R> block);
+ field public static final androidx.compose.ui.platform.WindowRecomposerPolicy INSTANCE;
+ }
+
+ public final class WindowRecomposer_androidKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.runtime.Recomposer createLifecycleAwareWindowRecomposer(android.view.View, optional kotlin.coroutines.CoroutineContext coroutineContext, optional androidx.lifecycle.Lifecycle? lifecycle);
+ method public static androidx.compose.runtime.CompositionContext? findViewTreeCompositionContext(android.view.View);
+ method public static androidx.compose.runtime.CompositionContext? getCompositionContext(android.view.View);
+ method public static void setCompositionContext(android.view.View, androidx.compose.runtime.CompositionContext?);
+ }
+
+}
+
+package androidx.compose.ui.res {
+
+ public final class ColorResources_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long colorResource(@ColorRes int id);
+ }
+
+ public final class FontResources_androidKt {
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.ui.text.font.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+ }
+
+ public final class ImageResources_androidKt {
+ method public static androidx.compose.ui.graphics.ImageBitmap imageResource(androidx.compose.ui.graphics.ImageBitmap.Companion, android.content.res.Resources res, @DrawableRes int id);
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.ImageBitmap imageResource(androidx.compose.ui.graphics.ImageBitmap.Companion, @DrawableRes int id);
+ }
+
+ public final class PainterResources_androidKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.painter.Painter painterResource(@DrawableRes int id);
+ }
+
+ public final class PrimitiveResources_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static boolean booleanResource(@BoolRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static float dimensionResource(@DimenRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static int[] integerArrayResource(@ArrayRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static int integerResource(@IntegerRes int id);
+ }
+
+ public final class StringResources_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String pluralStringResource(@PluralsRes int id, int count);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String pluralStringResource(@PluralsRes int id, int count, java.lang.Object... formatArgs);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String![] stringArrayResource(@ArrayRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String stringResource(@StringRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
+ }
+
+ public final class VectorResources_androidKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, @DrawableRes int id);
+ method @kotlin.jvm.Throws(exceptionClasses=XmlPullParserException::class) public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, optional android.content.res.Resources.Theme? theme, android.content.res.Resources res, int resId) throws org.xmlpull.v1.XmlPullParserException;
+ }
+
+}
+
+package androidx.compose.ui.semantics {
+
+ public final class AccessibilityAction<T extends kotlin.Function<? extends java.lang.Boolean>> {
+ ctor public AccessibilityAction(String? label, T? action);
+ method public T? getAction();
+ method public String? getLabel();
+ property public final T? action;
+ property public final String? label;
+ }
+
+ public final class CollectionInfo {
+ ctor public CollectionInfo(int rowCount, int columnCount);
+ method public int getColumnCount();
+ method public int getRowCount();
+ property public final int columnCount;
+ property public final int rowCount;
+ }
+
+ public final class CollectionItemInfo {
+ ctor public CollectionItemInfo(int rowIndex, int rowSpan, int columnIndex, int columnSpan);
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ property public final int columnIndex;
+ property public final int columnSpan;
+ property public final int rowIndex;
+ property public final int rowSpan;
+ }
+
+ public final class CustomAccessibilityAction {
+ ctor public CustomAccessibilityAction(String label, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
+ method public kotlin.jvm.functions.Function0<java.lang.Boolean> getAction();
+ method public String getLabel();
+ property public final kotlin.jvm.functions.Function0<java.lang.Boolean> action;
+ property public final String label;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class LiveRegionMode {
+ field public static final androidx.compose.ui.semantics.LiveRegionMode.Companion Companion;
+ }
+
+ public static final class LiveRegionMode.Companion {
+ method public int getAssertive();
+ method public int getPolite();
+ property public final int Assertive;
+ property public final int Polite;
+ }
+
+ public final class ProgressBarRangeInfo {
+ ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional int steps);
+ method public float getCurrent();
+ method public kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> getRange();
+ method public int getSteps();
+ property public final float current;
+ property public final kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range;
+ property public final int steps;
+ field public static final androidx.compose.ui.semantics.ProgressBarRangeInfo.Companion Companion;
+ }
+
+ public static final class ProgressBarRangeInfo.Companion {
+ method public androidx.compose.ui.semantics.ProgressBarRangeInfo getIndeterminate();
+ property public final androidx.compose.ui.semantics.ProgressBarRangeInfo Indeterminate;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Role {
+ field public static final androidx.compose.ui.semantics.Role.Companion Companion;
+ }
+
+ public static final class Role.Companion {
+ method public int getButton();
+ method public int getCheckbox();
+ method public int getDropdownList();
+ method public int getImage();
+ method public int getRadioButton();
+ method public int getSwitch();
+ method public int getTab();
+ property public final int Button;
+ property public final int Checkbox;
+ property public final int DropdownList;
+ property public final int Image;
+ property public final int RadioButton;
+ property public final int Switch;
+ property public final int Tab;
+ }
+
+ public final class ScrollAxisRange {
+ ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, optional boolean reverseScrolling);
+ method public kotlin.jvm.functions.Function0<java.lang.Float> getMaxValue();
+ method public boolean getReverseScrolling();
+ method public kotlin.jvm.functions.Function0<java.lang.Float> getValue();
+ property public final kotlin.jvm.functions.Function0<java.lang.Float> maxValue;
+ property public final boolean reverseScrolling;
+ property public final kotlin.jvm.functions.Function0<java.lang.Float> value;
+ }
+
+ public final class SemanticsActions {
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getCollapse();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getCopyText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction>> getCustomActions();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getCutText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getDismiss();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getExpand();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnLongClick();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageDown();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageLeft();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageRight();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageUp();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPasteText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getRequestFocus();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Integer,java.lang.Boolean>>> getScrollToIndex();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> getSetProgress();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> Collapse;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> CopyText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction>> CustomActions;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> CutText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> Dismiss;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> Expand;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnLongClick;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageDown;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageLeft;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageRight;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageUp;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PasteText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> RequestFocus;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Integer,java.lang.Boolean>>> ScrollToIndex;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> SetProgress;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> SetSelection;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
+ field public static final androidx.compose.ui.semantics.SemanticsActions INSTANCE;
+ }
+
+ public final class SemanticsConfiguration implements java.lang.Iterable<java.util.Map.Entry<? extends androidx.compose.ui.semantics.SemanticsPropertyKey<?>,?>> kotlin.jvm.internal.markers.KMappedMarker androidx.compose.ui.semantics.SemanticsPropertyReceiver {
+ ctor public SemanticsConfiguration();
+ method public operator <T> boolean contains(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ method public androidx.compose.ui.semantics.SemanticsConfiguration copy();
+ method public operator <T> T! get(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ method public <T> T! getOrElse(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public <T> T? getOrElseNullable(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public boolean isClearingSemantics();
+ method public boolean isMergingSemanticsOfDescendants();
+ method public java.util.Iterator<java.util.Map.Entry<androidx.compose.ui.semantics.SemanticsPropertyKey<?>,java.lang.Object>> iterator();
+ method public <T> void set(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, T? value);
+ method public void setClearingSemantics(boolean);
+ method public void setMergingSemanticsOfDescendants(boolean);
+ property public final boolean isClearingSemantics;
+ property public final boolean isMergingSemanticsOfDescendants;
+ }
+
+ public final class SemanticsConfigurationKt {
+ method public static <T> T? getOrNull(androidx.compose.ui.semantics.SemanticsConfiguration, androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface SemanticsModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public default int getId();
+ method public androidx.compose.ui.semantics.SemanticsConfiguration getSemanticsConfiguration();
+ property @Deprecated public default int id;
+ property public abstract androidx.compose.ui.semantics.SemanticsConfiguration semanticsConfiguration;
+ }
+
+ public final class SemanticsModifierKt {
+ method public static androidx.compose.ui.Modifier clearAndSetSemantics(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.semantics.SemanticsPropertyReceiver,kotlin.Unit> properties);
+ method public static androidx.compose.ui.Modifier semantics(androidx.compose.ui.Modifier, optional boolean mergeDescendants, kotlin.jvm.functions.Function1<? super androidx.compose.ui.semantics.SemanticsPropertyReceiver,kotlin.Unit> properties);
+ }
+
+ public final class SemanticsNode {
+ method public int getAlignmentLinePosition(androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public androidx.compose.ui.geometry.Rect getBoundsInRoot();
+ method public androidx.compose.ui.geometry.Rect getBoundsInWindow();
+ method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getChildren();
+ method public androidx.compose.ui.semantics.SemanticsConfiguration getConfig();
+ method public int getId();
+ method public androidx.compose.ui.layout.LayoutInfo getLayoutInfo();
+ method public boolean getMergingEnabled();
+ method public androidx.compose.ui.semantics.SemanticsNode? getParent();
+ method public long getPositionInRoot();
+ method public long getPositionInWindow();
+ method public androidx.compose.ui.node.RootForTest? getRoot();
+ method public long getSize();
+ method public androidx.compose.ui.geometry.Rect getTouchBoundsInRoot();
+ method public boolean isRoot();
+ property public final androidx.compose.ui.geometry.Rect boundsInRoot;
+ property public final androidx.compose.ui.geometry.Rect boundsInWindow;
+ property public final java.util.List<androidx.compose.ui.semantics.SemanticsNode> children;
+ property public final androidx.compose.ui.semantics.SemanticsConfiguration config;
+ property public final int id;
+ property public final boolean isRoot;
+ property public final androidx.compose.ui.layout.LayoutInfo layoutInfo;
+ property public final boolean mergingEnabled;
+ property public final androidx.compose.ui.semantics.SemanticsNode? parent;
+ property public final long positionInRoot;
+ property public final long positionInWindow;
+ property public final androidx.compose.ui.node.RootForTest? root;
+ property public final long size;
+ property public final androidx.compose.ui.geometry.Rect touchBoundsInRoot;
+ }
+
+ public final class SemanticsOwner {
+ method public androidx.compose.ui.semantics.SemanticsNode getRootSemanticsNode();
+ method public androidx.compose.ui.semantics.SemanticsNode getUnmergedRootSemanticsNode();
+ property public final androidx.compose.ui.semantics.SemanticsNode rootSemanticsNode;
+ property public final androidx.compose.ui.semantics.SemanticsNode unmergedRootSemanticsNode;
+ }
+
+ public final class SemanticsOwnerKt {
+ method public static java.util.List<androidx.compose.ui.semantics.SemanticsNode> getAllSemanticsNodes(androidx.compose.ui.semantics.SemanticsOwner, boolean mergingEnabled);
+ }
+
+ public final class SemanticsProperties {
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionInfo> getCollectionInfo();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionItemInfo> getCollectionItemInfo();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<java.lang.String>> getContentDescription();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getDisabled();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> getEditableText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getError();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getFocused();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getHeading();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> getHorizontalScrollAxisRange();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> getImeAction();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Integer>> getIndexForKey();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getInvisibleToUser();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getIsContainer();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsDialog();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsPopup();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.LiveRegionMode> getLiveRegion();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getPaneTitle();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getPassword();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ProgressBarRangeInfo> getProgressBarRangeInfo();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.Role> getRole();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getSelectableGroup();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getSelected();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getStateDescription();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getTestTag();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.text.AnnotatedString>> getText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> getTextSelectionRange();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.state.ToggleableState> getToggleableState();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> getVerticalScrollAxisRange();
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionInfo> CollectionInfo;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionItemInfo> CollectionItemInfo;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<java.lang.String>> ContentDescription;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Disabled;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> EditableText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> Error;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> Focused;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Heading;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> HorizontalScrollAxisRange;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> ImeAction;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Integer>> IndexForKey;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> InvisibleToUser;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> IsContainer;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsDialog;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsPopup;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.LiveRegionMode> LiveRegion;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> PaneTitle;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Password;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ProgressBarRangeInfo> ProgressBarRangeInfo;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.Role> Role;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> SelectableGroup;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> Selected;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> StateDescription;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> TestTag;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.text.AnnotatedString>> Text;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> TextSelectionRange;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.state.ToggleableState> ToggleableState;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> VerticalScrollAxisRange;
+ field public static final androidx.compose.ui.semantics.SemanticsProperties INSTANCE;
+ }
+
+ @androidx.compose.ui.ExperimentalComposeUiApi public final class SemanticsPropertiesAndroid {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getTestTagsAsResourceId();
+ property @androidx.compose.ui.ExperimentalComposeUiApi public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> TestTagsAsResourceId;
+ field public static final androidx.compose.ui.semantics.SemanticsPropertiesAndroid INSTANCE;
+ }
+
+ public final class SemanticsPropertiesKt {
+ method public static void collapse(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void copyText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void cutText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void dialog(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void disabled(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void dismiss(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void error(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String description);
+ method public static void expand(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static androidx.compose.ui.semantics.CollectionInfo getCollectionInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.CollectionItemInfo getCollectionItemInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getContentDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction> getCustomActions(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.text.AnnotatedString getEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static boolean getFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.ScrollAxisRange getHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static int getImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static int getLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.ProgressBarRangeInfo getProgressBarRangeInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static int getRole(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static boolean getSelected(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getStateDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getTestTag(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.text.AnnotatedString getText(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void getTextLayoutResult(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>? action);
+ method public static long getTextSelectionRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.state.ToggleableState getToggleableState(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.ScrollAxisRange getVerticalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void heading(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void indexForKey(androidx.compose.ui.semantics.SemanticsPropertyReceiver, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Integer> mapping);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static void invisibleToUser(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static boolean isContainer(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void onClick(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void onLongClick(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageDown(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageLeft(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageRight(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageUp(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void password(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void pasteText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void popup(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void requestFocus(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void scrollBy(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,java.lang.Boolean>? action);
+ method public static void scrollToIndex(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Boolean> action);
+ method public static void selectableGroup(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void setCollectionInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.CollectionInfo);
+ method public static void setCollectionItemInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.CollectionItemInfo);
+ method public static void setContainer(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
+ method public static void setContentDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setCustomActions(androidx.compose.ui.semantics.SemanticsPropertyReceiver, java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction>);
+ method public static void setEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString);
+ method public static void setFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
+ method public static void setHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ScrollAxisRange);
+ method public static void setImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method public static void setLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method public static void setPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setProgress(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean>? action);
+ method public static void setProgressBarRangeInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ProgressBarRangeInfo);
+ method public static void setRole(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method public static void setSelected(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
+ method public static void setSelection(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Boolean,java.lang.Boolean>? action);
+ method public static void setStateDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setTestTag(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString);
+ method public static void setText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>? action);
+ method public static void setTextSelectionRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, long);
+ method public static void setToggleableState(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.state.ToggleableState);
+ method public static void setVerticalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ScrollAxisRange);
+ }
+
+ public final class SemanticsProperties_androidKt {
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static boolean getTestTagsAsResourceId(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static void setTestTagsAsResourceId(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
+ }
+
+ public final class SemanticsPropertyKey<T> {
+ ctor public SemanticsPropertyKey(String name, optional kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
+ method public String getName();
+ method public operator T! getValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property);
+ method public T? merge(T? parentValue, T? childValue);
+ method public operator void setValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property, T? value);
+ property public final String name;
+ }
+
+ public interface SemanticsPropertyReceiver {
+ method public operator <T> void set(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, T? value);
+ }
+
+}
+
+package androidx.compose.ui.state {
+
+ public enum ToggleableState {
+ method public static androidx.compose.ui.state.ToggleableState valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.state.ToggleableState[] values();
+ enum_constant public static final androidx.compose.ui.state.ToggleableState Indeterminate;
+ enum_constant public static final androidx.compose.ui.state.ToggleableState Off;
+ enum_constant public static final androidx.compose.ui.state.ToggleableState On;
+ }
+
+ public final class ToggleableStateKt {
+ method public static androidx.compose.ui.state.ToggleableState ToggleableState(boolean value);
+ }
+
+}
+
+package androidx.compose.ui.text {
+
+ public final class TextMeasurerHelperKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.text.ExperimentalTextApi public static androidx.compose.ui.text.TextMeasurer rememberTextMeasurer(optional int cacheSize);
+ }
+
+}
+
+package androidx.compose.ui.viewinterop {
+
+ public final class AndroidView_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> factory, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+ method public static kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> getNoOpUpdate();
+ property public static final kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> NoOpUpdate;
+ }
+
+}
+
+package androidx.compose.ui.window {
+
+ public final class AndroidDialog_androidKt {
+ method @androidx.compose.runtime.Composable public static void Dialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class AndroidPopup_androidKt {
+ method @androidx.compose.runtime.Composable public static void Popup(optional androidx.compose.ui.Alignment alignment, optional long offset, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Popup(androidx.compose.ui.window.PopupPositionProvider popupPositionProvider, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @org.jetbrains.annotations.TestOnly public static boolean isPopupLayout(android.view.View view, optional String? testTag);
+ }
+
+ @androidx.compose.runtime.Immutable public final class DialogProperties {
+ ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean usePlatformDefaultWidth, optional boolean decorFitsSystemWindows);
+ ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
+ method public boolean getDecorFitsSystemWindows();
+ method public boolean getDismissOnBackPress();
+ method public boolean getDismissOnClickOutside();
+ method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
+ method public boolean getUsePlatformDefaultWidth();
+ property public final boolean decorFitsSystemWindows;
+ property public final boolean dismissOnBackPress;
+ property public final boolean dismissOnClickOutside;
+ property public final androidx.compose.ui.window.SecureFlagPolicy securePolicy;
+ property public final boolean usePlatformDefaultWidth;
+ }
+
+ public interface DialogWindowProvider {
+ method public android.view.Window getWindow();
+ property public abstract android.view.Window window;
+ }
+
+ @androidx.compose.runtime.Immutable public interface PopupPositionProvider {
+ method public long calculatePosition(androidx.compose.ui.unit.IntRect anchorBounds, long windowSize, androidx.compose.ui.unit.LayoutDirection layoutDirection, long popupContentSize);
+ }
+
+ @androidx.compose.runtime.Immutable public final class PopupProperties {
+ ctor @androidx.compose.ui.ExperimentalComposeUiApi public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean excludeFromSystemGesture, optional boolean clippingEnabled, optional boolean usePlatformDefaultWidth);
+ ctor public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean excludeFromSystemGesture, optional boolean clippingEnabled);
+ method public boolean getClippingEnabled();
+ method public boolean getDismissOnBackPress();
+ method public boolean getDismissOnClickOutside();
+ method public boolean getExcludeFromSystemGesture();
+ method public boolean getFocusable();
+ method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
+ method public boolean getUsePlatformDefaultWidth();
+ property public final boolean clippingEnabled;
+ property public final boolean dismissOnBackPress;
+ property public final boolean dismissOnClickOutside;
+ property public final boolean excludeFromSystemGesture;
+ property public final boolean focusable;
+ property public final androidx.compose.ui.window.SecureFlagPolicy securePolicy;
+ property public final boolean usePlatformDefaultWidth;
+ }
+
+ public enum SecureFlagPolicy {
+ method public static androidx.compose.ui.window.SecureFlagPolicy valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.window.SecureFlagPolicy[] values();
+ enum_constant public static final androidx.compose.ui.window.SecureFlagPolicy Inherit;
+ enum_constant public static final androidx.compose.ui.window.SecureFlagPolicy SecureOff;
+ enum_constant public static final androidx.compose.ui.window.SecureFlagPolicy SecureOn;
+ }
+
+}
+
diff --git a/compose/ui/ui/api/public_plus_experimental_current.txt b/compose/ui/ui/api/public_plus_experimental_current.txt
index 37b8dc1..5462832 100644
--- a/compose/ui/ui/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui/api/public_plus_experimental_current.txt
@@ -2478,15 +2478,21 @@
method @androidx.compose.ui.ExperimentalComposeUiApi public static void invalidateMeasurements(androidx.compose.ui.node.LayoutModifierNode);
}
- @androidx.compose.ui.ExperimentalComposeUiApi public abstract class ModifierNodeElement<N extends androidx.compose.ui.Modifier.Node> extends androidx.compose.ui.platform.InspectorValueInfo implements androidx.compose.ui.Modifier.Element {
- ctor public ModifierNodeElement(optional Object? params, optional boolean autoInvalidate, kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo);
+ @androidx.compose.ui.ExperimentalComposeUiApi public abstract class ModifierNodeElement<N extends androidx.compose.ui.Modifier.Node> implements androidx.compose.ui.platform.InspectableValue androidx.compose.ui.Modifier.Element {
+ ctor public ModifierNodeElement();
method public abstract N create();
+ method public abstract boolean equals(Object? other);
+ method public boolean getAutoInvalidate();
+ method public final kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> getInspectableElements();
+ method public final String? getNameFallback();
+ method public final Object? getValueOverride();
+ method public abstract int hashCode();
+ method public void inspectableProperties(androidx.compose.ui.platform.InspectorInfo);
method public abstract N update(N node);
- }
-
- public final class ModifierNodeElementKt {
- method @androidx.compose.ui.ExperimentalComposeUiApi public static inline <reified T extends androidx.compose.ui.Modifier.Node> androidx.compose.ui.Modifier modifierElementOf(Object? key, kotlin.jvm.functions.Function0<? extends T> create, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> update, kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,? extends kotlin.Unit> definitions);
- method @androidx.compose.ui.ExperimentalComposeUiApi public static inline <reified T extends androidx.compose.ui.Modifier.Node> androidx.compose.ui.Modifier modifierElementOf(kotlin.jvm.functions.Function0<? extends T> create, kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,? extends kotlin.Unit> definitions);
+ property public boolean autoInvalidate;
+ property public final kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> inspectableElements;
+ property public final String? nameFallback;
+ property public final Object? valueOverride;
}
@androidx.compose.ui.ExperimentalComposeUiApi public interface ObserverNode extends androidx.compose.ui.node.DelegatableNode {
diff --git a/compose/ui/ui/api/res-1.4.0-beta02.txt b/compose/ui/ui/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui/api/res-1.4.0-beta02.txt
diff --git a/compose/ui/ui/api/restricted_1.4.0-beta02.txt b/compose/ui/ui/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..2973b2b
--- /dev/null
+++ b/compose/ui/ui/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,3039 @@
+// Signature format: 4.0
+package androidx.compose.ui {
+
+ public final class AbsoluteAlignment {
+ method public androidx.compose.ui.Alignment getBottomLeft();
+ method public androidx.compose.ui.Alignment getBottomRight();
+ method public androidx.compose.ui.Alignment getCenterLeft();
+ method public androidx.compose.ui.Alignment getCenterRight();
+ method public androidx.compose.ui.Alignment.Horizontal getLeft();
+ method public androidx.compose.ui.Alignment.Horizontal getRight();
+ method public androidx.compose.ui.Alignment getTopLeft();
+ method public androidx.compose.ui.Alignment getTopRight();
+ property public final androidx.compose.ui.Alignment BottomLeft;
+ property public final androidx.compose.ui.Alignment BottomRight;
+ property public final androidx.compose.ui.Alignment CenterLeft;
+ property public final androidx.compose.ui.Alignment CenterRight;
+ property public final androidx.compose.ui.Alignment.Horizontal Left;
+ property public final androidx.compose.ui.Alignment.Horizontal Right;
+ property public final androidx.compose.ui.Alignment TopLeft;
+ property public final androidx.compose.ui.Alignment TopRight;
+ field public static final androidx.compose.ui.AbsoluteAlignment INSTANCE;
+ }
+
+ @androidx.compose.runtime.Stable public fun interface Alignment {
+ method public long align(long size, long space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ field public static final androidx.compose.ui.Alignment.Companion Companion;
+ }
+
+ public static final class Alignment.Companion {
+ method public androidx.compose.ui.Alignment.Vertical getBottom();
+ method public androidx.compose.ui.Alignment getBottomCenter();
+ method public androidx.compose.ui.Alignment getBottomEnd();
+ method public androidx.compose.ui.Alignment getBottomStart();
+ method public androidx.compose.ui.Alignment getCenter();
+ method public androidx.compose.ui.Alignment getCenterEnd();
+ method public androidx.compose.ui.Alignment.Horizontal getCenterHorizontally();
+ method public androidx.compose.ui.Alignment getCenterStart();
+ method public androidx.compose.ui.Alignment.Vertical getCenterVertically();
+ method public androidx.compose.ui.Alignment.Horizontal getEnd();
+ method public androidx.compose.ui.Alignment.Horizontal getStart();
+ method public androidx.compose.ui.Alignment.Vertical getTop();
+ method public androidx.compose.ui.Alignment getTopCenter();
+ method public androidx.compose.ui.Alignment getTopEnd();
+ method public androidx.compose.ui.Alignment getTopStart();
+ property public final androidx.compose.ui.Alignment.Vertical Bottom;
+ property public final androidx.compose.ui.Alignment BottomCenter;
+ property public final androidx.compose.ui.Alignment BottomEnd;
+ property public final androidx.compose.ui.Alignment BottomStart;
+ property public final androidx.compose.ui.Alignment Center;
+ property public final androidx.compose.ui.Alignment CenterEnd;
+ property public final androidx.compose.ui.Alignment.Horizontal CenterHorizontally;
+ property public final androidx.compose.ui.Alignment CenterStart;
+ property public final androidx.compose.ui.Alignment.Vertical CenterVertically;
+ property public final androidx.compose.ui.Alignment.Horizontal End;
+ property public final androidx.compose.ui.Alignment.Horizontal Start;
+ property public final androidx.compose.ui.Alignment.Vertical Top;
+ property public final androidx.compose.ui.Alignment TopCenter;
+ property public final androidx.compose.ui.Alignment TopEnd;
+ property public final androidx.compose.ui.Alignment TopStart;
+ }
+
+ @androidx.compose.runtime.Stable public static fun interface Alignment.Horizontal {
+ method public int align(int size, int space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ }
+
+ @androidx.compose.runtime.Stable public static fun interface Alignment.Vertical {
+ method public int align(int size, int space);
+ }
+
+ @androidx.compose.runtime.Immutable public final class BiasAbsoluteAlignment implements androidx.compose.ui.Alignment {
+ ctor public BiasAbsoluteAlignment(float horizontalBias, float verticalBias);
+ method public long align(long size, long space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public androidx.compose.ui.BiasAbsoluteAlignment copy(float horizontalBias, float verticalBias);
+ }
+
+ @androidx.compose.runtime.Immutable public static final class BiasAbsoluteAlignment.Horizontal implements androidx.compose.ui.Alignment.Horizontal {
+ ctor public BiasAbsoluteAlignment.Horizontal(float bias);
+ method public int align(int size, int space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public androidx.compose.ui.BiasAbsoluteAlignment.Horizontal copy(float bias);
+ }
+
+ @androidx.compose.runtime.Immutable public final class BiasAlignment implements androidx.compose.ui.Alignment {
+ ctor public BiasAlignment(float horizontalBias, float verticalBias);
+ method public long align(long size, long space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public float component1();
+ method public float component2();
+ method public androidx.compose.ui.BiasAlignment copy(float horizontalBias, float verticalBias);
+ method public float getHorizontalBias();
+ method public float getVerticalBias();
+ property public final float horizontalBias;
+ property public final float verticalBias;
+ }
+
+ @androidx.compose.runtime.Immutable public static final class BiasAlignment.Horizontal implements androidx.compose.ui.Alignment.Horizontal {
+ ctor public BiasAlignment.Horizontal(float bias);
+ method public int align(int size, int space, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+ method public androidx.compose.ui.BiasAlignment.Horizontal copy(float bias);
+ }
+
+ @androidx.compose.runtime.Immutable public static final class BiasAlignment.Vertical implements androidx.compose.ui.Alignment.Vertical {
+ ctor public BiasAlignment.Vertical(float bias);
+ method public int align(int size, int space);
+ method public androidx.compose.ui.BiasAlignment.Vertical copy(float bias);
+ }
+
+ public final class CombinedModifier implements androidx.compose.ui.Modifier {
+ ctor public CombinedModifier(androidx.compose.ui.Modifier outer, androidx.compose.ui.Modifier inner);
+ method public boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ }
+
+ public final class ComposedModifierKt {
+ method public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method public static androidx.compose.ui.Modifier materialize(androidx.compose.runtime.Composer, androidx.compose.ui.Modifier modifier);
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface Modifier {
+ method public boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ method public default infix androidx.compose.ui.Modifier then(androidx.compose.ui.Modifier other);
+ field public static final androidx.compose.ui.Modifier.Companion Companion;
+ }
+
+ public static final class Modifier.Companion implements androidx.compose.ui.Modifier {
+ method public boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public static interface Modifier.Element extends androidx.compose.ui.Modifier {
+ method public default boolean all(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public default boolean any(kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier.Element,java.lang.Boolean> predicate);
+ method public default <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.compose.ui.Modifier.Element,? extends R> operation);
+ method public default <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.compose.ui.Modifier.Element,? super R,? extends R> operation);
+ }
+
+ @androidx.compose.runtime.Stable public interface MotionDurationScale extends kotlin.coroutines.CoroutineContext.Element {
+ method public default kotlin.coroutines.CoroutineContext.Key<?> getKey();
+ method public float getScaleFactor();
+ property public default kotlin.coroutines.CoroutineContext.Key<?> key;
+ property public abstract float scaleFactor;
+ field public static final androidx.compose.ui.MotionDurationScale.Key Key;
+ }
+
+ public static final class MotionDurationScale.Key implements kotlin.coroutines.CoroutineContext.Key<androidx.compose.ui.MotionDurationScale> {
+ }
+
+ @androidx.compose.runtime.ComposableTargetMarker(description="UI Composable") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface UiComposable {
+ }
+
+ public final class ZIndexModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier zIndex(androidx.compose.ui.Modifier, float zIndex);
+ }
+
+}
+
+package androidx.compose.ui.draw {
+
+ public final class AlphaKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier alpha(androidx.compose.ui.Modifier, float alpha);
+ }
+
+ public final class BlurKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radiusX, float radiusY, optional androidx.compose.ui.graphics.Shape edgeTreatment);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radius, optional androidx.compose.ui.graphics.Shape edgeTreatment);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BlurredEdgeTreatment {
+ ctor public BlurredEdgeTreatment(androidx.compose.ui.graphics.Shape? shape);
+ method public androidx.compose.ui.graphics.Shape? getShape();
+ property public final androidx.compose.ui.graphics.Shape? shape;
+ field public static final androidx.compose.ui.draw.BlurredEdgeTreatment.Companion Companion;
+ }
+
+ public static final class BlurredEdgeTreatment.Companion {
+ method public androidx.compose.ui.graphics.Shape getRectangle();
+ method public androidx.compose.ui.graphics.Shape getUnbounded();
+ property public final androidx.compose.ui.graphics.Shape Rectangle;
+ property public final androidx.compose.ui.graphics.Shape Unbounded;
+ }
+
+ public interface BuildDrawCacheParams {
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public long getSize();
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public abstract long size;
+ }
+
+ public final class CacheDrawScope implements androidx.compose.ui.unit.Density {
+ method public float getDensity();
+ method public float getFontScale();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public long getSize();
+ method public androidx.compose.ui.draw.DrawResult onDrawBehind(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public androidx.compose.ui.draw.DrawResult onDrawWithContent(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.ContentDrawScope,kotlin.Unit> block);
+ property public float density;
+ property public float fontScale;
+ property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public final long size;
+ }
+
+ public final class ClipKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier clip(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Shape shape);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier clipToBounds(androidx.compose.ui.Modifier);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawCacheModifier extends androidx.compose.ui.draw.DrawModifier {
+ method public void onBuildCache(androidx.compose.ui.draw.BuildDrawCacheParams params);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface DrawModifier extends androidx.compose.ui.Modifier.Element {
+ method public void draw(androidx.compose.ui.graphics.drawscope.ContentDrawScope);
+ }
+
+ public final class DrawModifierKt {
+ method public static androidx.compose.ui.Modifier drawBehind(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDraw);
+ method public static androidx.compose.ui.Modifier drawWithCache(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.draw.CacheDrawScope,androidx.compose.ui.draw.DrawResult> onBuildDrawCache);
+ method public static androidx.compose.ui.Modifier drawWithContent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.ContentDrawScope,kotlin.Unit> onDraw);
+ }
+
+ public final class DrawResult {
+ }
+
+ public final class PainterModifierKt {
+ method public static androidx.compose.ui.Modifier paint(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.painter.Painter painter, optional boolean sizeToIntrinsics, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ }
+
+ public final class RotateKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier rotate(androidx.compose.ui.Modifier, float degrees);
+ }
+
+ public final class ScaleKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scaleX, float scaleY);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scale);
+ }
+
+ public final class ShadowKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+ }
+
+}
+
+package androidx.compose.ui.focus {
+
+ public final class FocusChangedModifierKt {
+ method public static androidx.compose.ui.Modifier onFocusChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusState,kotlin.Unit> onFocusChanged);
+ }
+
+ @kotlin.jvm.JvmInline public final value class FocusDirection {
+ field public static final androidx.compose.ui.focus.FocusDirection.Companion Companion;
+ }
+
+ public static final class FocusDirection.Companion {
+ method public int getDown();
+ method public int getLeft();
+ method public int getNext();
+ method public int getPrevious();
+ method public int getRight();
+ method public int getUp();
+ property public final int Down;
+ property public final int Left;
+ property public final int Next;
+ property public final int Previous;
+ property public final int Right;
+ property public final int Up;
+ }
+
+ @Deprecated @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusEventModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public void onFocusEvent(androidx.compose.ui.focus.FocusState focusState);
+ }
+
+ public final class FocusEventModifierKt {
+ method public static androidx.compose.ui.Modifier onFocusEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusState,kotlin.Unit> onFocusEvent);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusManager {
+ method public void clearFocus(optional boolean force);
+ method public boolean moveFocus(int focusDirection);
+ }
+
+ public final class FocusModifierKt {
+ method @Deprecated public static androidx.compose.ui.Modifier focusModifier(androidx.compose.ui.Modifier);
+ method public static androidx.compose.ui.Modifier focusTarget(androidx.compose.ui.Modifier);
+ }
+
+ @Deprecated public final class FocusOrder {
+ ctor @Deprecated public FocusOrder();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getDown();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getEnd();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getLeft();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getNext();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getPrevious();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getRight();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getStart();
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getUp();
+ method @Deprecated public void setDown(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setEnd(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setLeft(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setNext(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setPrevious(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setRight(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setStart(androidx.compose.ui.focus.FocusRequester);
+ method @Deprecated public void setUp(androidx.compose.ui.focus.FocusRequester);
+ property public final androidx.compose.ui.focus.FocusRequester down;
+ property public final androidx.compose.ui.focus.FocusRequester end;
+ property public final androidx.compose.ui.focus.FocusRequester left;
+ property public final androidx.compose.ui.focus.FocusRequester next;
+ property public final androidx.compose.ui.focus.FocusRequester previous;
+ property public final androidx.compose.ui.focus.FocusRequester right;
+ property public final androidx.compose.ui.focus.FocusRequester start;
+ property public final androidx.compose.ui.focus.FocusRequester up;
+ }
+
+ @Deprecated @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusOrderModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public void populateFocusOrder(androidx.compose.ui.focus.FocusOrder focusOrder);
+ }
+
+ public final class FocusOrderModifierKt {
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester);
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
+ }
+
+ public interface FocusProperties {
+ method public boolean getCanFocus();
+ method public default androidx.compose.ui.focus.FocusRequester getDown();
+ method public default androidx.compose.ui.focus.FocusRequester getEnd();
+ method public default androidx.compose.ui.focus.FocusRequester getLeft();
+ method public default androidx.compose.ui.focus.FocusRequester getNext();
+ method public default androidx.compose.ui.focus.FocusRequester getPrevious();
+ method public default androidx.compose.ui.focus.FocusRequester getRight();
+ method public default androidx.compose.ui.focus.FocusRequester getStart();
+ method public default androidx.compose.ui.focus.FocusRequester getUp();
+ method public void setCanFocus(boolean);
+ method public default void setDown(androidx.compose.ui.focus.FocusRequester);
+ method public default void setEnd(androidx.compose.ui.focus.FocusRequester);
+ method public default void setLeft(androidx.compose.ui.focus.FocusRequester);
+ method public default void setNext(androidx.compose.ui.focus.FocusRequester);
+ method public default void setPrevious(androidx.compose.ui.focus.FocusRequester);
+ method public default void setRight(androidx.compose.ui.focus.FocusRequester);
+ method public default void setStart(androidx.compose.ui.focus.FocusRequester);
+ method public default void setUp(androidx.compose.ui.focus.FocusRequester);
+ property public abstract boolean canFocus;
+ property public default androidx.compose.ui.focus.FocusRequester down;
+ property public default androidx.compose.ui.focus.FocusRequester end;
+ property public default androidx.compose.ui.focus.FocusRequester left;
+ property public default androidx.compose.ui.focus.FocusRequester next;
+ property public default androidx.compose.ui.focus.FocusRequester previous;
+ property public default androidx.compose.ui.focus.FocusRequester right;
+ property public default androidx.compose.ui.focus.FocusRequester start;
+ property public default androidx.compose.ui.focus.FocusRequester up;
+ }
+
+ public final class FocusPropertiesKt {
+ method public static androidx.compose.ui.Modifier focusProperties(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusProperties,kotlin.Unit> scope);
+ }
+
+ @androidx.compose.runtime.Stable public final class FocusRequester {
+ ctor public FocusRequester();
+ method public boolean captureFocus();
+ method public boolean freeFocus();
+ method public void requestFocus();
+ field public static final androidx.compose.ui.focus.FocusRequester.Companion Companion;
+ }
+
+ public static final class FocusRequester.Companion {
+ method public androidx.compose.ui.focus.FocusRequester getDefault();
+ property public final androidx.compose.ui.focus.FocusRequester Default;
+ }
+
+ @Deprecated @kotlin.jvm.JvmDefaultWithCompatibility public interface FocusRequesterModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public androidx.compose.ui.focus.FocusRequester getFocusRequester();
+ property public abstract androidx.compose.ui.focus.FocusRequester focusRequester;
+ }
+
+ public final class FocusRequesterModifierKt {
+ method public static androidx.compose.ui.Modifier focusRequester(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester);
+ }
+
+ public interface FocusState {
+ method public boolean getHasFocus();
+ method public boolean isCaptured();
+ method public boolean isFocused();
+ property public abstract boolean hasFocus;
+ property public abstract boolean isCaptured;
+ property public abstract boolean isFocused;
+ }
+
+}
+
+package androidx.compose.ui.graphics {
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class CompositingStrategy {
+ field public static final androidx.compose.ui.graphics.CompositingStrategy.Companion Companion;
+ }
+
+ public static final class CompositingStrategy.Companion {
+ method public int getAuto();
+ method public int getModulateAlpha();
+ method public int getOffscreen();
+ property public final int Auto;
+ property public final int ModulateAlpha;
+ property public final int Offscreen;
+ }
+
+ public final class GraphicsLayerModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier toolingGraphicsLayer(androidx.compose.ui.Modifier);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface GraphicsLayerScope extends androidx.compose.ui.unit.Density {
+ method public float getAlpha();
+ method public default long getAmbientShadowColor();
+ method public float getCameraDistance();
+ method public boolean getClip();
+ method public default int getCompositingStrategy();
+ method public default androidx.compose.ui.graphics.RenderEffect? getRenderEffect();
+ method public float getRotationX();
+ method public float getRotationY();
+ method public float getRotationZ();
+ method public float getScaleX();
+ method public float getScaleY();
+ method public float getShadowElevation();
+ method public androidx.compose.ui.graphics.Shape getShape();
+ method public default long getSize();
+ method public default long getSpotShadowColor();
+ method public long getTransformOrigin();
+ method public float getTranslationX();
+ method public float getTranslationY();
+ method public void setAlpha(float);
+ method public default void setAmbientShadowColor(long);
+ method public void setCameraDistance(float);
+ method public void setClip(boolean);
+ method public default void setCompositingStrategy(int);
+ method public default void setRenderEffect(androidx.compose.ui.graphics.RenderEffect?);
+ method public void setRotationX(float);
+ method public void setRotationY(float);
+ method public void setRotationZ(float);
+ method public void setScaleX(float);
+ method public void setScaleY(float);
+ method public void setShadowElevation(float);
+ method public void setShape(androidx.compose.ui.graphics.Shape);
+ method public default void setSpotShadowColor(long);
+ method public void setTransformOrigin(long);
+ method public void setTranslationX(float);
+ method public void setTranslationY(float);
+ property public abstract float alpha;
+ property public default long ambientShadowColor;
+ property public abstract float cameraDistance;
+ property public abstract boolean clip;
+ property public default int compositingStrategy;
+ property public default androidx.compose.ui.graphics.RenderEffect? renderEffect;
+ property public abstract float rotationX;
+ property public abstract float rotationY;
+ property public abstract float rotationZ;
+ property public abstract float scaleX;
+ property public abstract float scaleY;
+ property public abstract float shadowElevation;
+ property public abstract androidx.compose.ui.graphics.Shape shape;
+ property public default long size;
+ property public default long spotShadowColor;
+ property public abstract long transformOrigin;
+ property public abstract float translationX;
+ property public abstract float translationY;
+ }
+
+ public final class GraphicsLayerScopeKt {
+ method public static androidx.compose.ui.graphics.GraphicsLayerScope GraphicsLayerScope();
+ method public static long getDefaultShadowColor();
+ property public static final long DefaultShadowColor;
+ field public static final float DefaultCameraDistance = 8.0f;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TransformOrigin {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float pivotFractionX, optional float pivotFractionY);
+ method public float getPivotFractionX();
+ method public float getPivotFractionY();
+ property public final float pivotFractionX;
+ property public final float pivotFractionY;
+ field public static final androidx.compose.ui.graphics.TransformOrigin.Companion Companion;
+ }
+
+ public static final class TransformOrigin.Companion {
+ method public long getCenter();
+ property public final long Center;
+ }
+
+ public final class TransformOriginKt {
+ method public static long TransformOrigin(float pivotFractionX, float pivotFractionY);
+ }
+
+}
+
+package androidx.compose.ui.graphics.vector {
+
+ @androidx.compose.runtime.Immutable public final class ImageVector {
+ method public boolean getAutoMirror();
+ method public float getDefaultHeight();
+ method public float getDefaultWidth();
+ method public String getName();
+ method public androidx.compose.ui.graphics.vector.VectorGroup getRoot();
+ method public int getTintBlendMode();
+ method public long getTintColor();
+ method public float getViewportHeight();
+ method public float getViewportWidth();
+ property public final boolean autoMirror;
+ property public final float defaultHeight;
+ property public final float defaultWidth;
+ property public final String name;
+ property public final androidx.compose.ui.graphics.vector.VectorGroup root;
+ property public final int tintBlendMode;
+ property public final long tintColor;
+ property public final float viewportHeight;
+ property public final float viewportWidth;
+ field public static final androidx.compose.ui.graphics.vector.ImageVector.Companion Companion;
+ }
+
+ public static final class ImageVector.Builder {
+ ctor public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror);
+ ctor @Deprecated public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode);
+ method public androidx.compose.ui.graphics.vector.ImageVector.Builder addGroup(optional String name, optional float rotate, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData);
+ method public androidx.compose.ui.graphics.vector.ImageVector.Builder addPath(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, optional int pathFillType, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional float trimPathStart, optional float trimPathEnd, optional float trimPathOffset);
+ method public androidx.compose.ui.graphics.vector.ImageVector build();
+ method public androidx.compose.ui.graphics.vector.ImageVector.Builder clearGroup();
+ }
+
+ public static final class ImageVector.Companion {
+ }
+
+ public final class ImageVectorKt {
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector.Builder group(androidx.compose.ui.graphics.vector.ImageVector.Builder, optional String name, optional float rotate, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.ImageVector.Builder,kotlin.Unit> block);
+ method public static inline androidx.compose.ui.graphics.vector.ImageVector.Builder path(androidx.compose.ui.graphics.vector.ImageVector.Builder, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional int pathFillType, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.PathBuilder,kotlin.Unit> pathBuilder);
+ }
+
+ public abstract sealed class VNode {
+ method public abstract void draw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ method public final void invalidate();
+ }
+
+ public final class VectorApplier extends androidx.compose.runtime.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
+ ctor public VectorApplier(androidx.compose.ui.graphics.vector.VNode root);
+ method public void insertBottomUp(int index, androidx.compose.ui.graphics.vector.VNode instance);
+ method public void insertTopDown(int index, androidx.compose.ui.graphics.vector.VNode instance);
+ method public void move(int from, int to, int count);
+ method protected void onClear();
+ method public void remove(int index, int count);
+ }
+
+ @androidx.compose.runtime.ComposableTargetMarker(description="Vector Composable") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER}) public @interface VectorComposable {
+ }
+
+ public final class VectorComposeKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.graphics.vector.VectorComposable public static void Group(optional String name, optional float rotation, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.graphics.vector.VectorComposable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, optional int pathFillType, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional float trimPathStart, optional float trimPathEnd, optional float trimPathOffset);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface VectorConfig {
+ method public default <T> T! getOrDefault(androidx.compose.ui.graphics.vector.VectorProperty<T> property, T? defaultValue);
+ }
+
+ @androidx.compose.runtime.Immutable public final class VectorGroup extends androidx.compose.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.compose.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
+ method public operator androidx.compose.ui.graphics.vector.VectorNode get(int index);
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> getClipPathData();
+ method public String getName();
+ method public float getPivotX();
+ method public float getPivotY();
+ method public float getRotation();
+ method public float getScaleX();
+ method public float getScaleY();
+ method public int getSize();
+ method public float getTranslationX();
+ method public float getTranslationY();
+ method public java.util.Iterator<androidx.compose.ui.graphics.vector.VectorNode> iterator();
+ property public final java.util.List<androidx.compose.ui.graphics.vector.PathNode> clipPathData;
+ property public final String name;
+ property public final float pivotX;
+ property public final float pivotY;
+ property public final float rotation;
+ property public final float scaleX;
+ property public final float scaleY;
+ property public final int size;
+ property public final float translationX;
+ property public final float translationY;
+ }
+
+ public final class VectorKt {
+ method public static inline java.util.List<androidx.compose.ui.graphics.vector.PathNode> PathData(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.PathBuilder,kotlin.Unit> block);
+ method public static java.util.List<androidx.compose.ui.graphics.vector.PathNode> addPathNodes(String? pathStr);
+ method public static int getDefaultFillType();
+ method public static int getDefaultStrokeLineCap();
+ method public static int getDefaultStrokeLineJoin();
+ method public static int getDefaultTintBlendMode();
+ method public static long getDefaultTintColor();
+ method public static java.util.List<androidx.compose.ui.graphics.vector.PathNode> getEmptyPath();
+ property public static final int DefaultFillType;
+ property public static final int DefaultStrokeLineCap;
+ property public static final int DefaultStrokeLineJoin;
+ property public static final int DefaultTintBlendMode;
+ property public static final long DefaultTintColor;
+ property public static final java.util.List<androidx.compose.ui.graphics.vector.PathNode> EmptyPath;
+ field public static final String DefaultGroupName = "";
+ field public static final String DefaultPathName = "";
+ field public static final float DefaultPivotX = 0.0f;
+ field public static final float DefaultPivotY = 0.0f;
+ field public static final float DefaultRotation = 0.0f;
+ field public static final float DefaultScaleX = 1.0f;
+ field public static final float DefaultScaleY = 1.0f;
+ field public static final float DefaultStrokeLineMiter = 4.0f;
+ field public static final float DefaultStrokeLineWidth = 0.0f;
+ field public static final float DefaultTranslationX = 0.0f;
+ field public static final float DefaultTranslationY = 0.0f;
+ field public static final float DefaultTrimPathEnd = 1.0f;
+ field public static final float DefaultTrimPathOffset = 0.0f;
+ field public static final float DefaultTrimPathStart = 0.0f;
+ }
+
+ public abstract sealed class VectorNode {
+ }
+
+ public final class VectorPainter extends androidx.compose.ui.graphics.painter.Painter {
+ method public long getIntrinsicSize();
+ method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
+ property public long intrinsicSize;
+ }
+
+ public final class VectorPainterKt {
+ method @androidx.compose.runtime.Composable public static void RenderVectorGroup(androidx.compose.ui.graphics.vector.VectorGroup group, optional java.util.Map<java.lang.String,? extends androidx.compose.ui.graphics.vector.VectorConfig> configs);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(androidx.compose.ui.graphics.vector.ImageVector image);
+ field public static final String RootGroupName = "VectorRootGroup";
+ }
+
+ @androidx.compose.runtime.Immutable public final class VectorPath extends androidx.compose.ui.graphics.vector.VectorNode {
+ method public androidx.compose.ui.graphics.Brush? getFill();
+ method public float getFillAlpha();
+ method public String getName();
+ method public java.util.List<androidx.compose.ui.graphics.vector.PathNode> getPathData();
+ method public int getPathFillType();
+ method public androidx.compose.ui.graphics.Brush? getStroke();
+ method public float getStrokeAlpha();
+ method public int getStrokeLineCap();
+ method public int getStrokeLineJoin();
+ method public float getStrokeLineMiter();
+ method public float getStrokeLineWidth();
+ method public float getTrimPathEnd();
+ method public float getTrimPathOffset();
+ method public float getTrimPathStart();
+ property public final androidx.compose.ui.graphics.Brush? fill;
+ property public final float fillAlpha;
+ property public final String name;
+ property public final java.util.List<androidx.compose.ui.graphics.vector.PathNode> pathData;
+ property public final int pathFillType;
+ property public final androidx.compose.ui.graphics.Brush? stroke;
+ property public final float strokeAlpha;
+ property public final int strokeLineCap;
+ property public final int strokeLineJoin;
+ property public final float strokeLineMiter;
+ property public final float strokeLineWidth;
+ property public final float trimPathEnd;
+ property public final float trimPathOffset;
+ property public final float trimPathStart;
+ }
+
+ public abstract sealed class VectorProperty<T> {
+ }
+
+ public static final class VectorProperty.Fill extends androidx.compose.ui.graphics.vector.VectorProperty<androidx.compose.ui.graphics.Brush> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.Fill INSTANCE;
+ }
+
+ public static final class VectorProperty.FillAlpha extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.FillAlpha INSTANCE;
+ }
+
+ public static final class VectorProperty.PathData extends androidx.compose.ui.graphics.vector.VectorProperty<java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode>> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.PathData INSTANCE;
+ }
+
+ public static final class VectorProperty.PivotX extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.PivotX INSTANCE;
+ }
+
+ public static final class VectorProperty.PivotY extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.PivotY INSTANCE;
+ }
+
+ public static final class VectorProperty.Rotation extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.Rotation INSTANCE;
+ }
+
+ public static final class VectorProperty.ScaleX extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.ScaleX INSTANCE;
+ }
+
+ public static final class VectorProperty.ScaleY extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.ScaleY INSTANCE;
+ }
+
+ public static final class VectorProperty.Stroke extends androidx.compose.ui.graphics.vector.VectorProperty<androidx.compose.ui.graphics.Brush> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.Stroke INSTANCE;
+ }
+
+ public static final class VectorProperty.StrokeAlpha extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.StrokeAlpha INSTANCE;
+ }
+
+ public static final class VectorProperty.StrokeLineWidth extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.StrokeLineWidth INSTANCE;
+ }
+
+ public static final class VectorProperty.TranslateX extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TranslateX INSTANCE;
+ }
+
+ public static final class VectorProperty.TranslateY extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TranslateY INSTANCE;
+ }
+
+ public static final class VectorProperty.TrimPathEnd extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TrimPathEnd INSTANCE;
+ }
+
+ public static final class VectorProperty.TrimPathOffset extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TrimPathOffset INSTANCE;
+ }
+
+ public static final class VectorProperty.TrimPathStart extends androidx.compose.ui.graphics.vector.VectorProperty<java.lang.Float> {
+ field public static final androidx.compose.ui.graphics.vector.VectorProperty.TrimPathStart INSTANCE;
+ }
+
+}
+
+package androidx.compose.ui.hapticfeedback {
+
+ public interface HapticFeedback {
+ method public void performHapticFeedback(int hapticFeedbackType);
+ }
+
+ @kotlin.jvm.JvmInline public final value class HapticFeedbackType {
+ ctor public HapticFeedbackType(int value);
+ field public static final androidx.compose.ui.hapticfeedback.HapticFeedbackType.Companion Companion;
+ }
+
+ public static final class HapticFeedbackType.Companion {
+ method public int getLongPress();
+ method public int getTextHandleMove();
+ method public java.util.List<androidx.compose.ui.hapticfeedback.HapticFeedbackType> values();
+ property public final int LongPress;
+ property public final int TextHandleMove;
+ }
+
+}
+
+package androidx.compose.ui.input {
+
+ @kotlin.jvm.JvmInline public final value class InputMode {
+ field public static final androidx.compose.ui.input.InputMode.Companion Companion;
+ }
+
+ public static final class InputMode.Companion {
+ method public int getKeyboard();
+ method public int getTouch();
+ property public final int Keyboard;
+ property public final int Touch;
+ }
+
+ public interface InputModeManager {
+ method public int getInputMode();
+ property public abstract int inputMode;
+ }
+
+}
+
+package androidx.compose.ui.input.key {
+
+ @kotlin.jvm.JvmInline public final value class Key {
+ ctor public Key(long keyCode);
+ method public long getKeyCode();
+ property public final long keyCode;
+ field public static final androidx.compose.ui.input.key.Key.Companion Companion;
+ }
+
+ public static final class Key.Companion {
+ method public long getA();
+ method public long getAllApps();
+ method public long getAltLeft();
+ method public long getAltRight();
+ method public long getApostrophe();
+ method public long getAppSwitch();
+ method public long getAssist();
+ method public long getAt();
+ method public long getAvReceiverInput();
+ method public long getAvReceiverPower();
+ method public long getB();
+ method public long getBack();
+ method public long getBackslash();
+ method public long getBackspace();
+ method public long getBookmark();
+ method public long getBreak();
+ method public long getBrightnessDown();
+ method public long getBrightnessUp();
+ method public long getBrowser();
+ method public long getButton1();
+ method public long getButton10();
+ method public long getButton11();
+ method public long getButton12();
+ method public long getButton13();
+ method public long getButton14();
+ method public long getButton15();
+ method public long getButton16();
+ method public long getButton2();
+ method public long getButton3();
+ method public long getButton4();
+ method public long getButton5();
+ method public long getButton6();
+ method public long getButton7();
+ method public long getButton8();
+ method public long getButton9();
+ method public long getButtonA();
+ method public long getButtonB();
+ method public long getButtonC();
+ method public long getButtonL1();
+ method public long getButtonL2();
+ method public long getButtonMode();
+ method public long getButtonR1();
+ method public long getButtonR2();
+ method public long getButtonSelect();
+ method public long getButtonStart();
+ method public long getButtonThumbLeft();
+ method public long getButtonThumbRight();
+ method public long getButtonX();
+ method public long getButtonY();
+ method public long getButtonZ();
+ method public long getC();
+ method public long getCalculator();
+ method public long getCalendar();
+ method public long getCall();
+ method public long getCamera();
+ method public long getCapsLock();
+ method public long getCaptions();
+ method public long getChannelDown();
+ method public long getChannelUp();
+ method public long getClear();
+ method public long getComma();
+ method public long getContacts();
+ method public long getCopy();
+ method public long getCtrlLeft();
+ method public long getCtrlRight();
+ method public long getCut();
+ method public long getD();
+ method public long getDelete();
+ method public long getDirectionCenter();
+ method public long getDirectionDown();
+ method public long getDirectionDownLeft();
+ method public long getDirectionDownRight();
+ method public long getDirectionLeft();
+ method public long getDirectionRight();
+ method public long getDirectionUp();
+ method public long getDirectionUpLeft();
+ method public long getDirectionUpRight();
+ method public long getDvr();
+ method public long getE();
+ method public long getEight();
+ method public long getEisu();
+ method public long getEndCall();
+ method public long getEnter();
+ method public long getEnvelope();
+ method public long getEquals();
+ method public long getEscape();
+ method public long getF();
+ method public long getF1();
+ method public long getF10();
+ method public long getF11();
+ method public long getF12();
+ method public long getF2();
+ method public long getF3();
+ method public long getF4();
+ method public long getF5();
+ method public long getF6();
+ method public long getF7();
+ method public long getF8();
+ method public long getF9();
+ method public long getFive();
+ method public long getFocus();
+ method public long getForward();
+ method public long getFour();
+ method public long getFunction();
+ method public long getG();
+ method public long getGrave();
+ method public long getGuide();
+ method public long getH();
+ method public long getHeadsetHook();
+ method public long getHelp();
+ method public long getHenkan();
+ method public long getHome();
+ method public long getI();
+ method public long getInfo();
+ method public long getInsert();
+ method public long getJ();
+ method public long getK();
+ method public long getKana();
+ method public long getKatakanaHiragana();
+ method public long getL();
+ method public long getLanguageSwitch();
+ method public long getLastChannel();
+ method public long getLeftBracket();
+ method public long getM();
+ method public long getMannerMode();
+ method public long getMediaAudioTrack();
+ method public long getMediaClose();
+ method public long getMediaEject();
+ method public long getMediaFastForward();
+ method public long getMediaNext();
+ method public long getMediaPause();
+ method public long getMediaPlay();
+ method public long getMediaPlayPause();
+ method public long getMediaPrevious();
+ method public long getMediaRecord();
+ method public long getMediaRewind();
+ method public long getMediaSkipBackward();
+ method public long getMediaSkipForward();
+ method public long getMediaStepBackward();
+ method public long getMediaStepForward();
+ method public long getMediaStop();
+ method public long getMediaTopMenu();
+ method public long getMenu();
+ method public long getMetaLeft();
+ method public long getMetaRight();
+ method public long getMicrophoneMute();
+ method public long getMinus();
+ method public long getMoveEnd();
+ method public long getMoveHome();
+ method public long getMuhenkan();
+ method public long getMultiply();
+ method public long getMusic();
+ method public long getN();
+ method public long getNavigateIn();
+ method public long getNavigateNext();
+ method public long getNavigateOut();
+ method public long getNavigatePrevious();
+ method public long getNine();
+ method public long getNotification();
+ method public long getNumLock();
+ method public long getNumPad0();
+ method public long getNumPad1();
+ method public long getNumPad2();
+ method public long getNumPad3();
+ method public long getNumPad4();
+ method public long getNumPad5();
+ method public long getNumPad6();
+ method public long getNumPad7();
+ method public long getNumPad8();
+ method public long getNumPad9();
+ method public long getNumPadAdd();
+ method public long getNumPadComma();
+ method public long getNumPadDivide();
+ method public long getNumPadDot();
+ method public long getNumPadEnter();
+ method public long getNumPadEquals();
+ method public long getNumPadLeftParenthesis();
+ method public long getNumPadMultiply();
+ method public long getNumPadRightParenthesis();
+ method public long getNumPadSubtract();
+ method public long getNumber();
+ method public long getO();
+ method public long getOne();
+ method public long getP();
+ method public long getPageDown();
+ method public long getPageUp();
+ method public long getPairing();
+ method public long getPaste();
+ method public long getPeriod();
+ method public long getPictureSymbols();
+ method public long getPlus();
+ method public long getPound();
+ method public long getPower();
+ method public long getPrintScreen();
+ method public long getProfileSwitch();
+ method public long getProgramBlue();
+ method public long getProgramGreen();
+ method public long getProgramRed();
+ method public long getProgramYellow();
+ method public long getQ();
+ method public long getR();
+ method public long getRefresh();
+ method public long getRightBracket();
+ method public long getRo();
+ method public long getS();
+ method public long getScrollLock();
+ method public long getSearch();
+ method public long getSemicolon();
+ method public long getSetTopBoxInput();
+ method public long getSetTopBoxPower();
+ method public long getSettings();
+ method public long getSeven();
+ method public long getShiftLeft();
+ method public long getShiftRight();
+ method public long getSix();
+ method public long getSlash();
+ method public long getSleep();
+ method public long getSoftLeft();
+ method public long getSoftRight();
+ method public long getSoftSleep();
+ method public long getSpacebar();
+ method public long getStem1();
+ method public long getStem2();
+ method public long getStem3();
+ method public long getStemPrimary();
+ method public long getSwitchCharset();
+ method public long getSymbol();
+ method public long getSystemNavigationDown();
+ method public long getSystemNavigationLeft();
+ method public long getSystemNavigationRight();
+ method public long getSystemNavigationUp();
+ method public long getT();
+ method public long getTab();
+ method public long getThree();
+ method public long getThumbsDown();
+ method public long getThumbsUp();
+ method public long getToggle2D3D();
+ method public long getTv();
+ method public long getTvAntennaCable();
+ method public long getTvAudioDescription();
+ method public long getTvAudioDescriptionMixingVolumeDown();
+ method public long getTvAudioDescriptionMixingVolumeUp();
+ method public long getTvContentsMenu();
+ method public long getTvDataService();
+ method public long getTvInput();
+ method public long getTvInputComponent1();
+ method public long getTvInputComponent2();
+ method public long getTvInputComposite1();
+ method public long getTvInputComposite2();
+ method public long getTvInputHdmi1();
+ method public long getTvInputHdmi2();
+ method public long getTvInputHdmi3();
+ method public long getTvInputHdmi4();
+ method public long getTvInputVga1();
+ method public long getTvMediaContextMenu();
+ method public long getTvNetwork();
+ method public long getTvNumberEntry();
+ method public long getTvPower();
+ method public long getTvRadioService();
+ method public long getTvSatellite();
+ method public long getTvSatelliteBs();
+ method public long getTvSatelliteCs();
+ method public long getTvSatelliteService();
+ method public long getTvTeletext();
+ method public long getTvTerrestrialAnalog();
+ method public long getTvTerrestrialDigital();
+ method public long getTvTimerProgramming();
+ method public long getTvZoomMode();
+ method public long getTwo();
+ method public long getU();
+ method public long getUnknown();
+ method public long getV();
+ method public long getVoiceAssist();
+ method public long getVolumeDown();
+ method public long getVolumeMute();
+ method public long getVolumeUp();
+ method public long getW();
+ method public long getWakeUp();
+ method public long getWindow();
+ method public long getX();
+ method public long getY();
+ method public long getYen();
+ method public long getZ();
+ method public long getZenkakuHankaru();
+ method public long getZero();
+ method public long getZoomIn();
+ method public long getZoomOut();
+ property public final long A;
+ property public final long AllApps;
+ property public final long AltLeft;
+ property public final long AltRight;
+ property public final long Apostrophe;
+ property public final long AppSwitch;
+ property public final long Assist;
+ property public final long At;
+ property public final long AvReceiverInput;
+ property public final long AvReceiverPower;
+ property public final long B;
+ property public final long Back;
+ property public final long Backslash;
+ property public final long Backspace;
+ property public final long Bookmark;
+ property public final long Break;
+ property public final long BrightnessDown;
+ property public final long BrightnessUp;
+ property public final long Browser;
+ property public final long Button1;
+ property public final long Button10;
+ property public final long Button11;
+ property public final long Button12;
+ property public final long Button13;
+ property public final long Button14;
+ property public final long Button15;
+ property public final long Button16;
+ property public final long Button2;
+ property public final long Button3;
+ property public final long Button4;
+ property public final long Button5;
+ property public final long Button6;
+ property public final long Button7;
+ property public final long Button8;
+ property public final long Button9;
+ property public final long ButtonA;
+ property public final long ButtonB;
+ property public final long ButtonC;
+ property public final long ButtonL1;
+ property public final long ButtonL2;
+ property public final long ButtonMode;
+ property public final long ButtonR1;
+ property public final long ButtonR2;
+ property public final long ButtonSelect;
+ property public final long ButtonStart;
+ property public final long ButtonThumbLeft;
+ property public final long ButtonThumbRight;
+ property public final long ButtonX;
+ property public final long ButtonY;
+ property public final long ButtonZ;
+ property public final long C;
+ property public final long Calculator;
+ property public final long Calendar;
+ property public final long Call;
+ property public final long Camera;
+ property public final long CapsLock;
+ property public final long Captions;
+ property public final long ChannelDown;
+ property public final long ChannelUp;
+ property public final long Clear;
+ property public final long Comma;
+ property public final long Contacts;
+ property public final long Copy;
+ property public final long CtrlLeft;
+ property public final long CtrlRight;
+ property public final long Cut;
+ property public final long D;
+ property public final long Delete;
+ property public final long DirectionCenter;
+ property public final long DirectionDown;
+ property public final long DirectionDownLeft;
+ property public final long DirectionDownRight;
+ property public final long DirectionLeft;
+ property public final long DirectionRight;
+ property public final long DirectionUp;
+ property public final long DirectionUpLeft;
+ property public final long DirectionUpRight;
+ property public final long Dvr;
+ property public final long E;
+ property public final long Eight;
+ property public final long Eisu;
+ property public final long EndCall;
+ property public final long Enter;
+ property public final long Envelope;
+ property public final long Equals;
+ property public final long Escape;
+ property public final long F;
+ property public final long F1;
+ property public final long F10;
+ property public final long F11;
+ property public final long F12;
+ property public final long F2;
+ property public final long F3;
+ property public final long F4;
+ property public final long F5;
+ property public final long F6;
+ property public final long F7;
+ property public final long F8;
+ property public final long F9;
+ property public final long Five;
+ property public final long Focus;
+ property public final long Forward;
+ property public final long Four;
+ property public final long Function;
+ property public final long G;
+ property public final long Grave;
+ property public final long Guide;
+ property public final long H;
+ property public final long HeadsetHook;
+ property public final long Help;
+ property public final long Henkan;
+ property public final long Home;
+ property public final long I;
+ property public final long Info;
+ property public final long Insert;
+ property public final long J;
+ property public final long K;
+ property public final long Kana;
+ property public final long KatakanaHiragana;
+ property public final long L;
+ property public final long LanguageSwitch;
+ property public final long LastChannel;
+ property public final long LeftBracket;
+ property public final long M;
+ property public final long MannerMode;
+ property public final long MediaAudioTrack;
+ property public final long MediaClose;
+ property public final long MediaEject;
+ property public final long MediaFastForward;
+ property public final long MediaNext;
+ property public final long MediaPause;
+ property public final long MediaPlay;
+ property public final long MediaPlayPause;
+ property public final long MediaPrevious;
+ property public final long MediaRecord;
+ property public final long MediaRewind;
+ property public final long MediaSkipBackward;
+ property public final long MediaSkipForward;
+ property public final long MediaStepBackward;
+ property public final long MediaStepForward;
+ property public final long MediaStop;
+ property public final long MediaTopMenu;
+ property public final long Menu;
+ property public final long MetaLeft;
+ property public final long MetaRight;
+ property public final long MicrophoneMute;
+ property public final long Minus;
+ property public final long MoveEnd;
+ property public final long MoveHome;
+ property public final long Muhenkan;
+ property public final long Multiply;
+ property public final long Music;
+ property public final long N;
+ property public final long NavigateIn;
+ property public final long NavigateNext;
+ property public final long NavigateOut;
+ property public final long NavigatePrevious;
+ property public final long Nine;
+ property public final long Notification;
+ property public final long NumLock;
+ property public final long NumPad0;
+ property public final long NumPad1;
+ property public final long NumPad2;
+ property public final long NumPad3;
+ property public final long NumPad4;
+ property public final long NumPad5;
+ property public final long NumPad6;
+ property public final long NumPad7;
+ property public final long NumPad8;
+ property public final long NumPad9;
+ property public final long NumPadAdd;
+ property public final long NumPadComma;
+ property public final long NumPadDivide;
+ property public final long NumPadDot;
+ property public final long NumPadEnter;
+ property public final long NumPadEquals;
+ property public final long NumPadLeftParenthesis;
+ property public final long NumPadMultiply;
+ property public final long NumPadRightParenthesis;
+ property public final long NumPadSubtract;
+ property public final long Number;
+ property public final long O;
+ property public final long One;
+ property public final long P;
+ property public final long PageDown;
+ property public final long PageUp;
+ property public final long Pairing;
+ property public final long Paste;
+ property public final long Period;
+ property public final long PictureSymbols;
+ property public final long Plus;
+ property public final long Pound;
+ property public final long Power;
+ property public final long PrintScreen;
+ property public final long ProfileSwitch;
+ property public final long ProgramBlue;
+ property public final long ProgramGreen;
+ property public final long ProgramRed;
+ property public final long ProgramYellow;
+ property public final long Q;
+ property public final long R;
+ property public final long Refresh;
+ property public final long RightBracket;
+ property public final long Ro;
+ property public final long S;
+ property public final long ScrollLock;
+ property public final long Search;
+ property public final long Semicolon;
+ property public final long SetTopBoxInput;
+ property public final long SetTopBoxPower;
+ property public final long Settings;
+ property public final long Seven;
+ property public final long ShiftLeft;
+ property public final long ShiftRight;
+ property public final long Six;
+ property public final long Slash;
+ property public final long Sleep;
+ property public final long SoftLeft;
+ property public final long SoftRight;
+ property public final long SoftSleep;
+ property public final long Spacebar;
+ property public final long Stem1;
+ property public final long Stem2;
+ property public final long Stem3;
+ property public final long StemPrimary;
+ property public final long SwitchCharset;
+ property public final long Symbol;
+ property public final long SystemNavigationDown;
+ property public final long SystemNavigationLeft;
+ property public final long SystemNavigationRight;
+ property public final long SystemNavigationUp;
+ property public final long T;
+ property public final long Tab;
+ property public final long Three;
+ property public final long ThumbsDown;
+ property public final long ThumbsUp;
+ property public final long Toggle2D3D;
+ property public final long Tv;
+ property public final long TvAntennaCable;
+ property public final long TvAudioDescription;
+ property public final long TvAudioDescriptionMixingVolumeDown;
+ property public final long TvAudioDescriptionMixingVolumeUp;
+ property public final long TvContentsMenu;
+ property public final long TvDataService;
+ property public final long TvInput;
+ property public final long TvInputComponent1;
+ property public final long TvInputComponent2;
+ property public final long TvInputComposite1;
+ property public final long TvInputComposite2;
+ property public final long TvInputHdmi1;
+ property public final long TvInputHdmi2;
+ property public final long TvInputHdmi3;
+ property public final long TvInputHdmi4;
+ property public final long TvInputVga1;
+ property public final long TvMediaContextMenu;
+ property public final long TvNetwork;
+ property public final long TvNumberEntry;
+ property public final long TvPower;
+ property public final long TvRadioService;
+ property public final long TvSatellite;
+ property public final long TvSatelliteBs;
+ property public final long TvSatelliteCs;
+ property public final long TvSatelliteService;
+ property public final long TvTeletext;
+ property public final long TvTerrestrialAnalog;
+ property public final long TvTerrestrialDigital;
+ property public final long TvTimerProgramming;
+ property public final long TvZoomMode;
+ property public final long Two;
+ property public final long U;
+ property public final long Unknown;
+ property public final long V;
+ property public final long VoiceAssist;
+ property public final long VolumeDown;
+ property public final long VolumeMute;
+ property public final long VolumeUp;
+ property public final long W;
+ property public final long WakeUp;
+ property public final long Window;
+ property public final long X;
+ property public final long Y;
+ property public final long Yen;
+ property public final long Z;
+ property public final long ZenkakuHankaru;
+ property public final long Zero;
+ property public final long ZoomIn;
+ property public final long ZoomOut;
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyEvent {
+ ctor public KeyEvent(android.view.KeyEvent nativeKeyEvent);
+ method public android.view.KeyEvent getNativeKeyEvent();
+ property public final android.view.KeyEvent nativeKeyEvent;
+ }
+
+ @kotlin.jvm.JvmInline public final value class KeyEventType {
+ field public static final androidx.compose.ui.input.key.KeyEventType.Companion Companion;
+ }
+
+ public static final class KeyEventType.Companion {
+ method public int getKeyDown();
+ method public int getKeyUp();
+ method public int getUnknown();
+ property public final int KeyDown;
+ property public final int KeyUp;
+ property public final int Unknown;
+ }
+
+ public final class KeyEvent_androidKt {
+ method public static long getKey(android.view.KeyEvent);
+ method public static int getType(android.view.KeyEvent);
+ method public static int getUtf16CodePoint(android.view.KeyEvent);
+ method public static boolean isAltPressed(android.view.KeyEvent);
+ method public static boolean isCtrlPressed(android.view.KeyEvent);
+ method public static boolean isMetaPressed(android.view.KeyEvent);
+ method public static boolean isShiftPressed(android.view.KeyEvent);
+ }
+
+ public final class KeyInputModifierKt {
+ method public static androidx.compose.ui.Modifier onKeyEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.key.KeyEvent,java.lang.Boolean> onKeyEvent);
+ method public static androidx.compose.ui.Modifier onPreviewKeyEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.key.KeyEvent,java.lang.Boolean> onPreviewKeyEvent);
+ }
+
+ public final class Key_androidKt {
+ method public static long Key(int nativeKeyCode);
+ method public static int getNativeKeyCode(long);
+ }
+
+}
+
+package androidx.compose.ui.input.nestedscroll {
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface NestedScrollConnection {
+ method public default suspend Object? onPostFling(long consumed, long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public default long onPostScroll(long consumed, long available, int source);
+ method public default suspend Object? onPreFling(long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public default long onPreScroll(long available, int source);
+ }
+
+ public final class NestedScrollDispatcher {
+ ctor public NestedScrollDispatcher();
+ method public suspend Object? dispatchPostFling(long consumed, long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public long dispatchPostScroll(long consumed, long available, int source);
+ method public suspend Object? dispatchPreFling(long available, kotlin.coroutines.Continuation<? super androidx.compose.ui.unit.Velocity>);
+ method public long dispatchPreScroll(long available, int source);
+ method public kotlinx.coroutines.CoroutineScope getCoroutineScope();
+ property public final kotlinx.coroutines.CoroutineScope coroutineScope;
+ }
+
+ public final class NestedScrollModifierKt {
+ method public static androidx.compose.ui.Modifier nestedScroll(androidx.compose.ui.Modifier, androidx.compose.ui.input.nestedscroll.NestedScrollConnection connection, optional androidx.compose.ui.input.nestedscroll.NestedScrollDispatcher? dispatcher);
+ }
+
+ @kotlin.jvm.JvmInline public final value class NestedScrollSource {
+ field public static final androidx.compose.ui.input.nestedscroll.NestedScrollSource.Companion Companion;
+ }
+
+ public static final class NestedScrollSource.Companion {
+ method public int getDrag();
+ method public int getFling();
+ method @Deprecated public int getRelocate();
+ property public final int Drag;
+ property public final int Fling;
+ property @Deprecated public final int Relocate;
+ }
+
+}
+
+package androidx.compose.ui.input.pointer {
+
+ @kotlin.coroutines.RestrictsSuspension @kotlin.jvm.JvmDefaultWithCompatibility public interface AwaitPointerEventScope extends androidx.compose.ui.unit.Density {
+ method public suspend Object? awaitPointerEvent(optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerEvent>);
+ method public androidx.compose.ui.input.pointer.PointerEvent getCurrentEvent();
+ method public default long getExtendedTouchPadding();
+ method public long getSize();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public default suspend <T> Object? withTimeout(long timeMillis, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method public default suspend <T> Object? withTimeoutOrNull(long timeMillis, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ property public abstract androidx.compose.ui.input.pointer.PointerEvent currentEvent;
+ property public default long extendedTouchPadding;
+ property public abstract long size;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ }
+
+ @Deprecated public final class ConsumedData {
+ ctor @Deprecated public ConsumedData(optional @Deprecated boolean positionChange, optional @Deprecated boolean downChange);
+ method @Deprecated public boolean getDownChange();
+ method @Deprecated public boolean getPositionChange();
+ method @Deprecated public void setDownChange(boolean);
+ method @Deprecated public void setPositionChange(boolean);
+ property @Deprecated public final boolean downChange;
+ property @Deprecated public final boolean positionChange;
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerButtons {
+ ctor public PointerButtons(int packedValue);
+ }
+
+ public final class PointerEvent {
+ ctor public PointerEvent(java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> changes);
+ method public java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> component1();
+ method public androidx.compose.ui.input.pointer.PointerEvent copy(java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> changes, android.view.MotionEvent? motionEvent);
+ method public int getButtons();
+ method public java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> getChanges();
+ method public int getKeyboardModifiers();
+ method public int getType();
+ property public final int buttons;
+ property public final java.util.List<androidx.compose.ui.input.pointer.PointerInputChange> changes;
+ property public final int keyboardModifiers;
+ property public final int type;
+ }
+
+ public final class PointerEventKt {
+ method @Deprecated public static boolean anyChangeConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToDown(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToDownIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToUp(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean changedToUpIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static void consumeAllChanges(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static void consumeDownChange(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static void consumePositionChange(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static int indexOfFirstPressed(int);
+ method public static int indexOfLastPressed(int);
+ method @Deprecated public static boolean isOutOfBounds(androidx.compose.ui.input.pointer.PointerInputChange, long size);
+ method public static boolean isOutOfBounds(androidx.compose.ui.input.pointer.PointerInputChange, long size, long extendedTouchPadding);
+ method public static boolean isPressed(int, int buttonIndex);
+ method public static long positionChange(androidx.compose.ui.input.pointer.PointerInputChange);
+ method @Deprecated public static boolean positionChangeConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static long positionChangeIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean positionChanged(androidx.compose.ui.input.pointer.PointerInputChange);
+ method public static boolean positionChangedIgnoreConsumed(androidx.compose.ui.input.pointer.PointerInputChange);
+ }
+
+ public enum PointerEventPass {
+ method public static androidx.compose.ui.input.pointer.PointerEventPass valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.input.pointer.PointerEventPass[] values();
+ enum_constant public static final androidx.compose.ui.input.pointer.PointerEventPass Final;
+ enum_constant public static final androidx.compose.ui.input.pointer.PointerEventPass Initial;
+ enum_constant public static final androidx.compose.ui.input.pointer.PointerEventPass Main;
+ }
+
+ public final class PointerEventTimeoutCancellationException extends java.util.concurrent.CancellationException {
+ ctor public PointerEventTimeoutCancellationException(long time);
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerEventType {
+ field public static final androidx.compose.ui.input.pointer.PointerEventType.Companion Companion;
+ }
+
+ public static final class PointerEventType.Companion {
+ method public int getEnter();
+ method public int getExit();
+ method public int getMove();
+ method public int getPress();
+ method public int getRelease();
+ method public int getScroll();
+ method public int getUnknown();
+ property public final int Enter;
+ property public final int Exit;
+ property public final int Move;
+ property public final int Press;
+ property public final int Release;
+ property public final int Scroll;
+ property public final int Unknown;
+ }
+
+ public final class PointerEvent_androidKt {
+ method public static boolean getAreAnyPressed(int);
+ method public static int indexOfFirstPressed(int);
+ method public static int indexOfLastPressed(int);
+ method public static boolean isAltGraphPressed(int);
+ method public static boolean isAltPressed(int);
+ method public static boolean isBackPressed(int);
+ method public static boolean isCapsLockOn(int);
+ method public static boolean isCtrlPressed(int);
+ method public static boolean isForwardPressed(int);
+ method public static boolean isFunctionPressed(int);
+ method public static boolean isMetaPressed(int);
+ method public static boolean isNumLockOn(int);
+ method public static boolean isPressed(int, int buttonIndex);
+ method public static boolean isPrimaryPressed(int);
+ method public static boolean isScrollLockOn(int);
+ method public static boolean isSecondaryPressed(int);
+ method public static boolean isShiftPressed(int);
+ method public static boolean isSymPressed(int);
+ method public static boolean isTertiaryPressed(int);
+ }
+
+ @androidx.compose.runtime.Stable public interface PointerIcon {
+ field public static final androidx.compose.ui.input.pointer.PointerIcon.Companion Companion;
+ }
+
+ public static final class PointerIcon.Companion {
+ method public androidx.compose.ui.input.pointer.PointerIcon getCrosshair();
+ method public androidx.compose.ui.input.pointer.PointerIcon getDefault();
+ method public androidx.compose.ui.input.pointer.PointerIcon getHand();
+ method public androidx.compose.ui.input.pointer.PointerIcon getText();
+ property public final androidx.compose.ui.input.pointer.PointerIcon Crosshair;
+ property public final androidx.compose.ui.input.pointer.PointerIcon Default;
+ property public final androidx.compose.ui.input.pointer.PointerIcon Hand;
+ property public final androidx.compose.ui.input.pointer.PointerIcon Text;
+ }
+
+ public final class PointerIconKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier pointerHoverIcon(androidx.compose.ui.Modifier, androidx.compose.ui.input.pointer.PointerIcon icon, optional boolean overrideDescendants);
+ }
+
+ public final class PointerIcon_androidKt {
+ method public static androidx.compose.ui.input.pointer.PointerIcon PointerIcon(android.view.PointerIcon pointerIcon);
+ method public static androidx.compose.ui.input.pointer.PointerIcon PointerIcon(int pointerIconType);
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerId {
+ ctor public PointerId(long value);
+ method public long getValue();
+ property public final long value;
+ }
+
+ @androidx.compose.runtime.Immutable public final class PointerInputChange {
+ ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
+ ctor @Deprecated public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ method public void consume();
+ method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
+ method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type, optional long scrollDelta);
+ method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ method @Deprecated public androidx.compose.ui.input.pointer.ConsumedData getConsumed();
+ method public long getId();
+ method public long getPosition();
+ method public boolean getPressed();
+ method public long getPreviousPosition();
+ method public boolean getPreviousPressed();
+ method public long getPreviousUptimeMillis();
+ method public long getScrollDelta();
+ method public int getType();
+ method public long getUptimeMillis();
+ method public boolean isConsumed();
+ property @Deprecated public final androidx.compose.ui.input.pointer.ConsumedData consumed;
+ property public final long id;
+ property public final boolean isConsumed;
+ property public final long position;
+ property public final boolean pressed;
+ property public final long previousPosition;
+ property public final boolean previousPressed;
+ property public final long previousUptimeMillis;
+ property public final long scrollDelta;
+ property public final int type;
+ property public final long uptimeMillis;
+ }
+
+ public abstract class PointerInputFilter {
+ ctor public PointerInputFilter();
+ method public boolean getInterceptOutOfBoundsChildEvents();
+ method public final long getSize();
+ method public abstract void onCancel();
+ method public abstract void onPointerEvent(androidx.compose.ui.input.pointer.PointerEvent pointerEvent, androidx.compose.ui.input.pointer.PointerEventPass pass, long bounds);
+ property public boolean interceptOutOfBoundsChildEvents;
+ property public final long size;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PointerInputModifier extends androidx.compose.ui.Modifier.Element {
+ method public androidx.compose.ui.input.pointer.PointerInputFilter getPointerInputFilter();
+ property public abstract androidx.compose.ui.input.pointer.PointerInputFilter pointerInputFilter;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface PointerInputScope extends androidx.compose.ui.unit.Density {
+ method public suspend <R> Object? awaitPointerEventScope(kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ method public default long getExtendedTouchPadding();
+ method public default boolean getInterceptOutOfBoundsChildEvents();
+ method public long getSize();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public default void setInterceptOutOfBoundsChildEvents(boolean);
+ property public default long extendedTouchPadding;
+ property public default boolean interceptOutOfBoundsChildEvents;
+ property public abstract long size;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerKeyboardModifiers {
+ ctor public PointerKeyboardModifiers(int packedValue);
+ }
+
+ @kotlin.jvm.JvmInline public final value class PointerType {
+ field public static final androidx.compose.ui.input.pointer.PointerType.Companion Companion;
+ }
+
+ public static final class PointerType.Companion {
+ method public int getEraser();
+ method public int getMouse();
+ method public int getStylus();
+ method public int getTouch();
+ method public int getUnknown();
+ property public final int Eraser;
+ property public final int Mouse;
+ property public final int Stylus;
+ property public final int Touch;
+ property public final int Unknown;
+ }
+
+ public final class SuspendingPointerInputFilterKt {
+ method @Deprecated public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ }
+
+}
+
+package androidx.compose.ui.input.pointer.util {
+
+ public final class VelocityTracker {
+ ctor public VelocityTracker();
+ method public void addPosition(long timeMillis, long position);
+ method public long calculateVelocity();
+ method public void resetTracking();
+ }
+
+ public final class VelocityTracker1D {
+ ctor public VelocityTracker1D(boolean isDataDifferential);
+ method public void addDataPoint(long timeMillis, float dataPoint);
+ method public float calculateVelocity();
+ method public boolean isDataDifferential();
+ method public void resetTracking();
+ property public final boolean isDataDifferential;
+ }
+
+ public final class VelocityTrackerKt {
+ method public static void addPointerInputChange(androidx.compose.ui.input.pointer.util.VelocityTracker, androidx.compose.ui.input.pointer.PointerInputChange event);
+ }
+
+}
+
+package androidx.compose.ui.input.rotary {
+
+ public final class RotaryInputModifierKt {
+ method public static androidx.compose.ui.Modifier onPreRotaryScrollEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.rotary.RotaryScrollEvent,java.lang.Boolean> onPreRotaryScrollEvent);
+ method public static androidx.compose.ui.Modifier onRotaryScrollEvent(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.input.rotary.RotaryScrollEvent,java.lang.Boolean> onRotaryScrollEvent);
+ }
+
+ public final class RotaryScrollEvent {
+ method public float getHorizontalScrollPixels();
+ method public long getUptimeMillis();
+ method public float getVerticalScrollPixels();
+ property public final float horizontalScrollPixels;
+ property public final long uptimeMillis;
+ property public final float verticalScrollPixels;
+ }
+
+}
+
+package androidx.compose.ui.layout {
+
+ @androidx.compose.runtime.Immutable public abstract sealed class AlignmentLine {
+ field public static final androidx.compose.ui.layout.AlignmentLine.Companion Companion;
+ field public static final int Unspecified = -2147483648; // 0x80000000
+ }
+
+ public static final class AlignmentLine.Companion {
+ }
+
+ public final class AlignmentLineKt {
+ method public static androidx.compose.ui.layout.HorizontalAlignmentLine getFirstBaseline();
+ method public static androidx.compose.ui.layout.HorizontalAlignmentLine getLastBaseline();
+ property public static final androidx.compose.ui.layout.HorizontalAlignmentLine FirstBaseline;
+ property public static final androidx.compose.ui.layout.HorizontalAlignmentLine LastBaseline;
+ }
+
+ public interface BeyondBoundsLayout {
+ method public <T> T? layout(int direction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.BeyondBoundsLayout.BeyondBoundsScope,? extends T> block);
+ }
+
+ public static interface BeyondBoundsLayout.BeyondBoundsScope {
+ method public boolean getHasMoreContent();
+ property public abstract boolean hasMoreContent;
+ }
+
+ @kotlin.jvm.JvmInline public static final value class BeyondBoundsLayout.LayoutDirection {
+ field public static final androidx.compose.ui.layout.BeyondBoundsLayout.LayoutDirection.Companion Companion;
+ }
+
+ public static final class BeyondBoundsLayout.LayoutDirection.Companion {
+ method public int getAbove();
+ method public int getAfter();
+ method public int getBefore();
+ method public int getBelow();
+ method public int getLeft();
+ method public int getRight();
+ property public final int Above;
+ property public final int After;
+ property public final int Before;
+ property public final int Below;
+ property public final int Left;
+ property public final int Right;
+ }
+
+ public final class BeyondBoundsLayoutKt {
+ method public static androidx.compose.ui.modifier.ProvidableModifierLocal<androidx.compose.ui.layout.BeyondBoundsLayout> getModifierLocalBeyondBoundsLayout();
+ property public static final androidx.compose.ui.modifier.ProvidableModifierLocal<androidx.compose.ui.layout.BeyondBoundsLayout> ModifierLocalBeyondBoundsLayout;
+ }
+
+ @androidx.compose.runtime.Stable public interface ContentScale {
+ method public long computeScaleFactor(long srcSize, long dstSize);
+ field public static final androidx.compose.ui.layout.ContentScale.Companion Companion;
+ }
+
+ public static final class ContentScale.Companion {
+ method public androidx.compose.ui.layout.ContentScale getCrop();
+ method public androidx.compose.ui.layout.ContentScale getFillBounds();
+ method public androidx.compose.ui.layout.ContentScale getFillHeight();
+ method public androidx.compose.ui.layout.ContentScale getFillWidth();
+ method public androidx.compose.ui.layout.ContentScale getFit();
+ method public androidx.compose.ui.layout.ContentScale getInside();
+ method public androidx.compose.ui.layout.FixedScale getNone();
+ property public final androidx.compose.ui.layout.ContentScale Crop;
+ property public final androidx.compose.ui.layout.ContentScale FillBounds;
+ property public final androidx.compose.ui.layout.ContentScale FillHeight;
+ property public final androidx.compose.ui.layout.ContentScale FillWidth;
+ property public final androidx.compose.ui.layout.ContentScale Fit;
+ property public final androidx.compose.ui.layout.ContentScale Inside;
+ property public final androidx.compose.ui.layout.FixedScale None;
+ }
+
+ @androidx.compose.runtime.Immutable public final class FixedScale implements androidx.compose.ui.layout.ContentScale {
+ ctor public FixedScale(float value);
+ method public float component1();
+ method public long computeScaleFactor(long srcSize, long dstSize);
+ method public androidx.compose.ui.layout.FixedScale copy(float value);
+ method public float getValue();
+ property public final float value;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface GraphicLayerInfo {
+ method public long getLayerId();
+ method public default long getOwnerViewId();
+ property public abstract long layerId;
+ property public default long ownerViewId;
+ }
+
+ public final class HorizontalAlignmentLine extends androidx.compose.ui.layout.AlignmentLine {
+ ctor public HorizontalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
+ }
+
+ public interface IntrinsicMeasurable {
+ method public Object? getParentData();
+ method public int maxIntrinsicHeight(int width);
+ method public int maxIntrinsicWidth(int height);
+ method public int minIntrinsicHeight(int width);
+ method public int minIntrinsicWidth(int height);
+ property public abstract Object? parentData;
+ }
+
+ public interface IntrinsicMeasureScope extends androidx.compose.ui.unit.Density {
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface LayoutCoordinates {
+ method public operator int get(androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public androidx.compose.ui.layout.LayoutCoordinates? getParentCoordinates();
+ method public androidx.compose.ui.layout.LayoutCoordinates? getParentLayoutCoordinates();
+ method public java.util.Set<androidx.compose.ui.layout.AlignmentLine> getProvidedAlignmentLines();
+ method public long getSize();
+ method public boolean isAttached();
+ method public androidx.compose.ui.geometry.Rect localBoundingBoxOf(androidx.compose.ui.layout.LayoutCoordinates sourceCoordinates, optional boolean clipBounds);
+ method public long localPositionOf(androidx.compose.ui.layout.LayoutCoordinates sourceCoordinates, long relativeToSource);
+ method public long localToRoot(long relativeToLocal);
+ method public long localToWindow(long relativeToLocal);
+ method public default void transformFrom(androidx.compose.ui.layout.LayoutCoordinates sourceCoordinates, float[] matrix);
+ method public long windowToLocal(long relativeToWindow);
+ property public abstract boolean isAttached;
+ property public abstract androidx.compose.ui.layout.LayoutCoordinates? parentCoordinates;
+ property public abstract androidx.compose.ui.layout.LayoutCoordinates? parentLayoutCoordinates;
+ property public abstract java.util.Set<androidx.compose.ui.layout.AlignmentLine> providedAlignmentLines;
+ property public abstract long size;
+ }
+
+ public final class LayoutCoordinatesKt {
+ method public static androidx.compose.ui.geometry.Rect boundsInParent(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static androidx.compose.ui.geometry.Rect boundsInRoot(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static androidx.compose.ui.geometry.Rect boundsInWindow(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static androidx.compose.ui.layout.LayoutCoordinates findRootCoordinates(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static long positionInParent(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static long positionInRoot(androidx.compose.ui.layout.LayoutCoordinates);
+ method public static long positionInWindow(androidx.compose.ui.layout.LayoutCoordinates);
+ }
+
+ public final class LayoutIdKt {
+ method public static Object? getLayoutId(androidx.compose.ui.layout.Measurable);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier layoutId(androidx.compose.ui.Modifier, Object layoutId);
+ }
+
+ public interface LayoutIdParentData {
+ method public Object getLayoutId();
+ property public abstract Object layoutId;
+ }
+
+ public interface LayoutInfo {
+ method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public int getHeight();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public java.util.List<androidx.compose.ui.layout.ModifierInfo> getModifierInfo();
+ method public androidx.compose.ui.layout.LayoutInfo? getParentInfo();
+ method public int getSemanticsId();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public int getWidth();
+ method public boolean isAttached();
+ method public boolean isPlaced();
+ property public abstract androidx.compose.ui.layout.LayoutCoordinates coordinates;
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract int height;
+ property public abstract boolean isAttached;
+ property public abstract boolean isPlaced;
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public abstract androidx.compose.ui.layout.LayoutInfo? parentInfo;
+ property public abstract int semanticsId;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ property public abstract int width;
+ }
+
+ public final class LayoutKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> content, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(java.util.List<? extends kotlin.jvm.functions.Function0<kotlin.Unit>> contents, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MultiContentMeasurePolicy measurePolicy);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void MultiMeasureLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
+ method @kotlin.PublishedApi internal static kotlin.jvm.functions.Function0<kotlin.Unit> combineAsVirtualLayouts(java.util.List<? extends kotlin.jvm.functions.Function0<kotlin.Unit>> contents);
+ method @kotlin.PublishedApi internal static kotlin.jvm.functions.Function1<androidx.compose.runtime.SkippableUpdater<androidx.compose.ui.node.ComposeUiNode>,kotlin.Unit> materializerOf(androidx.compose.ui.Modifier modifier);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface LayoutModifier extends androidx.compose.ui.Modifier.Element {
+ method public default int maxIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int width);
+ method public default int maxIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int height);
+ method public androidx.compose.ui.layout.MeasureResult measure(androidx.compose.ui.layout.MeasureScope, androidx.compose.ui.layout.Measurable measurable, long constraints);
+ method public default int minIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int width);
+ method public default int minIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, androidx.compose.ui.layout.IntrinsicMeasurable measurable, int height);
+ }
+
+ public final class LayoutModifierKt {
+ method public static androidx.compose.ui.Modifier layout(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function3<? super androidx.compose.ui.layout.MeasureScope,? super androidx.compose.ui.layout.Measurable,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measure);
+ }
+
+ public interface Measurable extends androidx.compose.ui.layout.IntrinsicMeasurable {
+ method public androidx.compose.ui.layout.Placeable measure(long constraints);
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public fun interface MeasurePolicy {
+ method public default int maxIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int width);
+ method public default int maxIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int height);
+ method public androidx.compose.ui.layout.MeasureResult measure(androidx.compose.ui.layout.MeasureScope, java.util.List<? extends androidx.compose.ui.layout.Measurable> measurables, long constraints);
+ method public default int minIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int width);
+ method public default int minIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable> measurables, int height);
+ }
+
+ public interface MeasureResult {
+ method public java.util.Map<androidx.compose.ui.layout.AlignmentLine,java.lang.Integer> getAlignmentLines();
+ method public int getHeight();
+ method public int getWidth();
+ method public void placeChildren();
+ property public abstract java.util.Map<androidx.compose.ui.layout.AlignmentLine,java.lang.Integer> alignmentLines;
+ property public abstract int height;
+ property public abstract int width;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface MeasureScope extends androidx.compose.ui.layout.IntrinsicMeasureScope {
+ method public default androidx.compose.ui.layout.MeasureResult layout(int width, int height, optional java.util.Map<androidx.compose.ui.layout.AlignmentLine,java.lang.Integer> alignmentLines, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Placeable.PlacementScope,kotlin.Unit> placementBlock);
+ }
+
+ public interface Measured {
+ method public operator int get(androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public int getMeasuredHeight();
+ method public int getMeasuredWidth();
+ method public default Object? getParentData();
+ property public abstract int measuredHeight;
+ property public abstract int measuredWidth;
+ property public default Object? parentData;
+ }
+
+ public final class ModifierInfo {
+ ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, optional Object? extra);
+ method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
+ method public Object? getExtra();
+ method public androidx.compose.ui.Modifier getModifier();
+ property public final androidx.compose.ui.layout.LayoutCoordinates coordinates;
+ property public final Object? extra;
+ property public final androidx.compose.ui.Modifier modifier;
+ }
+
+ @androidx.compose.runtime.Stable public fun interface MultiContentMeasurePolicy {
+ method public default int maxIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int width);
+ method public default int maxIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int height);
+ method public androidx.compose.ui.layout.MeasureResult measure(androidx.compose.ui.layout.MeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.Measurable>> measurables, long constraints);
+ method public default int minIntrinsicHeight(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int width);
+ method public default int minIntrinsicWidth(androidx.compose.ui.layout.IntrinsicMeasureScope, java.util.List<? extends java.util.List<? extends androidx.compose.ui.layout.IntrinsicMeasurable>> measurables, int height);
+ }
+
+ public final class MultiContentMeasurePolicyKt {
+ method @kotlin.PublishedApi internal static androidx.compose.ui.layout.MeasurePolicy createMeasurePolicy(androidx.compose.ui.layout.MultiContentMeasurePolicy measurePolicy);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface OnGloballyPositionedModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onGloballyPositioned(androidx.compose.ui.layout.LayoutCoordinates coordinates);
+ }
+
+ public final class OnGloballyPositionedModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onGloballyPositioned(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,kotlin.Unit> onGloballyPositioned);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface OnPlacedModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onPlaced(androidx.compose.ui.layout.LayoutCoordinates coordinates);
+ }
+
+ public final class OnPlacedModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onPlaced(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.LayoutCoordinates,kotlin.Unit> onPlaced);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface OnRemeasuredModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onRemeasured(long size);
+ }
+
+ public final class OnRemeasuredModifierKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onSizeChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit> onSizeChanged);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ParentDataModifier extends androidx.compose.ui.Modifier.Element {
+ method public Object? modifyParentData(androidx.compose.ui.unit.Density, Object? parentData);
+ }
+
+ @androidx.compose.runtime.Stable public interface PinnableContainer {
+ method public androidx.compose.ui.layout.PinnableContainer.PinnedHandle pin();
+ }
+
+ public static fun interface PinnableContainer.PinnedHandle {
+ method public void release();
+ }
+
+ public final class PinnableContainerKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.layout.PinnableContainer> getLocalPinnableContainer();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.layout.PinnableContainer> LocalPinnableContainer;
+ }
+
+ public abstract class Placeable implements androidx.compose.ui.layout.Measured {
+ ctor public Placeable();
+ method protected final long getApparentToRealOffset();
+ method public final int getHeight();
+ method public int getMeasuredHeight();
+ method protected final long getMeasuredSize();
+ method public int getMeasuredWidth();
+ method protected final long getMeasurementConstraints();
+ method public final int getWidth();
+ method protected abstract void placeAt(long position, float zIndex, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit>? layerBlock);
+ method protected final void setMeasuredSize(long);
+ method protected final void setMeasurementConstraints(long);
+ property protected final long apparentToRealOffset;
+ property public final int height;
+ property public int measuredHeight;
+ property protected final long measuredSize;
+ property public int measuredWidth;
+ property protected final long measurementConstraints;
+ property public final int width;
+ }
+
+ public abstract static class Placeable.PlacementScope {
+ ctor public Placeable.PlacementScope();
+ method protected abstract androidx.compose.ui.unit.LayoutDirection getParentLayoutDirection();
+ method protected abstract int getParentWidth();
+ method public final void place(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
+ method public final void place(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
+ method public final void placeRelative(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
+ method public final void placeRelative(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
+ method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ property protected abstract androidx.compose.ui.unit.LayoutDirection parentLayoutDirection;
+ property protected abstract int parentWidth;
+ }
+
+ public interface Remeasurement {
+ method public void forceRemeasure();
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface RemeasurementModifier extends androidx.compose.ui.Modifier.Element {
+ method public void onRemeasurementAvailable(androidx.compose.ui.layout.Remeasurement remeasurement);
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ScaleFactor {
+ method @androidx.compose.runtime.Stable public inline operator float component1();
+ method @androidx.compose.runtime.Stable public inline operator float component2();
+ method public long copy(optional float scaleX, optional float scaleY);
+ method @androidx.compose.runtime.Stable public operator long div(float operand);
+ method public float getScaleX();
+ method public float getScaleY();
+ method @androidx.compose.runtime.Stable public operator long times(float operand);
+ property @androidx.compose.runtime.Stable public final float scaleX;
+ property @androidx.compose.runtime.Stable public final float scaleY;
+ field public static final androidx.compose.ui.layout.ScaleFactor.Companion Companion;
+ }
+
+ public static final class ScaleFactor.Companion {
+ method public long getUnspecified();
+ property public final long Unspecified;
+ }
+
+ public final class ScaleFactorKt {
+ method @androidx.compose.runtime.Stable public static long ScaleFactor(float scaleX, float scaleY);
+ method @androidx.compose.runtime.Stable public static operator long div(long, long scaleFactor);
+ method public static inline boolean isSpecified(long);
+ method public static inline boolean isUnspecified(long);
+ method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
+ method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.layout.ScaleFactor> block);
+ method @androidx.compose.runtime.Stable public static operator long times(long, long scaleFactor);
+ method @androidx.compose.runtime.Stable public static operator long times(long, long size);
+ }
+
+ public final class SubcomposeLayoutKt {
+ method @androidx.compose.runtime.Composable public static void SubcomposeLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void SubcomposeLayout(androidx.compose.ui.layout.SubcomposeLayoutState state, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
+ method public static androidx.compose.ui.layout.SubcomposeSlotReusePolicy SubcomposeSlotReusePolicy(int maxSlotsToRetainForReuse);
+ }
+
+ public final class SubcomposeLayoutState {
+ ctor public SubcomposeLayoutState(androidx.compose.ui.layout.SubcomposeSlotReusePolicy slotReusePolicy);
+ ctor public SubcomposeLayoutState();
+ ctor @Deprecated public SubcomposeLayoutState(int maxSlotsToRetainForReuse);
+ method public androidx.compose.ui.layout.SubcomposeLayoutState.PrecomposedSlotHandle precompose(Object? slotId, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public static interface SubcomposeLayoutState.PrecomposedSlotHandle {
+ method public void dispose();
+ method public default int getPlaceablesCount();
+ method public default void premeasure(int index, long constraints);
+ property public default int placeablesCount;
+ }
+
+ public interface SubcomposeMeasureScope extends androidx.compose.ui.layout.MeasureScope {
+ method public java.util.List<androidx.compose.ui.layout.Measurable> subcompose(Object? slotId, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public interface SubcomposeSlotReusePolicy {
+ method public boolean areCompatible(Object? slotId, Object? reusableSlotId);
+ method public void getSlotsToRetain(androidx.compose.ui.layout.SubcomposeSlotReusePolicy.SlotIdsSet slotIds);
+ }
+
+ public static final class SubcomposeSlotReusePolicy.SlotIdsSet implements java.util.Collection<java.lang.Object> kotlin.jvm.internal.markers.KMappedMarker {
+ method public void clear();
+ method public java.util.Iterator<java.lang.Object> iterator();
+ method public boolean remove(Object? slotId);
+ method public boolean removeAll(java.util.Collection<?> slotIds);
+ method public boolean removeAll(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
+ method public boolean retainAll(java.util.Collection<?> slotIds);
+ method public boolean retainAll(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
+ }
+
+ public final class TestModifierUpdaterKt {
+ }
+
+ public final class VerticalAlignmentLine extends androidx.compose.ui.layout.AlignmentLine {
+ ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
+ }
+
+}
+
+package androidx.compose.ui.modifier {
+
+ @androidx.compose.runtime.Stable public abstract sealed class ModifierLocal<T> {
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface ModifierLocalConsumer extends androidx.compose.ui.Modifier.Element {
+ method public void onModifierLocalsUpdated(androidx.compose.ui.modifier.ModifierLocalReadScope scope);
+ }
+
+ public final class ModifierLocalKt {
+ method public static <T> androidx.compose.ui.modifier.ProvidableModifierLocal<T> modifierLocalOf(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ }
+
+ @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface ModifierLocalProvider<T> extends androidx.compose.ui.Modifier.Element {
+ method public androidx.compose.ui.modifier.ProvidableModifierLocal<T> getKey();
+ method public T! getValue();
+ property public abstract androidx.compose.ui.modifier.ProvidableModifierLocal<T> key;
+ property public abstract T! value;
+ }
+
+ public interface ModifierLocalReadScope {
+ method public <T> T! getCurrent(androidx.compose.ui.modifier.ModifierLocal<T>);
+ }
+
+ @androidx.compose.runtime.Stable public final class ProvidableModifierLocal<T> extends androidx.compose.ui.modifier.ModifierLocal<T> {
+ ctor public ProvidableModifierLocal(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
+ }
+
+}
+
+package androidx.compose.ui.node {
+
+ @kotlin.PublishedApi internal interface ComposeUiNode {
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+ method public androidx.compose.ui.layout.MeasurePolicy getMeasurePolicy();
+ method public androidx.compose.ui.Modifier getModifier();
+ method public androidx.compose.ui.platform.ViewConfiguration getViewConfiguration();
+ method public void setDensity(androidx.compose.ui.unit.Density);
+ method public void setLayoutDirection(androidx.compose.ui.unit.LayoutDirection);
+ method public void setMeasurePolicy(androidx.compose.ui.layout.MeasurePolicy);
+ method public void setModifier(androidx.compose.ui.Modifier);
+ method public void setViewConfiguration(androidx.compose.ui.platform.ViewConfiguration);
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
+ property public abstract androidx.compose.ui.layout.MeasurePolicy measurePolicy;
+ property public abstract androidx.compose.ui.Modifier modifier;
+ property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
+ field public static final androidx.compose.ui.node.ComposeUiNode.Companion Companion;
+ }
+
+ public static final class ComposeUiNode.Companion {
+ method public kotlin.jvm.functions.Function0<androidx.compose.ui.node.ComposeUiNode> getConstructor();
+ method public kotlin.jvm.functions.Function2<androidx.compose.ui.node.ComposeUiNode,androidx.compose.ui.unit.Density,kotlin.Unit> getSetDensity();
+ method public kotlin.jvm.functions.Function2<androidx.compose.ui.node.ComposeUiNode,androidx.compose.ui.unit.LayoutDirection,kotlin.Unit> getSetLayoutDirection();
+ method public kotlin.jvm.functions.Function2<androidx.compose.ui.node.ComposeUiNode,androidx.compose.ui.layout.MeasurePolicy,kotlin.Unit> getSetMeasurePolicy();
+ method public kotlin.jvm.functions.Function2<androidx.compose.ui.node.ComposeUiNode,androidx.compose.ui.Modifier,kotlin.Unit> getSetModifier();
+ method public kotlin.jvm.functions.Function2<androidx.compose.ui.node.ComposeUiNode,androidx.compose.ui.platform.ViewConfiguration,kotlin.Unit> getSetViewConfiguration();
+ method public kotlin.jvm.functions.Function0<androidx.compose.ui.node.ComposeUiNode> getVirtualConstructor();
+ property public final kotlin.jvm.functions.Function0<androidx.compose.ui.node.ComposeUiNode> Constructor;
+ property public final kotlin.jvm.functions.Function2<androidx.compose.ui.node.ComposeUiNode,androidx.compose.ui.unit.Density,kotlin.Unit> SetDensity;
+ property public final kotlin.jvm.functions.Function2<androidx.compose.ui.node.ComposeUiNode,androidx.compose.ui.unit.LayoutDirection,kotlin.Unit> SetLayoutDirection;
+ property public final kotlin.jvm.functions.Function2<androidx.compose.ui.node.ComposeUiNode,androidx.compose.ui.layout.MeasurePolicy,kotlin.Unit> SetMeasurePolicy;
+ property public final kotlin.jvm.functions.Function2<androidx.compose.ui.node.ComposeUiNode,androidx.compose.ui.Modifier,kotlin.Unit> SetModifier;
+ property public final kotlin.jvm.functions.Function2<androidx.compose.ui.node.ComposeUiNode,androidx.compose.ui.platform.ViewConfiguration,kotlin.Unit> SetViewConfiguration;
+ property public final kotlin.jvm.functions.Function0<androidx.compose.ui.node.ComposeUiNode> VirtualConstructor;
+ }
+
+ public final class Ref<T> {
+ ctor public Ref();
+ method public T? getValue();
+ method public void setValue(T?);
+ property public final T? value;
+ }
+
+ public interface RootForTest {
+ method public androidx.compose.ui.unit.Density getDensity();
+ method public androidx.compose.ui.semantics.SemanticsOwner getSemanticsOwner();
+ method public androidx.compose.ui.text.input.TextInputService getTextInputService();
+ method public boolean sendKeyEvent(android.view.KeyEvent keyEvent);
+ property public abstract androidx.compose.ui.unit.Density density;
+ property public abstract androidx.compose.ui.semantics.SemanticsOwner semanticsOwner;
+ property public abstract androidx.compose.ui.text.input.TextInputService textInputService;
+ }
+
+}
+
+package androidx.compose.ui.platform {
+
+ public abstract class AbstractComposeView extends android.view.ViewGroup {
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public AbstractComposeView(android.content.Context context);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public abstract void Content();
+ method public final void createComposition();
+ method public final void disposeComposition();
+ method public final boolean getHasComposition();
+ method protected boolean getShouldCreateCompositionOnAttachedToWindow();
+ method public final boolean getShowLayoutBounds();
+ method protected final void onLayout(boolean changed, int left, int top, int right, int bottom);
+ method protected final void onMeasure(int widthMeasureSpec, int heightMeasureSpec);
+ method public final void setParentCompositionContext(androidx.compose.runtime.CompositionContext? parent);
+ method public final void setShowLayoutBounds(boolean);
+ method public final void setViewCompositionStrategy(androidx.compose.ui.platform.ViewCompositionStrategy strategy);
+ property public final boolean hasComposition;
+ property protected boolean shouldCreateCompositionOnAttachedToWindow;
+ property public final boolean showLayoutBounds;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface AccessibilityManager {
+ method public long calculateRecommendedTimeoutMillis(long originalTimeoutMillis, optional boolean containsIcons, optional boolean containsText, optional boolean containsControls);
+ }
+
+ public final class AndroidComposeView_androidKt {
+ }
+
+ public final class AndroidCompositionLocals_androidKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<android.content.res.Configuration> getLocalConfiguration();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<android.content.Context> getLocalContext();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.lifecycle.LifecycleOwner> getLocalLifecycleOwner();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.savedstate.SavedStateRegistryOwner> getLocalSavedStateRegistryOwner();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<android.view.View> getLocalView();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<android.content.res.Configuration> LocalConfiguration;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<android.content.Context> LocalContext;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.lifecycle.LifecycleOwner> LocalLifecycleOwner;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.savedstate.SavedStateRegistryOwner> LocalSavedStateRegistryOwner;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<android.view.View> LocalView;
+ }
+
+ public final class AndroidUiDispatcher extends kotlinx.coroutines.CoroutineDispatcher {
+ method public void dispatch(kotlin.coroutines.CoroutineContext context, Runnable block);
+ method public android.view.Choreographer getChoreographer();
+ method public androidx.compose.runtime.MonotonicFrameClock getFrameClock();
+ property public final android.view.Choreographer choreographer;
+ property public final androidx.compose.runtime.MonotonicFrameClock frameClock;
+ field public static final androidx.compose.ui.platform.AndroidUiDispatcher.Companion Companion;
+ }
+
+ public static final class AndroidUiDispatcher.Companion {
+ method public kotlin.coroutines.CoroutineContext getCurrentThread();
+ method public kotlin.coroutines.CoroutineContext getMain();
+ property public final kotlin.coroutines.CoroutineContext CurrentThread;
+ property public final kotlin.coroutines.CoroutineContext Main;
+ }
+
+ public final class AndroidUiFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
+ ctor public AndroidUiFrameClock(android.view.Choreographer choreographer);
+ method public android.view.Choreographer getChoreographer();
+ method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R>);
+ property public final android.view.Choreographer choreographer;
+ }
+
+ public final class AndroidUriHandler implements androidx.compose.ui.platform.UriHandler {
+ ctor public AndroidUriHandler(android.content.Context context);
+ method public void openUri(String uri);
+ }
+
+ public final class AndroidViewConfiguration implements androidx.compose.ui.platform.ViewConfiguration {
+ ctor public AndroidViewConfiguration(android.view.ViewConfiguration viewConfiguration);
+ method public long getDoubleTapMinTimeMillis();
+ method public long getDoubleTapTimeoutMillis();
+ method public long getLongPressTimeoutMillis();
+ method public float getTouchSlop();
+ property public long doubleTapMinTimeMillis;
+ property public long doubleTapTimeoutMillis;
+ property public long longPressTimeoutMillis;
+ property public float touchSlop;
+ }
+
+ public interface ClipboardManager {
+ method public androidx.compose.ui.text.AnnotatedString? getText();
+ method public default boolean hasText();
+ method public void setText(androidx.compose.ui.text.AnnotatedString annotatedString);
+ }
+
+ public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public ComposeView(android.content.Context context);
+ method @androidx.compose.runtime.Composable public void Content();
+ method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ property protected boolean shouldCreateCompositionOnAttachedToWindow;
+ }
+
+ public final class CompositionLocalsKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.AccessibilityManager> getLocalAccessibilityManager();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ClipboardManager> getLocalClipboardManager();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Density> getLocalDensity();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.focus.FocusManager> getLocalFocusManager();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.font.FontFamily.Resolver> getLocalFontFamilyResolver();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.hapticfeedback.HapticFeedback> getLocalHapticFeedback();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.input.InputModeManager> getLocalInputModeManager();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.LayoutDirection> getLocalLayoutDirection();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.input.TextInputService> getLocalTextInputService();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.TextToolbar> getLocalTextToolbar();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.UriHandler> getLocalUriHandler();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ViewConfiguration> getLocalViewConfiguration();
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.WindowInfo> getLocalWindowInfo();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.AccessibilityManager> LocalAccessibilityManager;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ClipboardManager> LocalClipboardManager;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Density> LocalDensity;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.focus.FocusManager> LocalFocusManager;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.font.FontFamily.Resolver> LocalFontFamilyResolver;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.hapticfeedback.HapticFeedback> LocalHapticFeedback;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.input.InputModeManager> LocalInputModeManager;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.LayoutDirection> LocalLayoutDirection;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.input.TextInputService> LocalTextInputService;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.TextToolbar> LocalTextToolbar;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.UriHandler> LocalUriHandler;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.ViewConfiguration> LocalViewConfiguration;
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.platform.WindowInfo> LocalWindowInfo;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface InfiniteAnimationPolicy extends kotlin.coroutines.CoroutineContext.Element {
+ method public default kotlin.coroutines.CoroutineContext.Key<?> getKey();
+ method public suspend <R> Object? onInfiniteOperation(kotlin.jvm.functions.Function1<? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
+ property public default kotlin.coroutines.CoroutineContext.Key<?> key;
+ field public static final androidx.compose.ui.platform.InfiniteAnimationPolicy.Key Key;
+ }
+
+ public static final class InfiniteAnimationPolicy.Key implements kotlin.coroutines.CoroutineContext.Key<androidx.compose.ui.platform.InfiniteAnimationPolicy> {
+ }
+
+ public final class InspectableModifier extends androidx.compose.ui.platform.InspectorValueInfo implements androidx.compose.ui.Modifier.Element {
+ ctor public InspectableModifier(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo);
+ method public androidx.compose.ui.platform.InspectableModifier.End getEnd();
+ property public final androidx.compose.ui.platform.InspectableModifier.End end;
+ }
+
+ public final class InspectableModifier.End implements androidx.compose.ui.Modifier.Element {
+ ctor public InspectableModifier.End();
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface InspectableValue {
+ method public default kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> getInspectableElements();
+ method public default String? getNameFallback();
+ method public default Object? getValueOverride();
+ property public default kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> inspectableElements;
+ property public default String? nameFallback;
+ property public default Object? valueOverride;
+ }
+
+ public final class InspectableValueKt {
+ method public static inline kotlin.jvm.functions.Function1<androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> debugInspectorInfo(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> definitions);
+ method public static kotlin.jvm.functions.Function1<androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> getNoInspectorInfo();
+ method public static inline androidx.compose.ui.Modifier inspectable(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method @kotlin.PublishedApi internal static androidx.compose.ui.Modifier inspectableWrapper(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, androidx.compose.ui.Modifier wrapped);
+ method public static boolean isDebugInspectorInfoEnabled();
+ method public static void setDebugInspectorInfoEnabled(boolean);
+ property public static final kotlin.jvm.functions.Function1<androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> NoInspectorInfo;
+ property public static final boolean isDebugInspectorInfoEnabled;
+ }
+
+ public final class InspectionModeKt {
+ method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Boolean> getLocalInspectionMode();
+ property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Boolean> LocalInspectionMode;
+ }
+
+ public final class InspectorInfo {
+ ctor public InspectorInfo();
+ method public String? getName();
+ method public androidx.compose.ui.platform.ValueElementSequence getProperties();
+ method public Object? getValue();
+ method public void setName(String?);
+ method public void setValue(Object?);
+ property public final String? name;
+ property public final androidx.compose.ui.platform.ValueElementSequence properties;
+ property public final Object? value;
+ }
+
+ public abstract class InspectorValueInfo implements androidx.compose.ui.platform.InspectableValue {
+ ctor public InspectorValueInfo(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> info);
+ property public kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> inspectableElements;
+ property public String? nameFallback;
+ property public Object? valueOverride;
+ }
+
+ public final class NestedScrollInteropConnectionKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.input.nestedscroll.NestedScrollConnection rememberNestedScrollInteropConnection(optional android.view.View hostView);
+ }
+
+ public final class TestTagKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier testTag(androidx.compose.ui.Modifier, String tag);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface TextToolbar {
+ method public androidx.compose.ui.platform.TextToolbarStatus getStatus();
+ method public void hide();
+ method public void showMenu(androidx.compose.ui.geometry.Rect rect, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onSelectAllRequested);
+ property public abstract androidx.compose.ui.platform.TextToolbarStatus status;
+ }
+
+ public enum TextToolbarStatus {
+ method public static androidx.compose.ui.platform.TextToolbarStatus valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.platform.TextToolbarStatus[] values();
+ enum_constant public static final androidx.compose.ui.platform.TextToolbarStatus Hidden;
+ enum_constant public static final androidx.compose.ui.platform.TextToolbarStatus Shown;
+ }
+
+ public interface UriHandler {
+ method public void openUri(String uri);
+ }
+
+ public final class ValueElement {
+ ctor public ValueElement(String name, Object? value);
+ method public String component1();
+ method public Object? component2();
+ method public androidx.compose.ui.platform.ValueElement copy(String name, Object? value);
+ method public String getName();
+ method public Object? getValue();
+ property public final String name;
+ property public final Object? value;
+ }
+
+ public final class ValueElementSequence implements kotlin.sequences.Sequence<androidx.compose.ui.platform.ValueElement> {
+ ctor public ValueElementSequence();
+ method public java.util.Iterator<androidx.compose.ui.platform.ValueElement> iterator();
+ method public operator void set(String name, Object? value);
+ }
+
+ public interface ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.Companion Companion;
+ }
+
+ public static final class ViewCompositionStrategy.Companion {
+ method public androidx.compose.ui.platform.ViewCompositionStrategy getDefault();
+ property public final androidx.compose.ui.platform.ViewCompositionStrategy Default;
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnDetachedFromWindow implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.DisposeOnDetachedFromWindow INSTANCE;
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool INSTANCE;
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnLifecycleDestroyed implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ ctor public ViewCompositionStrategy.DisposeOnLifecycleDestroyed(androidx.lifecycle.Lifecycle lifecycle);
+ ctor public ViewCompositionStrategy.DisposeOnLifecycleDestroyed(androidx.lifecycle.LifecycleOwner lifecycleOwner);
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ }
+
+ public static final class ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed implements androidx.compose.ui.platform.ViewCompositionStrategy {
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> installFor(androidx.compose.ui.platform.AbstractComposeView view);
+ field public static final androidx.compose.ui.platform.ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed INSTANCE;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ViewConfiguration {
+ method public long getDoubleTapMinTimeMillis();
+ method public long getDoubleTapTimeoutMillis();
+ method public long getLongPressTimeoutMillis();
+ method public default long getMinimumTouchTargetSize();
+ method public float getTouchSlop();
+ property public abstract long doubleTapMinTimeMillis;
+ property public abstract long doubleTapTimeoutMillis;
+ property public abstract long longPressTimeoutMillis;
+ property public default long minimumTouchTargetSize;
+ property public abstract float touchSlop;
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface ViewRootForInspector {
+ method public default androidx.compose.ui.platform.AbstractComposeView? getSubCompositionView();
+ method public default android.view.View? getViewRoot();
+ property public default androidx.compose.ui.platform.AbstractComposeView? subCompositionView;
+ property public default android.view.View? viewRoot;
+ }
+
+ @VisibleForTesting public interface ViewRootForTest extends androidx.compose.ui.node.RootForTest {
+ method public boolean getHasPendingMeasureOrLayout();
+ method public android.view.View getView();
+ method public void invalidateDescendants();
+ method public boolean isLifecycleInResumedState();
+ property public abstract boolean hasPendingMeasureOrLayout;
+ property public abstract boolean isLifecycleInResumedState;
+ property public abstract android.view.View view;
+ field public static final androidx.compose.ui.platform.ViewRootForTest.Companion Companion;
+ }
+
+ public static final class ViewRootForTest.Companion {
+ method public kotlin.jvm.functions.Function1<androidx.compose.ui.platform.ViewRootForTest,kotlin.Unit>? getOnViewCreatedCallback();
+ method public void setOnViewCreatedCallback(kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.ViewRootForTest,kotlin.Unit>?);
+ property public final kotlin.jvm.functions.Function1<androidx.compose.ui.platform.ViewRootForTest,kotlin.Unit>? onViewCreatedCallback;
+ }
+
+ @androidx.compose.runtime.Stable public interface WindowInfo {
+ method public boolean isWindowFocused();
+ property public abstract boolean isWindowFocused;
+ }
+
+ public final class WindowRecomposer_androidKt {
+ method public static androidx.compose.runtime.CompositionContext? findViewTreeCompositionContext(android.view.View);
+ method public static androidx.compose.runtime.CompositionContext? getCompositionContext(android.view.View);
+ method public static void setCompositionContext(android.view.View, androidx.compose.runtime.CompositionContext?);
+ }
+
+}
+
+package androidx.compose.ui.res {
+
+ public final class ColorResources_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long colorResource(@ColorRes int id);
+ }
+
+ public final class FontResources_androidKt {
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.ui.text.font.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+ }
+
+ public final class ImageResources_androidKt {
+ method public static androidx.compose.ui.graphics.ImageBitmap imageResource(androidx.compose.ui.graphics.ImageBitmap.Companion, android.content.res.Resources res, @DrawableRes int id);
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.ImageBitmap imageResource(androidx.compose.ui.graphics.ImageBitmap.Companion, @DrawableRes int id);
+ }
+
+ public final class PainterResources_androidKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.painter.Painter painterResource(@DrawableRes int id);
+ }
+
+ public final class PrimitiveResources_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static boolean booleanResource(@BoolRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static float dimensionResource(@DimenRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static int[] integerArrayResource(@ArrayRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static int integerResource(@IntegerRes int id);
+ }
+
+ public final class StringResources_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String pluralStringResource(@PluralsRes int id, int count);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String pluralStringResource(@PluralsRes int id, int count, java.lang.Object... formatArgs);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String![] stringArrayResource(@ArrayRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String stringResource(@StringRes int id);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
+ }
+
+ public final class VectorResources_androidKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, @DrawableRes int id);
+ method @kotlin.jvm.Throws(exceptionClasses=XmlPullParserException::class) public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, optional android.content.res.Resources.Theme? theme, android.content.res.Resources res, int resId) throws org.xmlpull.v1.XmlPullParserException;
+ }
+
+}
+
+package androidx.compose.ui.semantics {
+
+ public final class AccessibilityAction<T extends kotlin.Function<? extends java.lang.Boolean>> {
+ ctor public AccessibilityAction(String? label, T? action);
+ method public T? getAction();
+ method public String? getLabel();
+ property public final T? action;
+ property public final String? label;
+ }
+
+ public final class CollectionInfo {
+ ctor public CollectionInfo(int rowCount, int columnCount);
+ method public int getColumnCount();
+ method public int getRowCount();
+ property public final int columnCount;
+ property public final int rowCount;
+ }
+
+ public final class CollectionItemInfo {
+ ctor public CollectionItemInfo(int rowIndex, int rowSpan, int columnIndex, int columnSpan);
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ property public final int columnIndex;
+ property public final int columnSpan;
+ property public final int rowIndex;
+ property public final int rowSpan;
+ }
+
+ public final class CustomAccessibilityAction {
+ ctor public CustomAccessibilityAction(String label, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
+ method public kotlin.jvm.functions.Function0<java.lang.Boolean> getAction();
+ method public String getLabel();
+ property public final kotlin.jvm.functions.Function0<java.lang.Boolean> action;
+ property public final String label;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class LiveRegionMode {
+ field public static final androidx.compose.ui.semantics.LiveRegionMode.Companion Companion;
+ }
+
+ public static final class LiveRegionMode.Companion {
+ method public int getAssertive();
+ method public int getPolite();
+ property public final int Assertive;
+ property public final int Polite;
+ }
+
+ public final class ProgressBarRangeInfo {
+ ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional int steps);
+ method public float getCurrent();
+ method public kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> getRange();
+ method public int getSteps();
+ property public final float current;
+ property public final kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range;
+ property public final int steps;
+ field public static final androidx.compose.ui.semantics.ProgressBarRangeInfo.Companion Companion;
+ }
+
+ public static final class ProgressBarRangeInfo.Companion {
+ method public androidx.compose.ui.semantics.ProgressBarRangeInfo getIndeterminate();
+ property public final androidx.compose.ui.semantics.ProgressBarRangeInfo Indeterminate;
+ }
+
+ @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class Role {
+ field public static final androidx.compose.ui.semantics.Role.Companion Companion;
+ }
+
+ public static final class Role.Companion {
+ method public int getButton();
+ method public int getCheckbox();
+ method public int getDropdownList();
+ method public int getImage();
+ method public int getRadioButton();
+ method public int getSwitch();
+ method public int getTab();
+ property public final int Button;
+ property public final int Checkbox;
+ property public final int DropdownList;
+ property public final int Image;
+ property public final int RadioButton;
+ property public final int Switch;
+ property public final int Tab;
+ }
+
+ public final class ScrollAxisRange {
+ ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, optional boolean reverseScrolling);
+ method public kotlin.jvm.functions.Function0<java.lang.Float> getMaxValue();
+ method public boolean getReverseScrolling();
+ method public kotlin.jvm.functions.Function0<java.lang.Float> getValue();
+ property public final kotlin.jvm.functions.Function0<java.lang.Float> maxValue;
+ property public final boolean reverseScrolling;
+ property public final kotlin.jvm.functions.Function0<java.lang.Float> value;
+ }
+
+ public final class SemanticsActions {
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getCollapse();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getCopyText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction>> getCustomActions();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getCutText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getDismiss();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getExpand();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnLongClick();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageDown();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageLeft();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageRight();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPageUp();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getPasteText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getRequestFocus();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Integer,java.lang.Boolean>>> getScrollToIndex();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> getSetProgress();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> Collapse;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> CopyText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction>> CustomActions;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> CutText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> Dismiss;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> Expand;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnLongClick;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageDown;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageLeft;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageRight;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PageUp;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> PasteText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> RequestFocus;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Integer,java.lang.Boolean>>> ScrollToIndex;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> SetProgress;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> SetSelection;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
+ field public static final androidx.compose.ui.semantics.SemanticsActions INSTANCE;
+ }
+
+ public final class SemanticsConfiguration implements java.lang.Iterable<java.util.Map.Entry<? extends androidx.compose.ui.semantics.SemanticsPropertyKey<?>,?>> kotlin.jvm.internal.markers.KMappedMarker androidx.compose.ui.semantics.SemanticsPropertyReceiver {
+ ctor public SemanticsConfiguration();
+ method public operator <T> boolean contains(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ method public androidx.compose.ui.semantics.SemanticsConfiguration copy();
+ method public operator <T> T! get(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ method public <T> T! getOrElse(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public <T> T? getOrElseNullable(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public boolean isClearingSemantics();
+ method public boolean isMergingSemanticsOfDescendants();
+ method public java.util.Iterator<java.util.Map.Entry<androidx.compose.ui.semantics.SemanticsPropertyKey<?>,java.lang.Object>> iterator();
+ method public <T> void set(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, T? value);
+ method public void setClearingSemantics(boolean);
+ method public void setMergingSemanticsOfDescendants(boolean);
+ property public final boolean isClearingSemantics;
+ property public final boolean isMergingSemanticsOfDescendants;
+ }
+
+ public final class SemanticsConfigurationKt {
+ method public static <T> T? getOrNull(androidx.compose.ui.semantics.SemanticsConfiguration, androidx.compose.ui.semantics.SemanticsPropertyKey<T> key);
+ }
+
+ @kotlin.jvm.JvmDefaultWithCompatibility public interface SemanticsModifier extends androidx.compose.ui.Modifier.Element {
+ method @Deprecated public default int getId();
+ method public androidx.compose.ui.semantics.SemanticsConfiguration getSemanticsConfiguration();
+ property @Deprecated public default int id;
+ property public abstract androidx.compose.ui.semantics.SemanticsConfiguration semanticsConfiguration;
+ }
+
+ public final class SemanticsModifierKt {
+ method public static androidx.compose.ui.Modifier clearAndSetSemantics(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.semantics.SemanticsPropertyReceiver,kotlin.Unit> properties);
+ method public static androidx.compose.ui.Modifier semantics(androidx.compose.ui.Modifier, optional boolean mergeDescendants, kotlin.jvm.functions.Function1<? super androidx.compose.ui.semantics.SemanticsPropertyReceiver,kotlin.Unit> properties);
+ }
+
+ public final class SemanticsNode {
+ method public int getAlignmentLinePosition(androidx.compose.ui.layout.AlignmentLine alignmentLine);
+ method public androidx.compose.ui.geometry.Rect getBoundsInRoot();
+ method public androidx.compose.ui.geometry.Rect getBoundsInWindow();
+ method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getChildren();
+ method public androidx.compose.ui.semantics.SemanticsConfiguration getConfig();
+ method public int getId();
+ method public androidx.compose.ui.layout.LayoutInfo getLayoutInfo();
+ method public boolean getMergingEnabled();
+ method public androidx.compose.ui.semantics.SemanticsNode? getParent();
+ method public long getPositionInRoot();
+ method public long getPositionInWindow();
+ method public androidx.compose.ui.node.RootForTest? getRoot();
+ method public long getSize();
+ method public androidx.compose.ui.geometry.Rect getTouchBoundsInRoot();
+ method public boolean isRoot();
+ property public final androidx.compose.ui.geometry.Rect boundsInRoot;
+ property public final androidx.compose.ui.geometry.Rect boundsInWindow;
+ property public final java.util.List<androidx.compose.ui.semantics.SemanticsNode> children;
+ property public final androidx.compose.ui.semantics.SemanticsConfiguration config;
+ property public final int id;
+ property public final boolean isRoot;
+ property public final androidx.compose.ui.layout.LayoutInfo layoutInfo;
+ property public final boolean mergingEnabled;
+ property public final androidx.compose.ui.semantics.SemanticsNode? parent;
+ property public final long positionInRoot;
+ property public final long positionInWindow;
+ property public final androidx.compose.ui.node.RootForTest? root;
+ property public final long size;
+ property public final androidx.compose.ui.geometry.Rect touchBoundsInRoot;
+ }
+
+ public final class SemanticsOwner {
+ method public androidx.compose.ui.semantics.SemanticsNode getRootSemanticsNode();
+ method public androidx.compose.ui.semantics.SemanticsNode getUnmergedRootSemanticsNode();
+ property public final androidx.compose.ui.semantics.SemanticsNode rootSemanticsNode;
+ property public final androidx.compose.ui.semantics.SemanticsNode unmergedRootSemanticsNode;
+ }
+
+ public final class SemanticsOwnerKt {
+ method public static java.util.List<androidx.compose.ui.semantics.SemanticsNode> getAllSemanticsNodes(androidx.compose.ui.semantics.SemanticsOwner, boolean mergingEnabled);
+ }
+
+ public final class SemanticsProperties {
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionInfo> getCollectionInfo();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionItemInfo> getCollectionItemInfo();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<java.lang.String>> getContentDescription();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getDisabled();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> getEditableText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getError();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getFocused();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getHeading();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> getHorizontalScrollAxisRange();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> getImeAction();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Integer>> getIndexForKey();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getInvisibleToUser();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getIsContainer();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsDialog();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsPopup();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.LiveRegionMode> getLiveRegion();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getPaneTitle();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getPassword();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ProgressBarRangeInfo> getProgressBarRangeInfo();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.Role> getRole();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getSelectableGroup();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getSelected();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getStateDescription();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> getTestTag();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.text.AnnotatedString>> getText();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> getTextSelectionRange();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.state.ToggleableState> getToggleableState();
+ method public androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> getVerticalScrollAxisRange();
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionInfo> CollectionInfo;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.CollectionItemInfo> CollectionItemInfo;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<java.lang.String>> ContentDescription;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Disabled;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> EditableText;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> Error;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> Focused;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Heading;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> HorizontalScrollAxisRange;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> ImeAction;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Integer>> IndexForKey;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> InvisibleToUser;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> IsContainer;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsDialog;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsPopup;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.LiveRegionMode> LiveRegion;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> PaneTitle;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Password;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ProgressBarRangeInfo> ProgressBarRangeInfo;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.Role> Role;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<kotlin.Unit> SelectableGroup;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> Selected;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> StateDescription;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.lang.String> TestTag;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.compose.ui.text.AnnotatedString>> Text;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> TextSelectionRange;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.state.ToggleableState> ToggleableState;
+ property public final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.ScrollAxisRange> VerticalScrollAxisRange;
+ field public static final androidx.compose.ui.semantics.SemanticsProperties INSTANCE;
+ }
+
+ public final class SemanticsPropertiesKt {
+ method public static void collapse(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void copyText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void cutText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void dialog(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void disabled(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void dismiss(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void error(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String description);
+ method public static void expand(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static androidx.compose.ui.semantics.CollectionInfo getCollectionInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.CollectionItemInfo getCollectionItemInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getContentDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction> getCustomActions(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.text.AnnotatedString getEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static boolean getFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.ScrollAxisRange getHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static int getImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static int getLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.ProgressBarRangeInfo getProgressBarRangeInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static int getRole(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static boolean getSelected(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getStateDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static String getTestTag(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.text.AnnotatedString getText(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void getTextLayoutResult(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>? action);
+ method public static long getTextSelectionRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.state.ToggleableState getToggleableState(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static androidx.compose.ui.semantics.ScrollAxisRange getVerticalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void heading(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void indexForKey(androidx.compose.ui.semantics.SemanticsPropertyReceiver, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Integer> mapping);
+ method public static boolean isContainer(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void onClick(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void onLongClick(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageDown(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageLeft(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageRight(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void pageUp(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void password(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void pasteText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void popup(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void requestFocus(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void scrollBy(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,java.lang.Boolean>? action);
+ method public static void scrollToIndex(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.lang.Integer,java.lang.Boolean> action);
+ method public static void selectableGroup(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public static void setCollectionInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.CollectionInfo);
+ method public static void setCollectionItemInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.CollectionItemInfo);
+ method public static void setContainer(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
+ method public static void setContentDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setCustomActions(androidx.compose.ui.semantics.SemanticsPropertyReceiver, java.util.List<androidx.compose.ui.semantics.CustomAccessibilityAction>);
+ method public static void setEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString);
+ method public static void setFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
+ method public static void setHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ScrollAxisRange);
+ method public static void setImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method public static void setLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method public static void setPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setProgress(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean>? action);
+ method public static void setProgressBarRangeInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ProgressBarRangeInfo);
+ method public static void setRole(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method public static void setSelected(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
+ method public static void setSelection(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Boolean,java.lang.Boolean>? action);
+ method public static void setStateDescription(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setTestTag(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
+ method public static void setText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString);
+ method public static void setText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>? action);
+ method public static void setTextSelectionRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, long);
+ method public static void setToggleableState(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.state.ToggleableState);
+ method public static void setVerticalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ScrollAxisRange);
+ }
+
+ public final class SemanticsPropertyKey<T> {
+ ctor public SemanticsPropertyKey(String name, optional kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
+ method public String getName();
+ method public operator T! getValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property);
+ method public T? merge(T? parentValue, T? childValue);
+ method public operator void setValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property, T? value);
+ property public final String name;
+ }
+
+ public interface SemanticsPropertyReceiver {
+ method public operator <T> void set(androidx.compose.ui.semantics.SemanticsPropertyKey<T> key, T? value);
+ }
+
+}
+
+package androidx.compose.ui.state {
+
+ public enum ToggleableState {
+ method public static androidx.compose.ui.state.ToggleableState valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.state.ToggleableState[] values();
+ enum_constant public static final androidx.compose.ui.state.ToggleableState Indeterminate;
+ enum_constant public static final androidx.compose.ui.state.ToggleableState Off;
+ enum_constant public static final androidx.compose.ui.state.ToggleableState On;
+ }
+
+ public final class ToggleableStateKt {
+ method public static androidx.compose.ui.state.ToggleableState ToggleableState(boolean value);
+ }
+
+}
+
+package androidx.compose.ui.viewinterop {
+
+ public final class AndroidView_androidKt {
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> factory, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+ method public static kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> getNoOpUpdate();
+ property public static final kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> NoOpUpdate;
+ }
+
+}
+
+package androidx.compose.ui.window {
+
+ public final class AndroidDialog_androidKt {
+ method @androidx.compose.runtime.Composable public static void Dialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class AndroidPopup_androidKt {
+ method @androidx.compose.runtime.Composable public static void Popup(optional androidx.compose.ui.Alignment alignment, optional long offset, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Popup(androidx.compose.ui.window.PopupPositionProvider popupPositionProvider, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @org.jetbrains.annotations.TestOnly public static boolean isPopupLayout(android.view.View view, optional String? testTag);
+ }
+
+ @androidx.compose.runtime.Immutable public final class DialogProperties {
+ ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean usePlatformDefaultWidth, optional boolean decorFitsSystemWindows);
+ ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
+ method public boolean getDecorFitsSystemWindows();
+ method public boolean getDismissOnBackPress();
+ method public boolean getDismissOnClickOutside();
+ method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
+ method public boolean getUsePlatformDefaultWidth();
+ property public final boolean decorFitsSystemWindows;
+ property public final boolean dismissOnBackPress;
+ property public final boolean dismissOnClickOutside;
+ property public final androidx.compose.ui.window.SecureFlagPolicy securePolicy;
+ property public final boolean usePlatformDefaultWidth;
+ }
+
+ public interface DialogWindowProvider {
+ method public android.view.Window getWindow();
+ property public abstract android.view.Window window;
+ }
+
+ @androidx.compose.runtime.Immutable public interface PopupPositionProvider {
+ method public long calculatePosition(androidx.compose.ui.unit.IntRect anchorBounds, long windowSize, androidx.compose.ui.unit.LayoutDirection layoutDirection, long popupContentSize);
+ }
+
+ @androidx.compose.runtime.Immutable public final class PopupProperties {
+ ctor public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean excludeFromSystemGesture, optional boolean clippingEnabled);
+ method public boolean getClippingEnabled();
+ method public boolean getDismissOnBackPress();
+ method public boolean getDismissOnClickOutside();
+ method public boolean getExcludeFromSystemGesture();
+ method public boolean getFocusable();
+ method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
+ method public boolean getUsePlatformDefaultWidth();
+ property public final boolean clippingEnabled;
+ property public final boolean dismissOnBackPress;
+ property public final boolean dismissOnClickOutside;
+ property public final boolean excludeFromSystemGesture;
+ property public final boolean focusable;
+ property public final androidx.compose.ui.window.SecureFlagPolicy securePolicy;
+ property public final boolean usePlatformDefaultWidth;
+ }
+
+ public enum SecureFlagPolicy {
+ method public static androidx.compose.ui.window.SecureFlagPolicy valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.compose.ui.window.SecureFlagPolicy[] values();
+ enum_constant public static final androidx.compose.ui.window.SecureFlagPolicy Inherit;
+ enum_constant public static final androidx.compose.ui.window.SecureFlagPolicy SecureOff;
+ enum_constant public static final androidx.compose.ui.window.SecureFlagPolicy SecureOn;
+ }
+
+}
+
diff --git a/compose/ui/ui/api/restricted_current.ignore b/compose/ui/ui/api/restricted_current.ignore
deleted file mode 100644
index 4ab8136..0000000
--- a/compose/ui/ui/api/restricted_current.ignore
+++ /dev/null
@@ -1,137 +0,0 @@
-// Baseline format: 1.0
-InvalidNullConversion: androidx.compose.ui.graphics.GraphicsLayerModifierKt#graphicsLayer(androidx.compose.ui.Modifier, float, float, float, float, float, float, float, float, float, float, long, androidx.compose.ui.graphics.Shape, boolean, androidx.compose.ui.graphics.RenderEffect, long, long):
- Attempted to remove @NonNull annotation from method androidx.compose.ui.graphics.GraphicsLayerModifierKt.graphicsLayer(androidx.compose.ui.Modifier,float,float,float,float,float,float,float,float,float,float,long,androidx.compose.ui.graphics.Shape,boolean,androidx.compose.ui.graphics.RenderEffect,long,long)
-
-
-RemovedClass: androidx.compose.ui.ActualKt:
- Removed class androidx.compose.ui.ActualKt
-RemovedClass: androidx.compose.ui.TempListUtilsKt:
- Removed class androidx.compose.ui.TempListUtilsKt
-RemovedClass: androidx.compose.ui.focus.BeyondBoundsLayoutKt:
- Removed class androidx.compose.ui.focus.BeyondBoundsLayoutKt
-RemovedClass: androidx.compose.ui.focus.FocusManagerKt:
- Removed class androidx.compose.ui.focus.FocusManagerKt
-RemovedClass: androidx.compose.ui.focus.FocusRequesterKt:
- Removed class androidx.compose.ui.focus.FocusRequesterKt
-RemovedClass: androidx.compose.ui.focus.FocusTransactionsKt:
- Removed class androidx.compose.ui.focus.FocusTransactionsKt
-RemovedClass: androidx.compose.ui.focus.FocusTraversalKt:
- Removed class androidx.compose.ui.focus.FocusTraversalKt
-RemovedClass: androidx.compose.ui.focus.OneDimensionalFocusSearchKt:
- Removed class androidx.compose.ui.focus.OneDimensionalFocusSearchKt
-RemovedClass: androidx.compose.ui.focus.TwoDimensionalFocusSearchKt:
- Removed class androidx.compose.ui.focus.TwoDimensionalFocusSearchKt
-RemovedClass: androidx.compose.ui.input.nestedscroll.NestedScrollModifierLocalKt:
- Removed class androidx.compose.ui.input.nestedscroll.NestedScrollModifierLocalKt
-RemovedClass: androidx.compose.ui.input.pointer.PointerInputEventProcessorKt:
- Removed class androidx.compose.ui.input.pointer.PointerInputEventProcessorKt
-RemovedClass: androidx.compose.ui.input.pointer.PointerInputTestUtilKt:
- Removed class androidx.compose.ui.input.pointer.PointerInputTestUtilKt
-RemovedClass: androidx.compose.ui.input.pointer.PointerInteropFilter_androidKt:
- Removed class androidx.compose.ui.input.pointer.PointerInteropFilter_androidKt
-RemovedClass: androidx.compose.ui.input.pointer.PointerInteropUtils_androidKt:
- Removed class androidx.compose.ui.input.pointer.PointerInteropUtils_androidKt
-RemovedClass: androidx.compose.ui.layout.ContentScaleKt:
- Removed class androidx.compose.ui.layout.ContentScaleKt
-RemovedClass: androidx.compose.ui.layout.LookaheadLayoutCoordinatesKt:
- Removed class androidx.compose.ui.layout.LookaheadLayoutCoordinatesKt
-RemovedClass: androidx.compose.ui.layout.LookaheadLayoutKt:
- Removed class androidx.compose.ui.layout.LookaheadLayoutKt
-RemovedClass: androidx.compose.ui.layout.PlaceableKt:
- Removed class androidx.compose.ui.layout.PlaceableKt
-RemovedClass: androidx.compose.ui.layout.RelocationModifierKt:
- Removed class androidx.compose.ui.layout.RelocationModifierKt
-RemovedClass: androidx.compose.ui.layout.RelocationRequesterModifierKt:
- Removed class androidx.compose.ui.layout.RelocationRequesterModifierKt
-RemovedClass: androidx.compose.ui.modifier.ModifierLocalConsumerKt:
- Removed class androidx.compose.ui.modifier.ModifierLocalConsumerKt
-RemovedClass: androidx.compose.ui.modifier.ModifierLocalNodeKt:
- Removed class androidx.compose.ui.modifier.ModifierLocalNodeKt
-RemovedClass: androidx.compose.ui.modifier.ModifierLocalProviderKt:
- Removed class androidx.compose.ui.modifier.ModifierLocalProviderKt
-RemovedClass: androidx.compose.ui.node.BackwardsCompatNodeKt:
- Removed class androidx.compose.ui.node.BackwardsCompatNodeKt
-RemovedClass: androidx.compose.ui.node.DelegatableNodeKt:
- Removed class androidx.compose.ui.node.DelegatableNodeKt
-RemovedClass: androidx.compose.ui.node.DrawModifierNodeKt:
- Removed class androidx.compose.ui.node.DrawModifierNodeKt
-RemovedClass: androidx.compose.ui.node.HitTestResultKt:
- Removed class androidx.compose.ui.node.HitTestResultKt
-RemovedClass: androidx.compose.ui.node.LayoutModifierNodeCoordinatorKt:
- Removed class androidx.compose.ui.node.LayoutModifierNodeCoordinatorKt
-RemovedClass: androidx.compose.ui.node.LayoutModifierNodeKt:
- Removed class androidx.compose.ui.node.LayoutModifierNodeKt
-RemovedClass: androidx.compose.ui.node.LayoutNodeDrawScopeKt:
- Removed class androidx.compose.ui.node.LayoutNodeDrawScopeKt
-RemovedClass: androidx.compose.ui.node.LayoutNodeKt:
- Removed class androidx.compose.ui.node.LayoutNodeKt
-RemovedClass: androidx.compose.ui.node.LayoutNodeLayoutDelegateKt:
- Removed class androidx.compose.ui.node.LayoutNodeLayoutDelegateKt
-RemovedClass: androidx.compose.ui.node.MeasureScopeWithLayoutNodeKt:
- Removed class androidx.compose.ui.node.MeasureScopeWithLayoutNodeKt
-RemovedClass: androidx.compose.ui.node.ModifierNodeElementKt:
- Removed class androidx.compose.ui.node.ModifierNodeElementKt
-RemovedClass: androidx.compose.ui.node.MyersDiffKt:
- Removed class androidx.compose.ui.node.MyersDiffKt
-RemovedClass: androidx.compose.ui.node.NodeChainKt:
- Removed class androidx.compose.ui.node.NodeChainKt
-RemovedClass: androidx.compose.ui.node.NodeCoordinatorKt:
- Removed class androidx.compose.ui.node.NodeCoordinatorKt
-RemovedClass: androidx.compose.ui.node.NodeKindKt:
- Removed class androidx.compose.ui.node.NodeKindKt
-RemovedClass: androidx.compose.ui.node.PointerInputModifierNodeKt:
- Removed class androidx.compose.ui.node.PointerInputModifierNodeKt
-RemovedClass: androidx.compose.ui.node.SemanticsModifierNodeKt:
- Removed class androidx.compose.ui.node.SemanticsModifierNodeKt
-RemovedClass: androidx.compose.ui.node.ViewInterop_androidKt:
- Removed class androidx.compose.ui.node.ViewInterop_androidKt
-RemovedClass: androidx.compose.ui.platform.AndroidClipboardManager_androidKt:
- Removed class androidx.compose.ui.platform.AndroidClipboardManager_androidKt
-RemovedClass: androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt:
- Removed class androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt
-RemovedClass: androidx.compose.ui.platform.AndroidUiDispatcher_androidKt:
- Removed class androidx.compose.ui.platform.AndroidUiDispatcher_androidKt
-RemovedClass: androidx.compose.ui.platform.DebugUtilsKt:
- Removed class androidx.compose.ui.platform.DebugUtilsKt
-RemovedClass: androidx.compose.ui.platform.DisposableSaveableStateRegistry_androidKt:
- Removed class androidx.compose.ui.platform.DisposableSaveableStateRegistry_androidKt
-RemovedClass: androidx.compose.ui.platform.InfiniteAnimationPolicyKt:
- Removed class androidx.compose.ui.platform.InfiniteAnimationPolicyKt
-RemovedClass: androidx.compose.ui.platform.InvertMatrixKt:
- Removed class androidx.compose.ui.platform.InvertMatrixKt
-RemovedClass: androidx.compose.ui.platform.JvmActuals_jvmKt:
- Removed class androidx.compose.ui.platform.JvmActuals_jvmKt
-RemovedClass: androidx.compose.ui.platform.ShapeContainingUtilKt:
- Removed class androidx.compose.ui.platform.ShapeContainingUtilKt
-RemovedClass: androidx.compose.ui.platform.ViewCompositionStrategy_androidKt:
- Removed class androidx.compose.ui.platform.ViewCompositionStrategy_androidKt
-RemovedClass: androidx.compose.ui.platform.WindowInfoKt:
- Removed class androidx.compose.ui.platform.WindowInfoKt
-RemovedClass: androidx.compose.ui.platform.Wrapper_androidKt:
- Removed class androidx.compose.ui.platform.Wrapper_androidKt
-RemovedClass: androidx.compose.ui.res.Resources_androidKt:
- Removed class androidx.compose.ui.res.Resources_androidKt
-RemovedClass: androidx.compose.ui.semantics.SemanticsNodeKt:
- Removed class androidx.compose.ui.semantics.SemanticsNodeKt
-RemovedClass: androidx.compose.ui.semantics.SemanticsProperties_androidKt:
- Removed class androidx.compose.ui.semantics.SemanticsProperties_androidKt
-RemovedClass: androidx.compose.ui.semantics.SemanticsSortKt:
- Removed class androidx.compose.ui.semantics.SemanticsSortKt
-RemovedClass: androidx.compose.ui.viewinterop.AndroidViewHolder_androidKt:
- Removed class androidx.compose.ui.viewinterop.AndroidViewHolder_androidKt
-RemovedClass: androidx.compose.ui.window.SecureFlagPolicy_androidKt:
- Removed class androidx.compose.ui.window.SecureFlagPolicy_androidKt
-
-
-RemovedPackage: androidx.compose.ui.autofill:
- Removed package androidx.compose.ui.autofill
-RemovedPackage: androidx.compose.ui.graphics.vector.compat:
- Removed package androidx.compose.ui.graphics.vector.compat
-RemovedPackage: androidx.compose.ui.internal:
- Removed package androidx.compose.ui.internal
-RemovedPackage: androidx.compose.ui.platform.accessibility:
- Removed package androidx.compose.ui.platform.accessibility
-RemovedPackage: androidx.compose.ui.text:
- Removed package androidx.compose.ui.text
-RemovedPackage: androidx.compose.ui.text.input:
- Removed package androidx.compose.ui.text.input
diff --git a/compose/ui/ui/build.gradle b/compose/ui/ui/build.gradle
index d67f31c..13e65d4 100644
--- a/compose/ui/ui/build.gradle
+++ b/compose/ui/ui/build.gradle
@@ -71,6 +71,11 @@
implementation("androidx.autofill:autofill:1.0.0")
implementation(libs.kotlinCoroutinesAndroid)
+ // Used to generate debug information in the layout inspector. If not present,
+ // we may fall back to more limited data.
+ compileOnly(libs.kotlinReflect)
+ testImplementation(libs.kotlinReflect)
+
implementation("androidx.activity:activity:1.7.0-beta01")
implementation("androidx.activity:activity-ktx:1.5.1")
implementation("androidx.core:core:1.9.0")
@@ -149,6 +154,10 @@
implementation(libs.kotlinStdlibCommon)
implementation(libs.kotlinCoroutinesCore)
+ // Used to generate debug information in the layout inspector. If not present,
+ // we may fall back to more limited data.
+ compileOnly(libs.kotlinReflect)
+
// when updating the runtime version please also update the runtime-saveable version
implementation(project(":compose:runtime:runtime"))
api(project(":compose:runtime:runtime-saveable"))
@@ -198,6 +207,10 @@
}
}
+ commonTest.dependencies {
+ implementation(libs.kotlinReflect)
+ }
+
// TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
// need to add Robolectric (which must be kept out of androidAndroidTest), use a top
// level dependencies block instead:
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/DrawModifierSample.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/DrawModifierSample.kt
index 8203b93..31c7afa 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/DrawModifierSample.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/DrawModifierSample.kt
@@ -40,7 +40,8 @@
import androidx.compose.ui.graphics.vector.PathData
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.node.DrawModifierNode
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.unit.dp
/**
@@ -140,14 +141,17 @@
drawCircle(color)
}
}
- fun Modifier.circle(color: Color) = this then modifierElementOf(
- key = color,
- create = { CircleNode(color) },
- update = { it.color = color },
- definitions = {
- name = "circle"
+ data class CircleElement(val color: Color) : ModifierNodeElement<CircleNode>() {
+ override fun create() = CircleNode(color)
+ override fun update(node: CircleNode): CircleNode {
+ node.color = color
+ return node
+ }
+ override fun InspectorInfo.inspectableProperties() {
+ name = "color"
properties["color"] = color
}
- )
+ }
+ fun Modifier.circle(color: Color) = this then CircleElement(color)
Box(Modifier.fillMaxSize().circle(Color.Blue))
}
\ No newline at end of file
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/LayoutSample.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/LayoutSample.kt
index 469b655..7ef664a 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/LayoutSample.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/LayoutSample.kt
@@ -35,7 +35,8 @@
import androidx.compose.ui.layout.layout
import androidx.compose.ui.layout.layoutId
import androidx.compose.ui.node.LayoutModifierNode
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
@@ -207,15 +208,20 @@
}
}
}
- fun Modifier.verticalPadding(padding: Dp) = this then modifierElementOf(
- key = padding,
- create = { VerticalPadding(padding) },
- update = { it.padding = padding },
- definitions = {
+ data class VerticalPaddingElement(
+ val padding: Dp
+ ) : ModifierNodeElement<VerticalPadding>() {
+ override fun create() = VerticalPadding(padding)
+ override fun update(node: VerticalPadding): VerticalPadding {
+ node.padding = padding
+ return node
+ }
+ override fun InspectorInfo.inspectableProperties() {
name = "verticalPadding"
properties["padding"] = padding
}
- )
+ }
+ fun Modifier.verticalPadding(padding: Dp) = this then VerticalPaddingElement(padding)
Box(Modifier.background(Color.Gray).verticalPadding(50.dp)) {
Box(Modifier.fillMaxSize().background(Color.DarkGray))
}
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierSamples.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierSamples.kt
index 01ad27a..255c1e0 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierSamples.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierSamples.kt
@@ -45,9 +45,10 @@
import androidx.compose.ui.node.DrawModifierNode
import androidx.compose.ui.node.GlobalPositionAwareModifierNode
import androidx.compose.ui.node.LayoutAwareModifierNode
+import androidx.compose.ui.node.ModifierNodeElement
import androidx.compose.ui.node.PointerInputModifierNode
import androidx.compose.ui.node.SemanticsModifierNode
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.semantics.SemanticsConfiguration
import androidx.compose.ui.semantics.heading
import androidx.compose.ui.semantics.onClick
@@ -59,7 +60,8 @@
fun ModifierUsageSample() {
Text(
"Hello, World!",
- Modifier.padding(16.dp) // Outer padding; outside background
+ Modifier
+ .padding(16.dp) // Outer padding; outside background
.background(color = Color.Green) // Solid element background color
.padding(16.dp) // Inner padding; inside background, around text
)
@@ -72,7 +74,10 @@
fun Modifier.fancy(level: Float) = this.then(FancyModifier(level))
- Row(Modifier.fancy(1f).padding(10.dp)) {
+ Row(
+ Modifier
+ .fancy(1f)
+ .padding(10.dp)) {
// content
}
}
@@ -159,23 +164,29 @@
@ExperimentalComposeUiApi
@Sampled
@Composable
-fun ModifierElementOfSample() {
+fun ModifierNodeElementSample() {
class Circle(var color: Color) : DrawModifierNode, Modifier.Node() {
override fun ContentDrawScope.draw() {
drawCircle(color)
}
}
- fun Modifier.circle(color: Color) = this then modifierElementOf(
- key = color,
- create = { Circle(color) },
- update = { it.color = color },
- definitions = {
+ data class CircleElement(
+ val color: Color
+ ) : ModifierNodeElement<Circle>() {
+ override fun create() = Circle(color)
+ override fun update(node: Circle): Circle {
+ node.color = color
+ return node
+ }
+ override fun InspectorInfo.inspectableProperties() {
name = "circle"
properties["color"] = color
}
- )
+ }
+ fun Modifier.circle(color: Color) = this then CircleElement(color)
}
+@Suppress("LocalVariableName")
@ExperimentalComposeUiApi
@Sampled
@Composable
@@ -186,12 +197,24 @@
heading()
}
}
- fun Modifier.heading() = this then modifierElementOf(
- create = { HeadingNode() },
- definitions = {
+
+ val HeadingElement = object : ModifierNodeElement<HeadingNode>() {
+ override fun create() = HeadingNode()
+
+ override fun update(node: HeadingNode): HeadingNode {
+ // Nothing to update.
+ return node
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
name = "heading"
}
- )
+
+ override fun hashCode(): Int = "heading".hashCode()
+ override fun equals(other: Any?) = (other === this)
+ }
+
+ fun Modifier.heading() = this then HeadingElement
}
@ExperimentalComposeUiApi
@@ -215,15 +238,23 @@
}
}
- fun Modifier.onPointerEvent(callback: (PointerEvent) -> Unit) = this then modifierElementOf(
- key = callback,
- create = { OnPointerEventNode(callback) },
- update = { it.callback = callback },
- definitions = {
+ data class PointerInputElement(
+ val callback: (PointerEvent) -> Unit
+ ) : ModifierNodeElement<OnPointerEventNode>() {
+ override fun create() = OnPointerEventNode(callback)
+ override fun update(node: OnPointerEventNode): OnPointerEventNode {
+ node.callback = callback
+ return node
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
name = "onPointerEvent"
properties["callback"] = callback
}
- )
+ }
+
+ fun Modifier.onPointerEvent(callback: (PointerEvent) -> Unit) =
+ this then PointerInputElement(callback)
}
@ExperimentalComposeUiApi
@@ -236,15 +267,19 @@
}
}
- fun Modifier.logSize(id: String) = this then modifierElementOf(
- key = id,
- create = { SizeLoggerNode(id) },
- update = { it.id = id },
- definitions = {
+ data class LogSizeElement(val id: String) : ModifierNodeElement<SizeLoggerNode>() {
+ override fun create(): SizeLoggerNode = SizeLoggerNode(id)
+ override fun update(node: SizeLoggerNode): SizeLoggerNode {
+ node.id = id
+ return node
+ }
+ override fun InspectorInfo.inspectableProperties() {
name = "logSize"
properties["id"] = id
}
- )
+ }
+
+ fun Modifier.logSize(id: String) = this then LogSizeElement(id)
}
@ExperimentalComposeUiApi
@@ -266,15 +301,19 @@
}
}
- fun Modifier.logPosition(id: String) = this then modifierElementOf(
- key = id,
- create = { PositionLoggerNode(id) },
- update = { it.id = id },
- definitions = {
+ data class PositionLoggerElement(val id: String) : ModifierNodeElement<PositionLoggerNode>() {
+ override fun create() = PositionLoggerNode(id)
+ override fun update(node: PositionLoggerNode): PositionLoggerNode {
+ node.id = id
+ return node
+ }
+ override fun InspectorInfo.inspectableProperties() {
name = "logPosition"
properties["id"] = id
}
- )
+ }
+
+ fun Modifier.logPosition(id: String) = this then PositionLoggerElement(id)
}
@ExperimentalComposeUiApi
@@ -289,32 +328,44 @@
override val providedValues = modifierLocalMapOf(loggerLocal to logger)
}
- class SizeLoggerNode(var id: String) :
- ModifierLocalNode, LayoutAwareModifierNode, Modifier.Node() {
+ data class ProvideLoggerElement(
+ val logger: Logger
+ ) : ModifierNodeElement<ProvideLoggerNode>() {
+ override fun create() = ProvideLoggerNode(logger)
+ override fun update(node: ProvideLoggerNode): ProvideLoggerNode {
+ node.provide(loggerLocal, logger)
+ return node
+ }
+ override fun InspectorInfo.inspectableProperties() {
+ name = "provideLogger"
+ properties["logger"] = logger
+ }
+ }
+
+ class SizeLoggerNode(
+ var id: String
+ ) : ModifierLocalNode, LayoutAwareModifierNode, Modifier.Node() {
override fun onRemeasured(size: IntSize) {
loggerLocal.current.log("The size of $id was $size")
}
}
- fun Modifier.logSize(id: String) = this then modifierElementOf(
- key = id,
- create = { SizeLoggerNode(id) },
- update = { it.id = id },
- definitions = {
+ data class SizeLoggerElement(
+ val id: String
+ ) : ModifierNodeElement<SizeLoggerNode>() {
+ override fun create() = SizeLoggerNode(id)
+ override fun update(node: SizeLoggerNode): SizeLoggerNode {
+ node.id = id
+ return node
+ }
+ override fun InspectorInfo.inspectableProperties() {
name = "logSize"
properties["id"] = id
}
- )
+ }
- fun Modifier.provideLogger(logger: Logger) = this then modifierElementOf(
- key = logger,
- create = { ProvideLoggerNode(logger) },
- update = { it.provide(loggerLocal, logger) },
- definitions = {
- name = "provideLogger"
- properties["logger"] = logger
- }
- )
+ fun Modifier.logSize(id: String) = this then SizeLoggerElement(id)
+ fun Modifier.provideLogger(logger: Logger) = this then ProvideLoggerElement(logger)
}
@OptIn(ExperimentalComposeUiApi::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/CombinedFocusModifierNodeTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/CombinedFocusModifierNodeTest.kt
index 721a3089..bb14507 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/CombinedFocusModifierNodeTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/CombinedFocusModifierNodeTest.kt
@@ -23,7 +23,7 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.node.DelegatingNode
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.node.ModifierNodeElement
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
@@ -194,17 +194,19 @@
private fun Modifier.combinedFocusNode(combinedFocusNode: CombinedFocusNode): Modifier {
return this
- .then(
- modifierElementOf(
- key = combinedFocusNode,
- create = { combinedFocusNode },
- update = { it.focusState = combinedFocusNode.focusState },
- definitions = { name = "CombinedFocusNode" }
- )
- )
+ .then(CombinedFocusNodeElement(combinedFocusNode))
.then(if (delegatedFocusTarget) Modifier else Modifier.focusTarget())
}
+ private data class CombinedFocusNodeElement(
+ val combinedFocusNode: CombinedFocusNode
+ ) : ModifierNodeElement<CombinedFocusNode>() {
+ override fun create(): CombinedFocusNode = combinedFocusNode
+ override fun update(node: CombinedFocusNode) = node.apply {
+ focusState = combinedFocusNode.focusState
+ }
+ }
+
companion object {
@JvmStatic
@Parameterized.Parameters(name = "delegatedFocusTarget = {0}")
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/focus/FocusAwareEventPropagationTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/focus/FocusAwareEventPropagationTest.kt
index 30f35ea..e4256b6 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/focus/FocusAwareEventPropagationTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/focus/FocusAwareEventPropagationTest.kt
@@ -32,7 +32,8 @@
import androidx.compose.ui.input.key.KeyInputInputModifierNodeImpl
import androidx.compose.ui.input.rotary.RotaryInputModifierNodeImpl
import androidx.compose.ui.input.rotary.RotaryScrollEvent
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.test.ExperimentalTestApi
import androidx.compose.ui.test.SemanticsNodeInteraction
import androidx.compose.ui.test.junit4.createComposeRule
@@ -42,7 +43,7 @@
import androidx.compose.ui.unit.dp
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
-import org.junit.Ignore
+import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -50,10 +51,6 @@
/**
* Focus-aware event propagation test.
- *
- * This test verifies the event propagation logic using
- * [androidx.compose.ui.input.rotary.RotaryScrollEvent]s, but it is meant to test the generic
- * propagation logic for all focus-aware events.
*/
@MediumTest
@RunWith(Parameterized::class)
@@ -76,6 +73,12 @@
fun initParameters() = arrayOf(KeyInput, RotaryInput)
}
+ @Before
+ fun ignoreEventTime() {
+ // This test just checks the propagation of events and doesn't care about the event time.
+ rule.mainClock.autoAdvance = false
+ }
+
@Test
fun noFocusable_doesNotDeliverEvent() {
// Arrange.
@@ -183,7 +186,6 @@
}
}
- @Ignore("b/265319988")
@Test
fun onFocusAwareEvent_isTriggered() {
// Arrange.
@@ -205,7 +207,6 @@
rule.runOnIdle { assertThat(sentEvent).isEqualTo(receivedEvent) }
}
- @Ignore("b/264466323")
@Test
fun onPreFocusAwareEvent_triggered() {
// Arrange.
@@ -279,7 +280,6 @@
}
}
- @Ignore // b/266984867
@Test
fun onPreFocusAwareEvent_triggeredBefore_onFocusAwareEvent_1() {
// Arrange.
@@ -530,54 +530,47 @@
}
private fun Modifier.onFocusAwareEvent(onEvent: (Any) -> Boolean): Modifier = this.then(
- @OptIn(ExperimentalComposeUiApi::class)
- when (nodeType) {
- KeyInput -> modifierElementOf(
- key = onEvent,
- create = { KeyInputInputModifierNodeImpl(onEvent = onEvent, onPreEvent = null) },
- update = { it.onEvent = onEvent },
- definitions = {
- name = "onEvent"
- properties["onEvent"] = onEvent
- }
- )
-
- RotaryInput -> modifierElementOf(
- key = onEvent,
- create = { RotaryInputModifierNodeImpl(onEvent = onEvent, onPreEvent = null) },
- update = { it.onEvent = onEvent },
- definitions = {
- name = "onEvent"
- properties["onEvent"] = onEvent
- }
- )
- }
+ FocusAwareEventElement(onEvent, nodeType, EventType.OnEvent)
)
private fun Modifier.onPreFocusAwareEvent(onEvent: (Any) -> Boolean): Modifier = this.then(
- @OptIn(ExperimentalComposeUiApi::class)
- when (nodeType) {
- KeyInput -> modifierElementOf(
- key = onEvent,
- create = { KeyInputInputModifierNodeImpl(onEvent = null, onPreEvent = onEvent) },
- update = { it.onEvent = onEvent },
- definitions = {
- name = "onEvent"
- properties["onEvent"] = onEvent
- }
- )
-
- RotaryInput -> modifierElementOf(
- key = onEvent,
- create = { RotaryInputModifierNodeImpl(onEvent = null, onPreEvent = onEvent) },
- update = { it.onEvent = onEvent },
- definitions = {
- name = "onEvent"
- properties["onEvent"] = onEvent
- }
- )
- }
+ FocusAwareEventElement(onEvent, nodeType, EventType.PreEvent)
)
+ @OptIn(ExperimentalComposeUiApi::class)
+ private data class FocusAwareEventElement(
+ private val callback: (Any) -> Boolean,
+ private val nodeType: NodeType,
+ private val eventType: EventType
+ ) : ModifierNodeElement<Modifier.Node>() {
+ override fun create() = when (nodeType) {
+ KeyInput -> KeyInputInputModifierNodeImpl(
+ onEvent = callback.takeIf { eventType == EventType.OnEvent },
+ onPreEvent = callback.takeIf { eventType == EventType.PreEvent }
+ )
+ RotaryInput -> RotaryInputModifierNodeImpl(
+ onEvent = callback.takeIf { eventType == EventType.OnEvent },
+ onPreEvent = callback.takeIf { eventType == EventType.PreEvent }
+ )
+ }
+
+ override fun update(node: Modifier.Node) = when (nodeType) {
+ KeyInput -> (node as KeyInputInputModifierNodeImpl).apply {
+ onEvent = callback.takeIf { eventType == EventType.OnEvent }
+ onPreEvent = callback.takeIf { eventType == EventType.PreEvent }
+ }
+ RotaryInput -> (node as RotaryInputModifierNodeImpl).apply {
+ onEvent = callback.takeIf { eventType == EventType.OnEvent }
+ onPreEvent = callback.takeIf { eventType == EventType.PreEvent }
+ }
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "onEvent"
+ properties["onEvent"] = callback
+ }
+ }
+
enum class NodeType { KeyInput, RotaryInput }
+ enum class EventType { PreEvent, OnEvent }
}
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/modifier/ModifierNodeReuseAndDeactivationTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/modifier/ModifierNodeReuseAndDeactivationTest.kt
index 1352f5f..2084e71 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/modifier/ModifierNodeReuseAndDeactivationTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/modifier/ModifierNodeReuseAndDeactivationTest.kt
@@ -36,7 +36,6 @@
import androidx.compose.ui.node.LayoutModifierNode
import androidx.compose.ui.node.ModifierNodeElement
import androidx.compose.ui.node.ObserverNode
-import androidx.compose.ui.node.modifierElementOf
import androidx.compose.ui.node.observeReads
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.unit.Constraints
@@ -537,30 +536,36 @@
onDetach: () -> Unit = {},
onAttach: () -> Unit = {},
): Modifier {
- return modifierElementOf(
- key = key,
- create = {
+ class GenericModifierWithLifecycle(
+ val key: Any?
+ ) : ModifierNodeElement<Modifier.Node>() {
+ override fun create(): Modifier.Node {
onCreate()
- object : Modifier.Node() {
+ return object : Modifier.Node() {
override fun onReset() = onReset()
override fun onAttach() = onAttach()
override fun onDetach() = onDetach()
- }
- },
- update = {
- onUpdate()
+ }
}
- ) {}
+
+ override fun update(node: Modifier.Node) = node.apply { onUpdate() }
+
+ override fun hashCode(): Int = "ModifierNodeReuseAndDeactivationTest".hashCode()
+
+ override fun equals(other: Any?) = (other === this) ||
+ (other is GenericModifierWithLifecycle && other.key == this.key)
+ }
+ return GenericModifierWithLifecycle(key)
}
private val MeasurePolicy = MeasurePolicy { _, _ ->
layout(100, 100) { }
}
-private class StatelessModifierElement(
+private data class StatelessModifierElement(
private val onInvalidate: () -> Unit,
private val size: Int = 10
-) : ModifierNodeElement<StatelessModifierElement.Node>(params = size, inspectorInfo = {}) {
+) : ModifierNodeElement<StatelessModifierElement.Node>() {
override fun create() = Node(size, onInvalidate)
override fun update(node: Node) = node.also {
@@ -582,9 +587,9 @@
}
}
-private class DelegatingModifierElement(
+private data class DelegatingModifierElement(
private val onDelegatedNodeReset: () -> Unit,
-) : ModifierNodeElement<DelegatingModifierElement.Node>(inspectorInfo = {}) {
+) : ModifierNodeElement<DelegatingModifierElement.Node>() {
override fun create() = Node(onDelegatedNodeReset)
override fun update(node: Node) = node.also {
@@ -602,9 +607,9 @@
}
}
-private class LayerModifierElement(
+private data class LayerModifierElement(
private val layerBlock: () -> Unit,
-) : ModifierNodeElement<LayerModifierElement.Node>(inspectorInfo = {}) {
+) : ModifierNodeElement<LayerModifierElement.Node>() {
override fun create() = Node(layerBlock)
override fun update(node: Node) = node.also {
@@ -626,9 +631,9 @@
}
}
-private class ObserverModifierElement(
+private data class ObserverModifierElement(
private val observedBlock: () -> Unit,
-) : ModifierNodeElement<ObserverModifierElement.Node>(inspectorInfo = {}) {
+) : ModifierNodeElement<ObserverModifierElement.Node>() {
override fun create() = Node(observedBlock)
override fun update(node: Node) = node.also {
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/DelegatableNodeTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/DelegatableNodeTest.kt
index f228f88..081c512 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/DelegatableNodeTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/DelegatableNodeTest.kt
@@ -23,6 +23,7 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusTargetModifierNode
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -605,10 +606,18 @@
private fun Modifier.otherModifier(): Modifier = this.then(Modifier)
- @Suppress("ModifierInspectorInfo") // b/251831790.
- @ExperimentalComposeUiApi
- private inline fun <reified T : Modifier.Node> modifierElementOf(crossinline create: () -> T) =
- modifierElementOf(create) { name = "testNode" }
+ private inline fun <reified T : Modifier.Node> modifierElementOf(noinline create: () -> T) =
+ ModifierElementOf(create)
+
+ private data class ModifierElementOf<T : Modifier.Node>(
+ val factory: () -> T
+ ) : ModifierNodeElement<T>() {
+ override fun create(): T = factory()
+ override fun update(node: T) = node
+ override fun InspectorInfo.inspectableProperties() {
+ name = "testNode"
+ }
+ }
private class DetachableNode(val onDetach: (DetachableNode) -> Unit) : Modifier.Node() {
override fun onDetach() {
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/InvalidateSubtreeTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/InvalidateSubtreeTest.kt
index 7bc20da..ad0f352 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/InvalidateSubtreeTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/InvalidateSubtreeTest.kt
@@ -26,7 +26,7 @@
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasureResult
import androidx.compose.ui.layout.MeasureScope
-import androidx.compose.ui.platform.debugInspectorInfo
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.dp
@@ -50,16 +50,9 @@
val counter1 = LayoutAndDrawCounter()
val counter2 = LayoutAndDrawCounter()
val counter3 = LayoutAndDrawCounter()
- val captureInvalidate = modifierElementOf(
- create = {
- val obj = object : Modifier.Node() {}
- invalidate = { obj.invalidateSubtree() }
- obj
- },
- definitions = debugInspectorInfo {
- name = "Invalidate Subtree Modifier.Node"
- }
- )
+ val captureInvalidate = CaptureInvalidateCounter { node ->
+ invalidate = { node.invalidateSubtree() }
+ }
rule.setContent {
Box(counter1) {
Box(counter2 then captureInvalidate) {
@@ -102,16 +95,9 @@
val counter2 = LayoutAndDrawCounter()
val counter3 = LayoutAndDrawCounter()
val counter4 = LayoutAndDrawCounter()
- val captureInvalidate = modifierElementOf(
- create = {
- val obj = object : Modifier.Node() {}
- invalidate = { obj.invalidateSubtree() }
- obj
- },
- definitions = debugInspectorInfo {
- name = "Invalidate Subtree Modifier.Node"
- }
- )
+ val captureInvalidate = CaptureInvalidateCounter { node ->
+ invalidate = { node.invalidateSubtree() }
+ }
rule.setContent {
Box(Modifier.graphicsLayer {} then counter1.graphicsLayer { }) {
Box(Modifier.graphicsLayer { } then
@@ -159,4 +145,20 @@
drawContent()
}
}
+
+ private class CaptureInvalidateCounter(
+ private val onCreate: (node: Modifier.Node) -> Unit
+ ) : ModifierNodeElement<Modifier.Node>() {
+ override fun create() = object : Modifier.Node() {}
+ .apply<Modifier.Node>(onCreate)
+
+ override fun update(node: Modifier.Node) = node
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "Invalidate Subtree Modifier.Node"
+ }
+
+ override fun hashCode() = 0
+ override fun equals(other: Any?) = (other === this)
+ }
}
\ No newline at end of file
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/NodeChainTester.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/NodeChainTester.kt
index 5694bd1..29cafc1 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/NodeChainTester.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/NodeChainTester.kt
@@ -20,6 +20,8 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.InspectorInfo
+import com.google.common.base.Objects
import org.junit.Assert
internal fun chainTester() = NodeChainTester()
@@ -213,11 +215,7 @@
}
fun modifierA(params: Any? = null): Modifier.Element {
- return object : ModifierNodeElement<A>(params, true, {}) {
- override fun create(): A = A()
- override fun update(node: A): A = node
- override fun toString(): String = "a"
- }
+ return object : TestModifierElement<A>("a", params, A()) {}
}
class B : Modifier.Node() {
@@ -225,11 +223,7 @@
}
fun modifierB(params: Any? = null): Modifier.Element {
- return object : ModifierNodeElement<B>(params, true, {}) {
- override fun create(): B = B()
- override fun update(node: B): B = node
- override fun toString(): String = "b"
- }
+ return object : TestModifierElement<B>("b", params, B()) {}
}
class C : Modifier.Node() {
@@ -237,31 +231,44 @@
}
fun modifierC(params: Any? = null): Modifier.Element {
- return object : ModifierNodeElement<C>(params, true, {}) {
- override fun create(): C = C()
- override fun update(node: C): C = node
- override fun toString(): String = "c"
- }
+ return object : TestModifierElement<C>("c", params, C()) {}
}
fun modifierD(params: Any? = null): Modifier.Element {
- class N : Modifier.Node() {
- override fun toString(): String = "d"
- }
- return object : ModifierNodeElement<N>(params, true, {}) {
- override fun create(): N = N()
- override fun update(node: N): N = node
- override fun toString(): String = "d"
- }
+ return object : TestModifierElement<Modifier.Node>("d", params,
+ object : Modifier.Node() {}
+ ) {}
}
fun managedModifier(
name: String,
params: Any? = null
-): ModifierNodeElement<*> = object : ModifierNodeElement<Modifier.Node>(params, true, {}) {
- override fun create(): Modifier.Node = object : Modifier.Node() {}
- override fun update(node: Modifier.Node): Modifier.Node = node
- override fun toString(): String = name
+): ModifierNodeElement<*> = object : TestModifierElement<Modifier.Node>(name, params,
+ object : Modifier.Node() {}
+) {}
+
+private abstract class TestModifierElement<T : Modifier.Node>(
+ val modifierName: String,
+ val param: Any? = null,
+ val node: T
+) : ModifierNodeElement<T>() {
+ override fun create(): T = node
+ override fun update(node: T): T = this.node
+ override fun InspectorInfo.inspectableProperties() {
+ name = modifierName
+ }
+
+ override fun hashCode() = Objects.hashCode(modifierName, param)
+
+ override fun equals(other: Any?): Boolean {
+ if (other === this) return true
+ return other is TestModifierElement<*> &&
+ javaClass == other.javaClass &&
+ modifierName == other.modifierName &&
+ param == other.param
+ }
+
+ override fun toString() = modifierName
}
fun entityModifiers(vararg names: String): List<ModifierNodeElement<*>> {
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/ObserverNodeTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/ObserverNodeTest.kt
index d6ceb13..1049aaf 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/ObserverNodeTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/ObserverNodeTest.kt
@@ -22,6 +22,7 @@
import androidx.compose.runtime.setValue
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
@@ -162,7 +163,17 @@
@ExperimentalComposeUiApi
private inline fun <reified T : Modifier.Node> Modifier.modifierElementOf(node: T): Modifier {
- return this.then(modifierElementOf(create = { node }, definitions = { name = "testNode" }))
+ return this then ModifierElementOf(node)
+ }
+
+ private data class ModifierElementOf<T : Modifier.Node>(
+ val node: T
+ ) : ModifierNodeElement<T>() {
+ override fun create(): T = node
+ override fun update(node: T) = this.node
+ override fun InspectorInfo.inspectableProperties() {
+ name = "testNode"
+ }
}
class TestObserverNode(
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/Modifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/Modifier.kt
index 99859f7..a3f8e91 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/Modifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/Modifier.kt
@@ -146,7 +146,6 @@
* [Modifier.Node] subclass, it is expected that it will be instantiated by adding a
* [androidx.compose.ui.node.ModifierNodeElement] to a [Modifier] chain.
*
- * @see androidx.compose.ui.node.modifierElementOf
* @see androidx.compose.ui.node.ModifierNodeElement
* @see androidx.compose.ui.node.DelegatableNode
* @see androidx.compose.ui.node.DelegatingNode
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/DrawModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/DrawModifier.kt
index 01c13da..555e30e 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/DrawModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/DrawModifier.kt
@@ -29,7 +29,8 @@
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.node.DrawModifierNode
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
/**
* A [Modifier.Element] that draws into the space of the layout.
@@ -84,25 +85,25 @@
/**
* Draw into a [Canvas] behind the modified content.
*/
-@OptIn(ExperimentalComposeUiApi::class)
fun Modifier.drawBehind(
onDraw: DrawScope.() -> Unit
-) = this.then(
- modifierElementOf(
- key = onDraw,
- create = {
- DrawBackgroundModifier(onDraw = onDraw)
- },
- update = {
- it.onDraw = onDraw
- },
- definitions = debugInspectorInfo {
- name = "drawBehind"
- properties["onDraw"] = onDraw
- }
- )
+) = this then DrawBehindElement(onDraw)
-)
+@OptIn(ExperimentalComposeUiApi::class)
+private data class DrawBehindElement(
+ val onDraw: DrawScope.() -> Unit
+) : ModifierNodeElement<DrawBackgroundModifier>() {
+ override fun create() = DrawBackgroundModifier(onDraw)
+
+ override fun update(node: DrawBackgroundModifier) = node.apply {
+ onDraw = this@DrawBehindElement.onDraw
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "drawBehind"
+ properties["onDraw"] = onDraw
+ }
+}
@OptIn(ExperimentalComposeUiApi::class)
private class DrawBackgroundModifier(
@@ -243,27 +244,25 @@
* Creates a [DrawModifier] that allows the developer to draw before or after the layout's
* contents. It also allows the modifier to adjust the layout's canvas.
*/
-@OptIn(ExperimentalComposeUiApi::class)
fun Modifier.drawWithContent(
onDraw: ContentDrawScope.() -> Unit
-): Modifier = this.then(
- modifierElementOf(
- key = onDraw,
- create = {
- DrawWithContentModifier(
- onDraw = onDraw
- )
- },
- update = {
- it.onDraw = onDraw
- },
- definitions = debugInspectorInfo {
- name = "drawWithContent"
- properties["onDraw"] = onDraw
- }
- )
+): Modifier = this then DrawWithContentElement(onDraw)
-)
+@OptIn(ExperimentalComposeUiApi::class)
+private data class DrawWithContentElement(
+ val onDraw: ContentDrawScope.() -> Unit
+) : ModifierNodeElement<DrawWithContentModifier>() {
+ override fun create() = DrawWithContentModifier(onDraw)
+
+ override fun update(node: DrawWithContentModifier) = node.apply {
+ onDraw = this@DrawWithContentElement.onDraw
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "drawWithContent"
+ properties["onDraw"] = onDraw
+ }
+}
@OptIn(ExperimentalComposeUiApi::class)
private class DrawWithContentModifier(
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/PainterModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/PainterModifier.kt
index 9789629b..4b3bbd9 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/PainterModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/PainterModifier.kt
@@ -39,7 +39,7 @@
import androidx.compose.ui.node.invalidateDraw
import androidx.compose.ui.node.invalidateLayer
import androidx.compose.ui.node.invalidateLayout
-import androidx.compose.ui.platform.debugInspectorInfo
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.constrainHeight
@@ -93,25 +93,17 @@
* @sample androidx.compose.ui.samples.PainterModifierSample
*/
@ExperimentalComposeUiApi
-private class PainterModifierNodeElement(
+private data class PainterModifierNodeElement(
val painter: Painter,
val sizeToIntrinsics: Boolean,
val alignment: Alignment,
val contentScale: ContentScale,
val alpha: Float,
val colorFilter: ColorFilter?
-) : ModifierNodeElement<PainterModifierNode>(
- autoInvalidate = false,
- inspectorInfo = debugInspectorInfo {
- name = "paint"
- properties["painter"] = painter
- properties["sizeToIntrinsics"] = sizeToIntrinsics
- properties["alignment"] = alignment
- properties["contentScale"] = contentScale
- properties["alpha"] = alpha
- properties["colorFilter"] = colorFilter
- }
-) {
+) : ModifierNodeElement<PainterModifierNode>() {
+ override val autoInvalidate: Boolean
+ get() = false
+
override fun create(): PainterModifierNode {
return PainterModifierNode(
painter = painter,
@@ -145,28 +137,14 @@
return node
}
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (other !is PainterModifierNodeElement) return false
-
- if (painter !== other.painter) return false
- if (sizeToIntrinsics != other.sizeToIntrinsics) return false
- if (alignment != other.alignment) return false
- if (contentScale != other.contentScale) return false
- if (alpha != other.alpha) return false
- if (colorFilter != other.colorFilter) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- var result = painter.hashCode()
- result = 31 * result + sizeToIntrinsics.hashCode()
- result = 31 * result + alignment.hashCode()
- result = 31 * result + contentScale.hashCode()
- result = 31 * result + alpha.hashCode()
- result = 31 * result + (colorFilter?.hashCode() ?: 0)
- return result
+ override fun InspectorInfo.inspectableProperties() {
+ name = "paint"
+ properties["painter"] = painter
+ properties["sizeToIntrinsics"] = sizeToIntrinsics
+ properties["alignment"] = alignment
+ properties["contentScale"] = contentScale
+ properties["alpha"] = alpha
+ properties["colorFilter"] = colorFilter
}
}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusChangedModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusChangedModifier.kt
index 5c4c835..49f428d 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusChangedModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusChangedModifier.kt
@@ -18,7 +18,8 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
/**
* Add this modifier to a component to observe focus state events. [onFocusChanged] is invoked
@@ -30,19 +31,25 @@
* Note: If you want to be notified every time the internal focus state is written to (even if it
* hasn't changed), use [onFocusEvent] instead.
*/
-@Suppress("ModifierInspectorInfo")
-fun Modifier.onFocusChanged(onFocusChanged: (FocusState) -> Unit): Modifier = this.then(
- @OptIn(ExperimentalComposeUiApi::class)
- modifierElementOf(
- key = onFocusChanged,
- create = { FocusChangedModifierNode(onFocusChanged) },
- update = { it.onFocusChanged = onFocusChanged },
- definitions = {
- name = "onFocusChanged"
- properties["onFocusChanged"] = onFocusChanged
- }
- )
-)
+fun Modifier.onFocusChanged(
+ onFocusChanged: (FocusState) -> Unit
+): Modifier = this then FocusChangedElement(onFocusChanged)
+
+@OptIn(ExperimentalComposeUiApi::class)
+private data class FocusChangedElement(
+ val onFocusChanged: (FocusState) -> Unit
+) : ModifierNodeElement<FocusChangedModifierNode>() {
+ override fun create() = FocusChangedModifierNode(onFocusChanged)
+
+ override fun update(node: FocusChangedModifierNode) = node.apply {
+ onFocusChanged = this@FocusChangedElement.onFocusChanged
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "onFocusChanged"
+ properties["onFocusChanged"] = onFocusChanged
+ }
+}
@ExperimentalComposeUiApi
private class FocusChangedModifierNode(
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusEventModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusEventModifier.kt
index 0b99f2a..f38261a 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusEventModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusEventModifier.kt
@@ -18,7 +18,8 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
/**
* A [modifier][Modifier.Element] that can be used to observe focus state events.
@@ -35,19 +36,25 @@
/**
* Add this modifier to a component to observe focus state events.
*/
-@Suppress("ModifierInspectorInfo") // b/251831790.
-fun Modifier.onFocusEvent(onFocusEvent: (FocusState) -> Unit): Modifier = this.then(
- @OptIn(ExperimentalComposeUiApi::class)
- (modifierElementOf(
- key = onFocusEvent,
- create = { FocusEventModifierNodeImpl(onFocusEvent) },
- update = { it.onFocusEvent = onFocusEvent },
- definitions = {
- name = "onFocusEvent"
- properties["onFocusEvent"] = onFocusEvent
- }
- ))
-)
+fun Modifier.onFocusEvent(
+ onFocusEvent: (FocusState) -> Unit
+): Modifier = this then FocusEventElement(onFocusEvent)
+
+@OptIn(ExperimentalComposeUiApi::class)
+private data class FocusEventElement(
+ val onFocusEvent: (FocusState) -> Unit
+) : ModifierNodeElement<FocusEventModifierNodeImpl>() {
+ override fun create() = FocusEventModifierNodeImpl(onFocusEvent)
+
+ override fun update(node: FocusEventModifierNodeImpl) = node.apply {
+ onFocusEvent = this@FocusEventElement.onFocusEvent
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "onFocusEvent"
+ properties["onFocusEvent"] = onFocusEvent
+ }
+}
@OptIn(ExperimentalComposeUiApi::class)
private class FocusEventModifierNodeImpl(
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusOwnerImpl.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusOwnerImpl.kt
index fdea309..d547117 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusOwnerImpl.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusOwnerImpl.kt
@@ -31,12 +31,13 @@
import androidx.compose.ui.input.key.KeyInputModifierNode
import androidx.compose.ui.input.rotary.RotaryScrollEvent
import androidx.compose.ui.node.DelegatableNode
+import androidx.compose.ui.node.ModifierNodeElement
import androidx.compose.ui.node.NodeKind
import androidx.compose.ui.node.Nodes
import androidx.compose.ui.node.ancestors
-import androidx.compose.ui.node.modifierElementOf
import androidx.compose.ui.node.nearestAncestor
import androidx.compose.ui.node.visitLocalChildren
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.util.fastForEach
import androidx.compose.ui.util.fastForEachReversed
@@ -57,12 +58,20 @@
* list that contains the modifiers required by the focus system. (Eg, a root focus modifier).
*/
// TODO(b/168831247): return an empty Modifier when there are no focusable children.
- @Suppress("ModifierInspectorInfo") // b/251831790.
@OptIn(ExperimentalComposeUiApi::class)
- override val modifier: Modifier = modifierElementOf(
- create = { rootFocusNode },
- definitions = { name = "RootFocusTarget" }
- )
+ override val modifier: Modifier = object : ModifierNodeElement<FocusTargetModifierNode>() {
+ override fun create() = rootFocusNode
+
+ override fun update(node: FocusTargetModifierNode) = node
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "RootFocusTarget"
+ }
+
+ override fun hashCode(): Int = rootFocusNode.hashCode()
+
+ override fun equals(other: Any?) = other === this
+ }
override lateinit var layoutDirection: LayoutDirection
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusProperties.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusProperties.kt
index 446f85c..8404c04 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusProperties.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusProperties.kt
@@ -18,7 +18,8 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
/**
* Properties that are applied to [focusTarget] that is the first child of the
@@ -176,19 +177,25 @@
*
* @sample androidx.compose.ui.samples.FocusPropertiesSample
*/
-@Suppress("ModifierInspectorInfo") // b/251831790.
-fun Modifier.focusProperties(scope: FocusProperties.() -> Unit): Modifier = this.then(
- @OptIn(ExperimentalComposeUiApi::class)
- (modifierElementOf(
- key = scope,
- create = { FocusPropertiesModifierNodeImpl(scope) },
- update = { it.focusPropertiesScope = scope },
- definitions = {
- name = "focusProperties"
- properties["scope"] = scope
- }
- ))
-)
+fun Modifier.focusProperties(
+ scope: FocusProperties.() -> Unit
+): Modifier = this then FocusPropertiesElement(scope)
+
+@OptIn(ExperimentalComposeUiApi::class)
+private data class FocusPropertiesElement(
+ val scope: FocusProperties.() -> Unit
+) : ModifierNodeElement<FocusPropertiesModifierNodeImpl>() {
+ override fun create() = FocusPropertiesModifierNodeImpl(scope)
+
+ override fun update(node: FocusPropertiesModifierNodeImpl) = node.apply {
+ focusPropertiesScope = scope
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "focusProperties"
+ properties["scope"] = scope
+ }
+}
@OptIn(ExperimentalComposeUiApi::class)
private class FocusPropertiesModifierNodeImpl(
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusRequester.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusRequester.kt
index dea7e47..32f3a39 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusRequester.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusRequester.kt
@@ -23,7 +23,7 @@
import androidx.compose.ui.node.Nodes
import androidx.compose.ui.node.visitChildren
-private const val focusRequesterNotInitialized = """
+private const val FocusRequesterNotInitialized = """
FocusRequester is not initialized. Here are some possible fixes:
1. Remember the FocusRequester: val focusRequester = remember { FocusRequester() }
@@ -32,7 +32,7 @@
response to some event. Eg Modifier.clickable { focusRequester.requestFocus() }
"""
-private const val invalidFocusRequesterInvocation = """
+private const val InvalidFocusRequesterInvocation = """
Please check whether the focusRequester is FocusRequester.Cancel or FocusRequester.Default
before invoking any functions on the focusRequester.
"""
@@ -77,9 +77,9 @@
*/
@OptIn(ExperimentalComposeUiApi::class)
internal fun findFocusTarget(onFound: (FocusTargetModifierNode) -> Boolean): Boolean {
- check(this != Default) { invalidFocusRequesterInvocation }
- check(this != Cancel) { invalidFocusRequesterInvocation }
- check(focusRequesterNodes.isNotEmpty()) { focusRequesterNotInitialized }
+ check(this != Default) { InvalidFocusRequesterInvocation }
+ check(this != Cancel) { InvalidFocusRequesterInvocation }
+ check(focusRequesterNodes.isNotEmpty()) { FocusRequesterNotInitialized }
var success = false
focusRequesterNodes.forEach { node ->
node.visitChildren(Nodes.FocusTarget) {
@@ -109,7 +109,7 @@
*/
@OptIn(ExperimentalComposeUiApi::class)
fun captureFocus(): Boolean {
- check(focusRequesterNodes.isNotEmpty()) { focusRequesterNotInitialized }
+ check(focusRequesterNodes.isNotEmpty()) { FocusRequesterNotInitialized }
focusRequesterNodes.forEach {
if (it.captureFocus()) {
return true
@@ -134,7 +134,7 @@
*/
@OptIn(ExperimentalComposeUiApi::class)
fun freeFocus(): Boolean {
- check(focusRequesterNodes.isNotEmpty()) { focusRequesterNotInitialized }
+ check(focusRequesterNodes.isNotEmpty()) { FocusRequesterNotInitialized }
focusRequesterNodes.forEach {
if (it.freeFocus()) {
return true
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusRequesterModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusRequesterModifier.kt
index 4af7a97..dd6fd9f 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusRequesterModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusRequesterModifier.kt
@@ -18,7 +18,8 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
/**
* A [modifier][Modifier.Element] that is used to pass in a [FocusRequester] that can be used to
@@ -45,23 +46,26 @@
*
* @sample androidx.compose.ui.samples.RequestFocusSample
*/
-@Suppress("ModifierInspectorInfo") // b/251831790.
-fun Modifier.focusRequester(focusRequester: FocusRequester): Modifier = this.then(
- @OptIn(ExperimentalComposeUiApi::class)
- (modifierElementOf(
- key = focusRequester,
- create = { FocusRequesterModifierNodeImpl(focusRequester) },
- update = {
- it.focusRequester.focusRequesterNodes -= it
- it.focusRequester = focusRequester
- it.focusRequester.focusRequesterNodes += it
- },
- definitions = {
- name = "focusRequester"
- properties["focusRequester"] = focusRequester
- }
- ))
-)
+fun Modifier.focusRequester(focusRequester: FocusRequester): Modifier =
+ this then FocusRequesterElement(focusRequester)
+
+@OptIn(ExperimentalComposeUiApi::class)
+private data class FocusRequesterElement(
+ val focusRequester: FocusRequester
+) : ModifierNodeElement<FocusRequesterModifierNodeImpl>() {
+ override fun create() = FocusRequesterModifierNodeImpl(focusRequester)
+
+ override fun update(node: FocusRequesterModifierNodeImpl) = node.apply {
+ focusRequester.focusRequesterNodes -= this
+ focusRequester = this@FocusRequesterElement.focusRequester
+ focusRequester.focusRequesterNodes += this
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "focusRequester"
+ properties["focusRequester"] = focusRequester
+ }
+}
@OptIn(ExperimentalComposeUiApi::class)
private class FocusRequesterModifierNodeImpl(
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusTargetModifierNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusTargetModifierNode.kt
index b73a8cb..57ec4b0 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusTargetModifierNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusTargetModifierNode.kt
@@ -25,12 +25,13 @@
import androidx.compose.ui.layout.BeyondBoundsLayout
import androidx.compose.ui.layout.ModifierLocalBeyondBoundsLayout
import androidx.compose.ui.modifier.ModifierLocalNode
+import androidx.compose.ui.node.ModifierNodeElement
import androidx.compose.ui.node.Nodes
import androidx.compose.ui.node.ObserverNode
-import androidx.compose.ui.node.modifierElementOf
import androidx.compose.ui.node.observeReads
import androidx.compose.ui.node.requireOwner
import androidx.compose.ui.node.visitAncestors
+import androidx.compose.ui.platform.InspectorInfo
/**
* This modifier node can be used to create a modifier that makes a component focusable.
@@ -120,10 +121,16 @@
}
}
- internal companion object {
- internal val FocusTargetModifierElement = modifierElementOf(
- create = { FocusTargetModifierNode() },
- definitions = { name = "focusTarget" }
- )
+ internal object FocusTargetModifierElement : ModifierNodeElement<FocusTargetModifierNode>() {
+ override fun create() = FocusTargetModifierNode()
+
+ override fun update(node: FocusTargetModifierNode) = node
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "focusTarget"
+ }
+
+ override fun hashCode() = "focusTarget".hashCode()
+ override fun equals(other: Any?) = other === this
}
}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerModifier.kt
index 5fa5bdc..6117373 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerModifier.kt
@@ -26,9 +26,8 @@
import androidx.compose.ui.node.LayoutModifierNode
import androidx.compose.ui.node.ModifierNodeElement
import androidx.compose.ui.node.Nodes
-import androidx.compose.ui.node.modifierElementOf
import androidx.compose.ui.node.requireCoordinator
-import androidx.compose.ui.platform.debugInspectorInfo
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.platform.isDebugInspectorInfoEnabled
import androidx.compose.ui.unit.Constraints
@@ -385,7 +384,7 @@
)
@ExperimentalComposeUiApi
-private class GraphicsLayerModifierNodeElement(
+private data class GraphicsLayerModifierNodeElement(
val scaleX: Float,
val scaleY: Float,
val alpha: Float,
@@ -403,28 +402,7 @@
val ambientShadowColor: Color,
val spotShadowColor: Color,
val compositingStrategy: CompositingStrategy
-) : ModifierNodeElement<SimpleGraphicsLayerModifier>(
- inspectorInfo = debugInspectorInfo {
- name = "graphicsLayer"
- properties["scaleX"] = scaleX
- properties["scaleY"] = scaleY
- properties["alpha"] = alpha
- properties["translationX"] = translationX
- properties["translationY"] = translationY
- properties["shadowElevation"] = shadowElevation
- properties["rotationX"] = rotationX
- properties["rotationY"] = rotationY
- properties["rotationZ"] = rotationZ
- properties["cameraDistance"] = cameraDistance
- properties["transformOrigin"] = transformOrigin
- properties["shape"] = shape
- properties["clip"] = clip
- properties["renderEffect"] = renderEffect
- properties["ambientShadowColor"] = ambientShadowColor
- properties["spotShadowColor"] = spotShadowColor
- properties["compositingStrategy"] = compositingStrategy
- }
-) {
+) : ModifierNodeElement<SimpleGraphicsLayerModifier>() {
override fun create(): SimpleGraphicsLayerModifier {
return SimpleGraphicsLayerModifier(
scaleX = scaleX,
@@ -469,49 +447,26 @@
return node
}
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (other !is ModifierNodeElement<*>) return false
- if (other !is GraphicsLayerModifierNodeElement) return false
- return this.scaleX == other.scaleX &&
- this.scaleY == other.scaleY &&
- this.alpha == other.alpha &&
- this.translationX == other.translationX &&
- this.translationY == other.translationY &&
- this.shadowElevation == other.shadowElevation &&
- this.rotationX == other.rotationX &&
- this.rotationY == other.rotationY &&
- this.rotationZ == other.rotationZ &&
- this.cameraDistance == other.cameraDistance &&
- this.transformOrigin == other.transformOrigin &&
- this.shape == other.shape &&
- this.clip == other.clip &&
- this.renderEffect == other.renderEffect &&
- this.ambientShadowColor == other.ambientShadowColor &&
- this.spotShadowColor == other.spotShadowColor &&
- this.compositingStrategy == other.compositingStrategy
- }
-
- override fun hashCode(): Int {
- var result = scaleX.hashCode()
- result = 31 * result + scaleY.hashCode()
- result = 31 * result + alpha.hashCode()
- result = 31 * result + translationX.hashCode()
- result = 31 * result + translationY.hashCode()
- result = 31 * result + shadowElevation.hashCode()
- result = 31 * result + rotationX.hashCode()
- result = 31 * result + rotationY.hashCode()
- result = 31 * result + rotationZ.hashCode()
- result = 31 * result + cameraDistance.hashCode()
- result = 31 * result + transformOrigin.hashCode()
- result = 31 * result + shape.hashCode()
- result = 31 * result + clip.hashCode()
- result = 31 * result + renderEffect.hashCode()
- result = 31 * result + ambientShadowColor.hashCode()
- result = 31 * result + spotShadowColor.hashCode()
- result = 31 * result + compositingStrategy.hashCode()
- return result
+ override fun InspectorInfo.inspectableProperties() {
+ name = "graphicsLayer"
+ properties["scaleX"] = scaleX
+ properties["scaleY"] = scaleY
+ properties["alpha"] = alpha
+ properties["translationX"] = translationX
+ properties["translationY"] = translationY
+ properties["shadowElevation"] = shadowElevation
+ properties["rotationX"] = rotationX
+ properties["rotationY"] = rotationY
+ properties["rotationZ"] = rotationZ
+ properties["cameraDistance"] = cameraDistance
+ properties["transformOrigin"] = transformOrigin
+ properties["shape"] = shape
+ properties["clip"] = clip
+ properties["renderEffect"] = renderEffect
+ properties["ambientShadowColor"] = ambientShadowColor
+ properties["spotShadowColor"] = spotShadowColor
+ properties["compositingStrategy"] = compositingStrategy
}
}
@@ -530,18 +485,9 @@
*
* @param block block on [GraphicsLayerScope] where you define the layer properties.
*/
-@OptIn(ExperimentalComposeUiApi::class)
@Stable
fun Modifier.graphicsLayer(block: GraphicsLayerScope.() -> Unit): Modifier =
- this then modifierElementOf(
- key = block,
- create = { BlockGraphicsLayerModifier(block) },
- definitions = debugInspectorInfo {
- name = "graphicsLayer"
- properties["block"] = block
- },
- update = { it.layerBlock = block }
- )
+ this then BlockGraphicsLayerElement(block)
/**
* Determines when to render the contents of a layer into an offscreen buffer before
@@ -599,6 +545,22 @@
if (isDebugInspectorInfoEnabled) this.then(Modifier.graphicsLayer()) else this
@OptIn(ExperimentalComposeUiApi::class)
+private data class BlockGraphicsLayerElement(
+ val block: GraphicsLayerScope.() -> Unit
+) : ModifierNodeElement<BlockGraphicsLayerModifier>() {
+ override fun create() = BlockGraphicsLayerModifier(block)
+
+ override fun update(node: BlockGraphicsLayerModifier) = node.apply {
+ layerBlock = block
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "graphicsLayer"
+ properties["block"] = block
+ }
+}
+
+@OptIn(ExperimentalComposeUiApi::class)
private class BlockGraphicsLayerModifier(
var layerBlock: GraphicsLayerScope.() -> Unit,
) : LayoutModifierNode, Modifier.Node() {
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/key/KeyInputModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/key/KeyInputModifier.kt
index 4fa07ad..4d620d4 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/key/KeyInputModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/key/KeyInputModifier.kt
@@ -16,9 +16,7 @@
package androidx.compose.ui.input.key
-import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.node.modifierElementOf
/**
* Adding this [modifier][Modifier] to the [modifier][Modifier] parameter of a component will
@@ -30,19 +28,9 @@
*
* @sample androidx.compose.ui.samples.KeyEventSample
*/
-@OptIn(ExperimentalComposeUiApi::class)
-@Suppress("ModifierInspectorInfo") // b/251831790.
-fun Modifier.onKeyEvent(onKeyEvent: (KeyEvent) -> Boolean): Modifier = this.then(
- modifierElementOf(
- key = onKeyEvent,
- create = { KeyInputInputModifierNodeImpl(onEvent = onKeyEvent, onPreEvent = null) },
- update = { it.onEvent = onKeyEvent },
- definitions = {
- name = "onKeyEvent"
- properties["onKeyEvent"] = onKeyEvent
- }
- )
-)
+fun Modifier.onKeyEvent(
+ onKeyEvent: (KeyEvent) -> Boolean
+): Modifier = this then OnKeyEventElement(onKeyEvent)
/**
* Adding this [modifier][Modifier] to the [modifier][Modifier] parameter of a component will
@@ -56,16 +44,6 @@
*
* @sample androidx.compose.ui.samples.KeyEventSample
*/
-@OptIn(ExperimentalComposeUiApi::class)
-@Suppress("ModifierInspectorInfo") // b/251831790.
-fun Modifier.onPreviewKeyEvent(onPreviewKeyEvent: (KeyEvent) -> Boolean): Modifier = this.then(
- modifierElementOf(
- key = onPreviewKeyEvent,
- create = { KeyInputInputModifierNodeImpl(onEvent = null, onPreEvent = onPreviewKeyEvent) },
- update = { it.onPreEvent = onPreviewKeyEvent },
- definitions = {
- name = "onPreviewKeyEvent"
- properties["onPreviewKeyEvent"] = onPreviewKeyEvent
- }
- )
-)
+fun Modifier.onPreviewKeyEvent(
+ onPreviewKeyEvent: (KeyEvent) -> Boolean
+): Modifier = this then OnPreviewKeyEvent(onPreviewKeyEvent)
\ No newline at end of file
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/key/KeyInputModifierNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/key/KeyInputModifierNode.kt
index 47ad734..8aeb4b9 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/key/KeyInputModifierNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/key/KeyInputModifierNode.kt
@@ -19,6 +19,8 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.node.DelegatableNode
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
/**
* Implement this interface to create a [Modifier.Node] that can intercept hardware Key events.
@@ -48,6 +50,45 @@
fun onPreKeyEvent(event: KeyEvent): Boolean
}
+@OptIn(ExperimentalComposeUiApi::class)
+internal data class OnKeyEventElement(
+ val onKeyEvent: (KeyEvent) -> Boolean
+) : ModifierNodeElement<KeyInputInputModifierNodeImpl>() {
+ override fun create() = KeyInputInputModifierNodeImpl(
+ onEvent = onKeyEvent,
+ onPreEvent = null
+ )
+
+ override fun update(node: KeyInputInputModifierNodeImpl) = node.apply {
+ onEvent = onKeyEvent
+ onPreEvent = null
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "onKeyEvent"
+ properties["onKeyEvent"] = onKeyEvent
+ }
+}
+
+@OptIn(ExperimentalComposeUiApi::class)
+internal data class OnPreviewKeyEvent(
+ val onPreviewKeyEvent: (KeyEvent) -> Boolean
+) : ModifierNodeElement<KeyInputInputModifierNodeImpl>() {
+ override fun create(): KeyInputInputModifierNodeImpl {
+ return KeyInputInputModifierNodeImpl(onEvent = null, onPreEvent = onPreviewKeyEvent)
+ }
+
+ override fun update(node: KeyInputInputModifierNodeImpl) = node.apply {
+ onPreEvent = onPreviewKeyEvent
+ onEvent = null
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "onPreviewKeyEvent"
+ properties["onPreviewKeyEvent"] = onPreviewKeyEvent
+ }
+}
+
@ExperimentalComposeUiApi
internal class KeyInputInputModifierNodeImpl(
var onEvent: ((KeyEvent) -> Boolean)?,
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/rotary/RotaryInputModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/rotary/RotaryInputModifier.kt
index 30002e0..076a965 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/rotary/RotaryInputModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/rotary/RotaryInputModifier.kt
@@ -16,9 +16,7 @@
package androidx.compose.ui.input.rotary
-import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.node.modifierElementOf
/**
* Adding this [modifier][Modifier] to the [modifier][Modifier] parameter of a component will
@@ -39,21 +37,9 @@
* access to a [RotaryScrollEvent] when a child does not consume it:
* @sample androidx.compose.ui.samples.PreRotaryEventSample
*/
-@Suppress("ModifierInspectorInfo") // b/251831790.
fun Modifier.onRotaryScrollEvent(
onRotaryScrollEvent: (RotaryScrollEvent) -> Boolean
-): Modifier = this.then(
- @OptIn(ExperimentalComposeUiApi::class)
- modifierElementOf(
- key = onRotaryScrollEvent,
- create = { RotaryInputModifierNodeImpl(onEvent = onRotaryScrollEvent, onPreEvent = null) },
- update = { it.onEvent = onRotaryScrollEvent },
- definitions = {
- name = "onRotaryScrollEvent"
- properties["onRotaryScrollEvent"] = onRotaryScrollEvent
- }
- )
-)
+): Modifier = this then OnRotaryScrollEventElement(onRotaryScrollEvent)
/**
* Adding this [modifier][Modifier] to the [modifier][Modifier] parameter of a component will
@@ -76,20 +62,6 @@
*
* @sample androidx.compose.ui.samples.PreRotaryEventSample
*/
-@Suppress("ModifierInspectorInfo") // b/251831790.
fun Modifier.onPreRotaryScrollEvent(
onPreRotaryScrollEvent: (RotaryScrollEvent) -> Boolean
-): Modifier = this.then(
- @OptIn(ExperimentalComposeUiApi::class)
- modifierElementOf(
- key = onPreRotaryScrollEvent,
- create = {
- RotaryInputModifierNodeImpl(onEvent = null, onPreEvent = onPreRotaryScrollEvent)
- },
- update = { it.onPreEvent = onPreRotaryScrollEvent },
- definitions = {
- name = "onPreRotaryScrollEvent"
- properties["onPreRotaryScrollEvent"] = onPreRotaryScrollEvent
- }
- )
-)
+): Modifier = this then OnPreRotaryScrollEventElement(onPreRotaryScrollEvent)
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/rotary/RotaryInputModifierNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/rotary/RotaryInputModifierNode.kt
index c1be0a7..05f8d64 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/rotary/RotaryInputModifierNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/rotary/RotaryInputModifierNode.kt
@@ -19,6 +19,8 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.node.DelegatableNode
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
/**
* Implement this interface to create a [Modifier.Node] that can intercept rotary scroll events.
@@ -48,6 +50,46 @@
}
@OptIn(ExperimentalComposeUiApi::class)
+internal data class OnRotaryScrollEventElement(
+ val onRotaryScrollEvent: (RotaryScrollEvent) -> Boolean
+) : ModifierNodeElement<RotaryInputModifierNodeImpl>() {
+ override fun create() = RotaryInputModifierNodeImpl(
+ onEvent = onRotaryScrollEvent,
+ onPreEvent = null
+ )
+
+ override fun update(node: RotaryInputModifierNodeImpl) = node.apply {
+ onEvent = onRotaryScrollEvent
+ onPreEvent = null
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "onRotaryScrollEvent"
+ properties["onRotaryScrollEvent"] = onRotaryScrollEvent
+ }
+}
+
+@OptIn(ExperimentalComposeUiApi::class)
+internal data class OnPreRotaryScrollEventElement(
+ val onPreRotaryScrollEvent: (RotaryScrollEvent) -> Boolean
+) : ModifierNodeElement<RotaryInputModifierNodeImpl>() {
+ override fun create() = RotaryInputModifierNodeImpl(
+ onEvent = null,
+ onPreEvent = onPreRotaryScrollEvent
+ )
+
+ override fun update(node: RotaryInputModifierNodeImpl) = node.apply {
+ onPreEvent = onPreRotaryScrollEvent
+ onEvent = null
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
+ name = "onPreRotaryScrollEvent"
+ properties["onPreRotaryScrollEvent"] = onPreRotaryScrollEvent
+ }
+}
+
+@OptIn(ExperimentalComposeUiApi::class)
internal class RotaryInputModifierNodeImpl(
var onEvent: ((RotaryScrollEvent) -> Boolean)?,
var onPreEvent: ((RotaryScrollEvent) -> Boolean)?
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutModifier.kt
index abb028f..e9f36f0 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutModifier.kt
@@ -21,7 +21,8 @@
import androidx.compose.ui.graphics.GraphicsLayerScope
import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.node.LayoutModifierNode
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
@@ -263,18 +264,25 @@
*
* @see androidx.compose.ui.layout.LayoutModifier
*/
-@OptIn(ExperimentalComposeUiApi::class)
fun Modifier.layout(
measure: MeasureScope.(Measurable, Constraints) -> MeasureResult
-) = this then modifierElementOf(
- key = measure,
- create = { LayoutModifierImpl(measure) },
- update = { layoutModifier -> layoutModifier.measureBlock = measure },
- definitions = {
+) = this then LayoutModifierElement(measure)
+
+@OptIn(ExperimentalComposeUiApi::class)
+private data class LayoutModifierElement(
+ val measure: MeasureScope.(Measurable, Constraints) -> MeasureResult
+) : ModifierNodeElement<LayoutModifierImpl>() {
+ override fun create() = LayoutModifierImpl(measure)
+
+ override fun update(node: LayoutModifierImpl) = node.apply {
+ measureBlock = measure
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
name = "layout"
properties["measure"] = measure
}
-)
+}
@OptIn(ExperimentalComposeUiApi::class)
internal class LayoutModifierImpl(
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/OnPlacedModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/OnPlacedModifier.kt
index 860638c..be3df73 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/OnPlacedModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/OnPlacedModifier.kt
@@ -21,7 +21,8 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.node.LayoutAwareModifierNode
-import androidx.compose.ui.node.modifierElementOf
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.platform.InspectorInfo
/**
* Invoke [onPlaced] after the parent [LayoutModifier] and parent layout has been placed and before
@@ -30,23 +31,26 @@
*
* @sample androidx.compose.ui.samples.OnPlaced
*/
-@OptIn(ExperimentalComposeUiApi::class)
@Stable
fun Modifier.onPlaced(
onPlaced: (LayoutCoordinates) -> Unit
-) = this then modifierElementOf(
- key = onPlaced,
- create = {
- OnPlacedModifierImpl(callback = onPlaced)
- },
- update = {
- it.callback = onPlaced
- },
- definitions = {
+) = this then OnPlacedElement(onPlaced)
+
+@OptIn(ExperimentalComposeUiApi::class)
+private data class OnPlacedElement(
+ val onPlaced: (LayoutCoordinates) -> Unit
+) : ModifierNodeElement<OnPlacedModifierImpl>() {
+ override fun create() = OnPlacedModifierImpl(callback = onPlaced)
+
+ override fun update(node: OnPlacedModifierImpl) = node.apply {
+ callback = onPlaced
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
name = "onPlaced"
properties["onPlaced"] = onPlaced
}
-)
+}
@OptIn(ExperimentalComposeUiApi::class)
private class OnPlacedModifierImpl(
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ModifierNodeElement.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ModifierNodeElement.kt
index a936861..64eb264 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ModifierNodeElement.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ModifierNodeElement.kt
@@ -18,10 +18,12 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.areObjectsOfSameType
+import androidx.compose.ui.platform.InspectableValue
import androidx.compose.ui.platform.InspectorInfo
-import androidx.compose.ui.platform.InspectorValueInfo
-import androidx.compose.ui.platform.debugInspectorInfo
+import androidx.compose.ui.platform.ValueElement
+import androidx.compose.ui.util.fastForEach
+import kotlin.reflect.KProperty1
+import kotlin.reflect.jvm.isAccessible
/**
* A [Modifier.Element] which manages an instance of a particular [Modifier.Node] implementation. A
@@ -29,31 +31,51 @@
* and updates that implementation is applied to a Layout.
*
* A [ModifierNodeElement] should be very lightweight, and do little more than hold the information
- * necessary to
+ * necessary to create and maintain an instance of the associated [Modifier.Node] type.
+ *
+ * @sample androidx.compose.ui.samples.ModifierNodeElementSample
+ * @sample androidx.compose.ui.samples.SemanticsModifierNodeSample
*
* @see Modifier.Node
* @see Modifier.Element
- * @see modifierElementOf
*/
@ExperimentalComposeUiApi
-abstract class ModifierNodeElement<N : Modifier.Node>(
+abstract class ModifierNodeElement<N : Modifier.Node> : Modifier.Element, InspectableValue {
+
/**
- * An object which holds all of the "inputs" or "parameters" that will be passed into the
- * [Modifier.Node]. Even though most inputs to the create/update of a [Modifier.Node] may
- * come from a captured reference, it is important to pass them into here explicitly as well so
- * that they will get included in equals() and hashCode() calculations. Having it as a single
- * object on the abstract class allows us to have anonymous objects implement
- * [ModifierNodeElement] while still having a reasonable equals implementation.
- */
- internal val params: Any? = null,
- internal val autoInvalidate: Boolean = true,
- /**
- * This lambda will construct a debug-only set of information for use with tooling.
+ * If this property returns `true`, then nodes will be automatically invalidated after the
+ * [update] callback completes (For example, if the returned Node is a [DrawModifierNode], its
+ * [DrawModifierNode.invalidateDraw] function will be invoked automatically as part of
+ * auto invalidation).
*
- * @see InspectorValueInfo
+ * This is enabled by default, and provides a convenient mechanism to schedule invalidation
+ * and apply changes made to the modifier. You may choose to set this to `false` if your
+ * modifier has auto-invalidatable properties that do not frequently require invalidation to
+ * improve performance by skipping unnecessary invalidation. If `autoInvalidate` is set to
+ * `false`, you must call the appropriate invalidate functions manually in [update] for the
+ * new attributes to become visible.
*/
- inspectorInfo: InspectorInfo.() -> Unit
-) : Modifier.Element, InspectorValueInfo(inspectorInfo) {
+ open val autoInvalidate: Boolean
+ get() = true
+
+ private var _inspectorValues: InspectorInfo? = null
+ private val inspectorValues: InspectorInfo
+ get() = _inspectorValues ?: InspectorInfo()
+ .apply {
+ name = this@ModifierNodeElement::class.simpleName
+ inspectableProperties()
+ }
+ .also { _inspectorValues = it }
+
+ final override val nameFallback: String?
+ get() = inspectorValues.name
+
+ final override val valueOverride: Any?
+ get() = inspectorValues.value
+
+ final override val inspectableElements: Sequence<ValueElement>
+ get() = inspectorValues.properties
+
/**
* This will be called the first time the modifier is applied to the Layout and it should
* construct and return the corresponding [Modifier.Node] instance.
@@ -61,84 +83,89 @@
abstract fun create(): N
/**
- * Called when a modifier is applied to a Layout whose [params] have changed from the previous
- * application. This lambda will have the current node instance passed in as a parameter, and
+ * Called when a modifier is applied to a Layout whose inputs have changed from the previous
+ * application. This function will have the current node instance passed in as a parameter, and
* it is expected that the node will be brought up to date.
*/
abstract fun update(node: N): N
- override fun hashCode(): Int {
- return params.hashCode()
+ /**
+ * Populates an [InspectorInfo] object with attributes to display in the layout inspector. This
+ * is called by tooling to resolve the properties of this modifier. By convention, implementors
+ * should set the [name][InspectorInfo.name] to the function name of the modifier.
+ *
+ * The default implementation will attempt to reflectively populate the inspector info with the
+ * properties declared on the subclass. It will also set the [name][InspectorInfo.name] property
+ * to the name of this instance's class by default (not the name of the modifier function).
+ * Modifier property population depends on the kotlin-reflect library. If it is not in the
+ * classpath at runtime, the default implementation of this function will populate the
+ * properties with an error message.
+ *
+ * If you override this function and provide the properties you wish to display, you do not need
+ * to call `super`. Doing so may result in duplicate properties appearing in the layout
+ * inspector.
+ */
+ open fun InspectorInfo.inspectableProperties() {
+ val element = this@ModifierNodeElement
+ val elementClass = element::class
+ try {
+ elementClass.members
+ // Properties declared in the constructor will appear after ones defined in the
+ // class, so sort by the property name to make the result more well-defined.
+ .sortedBy { it.name }
+ .fastForEach { member ->
+ if (member is KProperty1<*, *> && member.name !in builtInProperties) {
+ try {
+ @Suppress("UNCHECKED_CAST")
+ val property = (member as KProperty1<ModifierNodeElement<N>, Any?>)
+ property.isAccessible = true
+ properties[property.name] = property.get(element)
+ } catch (e: Exception) {
+ // Do nothing. Just ignore the field and prevent the error from crashing
+ // the application and ending the debugging session.
+ }
+ }
+ }
+ } catch (e: KotlinReflectionNotSupportedError) {
+ properties["inspector error"] = "Can't automatically resolve properties of $element " +
+ "because Kotlin reflection is unavailable. Consider adding" +
+ "'debugImplementation \"org.jetbrains.kotlin:kotlin-reflect:\$kotlin_version\"' " +
+ "to your module's gradle dependencies block."
+ }
}
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (other !is ModifierNodeElement<*>) return false
- if (!areObjectsOfSameType(this, other)) return false
- return params == other.params
+ // Require hashCode() to be implemented. Using a data class is sufficient. Singletons and
+ // modifiers with no parameters may implement this function by returning an arbitrary constant.
+ abstract override fun hashCode(): Int
+
+ // Require equals() to be implemented. Using a data class is sufficient. Singletons may
+ // implement this function with referential equality (`this === other`). Modifiers with no
+ // inputs may implement this function by checking the type of the other object.
+ abstract override fun equals(other: Any?): Boolean
+
+ private companion object {
+ /**
+ * A list of properties defined by [ModifierNodeElement], computed with reflection at
+ * runtime. We use this list in the default implementation of [inspectableElements] as a
+ * way to hide properties defined by `ModifierNodeElement` from the layout inspector. Just
+ * looking at the name is acceptable because you can't have multiple properties with the
+ * same name and can't create a property that's been defined in `ModifierNodeElement`
+ * without overriding it.
+ */
+ private val builtInProperties: Set<String> by lazy(LazyThreadSafetyMode.NONE) {
+ try {
+ buildSet {
+ ModifierNodeElement::class.members.forEach { member ->
+ if (member is KProperty1<*, *>) {
+ add(member.name)
+ }
+ }
+ }
+ } catch (e: Exception) {
+ emptySet()
+ } catch (e: KotlinReflectionNotSupportedError) {
+ emptySet()
+ }
+ }
}
-}
-
-/**
- * A helpful API for constructing a [ModifierNodeElement] corresponding to a particular
- * [Modifier.Node] implementation.
- *
- * @param key An object used to determine whether or not the created node should be updated or not.
- * @param create The initial creation of the node. This will be called the first time the modifier
- * is applied to the Layout and it should construct the corresponding [Modifier.Node] instance,
- * referencing any captured inputs necessary.
- * @param update Called when a modifier is applied to a Layout whose [key] have changed from the
- * previous application. This lambda will have the current node instance passed in as a parameter,
- * and it is expected that the node will be brought up to date.
- * @param definitions This lambda will construct a debug-only set of information for use with
- * tooling.
- *
- * @sample androidx.compose.ui.samples.ModifierElementOfSample
- * @sample androidx.compose.ui.samples.LayoutModifierNodeSample
- * @sample androidx.compose.ui.samples.DrawModifierNodeSample
- * @sample androidx.compose.ui.samples.GlobalPositionAwareModifierNodeSample
- * @sample androidx.compose.ui.samples.LayoutAwareModifierNodeSample
- * @sample androidx.compose.ui.samples.PointerInputModifierNodeSample
- *
- * @see ModifierNodeElement
- * @see Modifier.Element
- */
-// TODO(lmr): make sure this produces reasonable bytecode.
-@Suppress("MissingNullability", "ModifierFactoryExtensionFunction")
-@ExperimentalComposeUiApi
-inline fun <reified T : Modifier.Node> modifierElementOf(
- key: Any?,
- crossinline create: () -> T,
- crossinline update: (T) -> Unit,
- crossinline definitions: InspectorInfo.() -> Unit
-): Modifier = object : ModifierNodeElement<T>(key, true, debugInspectorInfo(definitions)) {
- override fun create(): T = create()
- override fun update(node: T): T = node.also(update)
-}
-
-/**
- * A helpful API for constructing a [ModifierNodeElement] corresponding to a particular
- * [Modifier.Node] implementation. This overload is expected to be used for parameter-less Modifier
- * factories. For Modifier factories with parameters, consider using the overload of this method
- * which accepts a "params" and "update" parameter.
- *
- * @param create The initial creation of the node. This will be called the first time the modifier
- * is applied to the Layout and it should construct the corresponding [Modifier.Node] instance
- * @param definitions This lambda will construct a debug-only set of information for use with
- * tooling.
- *
- * @sample androidx.compose.ui.samples.ModifierElementOfSample
- * @sample androidx.compose.ui.samples.SemanticsModifierNodeSample
- *
- * @see ModifierNodeElement
- * @see Modifier.Element
- */
-@Suppress("MissingNullability", "ModifierFactoryExtensionFunction")
-@ExperimentalComposeUiApi
-inline fun <reified T : Modifier.Node> modifierElementOf(
- crossinline create: () -> T,
- crossinline definitions: InspectorInfo.() -> Unit
-): Modifier = object : ModifierNodeElement<T>(null, true, debugInspectorInfo(definitions)) {
- override fun create(): T = create()
- override fun update(node: T): T = node
}
\ No newline at end of file
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
index 1e0d0a9..1f258e8 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
@@ -1385,8 +1385,14 @@
val semanticsModifier2 = object : SemanticsModifierNode, Modifier.Node() {
override val semanticsConfiguration: SemanticsConfiguration = semanticsConfiguration
}
- val semanticsModifierElement1 = modifierElementOf(null, { semanticsModifier1 }, { }, { })
- val semanticsModifierElement2 = modifierElementOf(null, { semanticsModifier2 }, { }, { })
+ data class TestSemanticsModifierElement(
+ private val node: Modifier.Node
+ ) : ModifierNodeElement<Modifier.Node>() {
+ override fun create() = node
+ override fun update(node: Modifier.Node) = node
+ }
+ val semanticsModifierElement1 = TestSemanticsModifierElement(semanticsModifier1)
+ val semanticsModifierElement2 = TestSemanticsModifierElement(semanticsModifier2)
val layoutNode1 = LayoutNode(0, 0, 5, 5, semanticsModifierElement1, DpSize(48.dp, 48.dp))
val layoutNode2 = LayoutNode(6, 6, 11, 11, semanticsModifierElement2, DpSize(48.dp, 48.dp))
val outerNode = LayoutNode(0, 0, 11, 11).apply { attach(MockOwner()) }
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/ModifierNodeElementTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/ModifierNodeElementTest.kt
new file mode 100644
index 0000000..eeffd8a
--- /dev/null
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/ModifierNodeElementTest.kt
@@ -0,0 +1,98 @@
+/*
+ * 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.ui.node
+
+import androidx.compose.ui.ExperimentalComposeUiApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.InspectableValue
+import androidx.compose.ui.platform.ValueElement
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@OptIn(ExperimentalComposeUiApi::class)
+@RunWith(JUnit4::class)
+class ModifierNodeElementTest {
+
+ @Test
+ fun testDefaultInspectableProperties() {
+ @Suppress("unused", "UNUSED_PARAMETER")
+ class AModifierElement(
+ val string: String,
+ val int: Int,
+ val map: Map<String, Any>,
+ inputParameter: Boolean
+ ) : ModifierNodeElement<Modifier.Node>() {
+ var classProperty = 0
+ override fun create() = object : Modifier.Node() {}
+ override fun update(node: Modifier.Node) = node
+ // We don't use equals or hashCode in this test, so bad implementations are okay.
+ override fun hashCode() = 0
+ override fun equals(other: Any?) = (this === other)
+ }
+
+ val modifier = AModifierElement(
+ string = "parameter 1",
+ int = 12345,
+ map = mapOf("key" to "value"),
+ inputParameter = true
+ ).apply {
+ classProperty = 42
+ }
+
+ assertEquals(
+ "The modifier's inspectable value was not automatically populated as expected",
+ expectedName = "AModifierElement",
+ expectedValue = null,
+ expectedProperties = listOf(
+ ValueElement("classProperty", 42),
+ ValueElement("int", 12345),
+ ValueElement("map", mapOf("key" to "value")),
+ ValueElement("string", "parameter 1"),
+ ),
+ actual = modifier
+ )
+ }
+
+ @Suppress("SameParameterValue")
+ private fun assertEquals(
+ message: String,
+ expectedName: String? = null,
+ expectedValue: Any? = null,
+ expectedProperties: List<ValueElement> = emptyList(),
+ actual: InspectableValue
+ ) {
+ assertEquals(
+ "$message (unexpected name)",
+ expectedName,
+ actual.nameFallback
+ )
+
+ assertEquals(
+ "$message (unexpected value)",
+ expectedValue,
+ actual.valueOverride
+ )
+
+ assertEquals(
+ "$message (unexpected properties)",
+ expectedProperties,
+ actual.inspectableElements.toList()
+ )
+ }
+}
\ No newline at end of file
diff --git a/constraintlayout/constraintlayout-compose-lint/src/main/java/androidx/constraintlayout/compose/lint/ConstraintLayoutComposeIssueRegistry.kt b/constraintlayout/constraintlayout-compose-lint/src/main/java/androidx/constraintlayout/compose/lint/ConstraintLayoutComposeIssueRegistry.kt
index f81e031..1edc7e6 100644
--- a/constraintlayout/constraintlayout-compose-lint/src/main/java/androidx/constraintlayout/compose/lint/ConstraintLayoutComposeIssueRegistry.kt
+++ b/constraintlayout/constraintlayout-compose-lint/src/main/java/androidx/constraintlayout/compose/lint/ConstraintLayoutComposeIssueRegistry.kt
@@ -30,7 +30,9 @@
override val minApi = CURRENT_API
override val issues = listOf(
- ConstraintLayoutDslDetector.IncorrectReferencesDeclarationIssue
+ ConstraintLayoutDslDetector.IncorrectReferencesDeclarationIssue,
+ ConstraintLayoutDslDetector.IncorrectMatchParentUsageIssue,
+ ConstraintLayoutDslDetector.IncorrectChainMarginsUsageIssue
)
override val vendor = Vendor(
diff --git a/constraintlayout/constraintlayout-compose-lint/src/main/java/androidx/constraintlayout/compose/lint/ConstraintLayoutDslDetector.kt b/constraintlayout/constraintlayout-compose-lint/src/main/java/androidx/constraintlayout/compose/lint/ConstraintLayoutDslDetector.kt
index 647017d..81058d4 100644
--- a/constraintlayout/constraintlayout-compose-lint/src/main/java/androidx/constraintlayout/compose/lint/ConstraintLayoutDslDetector.kt
+++ b/constraintlayout/constraintlayout-compose-lint/src/main/java/androidx/constraintlayout/compose/lint/ConstraintLayoutDslDetector.kt
@@ -24,32 +24,231 @@
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.LintFix
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.UastLintUtils.Companion.tryResolveUDeclaration
import java.util.EnumSet
import org.jetbrains.kotlin.psi.KtDestructuringDeclaration
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
+import org.jetbrains.uast.UBinaryExpression
+import org.jetbrains.uast.UBlockExpression
import org.jetbrains.uast.UCallExpression
+import org.jetbrains.uast.UElement
+import org.jetbrains.uast.UExpression
+import org.jetbrains.uast.ULambdaExpression
+import org.jetbrains.uast.UQualifiedReferenceExpression
+import org.jetbrains.uast.USimpleNameReferenceExpression
+import org.jetbrains.uast.getContainingUClass
+import org.jetbrains.uast.getParentOfType
+import org.jetbrains.uast.visitor.UastVisitor
+
+private const val CREATE_REFS_FOR_NAME = "createRefsFor"
+private const val MATCH_PARENT_NAME = "matchParent"
+private const val LINK_TO_NAME = "linkTo"
+private const val CENTER_TO_NAME = "centerTo"
+private const val CENTER_HORIZONTALLY_TO_NAME = "centerHorizontallyTo"
+private const val CENTER_VERTICALLY_TO_NAME = "centerVerticallyTo"
+private const val WIDTH_NAME = "width"
+private const val HEIGHT_NAME = "height"
+private const val PARENT_NAME = "parent"
+private const val CONSTRAIN_NAME = "constrain"
+private const val MARGIN_INDEX_IN_LINK_TO = 1
+private const val GONE_MARGIN_INDEX_IN_LINK_TO = 2
+private const val CREATE_HORIZONTAL_CHAIN_NAME = "createHorizontalChain"
+private const val CREATE_VERTICAL_CHAIN_NAME = "createVerticalChain"
+private const val WITH_CHAIN_PARAMS_NAME = "withChainParams"
+private const val CHAIN_PARAM_START_MARGIN_NAME = "startMargin"
+private const val CHAIN_PARAM_TOP_MARGIN_NAME = "topMargin"
+private const val CHAIN_PARAM_END_MARGIN_NAME = "endMargin"
+private const val CHAIN_PARAM_BOTTOM_MARGIN_NAME = "bottomMargin"
+private const val CHAIN_PARAM_START_GONE_MARGIN_NAME = "startGoneMargin"
+private const val CHAIN_PARAM_TOP_GONE_MARGIN_NAME = "topGoneMargin"
+private const val CHAIN_PARAM_END_GONE_MARGIN_NAME = "endGoneMargin"
+private const val CHAIN_PARAM_BOTTOM_GONE_MARGIN_NAME = "bottomGoneMargin"
+
+private const val CL_COMPOSE_DIMENSION_CLASS_NAME = "Dimension"
+
+private const val DIMENSION_MATCH_PARENT_EXPRESSION_NAME =
+ "$CL_COMPOSE_DIMENSION_CLASS_NAME.$MATCH_PARENT_NAME"
private const val CL_COMPOSE_PACKAGE = "androidx.constraintlayout.compose"
private const val CONSTRAINT_SET_SCOPE_CLASS_FQ = "$CL_COMPOSE_PACKAGE.ConstraintSetScope"
private const val MOTION_SCENE_SCOPE_CLASS_FQ = "$CL_COMPOSE_PACKAGE.MotionSceneScope"
-private const val CREATE_REFS_FOR_NAME = "createRefsFor"
+private const val CONSTRAIN_SCOPE_CLASS_FQ = "$CL_COMPOSE_PACKAGE.ConstrainScope"
+private const val CONSTRAINED_LAYOUT_REFERENCE_CLASS_FQ =
+ "$CL_COMPOSE_PACKAGE.ConstrainedLayoutReference"
+private const val LAYOUT_REFERENCE_CLASS_FQ = "$CL_COMPOSE_PACKAGE.LayoutReference"
-class ConstraintLayoutDslDetector : Detector(), SourceCodeScanner {
- private val knownOwnersOfCreateRefsFor = setOf(
+private val knownOwnersOfCreateRefsFor by lazy(LazyThreadSafetyMode.NONE) {
+ setOf(
CONSTRAINT_SET_SCOPE_CLASS_FQ,
MOTION_SCENE_SCOPE_CLASS_FQ
)
+}
- override fun getApplicableUastTypes() = listOf(UCallExpression::class.java)
+private val horizontalConstraintAnchors by lazy(LazyThreadSafetyMode.NONE) {
+ setOf(
+ "start",
+ "end",
+ "absoluteLeft",
+ "absoluteRight"
+ )
+}
+
+private val verticalConstraintAnchors by lazy(LazyThreadSafetyMode.NONE) {
+ setOf(
+ "top",
+ "bottom",
+ )
+}
+
+private val horizontalCenterMethodNames by lazy(LazyThreadSafetyMode.NONE) {
+ setOf(
+ CENTER_TO_NAME,
+ CENTER_HORIZONTALLY_TO_NAME,
+ )
+}
+
+private val verticalCenterMethodNames by lazy(LazyThreadSafetyMode.NONE) {
+ setOf(
+ CENTER_TO_NAME,
+ CENTER_VERTICALLY_TO_NAME,
+ )
+}
+
+class ConstraintLayoutDslDetector : Detector(), SourceCodeScanner {
+
+ // TODO: Add a case to detect use cases for `ConstrainedLayoutReference.withChainParams()`
+
+ override fun getApplicableUastTypes() =
+ listOf(UCallExpression::class.java, UBinaryExpression::class.java)
override fun createUastHandler(context: JavaContext) = object : UElementHandler() {
+
+ /**
+ * Binary expressions are of the form `foo = bar`.
+ */
+ override fun visitBinaryExpression(node: UBinaryExpression) {
+ val assignedReferenceText = node.rightOperand.sourcePsi?.text ?: return
+
+ when (assignedReferenceText) {
+ DIMENSION_MATCH_PARENT_EXPRESSION_NAME -> detectMatchParentUsage(node)
+ }
+ }
+
override fun visitCallExpression(node: UCallExpression) {
- if (node.methodName != CREATE_REFS_FOR_NAME) {
+ when (node.methodName) {
+ CREATE_REFS_FOR_NAME -> detectCreateRefsForUsage(node)
+ CREATE_HORIZONTAL_CHAIN_NAME -> detectChainParamsUsage(node, true)
+ CREATE_VERTICAL_CHAIN_NAME -> detectChainParamsUsage(node, false)
+ // TODO: Detect that `withChainParams` is not called after chains are created
+ }
+ }
+
+ /**
+ * Verify correct usage of `Dimension.matchParent`.
+ *
+ *
+ *
+ * When using `Dimension.matchParent`, the user must be careful to not have custom
+ * constraints that result in different behavior from `centerTo(parent)`, otherwise, they
+ * should use `Dimension.percent(1f)` instead.
+ * ```
+ * val (text, button) = createRefsFor("text", "button")
+ * constrain(text) {
+ * width = Dimension.matchParent
+ *
+ * // Correct
+ * start.linkTo(parent.start)
+ * centerTo(parent)
+ * centerHorizontallyTo(parent)
+ *
+ * // Incorrect
+ * start.linkTo(parent.end)
+ * start.linkTo(button.start)
+ * centerHorizontallyTo(button)
+ * centerTo(button)
+ * }
+ * ```
+ *
+ */
+ private fun detectMatchParentUsage(node: UBinaryExpression) {
+ val assigneeNode = node.leftOperand
+ val assigneeName = assigneeNode.sourcePsi?.text ?: return
+
+ // Must be assigned to either `width` or `height`
+ val isHorizontal: Boolean = when (assigneeName) {
+ WIDTH_NAME -> true
+ HEIGHT_NAME -> false
+ else -> return
+ }
+
+ // Verify that the context of this Expression is within ConstrainScope
+ if (assigneeNode.tryResolveUDeclaration()
+ ?.getContainingUClass()?.qualifiedName != CONSTRAIN_SCOPE_CLASS_FQ
+ ) {
return
}
+
+ val containingBlock = node.getParentOfType<UBlockExpression>() ?: return
+
+ // Within the Block, look for expressions supported for the check and immediately return
+ // if any of those expressions indicate bad usage of `Dimension.matchParent`
+ val containsErrorProneUsage = containingBlock.expressions.asSequence()
+ .mapNotNull { expression ->
+ EvaluateableExpression.createForMatchParentUsage(
+ expression = expression,
+ isHorizontal = isHorizontal
+ )
+ }
+ .any(EvaluateableExpression::isErrorProneForMatchParentUsage)
+
+ if (!containsErrorProneUsage) {
+ return
+ }
+
+ val overrideMethodName =
+ if (isHorizontal) CENTER_HORIZONTALLY_TO_NAME else CENTER_VERTICALLY_TO_NAME
+
+ context.report(
+ issue = IncorrectMatchParentUsageIssue,
+ scope = node.rightOperand,
+ location = context.getNameLocation(node.rightOperand),
+ message = "`Dimension.matchParent` will override constraints to an equivalent of " +
+ "`$overrideMethodName(parent)`.\nUse `Dimension.percent(1f)` to respect " +
+ "constraints.",
+ quickfixData = LintFix.create()
+ .replace()
+ .name("Replace `matchParent` with `percent(1f)`.")
+ .range(context.getNameLocation(node.rightOperand))
+ .all()
+ .with("Dimension.percent(1f)")
+ .autoFix()
+ .build()
+ )
+ }
+
+ /**
+ * Verify correct usage of `createRefsFor("a", "b", "c")`.
+ *
+ *
+ *
+ * The number of assigned variables should match the number of given arguments:
+ * ```
+ * // Correct
+ * val (a, b, c) = createRefsFor("a", "b", "c")
+ *
+ * // Incorrect: Fewer variables than arguments
+ * val (a) = createRefsFor("a", "b", "c")
+ *
+ * // Incorrect: More variables than arguments
+ * val (a, b, c, d) = createRefsFor("a", "b", "c")
+ *
+ * ```
+ */
+ private fun detectCreateRefsForUsage(node: UCallExpression) {
val destructuringDeclarationElement =
node.sourcePsi?.getParentOfType<KtDestructuringDeclaration>(true) ?: return
@@ -84,6 +283,140 @@
"assigned variables ($varsReceived)"
)
}
+
+ /**
+ * Verify that margins for chains are applied correctly.
+ *
+ *
+ *
+ * Margins for elements in chains should be applied with `LayoutReference.withChainParams()`
+ * instinctively, users may want to create constraints with margins that mimic the chain
+ * behavior expecting those margins to be reflected in the chain. But that is not the
+ * correct way to do it.
+ *
+ * So this check detects when users create chain-like constraints, and suggests to use
+ * `withChainParams()` and delete conflicting constraints, keeping the intended margins.
+ *
+ *
+ *
+ * Example:
+ *
+ * Before
+ * ```
+ * val (button, text) = createRefs()
+ * createHorizontalChain(button, text)
+ *
+ * constrain(button) {
+ * end.linkTo(text.start, 8.dp)
+ * end.linkTo(text.start, goneMargin = 16.dp)
+ * }
+ * ```
+ *
+ * After
+ * ```
+ * val (button, text) = createRefs()
+ * createHorizontalChain(button.withChainParams(endMargin = 8.dp, endGoneMargin = 16.dp), text)
+ *
+ * constrain(button) {
+ * }
+ * ```
+ */
+ private fun detectChainParamsUsage(node: UCallExpression, isHorizontal: Boolean) {
+ // TODO(b/268213648): Don't attempt to fix chain elements that already have
+ // `withChainParams` that may have been defined elsewhere out of scope. A safe
+ // path to take would be to look for the layout reference declaration, and skip this
+ // check if it cannot be found within the current scope (code block). We could also try
+ // to search within the shared scope of the layout reference and chain declarations,
+ // but there's no straight-forward way to do it.
+
+ val containingBlock = node.getParentOfType<UBlockExpression>() ?: return
+
+ var previousNode: ChainNode? = null
+ val chainNodes = node.valueArguments
+ .filter(UExpression::isOfLayoutReferenceType)
+ .mapNotNull { argumentExpression ->
+ argumentExpression.findChildIdentifier()?.let { identifier ->
+ val chainNode = ChainNode(
+ expression = identifier,
+ hasChainParams = argumentExpression is UQualifiedReferenceExpression ||
+ containingBlock.isChainParamsCalledInIdentifier(identifier)
+ )
+ previousNode?.let { prevNode ->
+ chainNode.prev = prevNode
+ prevNode.next = chainNode
+ }
+ previousNode = chainNode
+ chainNode
+ }
+ }
+
+ val resolvedChainLikeConstraintsPerNode = chainNodes.map {
+ if (it.hasChainParams) {
+ emptyList()
+ } else {
+ findChainLikeConstraints(containingBlock, it, isHorizontal)
+ }
+ }
+ resolvedChainLikeConstraintsPerNode.forEachIndexed { index, chainLikeExpressions ->
+ val chainParamsBuilder = ChainParamsMethodBuilder()
+ val removeLinkToFixes = chainLikeExpressions.map { resolvedExpression ->
+ resolvedExpression.marginExpression?.let {
+ chainParamsBuilder.append(
+ resolvedExpression.marginParamName,
+ resolvedExpression.marginExpression
+ )
+ }
+ resolvedExpression.marginGoneExpression?.let {
+ chainParamsBuilder.append(
+ resolvedExpression.marginGoneParamName,
+ resolvedExpression.marginGoneExpression
+ )
+ }
+ val expressionToDelete =
+ resolvedExpression
+ .fullExpression
+ .getParentOfType<UQualifiedReferenceExpression>()
+ LintFix.create()
+ .replace()
+ .name("Remove conflicting `linkTo` declaration.")
+ .range(context.getLocation(expressionToDelete))
+ .all()
+ .with("")
+ .autoFix()
+ .build()
+ }
+ val chainNode = chainNodes[index]
+ if (!chainParamsBuilder.isEmpty() && removeLinkToFixes.isNotEmpty()) {
+ context.report(
+ issue = IncorrectChainMarginsUsageIssue,
+ scope = node,
+ location = context.getLocation(chainNode.expression.sourcePsi),
+ message = "Margins for elements in a Chain should be applied with " +
+ "`LayoutReference.withChainParams(...)`.",
+ quickfixData = LintFix.create()
+ .composite()
+ .name(
+ "Add `.withChainParams(...)` and remove " +
+ "(${removeLinkToFixes.size}) conflicting `linkTo` declarations."
+ )
+ // `join` might overwrite previously added fixes, so add grouped fixes
+ // first, then, add the remaining fixes individually with `add`
+ .join(*removeLinkToFixes.toTypedArray())
+ .add(
+ LintFix.create()
+ .replace()
+ .name("Add `.withChainParams(...)`.")
+ .range(context.getLocation(chainNode.expression.sourcePsi))
+ .end()
+ .with(chainParamsBuilder.build())
+ .autoFix()
+ .build()
+ )
+ .build()
+ )
+ }
+ }
+ }
}
companion object {
@@ -103,5 +436,328 @@
EnumSet.of(Scope.JAVA_FILE)
)
)
+
+ val IncorrectMatchParentUsageIssue = Issue.create(
+ id = "IncorrectMatchParentUsage",
+ briefDescription = "Prefer using `Dimension.percent(1f)` when defining custom " +
+ "constraints.",
+ explanation = "`Dimension.matchParent` forces the constraints to be an equivalent of " +
+ "`centerHorizontallyTo(parent)` or `centerVerticallyTo(parent)` according to the " +
+ "assigned dimension which can lead to unexpected behavior. To avoid that, prefer " +
+ "using `Dimension.percent(1f)`",
+ category = Category.CORRECTNESS,
+ priority = 5,
+ severity = Severity.WARNING,
+ implementation = Implementation(
+ ConstraintLayoutDslDetector::class.java,
+ EnumSet.of(Scope.JAVA_FILE)
+ )
+ )
+
+ val IncorrectChainMarginsUsageIssue = Issue.create(
+ id = "IncorrectChainMarginsUsage",
+ briefDescription = "Use `LayoutReference.withChainParams()` to define margins for " +
+ "elements in a Chain.",
+ explanation = "If you understand how a chain works, it might seem obvious to add " +
+ "margins by re-creating the constraints with the desired margin. However, in " +
+ "Compose, helpers will ignore custom constraints in favor of their layout " +
+ "implementation. So instead, use `LayoutReference.withChainParams()` " +
+ "to define margins for Chains.",
+ category = Category.CORRECTNESS,
+ priority = 5,
+ severity = Severity.WARNING,
+ implementation = Implementation(
+ ConstraintLayoutDslDetector::class.java,
+ EnumSet.of(Scope.JAVA_FILE)
+ )
+ )
}
+}
+
+internal class EvaluateableExpression(
+ private val expectedArgumentText: String,
+ private val expression: UCallExpression
+) {
+ /**
+ * Should only return `true` when we know for certain that there's wrong usage.
+ *
+ *
+ *
+ * E.g.: For the following snippet we can't know if usage is incorrect since we don't know what
+ * the variable `targetAnchor` represents.
+ * ```
+ * width = Dimension.matchParent
+ *
+ * var targetAnchor: HorizontalAnchor
+ * start.linkTo(targetAnchor)
+ * ```
+ */
+ fun isErrorProneForMatchParentUsage(): Boolean {
+ val argumentText = expression.valueArguments.firstOrNull()?.sourcePsi?.text ?: return false
+ return argumentText != expectedArgumentText
+ }
+
+ companion object {
+ fun createForMatchParentUsage(
+ expression: UExpression,
+ isHorizontal: Boolean
+ ): EvaluateableExpression? {
+ if (expression is UQualifiedReferenceExpression) {
+ // For the form of `start.linkTo(parent.start)`
+
+ val callExpression = (expression.selector as? UCallExpression) ?: return null
+ if (callExpression.methodName != LINK_TO_NAME) {
+ return null
+ }
+ val receiverAnchorName = expression.receiver.sourcePsi?.text ?: return null
+ val supportedAnchors =
+ if (isHorizontal) horizontalConstraintAnchors else verticalConstraintAnchors
+ if (!supportedAnchors.contains(receiverAnchorName)) {
+ return null
+ }
+ return EvaluateableExpression(
+ expectedArgumentText = "$PARENT_NAME.$receiverAnchorName",
+ expression = callExpression
+ )
+ } else if (expression is UCallExpression) {
+ // For the form of `centerTo(parent)`
+
+ val supportedMethodNames =
+ if (isHorizontal) horizontalCenterMethodNames else verticalCenterMethodNames
+ val methodName = expression.methodName ?: return null
+ if (!supportedMethodNames.contains(methodName)) {
+ return null
+ }
+ return EvaluateableExpression(
+ expectedArgumentText = PARENT_NAME,
+ expression = expression
+ )
+ }
+ return null
+ }
+ }
+}
+
+internal fun findChainLikeConstraints(
+ constraintSetBlock: UBlockExpression,
+ chainNode: ChainNode,
+ isHorizontal: Boolean
+): List<ResolvedChainLikeExpression> {
+ val identifier = chainNode.expression
+ val constrainTargetExpressions = constraintSetBlock.expressions.filter { cSetExpression ->
+ cSetExpression is UCallExpression && cSetExpression.methodName == CONSTRAIN_NAME &&
+ cSetExpression.valueArguments.any { argument ->
+ argument.sourcePsi?.text == identifier.identifier
+ }
+ }
+
+ val expectedAnchors =
+ if (isHorizontal) horizontalConstraintAnchors else verticalConstraintAnchors
+
+ return constrainTargetExpressions.asSequence().mapNotNull { constrainExpression ->
+ (constrainExpression as? UCallExpression)
+ ?.valueArguments
+ ?.filterIsInstance<ULambdaExpression>()
+ ?.lastOrNull()?.body as? UBlockExpression
+ }.flatMap {
+ it.expressions
+ }.filterIsInstance<UQualifiedReferenceExpression>().map {
+ it.selector
+ }.filterIsInstance<UCallExpression>().filter {
+ // No point in considering it if there's no margins applied
+ it.methodName == LINK_TO_NAME && it.valueArgumentCount >= 2
+ }.mapNotNull {
+ it.receiver?.sourcePsi?.text?.let { anchorName ->
+ if (expectedAnchors.contains(anchorName)) {
+ Pair(it, anchorName)
+ } else {
+ null
+ }
+ }
+ }.mapNotNull { (linkCallExpression, anchorName) ->
+ val nextIdentifier = chainNode.next?.expression?.identifier
+ val isNextParent = nextIdentifier == null
+
+ val prevIdentifier = chainNode.prev?.expression?.identifier
+ val isPrevParent = prevIdentifier == null
+ val expectedNextAnchorTo =
+ if (isNextParent) {
+ "parent.$anchorName"
+ } else {
+ "${nextIdentifier!!}.${anchorName.getOppositeAnchorName()}"
+ }
+ val expectedPrevAnchorTo =
+ if (isPrevParent) {
+ "parent.$anchorName"
+ } else {
+ "${prevIdentifier!!}.${anchorName.getOppositeAnchorName()}"
+ }
+
+ val targetAnchorExpressionText =
+ linkCallExpression.valueArguments[0].sourcePsi?.text
+ if (targetAnchorExpressionText == expectedPrevAnchorTo ||
+ targetAnchorExpressionText == expectedNextAnchorTo
+ ) {
+ ResolvedChainLikeExpression(
+ linkCallExpression,
+ anchorName,
+ linkCallExpression.getArgumentForParameter(MARGIN_INDEX_IN_LINK_TO),
+ linkCallExpression.getArgumentForParameter(GONE_MARGIN_INDEX_IN_LINK_TO)
+ )
+ } else {
+ null
+ }
+ }.toList()
+}
+
+internal class ChainNode(
+ val expression: USimpleNameReferenceExpression,
+ val hasChainParams: Boolean
+) {
+ var prev: ChainNode? = null
+ var next: ChainNode? = null
+}
+
+internal class ResolvedChainLikeExpression(
+ val fullExpression: UCallExpression,
+ anchorName: String,
+ val marginExpression: UExpression?,
+ val marginGoneExpression: UExpression?
+) {
+ val marginParamName: String = anchorName.asChainParamsArgument(false)
+ val marginGoneParamName: String = anchorName.asChainParamsArgument(true)
+}
+
+private fun String.getOppositeAnchorName() =
+ when (this) {
+ "start" -> "end"
+ "end" -> "start"
+ "absoluteLeft" -> "absoluteRight"
+ "absoluteRight" -> "absoluteLeft"
+ "top" -> "bottom"
+ "bottom" -> "top"
+ else -> "start"
+ }
+
+internal fun String.asChainParamsArgument(isGone: Boolean = false) =
+ if (!isGone) {
+ when (this) {
+ "absoluteLeft",
+ "start" -> CHAIN_PARAM_START_MARGIN_NAME
+
+ "absoluteRight",
+ "end" -> CHAIN_PARAM_END_MARGIN_NAME
+
+ "top" -> CHAIN_PARAM_TOP_MARGIN_NAME
+ "bottom" -> CHAIN_PARAM_BOTTOM_MARGIN_NAME
+ else -> CHAIN_PARAM_START_MARGIN_NAME
+ }
+ } else {
+ when (this) {
+ "absoluteLeft",
+ "start" -> CHAIN_PARAM_START_GONE_MARGIN_NAME
+
+ "absoluteRight",
+ "end" -> CHAIN_PARAM_END_GONE_MARGIN_NAME
+
+ "top" -> CHAIN_PARAM_TOP_GONE_MARGIN_NAME
+ "bottom" -> CHAIN_PARAM_BOTTOM_GONE_MARGIN_NAME
+ else -> CHAIN_PARAM_START_GONE_MARGIN_NAME
+ }
+ }
+
+internal fun UBlockExpression.isChainParamsCalledInIdentifier(
+ target: USimpleNameReferenceExpression
+): Boolean {
+ var found = false
+ this.accept(
+ object : UastVisitor {
+ override fun visitQualifiedReferenceExpression(
+ node: UQualifiedReferenceExpression
+ ): Boolean {
+ val identifier = (node.receiver as? USimpleNameReferenceExpression) ?: return true
+ if (identifier.identifier == target.identifier &&
+ identifier.getExpressionType() == target.getExpressionType()) {
+ val selector = node.selector
+ if (selector is UCallExpression &&
+ selector.methodName == WITH_CHAIN_PARAMS_NAME) {
+ found = true
+ } else {
+ // skip
+ return true
+ }
+ } else {
+ // skip
+ return true
+ }
+ return super.visitQualifiedReferenceExpression(node)
+ }
+
+ override fun visitElement(node: UElement): Boolean {
+ return found
+ }
+ }
+ )
+ return found
+}
+
+internal class ChainParamsMethodBuilder {
+ private val modificationMap = mutableMapOf<String, UExpression>()
+
+ fun append(paramName: String, paramExpression: UExpression) {
+ modificationMap[paramName] = paramExpression
+ }
+
+ fun isEmpty() = modificationMap.isEmpty()
+
+ fun build(): String =
+ StringBuilder().apply {
+ append('.')
+ append(WITH_CHAIN_PARAMS_NAME)
+ append('(')
+ modificationMap.forEach { (paramName, uExpression) ->
+ uExpression.sourcePsi?.text?.let {
+ append("$paramName = $it")
+ append(", ")
+ }
+ }
+ deleteCharAt(this.lastIndex)
+ deleteCharAt(this.lastIndex)
+ append(')')
+ }.toString()
+}
+
+internal fun UExpression.findChildIdentifier(): USimpleNameReferenceExpression? {
+ var identifier: USimpleNameReferenceExpression? = null
+ this.accept(
+ object : UastVisitor {
+ override fun visitSimpleNameReferenceExpression(
+ node: USimpleNameReferenceExpression
+ ): Boolean {
+ if (node.isOfLayoutReferenceType()) {
+ identifier = node
+ }
+ return true
+ }
+
+ // Only supported element to visit recursively, for the form of `textRef.withChainParams()`
+ override fun visitQualifiedReferenceExpression(
+ node: UQualifiedReferenceExpression
+ ): Boolean = false
+
+ override fun visitElement(node: UElement): Boolean = true
+ }
+ )
+ return identifier
+}
+
+/**
+ * Simple way to check if the Reference has a supported LayoutReference type. Note it does not do
+ * expression resolution and takes the type as is. So we have to manually check for inheritors of
+ * LayoutReference.
+ */
+internal fun UExpression.isOfLayoutReferenceType(): Boolean {
+ val typeName = this.getExpressionType()?.canonicalText ?: return false
+ return typeName == CONSTRAINED_LAYOUT_REFERENCE_CLASS_FQ ||
+ typeName == LAYOUT_REFERENCE_CLASS_FQ
}
\ No newline at end of file
diff --git a/constraintlayout/constraintlayout/build.gradle b/constraintlayout/constraintlayout/build.gradle
index 2b9c625..894dfc7 100644
--- a/constraintlayout/constraintlayout/build.gradle
+++ b/constraintlayout/constraintlayout/build.gradle
@@ -26,6 +26,7 @@
implementation("androidx.appcompat:appcompat:1.2.0")
implementation("androidx.core:core:1.3.2")
implementation(project(":constraintlayout:constraintlayout-core"))
+ implementation("androidx.profileinstaller:profileinstaller:1.2.1")
testImplementation(libs.junit)
diff --git a/core/core-ktx/api/1.10.0-beta01.txt b/core/core-ktx/api/1.10.0-beta01.txt
new file mode 100644
index 0000000..801b56b
--- /dev/null
+++ b/core/core-ktx/api/1.10.0-beta01.txt
@@ -0,0 +1,634 @@
+// Signature format: 4.0
+package androidx.core.animation {
+
+ public final class AnimatorKt {
+ method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onRepeat);
+ method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onPause);
+ method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentValuesKt {
+ method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class ContextKt {
+ method public static inline <reified T> T! getSystemService(android.content.Context);
+ method public static inline void withStyledAttributes(android.content.Context, optional android.util.AttributeSet? set, int[] attrs, optional @AttrRes int defStyleAttr, optional @StyleRes int defStyleRes, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ }
+
+ public final class SharedPreferencesKt {
+ method public static inline void edit(android.content.SharedPreferences, optional boolean commit, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content.res {
+
+ public final class TypedArrayKt {
+ method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorKt {
+ method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
+ method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
+ method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
+ method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
+ method public static inline Long? getLongOrNull(android.database.Cursor, int index);
+ method public static inline Short? getShortOrNull(android.database.Cursor, int index);
+ method public static inline String? getStringOrNull(android.database.Cursor, int index);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteDatabaseKt {
+ method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, optional boolean exclusive, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapKt {
+ method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
+ method public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config);
+ method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config, optional boolean hasAlpha, optional android.graphics.ColorSpace colorSpace);
+ method public static inline operator int get(android.graphics.Bitmap, int x, int y);
+ method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, optional boolean filter);
+ method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
+ }
+
+ public final class CanvasKt {
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withScale(android.graphics.Canvas, optional float x, optional float y, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSkew(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withTranslation(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class ColorKt {
+ method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
+ method public static inline operator int component1(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
+ method public static inline operator int component2(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
+ method public static inline operator int component3(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
+ method public static inline operator int component4(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
+ method public static inline int getAlpha(@ColorInt int);
+ method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
+ method public static inline int getBlue(@ColorInt int);
+ method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
+ method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
+ method public static inline int getGreen(@ColorInt int);
+ method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
+ method public static inline int getRed(@ColorInt int);
+ method @RequiresApi(26) public static inline float getRed(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
+ method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
+ method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
+ method @ColorInt public static inline int toColorInt(String);
+ method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
+ }
+
+ public final class ImageDecoderKt {
+ method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ }
+
+ public final class MatrixKt {
+ method public static android.graphics.Matrix rotationMatrix(float degrees, optional float px, optional float py);
+ method public static android.graphics.Matrix scaleMatrix(optional float sx, optional float sy);
+ method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
+ method public static android.graphics.Matrix translationMatrix(optional float tx, optional float ty);
+ method public static inline float[] values(android.graphics.Matrix);
+ }
+
+ public final class PaintKt {
+ method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
+ }
+
+ public final class PathKt {
+ method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, optional float error);
+ method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
+ }
+
+ public final class PictureKt {
+ method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class PointKt {
+ method public static inline operator int component1(android.graphics.Point);
+ method public static inline operator float component1(android.graphics.PointF);
+ method public static inline operator int component2(android.graphics.Point);
+ method public static inline operator float component2(android.graphics.PointF);
+ method public static inline operator android.graphics.Point div(android.graphics.Point, float scalar);
+ method public static inline operator android.graphics.PointF div(android.graphics.PointF, float scalar);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
+ method public static inline operator android.graphics.Point times(android.graphics.Point, float scalar);
+ method public static inline operator android.graphics.PointF times(android.graphics.PointF, float scalar);
+ method public static inline android.graphics.Point toPoint(android.graphics.PointF);
+ method public static inline android.graphics.PointF toPointF(android.graphics.Point);
+ method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
+ method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
+ }
+
+ public final class PorterDuffKt {
+ method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
+ method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
+ }
+
+ public final class RectKt {
+ method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator int component1(android.graphics.Rect);
+ method public static inline operator float component1(android.graphics.RectF);
+ method public static inline operator int component2(android.graphics.Rect);
+ method public static inline operator float component2(android.graphics.RectF);
+ method public static inline operator int component3(android.graphics.Rect);
+ method public static inline operator float component3(android.graphics.RectF);
+ method public static inline operator int component4(android.graphics.Rect);
+ method public static inline operator float component4(android.graphics.RectF);
+ method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
+ method public static inline android.graphics.Rect toRect(android.graphics.RectF);
+ method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.RectF);
+ method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
+ method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
+ }
+
+ public final class RegionKt {
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
+ method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
+ method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region not(android.graphics.Region);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
+ }
+
+ public final class ShaderKt {
+ method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class BitmapDrawableKt {
+ method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
+ }
+
+ public final class ColorDrawableKt {
+ method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
+ }
+
+ public final class DrawableKt {
+ method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
+ method public static android.graphics.Bitmap? toBitmapOrNull(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
+ method public static void updateBounds(android.graphics.drawable.Drawable, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
+ }
+
+ public final class IconKt {
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
+ }
+
+}
+
+package androidx.core.location {
+
+ public final class LocationKt {
+ method public static inline operator double component1(android.location.Location);
+ method public static inline operator double component2(android.location.Location);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class UriKt {
+ method public static java.io.File toFile(android.net.Uri);
+ method public static inline android.net.Uri toUri(String);
+ method public static inline android.net.Uri toUri(java.io.File);
+ }
+
+}
+
+package androidx.core.os {
+
+ public final class BundleKt {
+ method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ method public static android.os.Bundle bundleOf();
+ }
+
+ public final class HandlerKt {
+ method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ }
+
+ @RequiresApi(31) public final class OutcomeReceiverKt {
+ method @RequiresApi(31) public static <R, E extends java.lang.Throwable> android.os.OutcomeReceiver<R,E> asOutcomeReceiver(kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public final class PersistableBundleKt {
+ method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
+ method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
+ }
+
+ public final class TraceKt {
+ method @Deprecated public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class CharSequenceKt {
+ method public static inline boolean isDigitsOnly(CharSequence);
+ method public static inline int trimmedLength(CharSequence);
+ }
+
+ public final class HtmlKt {
+ method public static inline android.text.Spanned parseAsHtml(String, optional int flags, optional android.text.Html.ImageGetter? imageGetter, optional android.text.Html.TagHandler? tagHandler);
+ method public static inline String toHtml(android.text.Spanned, optional int option);
+ }
+
+ public final class LocaleKt {
+ method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
+ }
+
+ public final class SpannableStringBuilderKt {
+ method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ }
+
+ public final class SpannableStringKt {
+ method public static inline void clearSpans(android.text.Spannable);
+ method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
+ method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
+ method public static inline android.text.Spannable toSpannable(CharSequence);
+ }
+
+ public final class SpannedStringKt {
+ method public static inline <reified T> T![] getSpans(android.text.Spanned, optional int start, optional int end);
+ method public static inline android.text.Spanned toSpanned(CharSequence);
+ }
+
+ public final class StringKt {
+ method public static inline String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.transition {
+
+ public final class TransitionKt {
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onPause);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.util {
+
+ public final class AndroidXConsumerKt {
+ method public static <T> androidx.core.util.Consumer<T> asAndroidXConsumer(kotlin.coroutines.Continuation<? super T>);
+ }
+
+ public final class AtomicFileKt {
+ method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
+ method @RequiresApi(17) public static String readText(android.util.AtomicFile, optional java.nio.charset.Charset charset);
+ method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
+ method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
+ method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, optional java.nio.charset.Charset charset);
+ }
+
+ @RequiresApi(24) public final class ConsumerKt {
+ method @RequiresApi(24) public static <T> java.util.function.Consumer<T> asConsumer(kotlin.coroutines.Continuation<? super T>);
+ }
+
+ public final class HalfKt {
+ method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(float);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(double);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(String);
+ }
+
+ public final class LongSparseArrayKt {
+ method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
+ method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
+ method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
+ method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
+ }
+
+ public final class LruCacheKt {
+ method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
+ }
+
+ public final class PairKt {
+ method public static inline operator <F, S> F! component1(androidx.core.util.Pair<F,S>);
+ method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
+ method public static inline operator <F, S> S! component2(androidx.core.util.Pair<F,S>);
+ method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
+ method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
+ method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
+ method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
+ method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
+ }
+
+ public final class RangeKt {
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
+ }
+
+ public final class RunnableKt {
+ method public static Runnable asRunnable(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class SizeKt {
+ method @RequiresApi(21) public static inline operator int component1(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
+ method public static inline operator float component1(androidx.core.util.SizeFCompat);
+ method @RequiresApi(21) public static inline operator int component2(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
+ method public static inline operator float component2(androidx.core.util.SizeFCompat);
+ }
+
+ public final class SparseArrayKt {
+ method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
+ method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+ method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
+ method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public static inline <T> int getSize(android.util.SparseArray<T>);
+ method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
+ method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
+ method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
+ method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
+ method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
+ method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
+ }
+
+ public final class SparseBooleanArrayKt {
+ method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
+ method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
+ method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
+ method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
+ method public static inline int getSize(android.util.SparseBooleanArray);
+ method public static inline boolean isEmpty(android.util.SparseBooleanArray);
+ method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
+ method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
+ method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
+ method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
+ }
+
+ public final class SparseIntArrayKt {
+ method public static inline operator boolean contains(android.util.SparseIntArray, int key);
+ method public static inline boolean containsKey(android.util.SparseIntArray, int key);
+ method public static inline boolean containsValue(android.util.SparseIntArray, int value);
+ method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
+ method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
+ method public static inline int getSize(android.util.SparseIntArray);
+ method public static inline boolean isEmpty(android.util.SparseIntArray);
+ method public static inline boolean isNotEmpty(android.util.SparseIntArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
+ method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static boolean remove(android.util.SparseIntArray, int key, int value);
+ method public static inline operator void set(android.util.SparseIntArray, int key, int value);
+ method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
+ }
+
+ public final class SparseLongArrayKt {
+ method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
+ method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
+ method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
+ method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
+ method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
+ method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
+ }
+
+}
+
+package androidx.core.view {
+
+ public final class MenuKt {
+ method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
+ method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
+ method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
+ method public static inline int getSize(android.view.Menu);
+ method public static inline boolean isEmpty(android.view.Menu);
+ method public static inline boolean isNotEmpty(android.view.Menu);
+ method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
+ method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
+ method public static inline void removeItemAt(android.view.Menu, int index);
+ }
+
+ public final class ViewGroupKt {
+ method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
+ method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
+ method public static operator android.view.View get(android.view.ViewGroup, int index);
+ method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
+ method public static kotlin.sequences.Sequence<android.view.View> getDescendants(android.view.ViewGroup);
+ method public static inline kotlin.ranges.IntRange getIndices(android.view.ViewGroup);
+ method public static inline int getSize(android.view.ViewGroup);
+ method public static inline boolean isEmpty(android.view.ViewGroup);
+ method public static inline boolean isNotEmpty(android.view.ViewGroup);
+ method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
+ method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
+ method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
+ method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
+ }
+
+ public final class ViewKt {
+ method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static android.graphics.Bitmap drawToBitmap(android.view.View, optional android.graphics.Bitmap.Config config);
+ method public static kotlin.sequences.Sequence<android.view.View> getAllViews(android.view.View);
+ method public static kotlin.sequences.Sequence<android.view.ViewParent> getAncestors(android.view.View);
+ method public static inline int getMarginBottom(android.view.View);
+ method public static inline int getMarginEnd(android.view.View);
+ method public static inline int getMarginLeft(android.view.View);
+ method public static inline int getMarginRight(android.view.View);
+ method public static inline int getMarginStart(android.view.View);
+ method public static inline int getMarginTop(android.view.View);
+ method public static inline boolean isGone(android.view.View);
+ method public static inline boolean isInvisible(android.view.View);
+ method public static inline boolean isVisible(android.view.View);
+ method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method @RequiresApi(16) public static Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline void setGone(android.view.View, boolean);
+ method public static inline void setInvisible(android.view.View, boolean);
+ method public static inline void setPadding(android.view.View, @Px int size);
+ method public static inline void setVisible(android.view.View, boolean);
+ method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
+ method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
+ method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
+ method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public final class TextViewKt {
+ method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> onTextChanged, optional kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged);
+ method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ }
+
+}
+
diff --git a/core/core-ktx/api/public_plus_experimental_1.10.0-beta01.txt b/core/core-ktx/api/public_plus_experimental_1.10.0-beta01.txt
new file mode 100644
index 0000000..801b56b
--- /dev/null
+++ b/core/core-ktx/api/public_plus_experimental_1.10.0-beta01.txt
@@ -0,0 +1,634 @@
+// Signature format: 4.0
+package androidx.core.animation {
+
+ public final class AnimatorKt {
+ method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onRepeat);
+ method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onPause);
+ method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentValuesKt {
+ method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class ContextKt {
+ method public static inline <reified T> T! getSystemService(android.content.Context);
+ method public static inline void withStyledAttributes(android.content.Context, optional android.util.AttributeSet? set, int[] attrs, optional @AttrRes int defStyleAttr, optional @StyleRes int defStyleRes, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ }
+
+ public final class SharedPreferencesKt {
+ method public static inline void edit(android.content.SharedPreferences, optional boolean commit, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content.res {
+
+ public final class TypedArrayKt {
+ method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorKt {
+ method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
+ method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
+ method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
+ method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
+ method public static inline Long? getLongOrNull(android.database.Cursor, int index);
+ method public static inline Short? getShortOrNull(android.database.Cursor, int index);
+ method public static inline String? getStringOrNull(android.database.Cursor, int index);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteDatabaseKt {
+ method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, optional boolean exclusive, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapKt {
+ method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
+ method public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config);
+ method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config, optional boolean hasAlpha, optional android.graphics.ColorSpace colorSpace);
+ method public static inline operator int get(android.graphics.Bitmap, int x, int y);
+ method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, optional boolean filter);
+ method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
+ }
+
+ public final class CanvasKt {
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withScale(android.graphics.Canvas, optional float x, optional float y, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSkew(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withTranslation(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class ColorKt {
+ method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
+ method public static inline operator int component1(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
+ method public static inline operator int component2(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
+ method public static inline operator int component3(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
+ method public static inline operator int component4(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
+ method public static inline int getAlpha(@ColorInt int);
+ method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
+ method public static inline int getBlue(@ColorInt int);
+ method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
+ method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
+ method public static inline int getGreen(@ColorInt int);
+ method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
+ method public static inline int getRed(@ColorInt int);
+ method @RequiresApi(26) public static inline float getRed(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
+ method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
+ method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
+ method @ColorInt public static inline int toColorInt(String);
+ method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
+ }
+
+ public final class ImageDecoderKt {
+ method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ }
+
+ public final class MatrixKt {
+ method public static android.graphics.Matrix rotationMatrix(float degrees, optional float px, optional float py);
+ method public static android.graphics.Matrix scaleMatrix(optional float sx, optional float sy);
+ method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
+ method public static android.graphics.Matrix translationMatrix(optional float tx, optional float ty);
+ method public static inline float[] values(android.graphics.Matrix);
+ }
+
+ public final class PaintKt {
+ method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
+ }
+
+ public final class PathKt {
+ method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, optional float error);
+ method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
+ }
+
+ public final class PictureKt {
+ method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class PointKt {
+ method public static inline operator int component1(android.graphics.Point);
+ method public static inline operator float component1(android.graphics.PointF);
+ method public static inline operator int component2(android.graphics.Point);
+ method public static inline operator float component2(android.graphics.PointF);
+ method public static inline operator android.graphics.Point div(android.graphics.Point, float scalar);
+ method public static inline operator android.graphics.PointF div(android.graphics.PointF, float scalar);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
+ method public static inline operator android.graphics.Point times(android.graphics.Point, float scalar);
+ method public static inline operator android.graphics.PointF times(android.graphics.PointF, float scalar);
+ method public static inline android.graphics.Point toPoint(android.graphics.PointF);
+ method public static inline android.graphics.PointF toPointF(android.graphics.Point);
+ method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
+ method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
+ }
+
+ public final class PorterDuffKt {
+ method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
+ method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
+ }
+
+ public final class RectKt {
+ method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator int component1(android.graphics.Rect);
+ method public static inline operator float component1(android.graphics.RectF);
+ method public static inline operator int component2(android.graphics.Rect);
+ method public static inline operator float component2(android.graphics.RectF);
+ method public static inline operator int component3(android.graphics.Rect);
+ method public static inline operator float component3(android.graphics.RectF);
+ method public static inline operator int component4(android.graphics.Rect);
+ method public static inline operator float component4(android.graphics.RectF);
+ method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
+ method public static inline android.graphics.Rect toRect(android.graphics.RectF);
+ method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.RectF);
+ method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
+ method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
+ }
+
+ public final class RegionKt {
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
+ method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
+ method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region not(android.graphics.Region);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
+ }
+
+ public final class ShaderKt {
+ method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class BitmapDrawableKt {
+ method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
+ }
+
+ public final class ColorDrawableKt {
+ method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
+ }
+
+ public final class DrawableKt {
+ method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
+ method public static android.graphics.Bitmap? toBitmapOrNull(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
+ method public static void updateBounds(android.graphics.drawable.Drawable, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
+ }
+
+ public final class IconKt {
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
+ }
+
+}
+
+package androidx.core.location {
+
+ public final class LocationKt {
+ method public static inline operator double component1(android.location.Location);
+ method public static inline operator double component2(android.location.Location);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class UriKt {
+ method public static java.io.File toFile(android.net.Uri);
+ method public static inline android.net.Uri toUri(String);
+ method public static inline android.net.Uri toUri(java.io.File);
+ }
+
+}
+
+package androidx.core.os {
+
+ public final class BundleKt {
+ method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ method public static android.os.Bundle bundleOf();
+ }
+
+ public final class HandlerKt {
+ method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ }
+
+ @RequiresApi(31) public final class OutcomeReceiverKt {
+ method @RequiresApi(31) public static <R, E extends java.lang.Throwable> android.os.OutcomeReceiver<R,E> asOutcomeReceiver(kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public final class PersistableBundleKt {
+ method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
+ method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
+ }
+
+ public final class TraceKt {
+ method @Deprecated public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class CharSequenceKt {
+ method public static inline boolean isDigitsOnly(CharSequence);
+ method public static inline int trimmedLength(CharSequence);
+ }
+
+ public final class HtmlKt {
+ method public static inline android.text.Spanned parseAsHtml(String, optional int flags, optional android.text.Html.ImageGetter? imageGetter, optional android.text.Html.TagHandler? tagHandler);
+ method public static inline String toHtml(android.text.Spanned, optional int option);
+ }
+
+ public final class LocaleKt {
+ method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
+ }
+
+ public final class SpannableStringBuilderKt {
+ method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ }
+
+ public final class SpannableStringKt {
+ method public static inline void clearSpans(android.text.Spannable);
+ method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
+ method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
+ method public static inline android.text.Spannable toSpannable(CharSequence);
+ }
+
+ public final class SpannedStringKt {
+ method public static inline <reified T> T![] getSpans(android.text.Spanned, optional int start, optional int end);
+ method public static inline android.text.Spanned toSpanned(CharSequence);
+ }
+
+ public final class StringKt {
+ method public static inline String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.transition {
+
+ public final class TransitionKt {
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onPause);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.util {
+
+ public final class AndroidXConsumerKt {
+ method public static <T> androidx.core.util.Consumer<T> asAndroidXConsumer(kotlin.coroutines.Continuation<? super T>);
+ }
+
+ public final class AtomicFileKt {
+ method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
+ method @RequiresApi(17) public static String readText(android.util.AtomicFile, optional java.nio.charset.Charset charset);
+ method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
+ method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
+ method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, optional java.nio.charset.Charset charset);
+ }
+
+ @RequiresApi(24) public final class ConsumerKt {
+ method @RequiresApi(24) public static <T> java.util.function.Consumer<T> asConsumer(kotlin.coroutines.Continuation<? super T>);
+ }
+
+ public final class HalfKt {
+ method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(float);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(double);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(String);
+ }
+
+ public final class LongSparseArrayKt {
+ method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
+ method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
+ method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
+ method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
+ }
+
+ public final class LruCacheKt {
+ method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
+ }
+
+ public final class PairKt {
+ method public static inline operator <F, S> F! component1(androidx.core.util.Pair<F,S>);
+ method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
+ method public static inline operator <F, S> S! component2(androidx.core.util.Pair<F,S>);
+ method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
+ method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
+ method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
+ method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
+ method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
+ }
+
+ public final class RangeKt {
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
+ }
+
+ public final class RunnableKt {
+ method public static Runnable asRunnable(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class SizeKt {
+ method @RequiresApi(21) public static inline operator int component1(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
+ method public static inline operator float component1(androidx.core.util.SizeFCompat);
+ method @RequiresApi(21) public static inline operator int component2(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
+ method public static inline operator float component2(androidx.core.util.SizeFCompat);
+ }
+
+ public final class SparseArrayKt {
+ method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
+ method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+ method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
+ method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public static inline <T> int getSize(android.util.SparseArray<T>);
+ method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
+ method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
+ method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
+ method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
+ method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
+ method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
+ }
+
+ public final class SparseBooleanArrayKt {
+ method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
+ method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
+ method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
+ method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
+ method public static inline int getSize(android.util.SparseBooleanArray);
+ method public static inline boolean isEmpty(android.util.SparseBooleanArray);
+ method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
+ method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
+ method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
+ method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
+ }
+
+ public final class SparseIntArrayKt {
+ method public static inline operator boolean contains(android.util.SparseIntArray, int key);
+ method public static inline boolean containsKey(android.util.SparseIntArray, int key);
+ method public static inline boolean containsValue(android.util.SparseIntArray, int value);
+ method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
+ method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
+ method public static inline int getSize(android.util.SparseIntArray);
+ method public static inline boolean isEmpty(android.util.SparseIntArray);
+ method public static inline boolean isNotEmpty(android.util.SparseIntArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
+ method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static boolean remove(android.util.SparseIntArray, int key, int value);
+ method public static inline operator void set(android.util.SparseIntArray, int key, int value);
+ method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
+ }
+
+ public final class SparseLongArrayKt {
+ method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
+ method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
+ method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
+ method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
+ method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
+ method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
+ }
+
+}
+
+package androidx.core.view {
+
+ public final class MenuKt {
+ method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
+ method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
+ method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
+ method public static inline int getSize(android.view.Menu);
+ method public static inline boolean isEmpty(android.view.Menu);
+ method public static inline boolean isNotEmpty(android.view.Menu);
+ method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
+ method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
+ method public static inline void removeItemAt(android.view.Menu, int index);
+ }
+
+ public final class ViewGroupKt {
+ method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
+ method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
+ method public static operator android.view.View get(android.view.ViewGroup, int index);
+ method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
+ method public static kotlin.sequences.Sequence<android.view.View> getDescendants(android.view.ViewGroup);
+ method public static inline kotlin.ranges.IntRange getIndices(android.view.ViewGroup);
+ method public static inline int getSize(android.view.ViewGroup);
+ method public static inline boolean isEmpty(android.view.ViewGroup);
+ method public static inline boolean isNotEmpty(android.view.ViewGroup);
+ method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
+ method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
+ method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
+ method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
+ }
+
+ public final class ViewKt {
+ method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static android.graphics.Bitmap drawToBitmap(android.view.View, optional android.graphics.Bitmap.Config config);
+ method public static kotlin.sequences.Sequence<android.view.View> getAllViews(android.view.View);
+ method public static kotlin.sequences.Sequence<android.view.ViewParent> getAncestors(android.view.View);
+ method public static inline int getMarginBottom(android.view.View);
+ method public static inline int getMarginEnd(android.view.View);
+ method public static inline int getMarginLeft(android.view.View);
+ method public static inline int getMarginRight(android.view.View);
+ method public static inline int getMarginStart(android.view.View);
+ method public static inline int getMarginTop(android.view.View);
+ method public static inline boolean isGone(android.view.View);
+ method public static inline boolean isInvisible(android.view.View);
+ method public static inline boolean isVisible(android.view.View);
+ method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method @RequiresApi(16) public static Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline void setGone(android.view.View, boolean);
+ method public static inline void setInvisible(android.view.View, boolean);
+ method public static inline void setPadding(android.view.View, @Px int size);
+ method public static inline void setVisible(android.view.View, boolean);
+ method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
+ method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
+ method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
+ method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public final class TextViewKt {
+ method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> onTextChanged, optional kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged);
+ method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ }
+
+}
+
diff --git a/core/core-ktx/api/res-1.10.0-beta01.txt b/core/core-ktx/api/res-1.10.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/core/core-ktx/api/res-1.10.0-beta01.txt
diff --git a/core/core-ktx/api/restricted_1.10.0-beta01.txt b/core/core-ktx/api/restricted_1.10.0-beta01.txt
new file mode 100644
index 0000000..801b56b
--- /dev/null
+++ b/core/core-ktx/api/restricted_1.10.0-beta01.txt
@@ -0,0 +1,634 @@
+// Signature format: 4.0
+package androidx.core.animation {
+
+ public final class AnimatorKt {
+ method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onRepeat);
+ method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onPause);
+ method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentValuesKt {
+ method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class ContextKt {
+ method public static inline <reified T> T! getSystemService(android.content.Context);
+ method public static inline void withStyledAttributes(android.content.Context, optional android.util.AttributeSet? set, int[] attrs, optional @AttrRes int defStyleAttr, optional @StyleRes int defStyleRes, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ }
+
+ public final class SharedPreferencesKt {
+ method public static inline void edit(android.content.SharedPreferences, optional boolean commit, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content.res {
+
+ public final class TypedArrayKt {
+ method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorKt {
+ method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
+ method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
+ method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
+ method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
+ method public static inline Long? getLongOrNull(android.database.Cursor, int index);
+ method public static inline Short? getShortOrNull(android.database.Cursor, int index);
+ method public static inline String? getStringOrNull(android.database.Cursor, int index);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteDatabaseKt {
+ method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, optional boolean exclusive, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapKt {
+ method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
+ method public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config);
+ method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config, optional boolean hasAlpha, optional android.graphics.ColorSpace colorSpace);
+ method public static inline operator int get(android.graphics.Bitmap, int x, int y);
+ method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, optional boolean filter);
+ method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
+ }
+
+ public final class CanvasKt {
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withScale(android.graphics.Canvas, optional float x, optional float y, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSkew(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withTranslation(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class ColorKt {
+ method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
+ method public static inline operator int component1(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
+ method public static inline operator int component2(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
+ method public static inline operator int component3(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
+ method public static inline operator int component4(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
+ method public static inline int getAlpha(@ColorInt int);
+ method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
+ method public static inline int getBlue(@ColorInt int);
+ method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
+ method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
+ method public static inline int getGreen(@ColorInt int);
+ method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
+ method public static inline int getRed(@ColorInt int);
+ method @RequiresApi(26) public static inline float getRed(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
+ method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
+ method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
+ method @ColorInt public static inline int toColorInt(String);
+ method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
+ }
+
+ public final class ImageDecoderKt {
+ method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ }
+
+ public final class MatrixKt {
+ method public static android.graphics.Matrix rotationMatrix(float degrees, optional float px, optional float py);
+ method public static android.graphics.Matrix scaleMatrix(optional float sx, optional float sy);
+ method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
+ method public static android.graphics.Matrix translationMatrix(optional float tx, optional float ty);
+ method public static inline float[] values(android.graphics.Matrix);
+ }
+
+ public final class PaintKt {
+ method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
+ }
+
+ public final class PathKt {
+ method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, optional float error);
+ method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
+ }
+
+ public final class PictureKt {
+ method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class PointKt {
+ method public static inline operator int component1(android.graphics.Point);
+ method public static inline operator float component1(android.graphics.PointF);
+ method public static inline operator int component2(android.graphics.Point);
+ method public static inline operator float component2(android.graphics.PointF);
+ method public static inline operator android.graphics.Point div(android.graphics.Point, float scalar);
+ method public static inline operator android.graphics.PointF div(android.graphics.PointF, float scalar);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
+ method public static inline operator android.graphics.Point times(android.graphics.Point, float scalar);
+ method public static inline operator android.graphics.PointF times(android.graphics.PointF, float scalar);
+ method public static inline android.graphics.Point toPoint(android.graphics.PointF);
+ method public static inline android.graphics.PointF toPointF(android.graphics.Point);
+ method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
+ method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
+ }
+
+ public final class PorterDuffKt {
+ method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
+ method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
+ }
+
+ public final class RectKt {
+ method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator int component1(android.graphics.Rect);
+ method public static inline operator float component1(android.graphics.RectF);
+ method public static inline operator int component2(android.graphics.Rect);
+ method public static inline operator float component2(android.graphics.RectF);
+ method public static inline operator int component3(android.graphics.Rect);
+ method public static inline operator float component3(android.graphics.RectF);
+ method public static inline operator int component4(android.graphics.Rect);
+ method public static inline operator float component4(android.graphics.RectF);
+ method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
+ method public static inline android.graphics.Rect toRect(android.graphics.RectF);
+ method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.RectF);
+ method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
+ method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
+ }
+
+ public final class RegionKt {
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
+ method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
+ method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region not(android.graphics.Region);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
+ }
+
+ public final class ShaderKt {
+ method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class BitmapDrawableKt {
+ method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
+ }
+
+ public final class ColorDrawableKt {
+ method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
+ }
+
+ public final class DrawableKt {
+ method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
+ method public static android.graphics.Bitmap? toBitmapOrNull(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
+ method public static void updateBounds(android.graphics.drawable.Drawable, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
+ }
+
+ public final class IconKt {
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
+ }
+
+}
+
+package androidx.core.location {
+
+ public final class LocationKt {
+ method public static inline operator double component1(android.location.Location);
+ method public static inline operator double component2(android.location.Location);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class UriKt {
+ method public static java.io.File toFile(android.net.Uri);
+ method public static inline android.net.Uri toUri(String);
+ method public static inline android.net.Uri toUri(java.io.File);
+ }
+
+}
+
+package androidx.core.os {
+
+ public final class BundleKt {
+ method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ method public static android.os.Bundle bundleOf();
+ }
+
+ public final class HandlerKt {
+ method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ }
+
+ @RequiresApi(31) public final class OutcomeReceiverKt {
+ method @RequiresApi(31) public static <R, E extends java.lang.Throwable> android.os.OutcomeReceiver<R,E> asOutcomeReceiver(kotlin.coroutines.Continuation<? super R>);
+ }
+
+ public final class PersistableBundleKt {
+ method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
+ method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
+ }
+
+ public final class TraceKt {
+ method @Deprecated public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class CharSequenceKt {
+ method public static inline boolean isDigitsOnly(CharSequence);
+ method public static inline int trimmedLength(CharSequence);
+ }
+
+ public final class HtmlKt {
+ method public static inline android.text.Spanned parseAsHtml(String, optional int flags, optional android.text.Html.ImageGetter? imageGetter, optional android.text.Html.TagHandler? tagHandler);
+ method public static inline String toHtml(android.text.Spanned, optional int option);
+ }
+
+ public final class LocaleKt {
+ method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
+ }
+
+ public final class SpannableStringBuilderKt {
+ method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ }
+
+ public final class SpannableStringKt {
+ method public static inline void clearSpans(android.text.Spannable);
+ method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
+ method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
+ method public static inline android.text.Spannable toSpannable(CharSequence);
+ }
+
+ public final class SpannedStringKt {
+ method public static inline <reified T> T![] getSpans(android.text.Spanned, optional int start, optional int end);
+ method public static inline android.text.Spanned toSpanned(CharSequence);
+ }
+
+ public final class StringKt {
+ method public static inline String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.transition {
+
+ public final class TransitionKt {
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onPause);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.util {
+
+ public final class AndroidXConsumerKt {
+ method public static <T> androidx.core.util.Consumer<T> asAndroidXConsumer(kotlin.coroutines.Continuation<? super T>);
+ }
+
+ public final class AtomicFileKt {
+ method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
+ method @RequiresApi(17) public static String readText(android.util.AtomicFile, optional java.nio.charset.Charset charset);
+ method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
+ method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
+ method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, optional java.nio.charset.Charset charset);
+ }
+
+ @RequiresApi(24) public final class ConsumerKt {
+ method @RequiresApi(24) public static <T> java.util.function.Consumer<T> asConsumer(kotlin.coroutines.Continuation<? super T>);
+ }
+
+ public final class HalfKt {
+ method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(float);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(double);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(String);
+ }
+
+ public final class LongSparseArrayKt {
+ method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
+ method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
+ method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
+ method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
+ }
+
+ public final class LruCacheKt {
+ method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
+ }
+
+ public final class PairKt {
+ method public static inline operator <F, S> F! component1(androidx.core.util.Pair<F,S>);
+ method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
+ method public static inline operator <F, S> S! component2(androidx.core.util.Pair<F,S>);
+ method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
+ method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
+ method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
+ method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
+ method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
+ }
+
+ public final class RangeKt {
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
+ }
+
+ public final class RunnableKt {
+ method public static Runnable asRunnable(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ }
+
+ public final class SizeKt {
+ method @RequiresApi(21) public static inline operator int component1(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
+ method public static inline operator float component1(androidx.core.util.SizeFCompat);
+ method @RequiresApi(21) public static inline operator int component2(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
+ method public static inline operator float component2(androidx.core.util.SizeFCompat);
+ }
+
+ public final class SparseArrayKt {
+ method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
+ method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+ method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
+ method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public static inline <T> int getSize(android.util.SparseArray<T>);
+ method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
+ method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
+ method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
+ method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
+ method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
+ method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
+ }
+
+ public final class SparseBooleanArrayKt {
+ method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
+ method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
+ method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
+ method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
+ method public static inline int getSize(android.util.SparseBooleanArray);
+ method public static inline boolean isEmpty(android.util.SparseBooleanArray);
+ method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
+ method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
+ method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
+ method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
+ }
+
+ public final class SparseIntArrayKt {
+ method public static inline operator boolean contains(android.util.SparseIntArray, int key);
+ method public static inline boolean containsKey(android.util.SparseIntArray, int key);
+ method public static inline boolean containsValue(android.util.SparseIntArray, int value);
+ method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
+ method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
+ method public static inline int getSize(android.util.SparseIntArray);
+ method public static inline boolean isEmpty(android.util.SparseIntArray);
+ method public static inline boolean isNotEmpty(android.util.SparseIntArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
+ method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static boolean remove(android.util.SparseIntArray, int key, int value);
+ method public static inline operator void set(android.util.SparseIntArray, int key, int value);
+ method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
+ }
+
+ public final class SparseLongArrayKt {
+ method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
+ method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
+ method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
+ method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
+ method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
+ method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
+ }
+
+}
+
+package androidx.core.view {
+
+ public final class MenuKt {
+ method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
+ method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
+ method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
+ method public static inline int getSize(android.view.Menu);
+ method public static inline boolean isEmpty(android.view.Menu);
+ method public static inline boolean isNotEmpty(android.view.Menu);
+ method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
+ method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
+ method public static inline void removeItemAt(android.view.Menu, int index);
+ }
+
+ public final class ViewGroupKt {
+ method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
+ method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
+ method public static operator android.view.View get(android.view.ViewGroup, int index);
+ method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
+ method public static kotlin.sequences.Sequence<android.view.View> getDescendants(android.view.ViewGroup);
+ method public static inline kotlin.ranges.IntRange getIndices(android.view.ViewGroup);
+ method public static inline int getSize(android.view.ViewGroup);
+ method public static inline boolean isEmpty(android.view.ViewGroup);
+ method public static inline boolean isNotEmpty(android.view.ViewGroup);
+ method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
+ method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
+ method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
+ method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
+ }
+
+ public final class ViewKt {
+ method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static android.graphics.Bitmap drawToBitmap(android.view.View, optional android.graphics.Bitmap.Config config);
+ method public static kotlin.sequences.Sequence<android.view.View> getAllViews(android.view.View);
+ method public static kotlin.sequences.Sequence<android.view.ViewParent> getAncestors(android.view.View);
+ method public static inline int getMarginBottom(android.view.View);
+ method public static inline int getMarginEnd(android.view.View);
+ method public static inline int getMarginLeft(android.view.View);
+ method public static inline int getMarginRight(android.view.View);
+ method public static inline int getMarginStart(android.view.View);
+ method public static inline int getMarginTop(android.view.View);
+ method public static inline boolean isGone(android.view.View);
+ method public static inline boolean isInvisible(android.view.View);
+ method public static inline boolean isVisible(android.view.View);
+ method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method @RequiresApi(16) public static Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline void setGone(android.view.View, boolean);
+ method public static inline void setInvisible(android.view.View, boolean);
+ method public static inline void setPadding(android.view.View, @Px int size);
+ method public static inline void setVisible(android.view.View, boolean);
+ method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
+ method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
+ method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
+ method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public final class TextViewKt {
+ method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> onTextChanged, optional kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged);
+ method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ }
+
+}
+
diff --git a/core/core/api/1.10.0-beta01.txt b/core/core/api/1.10.0-beta01.txt
new file mode 100644
index 0000000..5033a53
--- /dev/null
+++ b/core/core/api/1.10.0-beta01.txt
@@ -0,0 +1,3929 @@
+// Signature format: 4.0
+package androidx.core.accessibilityservice {
+
+ public final class AccessibilityServiceInfoCompat {
+ method public static String capabilityToString(int);
+ method public static String feedbackTypeToString(int);
+ method public static String? flagToString(int);
+ method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static String? loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
+ field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
+ field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+ field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+ field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+ field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+ field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+ field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+ field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+ field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+ }
+
+}
+
+package androidx.core.app {
+
+ public class ActivityCompat extends androidx.core.content.ContextCompat {
+ ctor protected ActivityCompat();
+ method public static void finishAffinity(android.app.Activity);
+ method public static void finishAfterTransition(android.app.Activity);
+ method public static android.net.Uri? getReferrer(android.app.Activity);
+ method @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
+ method public static boolean isLaunchedFromBubble(android.app.Activity);
+ method public static void postponeEnterTransition(android.app.Activity);
+ method public static void recreate(android.app.Activity);
+ method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
+ method public static void requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
+ method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setLocusContext(android.app.Activity, androidx.core.content.LocusIdCompat?, android.os.Bundle?);
+ method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, String);
+ method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle?);
+ method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+ method public static void startPostponedEnterTransition(android.app.Activity);
+ }
+
+ public static interface ActivityCompat.OnRequestPermissionsResultCallback {
+ method public void onRequestPermissionsResult(int, String![], int[]);
+ }
+
+ public static interface ActivityCompat.PermissionCompatDelegate {
+ method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
+ method public boolean requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ }
+
+ public final class ActivityManagerCompat {
+ method public static boolean isLowRamDevice(android.app.ActivityManager);
+ }
+
+ public class ActivityOptionsCompat {
+ ctor protected ActivityOptionsCompat();
+ method public android.graphics.Rect? getLaunchBounds();
+ method public static androidx.core.app.ActivityOptionsCompat makeBasic();
+ method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View!,java.lang.String!>!...);
+ method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
+ method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+ method public void requestUsageTimeReport(android.app.PendingIntent);
+ method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
+ method public android.os.Bundle? toBundle();
+ method public void update(androidx.core.app.ActivityOptionsCompat);
+ field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+ field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+ }
+
+ public final class AlarmManagerCompat {
+ method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
+ method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ }
+
+ @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
+ ctor public AppComponentFactory();
+ method public final android.app.Activity instantiateActivity(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Application instantiateApplication(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.ContentProvider instantiateProvider(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.BroadcastReceiver instantiateReceiver(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Service instantiateService(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ }
+
+ public class AppLaunchChecker {
+ ctor @Deprecated public AppLaunchChecker();
+ method public static boolean hasStartedFromLauncher(android.content.Context);
+ method public static void onActivityCreate(android.app.Activity);
+ }
+
+ public final class AppOpsManagerCompat {
+ method public static int checkOrNoteProxyOp(android.content.Context, int, String, String);
+ method public static int noteOp(android.content.Context, String, int, String);
+ method public static int noteOpNoThrow(android.content.Context, String, int, String);
+ method public static int noteProxyOp(android.content.Context, String, String);
+ method public static int noteProxyOpNoThrow(android.content.Context, String, String);
+ method public static String? permissionToOp(String);
+ field public static final int MODE_ALLOWED = 0; // 0x0
+ field public static final int MODE_DEFAULT = 3; // 0x3
+ field public static final int MODE_ERRORED = 2; // 0x2
+ field public static final int MODE_IGNORED = 1; // 0x1
+ }
+
+ public final class BundleCompat {
+ method public static android.os.IBinder? getBinder(android.os.Bundle, String?);
+ method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
+ }
+
+ public class DialogCompat {
+ method public static android.view.View requireViewById(android.app.Dialog, int);
+ }
+
+ public class FrameMetricsAggregator {
+ ctor public FrameMetricsAggregator();
+ ctor public FrameMetricsAggregator(int);
+ method public void add(android.app.Activity);
+ method public android.util.SparseIntArray![]? getMetrics();
+ method public android.util.SparseIntArray![]? remove(android.app.Activity);
+ method public android.util.SparseIntArray![]? reset();
+ method public android.util.SparseIntArray![]? stop();
+ field public static final int ANIMATION_DURATION = 256; // 0x100
+ field public static final int ANIMATION_INDEX = 8; // 0x8
+ field public static final int COMMAND_DURATION = 32; // 0x20
+ field public static final int COMMAND_INDEX = 5; // 0x5
+ field public static final int DELAY_DURATION = 128; // 0x80
+ field public static final int DELAY_INDEX = 7; // 0x7
+ field public static final int DRAW_DURATION = 8; // 0x8
+ field public static final int DRAW_INDEX = 3; // 0x3
+ field public static final int EVERY_DURATION = 511; // 0x1ff
+ field public static final int INPUT_DURATION = 2; // 0x2
+ field public static final int INPUT_INDEX = 1; // 0x1
+ field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
+ field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
+ field public static final int SWAP_DURATION = 64; // 0x40
+ field public static final int SWAP_INDEX = 6; // 0x6
+ field public static final int SYNC_DURATION = 16; // 0x10
+ field public static final int SYNC_INDEX = 4; // 0x4
+ field public static final int TOTAL_DURATION = 1; // 0x1
+ field public static final int TOTAL_INDEX = 0; // 0x0
+ }
+
+ @Deprecated public abstract class JobIntentService extends android.app.Service {
+ ctor @Deprecated public JobIntentService();
+ method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
+ method @Deprecated public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+ method @Deprecated public boolean isStopped();
+ method @Deprecated public android.os.IBinder! onBind(android.content.Intent);
+ method @Deprecated protected abstract void onHandleWork(android.content.Intent);
+ method @Deprecated public boolean onStopCurrentWork();
+ method @Deprecated public void setInterruptIfStopped(boolean);
+ }
+
+ public final class LocaleManagerCompat {
+ method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
+ }
+
+ public final class MultiWindowModeChangedInfo {
+ ctor public MultiWindowModeChangedInfo(boolean);
+ ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
+ method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
+ method public boolean isInMultiWindowMode();
+ }
+
+ public final class NavUtils {
+ method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static String? getParentActivityName(android.app.Activity);
+ method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void navigateUpFromSameTask(android.app.Activity);
+ method public static void navigateUpTo(android.app.Activity, android.content.Intent);
+ method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
+ field public static final String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+ }
+
+ public class NotificationChannelCompat {
+ method public boolean canBubble();
+ method public boolean canBypassDnd();
+ method public boolean canShowBadge();
+ method public android.media.AudioAttributes? getAudioAttributes();
+ method public String? getConversationId();
+ method public String? getDescription();
+ method public String? getGroup();
+ method public String getId();
+ method public int getImportance();
+ method public int getLightColor();
+ method public int getLockscreenVisibility();
+ method public CharSequence? getName();
+ method public String? getParentChannelId();
+ method public android.net.Uri? getSound();
+ method public long[]? getVibrationPattern();
+ method public boolean isImportantConversation();
+ method public boolean shouldShowLights();
+ method public boolean shouldVibrate();
+ method public androidx.core.app.NotificationChannelCompat.Builder toBuilder();
+ field public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
+ }
+
+ public static class NotificationChannelCompat.Builder {
+ ctor public NotificationChannelCompat.Builder(String, int);
+ method public androidx.core.app.NotificationChannelCompat build();
+ method public androidx.core.app.NotificationChannelCompat.Builder setConversationId(String, String);
+ method public androidx.core.app.NotificationChannelCompat.Builder setDescription(String?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setGroup(String?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setImportance(int);
+ method public androidx.core.app.NotificationChannelCompat.Builder setLightColor(int);
+ method public androidx.core.app.NotificationChannelCompat.Builder setLightsEnabled(boolean);
+ method public androidx.core.app.NotificationChannelCompat.Builder setName(CharSequence?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setShowBadge(boolean);
+ method public androidx.core.app.NotificationChannelCompat.Builder setSound(android.net.Uri?, android.media.AudioAttributes?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setVibrationEnabled(boolean);
+ method public androidx.core.app.NotificationChannelCompat.Builder setVibrationPattern(long[]?);
+ }
+
+ public class NotificationChannelGroupCompat {
+ method public java.util.List<androidx.core.app.NotificationChannelCompat!> getChannels();
+ method public String? getDescription();
+ method public String getId();
+ method public CharSequence? getName();
+ method public boolean isBlocked();
+ method public androidx.core.app.NotificationChannelGroupCompat.Builder toBuilder();
+ }
+
+ public static class NotificationChannelGroupCompat.Builder {
+ ctor public NotificationChannelGroupCompat.Builder(String);
+ method public androidx.core.app.NotificationChannelGroupCompat build();
+ method public androidx.core.app.NotificationChannelGroupCompat.Builder setDescription(String?);
+ method public androidx.core.app.NotificationChannelGroupCompat.Builder setName(CharSequence?);
+ }
+
+ public class NotificationCompat {
+ ctor @Deprecated public NotificationCompat();
+ method public static androidx.core.app.NotificationCompat.Action? getAction(android.app.Notification, int);
+ method public static int getActionCount(android.app.Notification);
+ method public static boolean getAllowSystemGeneratedContextualActions(android.app.Notification);
+ method public static boolean getAutoCancel(android.app.Notification);
+ method public static int getBadgeIconType(android.app.Notification);
+ method public static androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata(android.app.Notification);
+ method public static String? getCategory(android.app.Notification);
+ method public static String? getChannelId(android.app.Notification);
+ method public static int getColor(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getContentInfo(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getContentText(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getContentTitle(android.app.Notification);
+ method public static android.os.Bundle? getExtras(android.app.Notification);
+ method public static String? getGroup(android.app.Notification);
+ method public static int getGroupAlertBehavior(android.app.Notification);
+ method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
+ method public static boolean getLocalOnly(android.app.Notification);
+ method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
+ method public static boolean getOngoing(android.app.Notification);
+ method public static boolean getOnlyAlertOnce(android.app.Notification);
+ method public static java.util.List<androidx.core.app.Person!> getPeople(android.app.Notification);
+ method public static android.app.Notification? getPublicVersion(android.app.Notification);
+ method public static CharSequence? getSettingsText(android.app.Notification);
+ method public static String? getShortcutId(android.app.Notification);
+ method @RequiresApi(19) public static boolean getShowWhen(android.app.Notification);
+ method public static String? getSortKey(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getSubText(android.app.Notification);
+ method public static long getTimeoutAfter(android.app.Notification);
+ method @RequiresApi(19) public static boolean getUsesChronometer(android.app.Notification);
+ method public static int getVisibility(android.app.Notification);
+ method public static boolean isGroupSummary(android.app.Notification);
+ field public static final int BADGE_ICON_LARGE = 2; // 0x2
+ field public static final int BADGE_ICON_NONE = 0; // 0x0
+ field public static final int BADGE_ICON_SMALL = 1; // 0x1
+ field public static final String CATEGORY_ALARM = "alarm";
+ field public static final String CATEGORY_CALL = "call";
+ field public static final String CATEGORY_EMAIL = "email";
+ field public static final String CATEGORY_ERROR = "err";
+ field public static final String CATEGORY_EVENT = "event";
+ field public static final String CATEGORY_LOCATION_SHARING = "location_sharing";
+ field public static final String CATEGORY_MESSAGE = "msg";
+ field public static final String CATEGORY_MISSED_CALL = "missed_call";
+ field public static final String CATEGORY_NAVIGATION = "navigation";
+ field public static final String CATEGORY_PROGRESS = "progress";
+ field public static final String CATEGORY_PROMO = "promo";
+ field public static final String CATEGORY_RECOMMENDATION = "recommendation";
+ field public static final String CATEGORY_REMINDER = "reminder";
+ field public static final String CATEGORY_SERVICE = "service";
+ field public static final String CATEGORY_SOCIAL = "social";
+ field public static final String CATEGORY_STATUS = "status";
+ field public static final String CATEGORY_STOPWATCH = "stopwatch";
+ field public static final String CATEGORY_SYSTEM = "sys";
+ field public static final String CATEGORY_TRANSPORT = "transport";
+ field public static final String CATEGORY_WORKOUT = "workout";
+ field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
+ field public static final int DEFAULT_ALL = -1; // 0xffffffff
+ field public static final int DEFAULT_LIGHTS = 4; // 0x4
+ field public static final int DEFAULT_SOUND = 1; // 0x1
+ field public static final int DEFAULT_VIBRATE = 2; // 0x2
+ field public static final String EXTRA_ANSWER_COLOR = "android.answerColor";
+ field public static final String EXTRA_ANSWER_INTENT = "android.answerIntent";
+ field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+ field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+ field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CALL_IS_VIDEO = "android.callIsVideo";
+ field public static final String EXTRA_CALL_PERSON = "android.callPerson";
+ field public static final String EXTRA_CALL_PERSON_COMPAT = "android.callPersonCompat";
+ field public static final String EXTRA_CALL_TYPE = "android.callType";
+ field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+ field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
+ field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
+ field public static final String EXTRA_COLORIZED = "android.colorized";
+ field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+ field public static final String EXTRA_COMPAT_TEMPLATE = "androidx.core.app.extra.COMPAT_TEMPLATE";
+ field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+ field public static final String EXTRA_DECLINE_COLOR = "android.declineColor";
+ field public static final String EXTRA_DECLINE_INTENT = "android.declineIntent";
+ field public static final String EXTRA_HANG_UP_INTENT = "android.hangUpIntent";
+ field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
+ field public static final String EXTRA_HISTORIC_MESSAGES = "android.messages.historic";
+ field public static final String EXTRA_INFO_TEXT = "android.infoText";
+ field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
+ field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
+ field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+ field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
+ field public static final String EXTRA_MESSAGES = "android.messages";
+ field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+ field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
+ field @Deprecated public static final String EXTRA_PEOPLE = "android.people";
+ field public static final String EXTRA_PEOPLE_LIST = "android.people.list";
+ field public static final String EXTRA_PICTURE = "android.picture";
+ field public static final String EXTRA_PICTURE_CONTENT_DESCRIPTION = "android.pictureContentDescription";
+ field public static final String EXTRA_PICTURE_ICON = "android.pictureIcon";
+ field public static final String EXTRA_PROGRESS = "android.progress";
+ field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+ field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
+ field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+ field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+ field public static final String EXTRA_SHOW_BIG_PICTURE_WHEN_COLLAPSED = "android.showBigPictureWhenCollapsed";
+ field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+ field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
+ field public static final String EXTRA_SMALL_ICON = "android.icon";
+ field public static final String EXTRA_SUB_TEXT = "android.subText";
+ field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
+ field public static final String EXTRA_TEMPLATE = "android.template";
+ field public static final String EXTRA_TEXT = "android.text";
+ field public static final String EXTRA_TEXT_LINES = "android.textLines";
+ field public static final String EXTRA_TITLE = "android.title";
+ field public static final String EXTRA_TITLE_BIG = "android.title.big";
+ field public static final String EXTRA_VERIFICATION_ICON = "android.verificationIcon";
+ field public static final String EXTRA_VERIFICATION_ICON_COMPAT = "android.verificationIconCompat";
+ field public static final String EXTRA_VERIFICATION_TEXT = "android.verificationText";
+ field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+ field public static final int FLAG_BUBBLE = 4096; // 0x1000
+ field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+ field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+ field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
+ field public static final int FLAG_INSISTENT = 4; // 0x4
+ field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+ field public static final int FLAG_NO_CLEAR = 32; // 0x20
+ field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+ field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+ field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int FOREGROUND_SERVICE_DEFAULT = 0; // 0x0
+ field public static final int FOREGROUND_SERVICE_DEFERRED = 2; // 0x2
+ field public static final int FOREGROUND_SERVICE_IMMEDIATE = 1; // 0x1
+ field public static final int GROUP_ALERT_ALL = 0; // 0x0
+ field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+ field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
+ field public static final String GROUP_KEY_SILENT = "silent";
+ field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
+ field public static final int PRIORITY_DEFAULT = 0; // 0x0
+ field public static final int PRIORITY_HIGH = 1; // 0x1
+ field public static final int PRIORITY_LOW = -1; // 0xffffffff
+ field public static final int PRIORITY_MAX = 2; // 0x2
+ field public static final int PRIORITY_MIN = -2; // 0xfffffffe
+ field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+ field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+ field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+ field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+ }
+
+ public static class NotificationCompat.Action {
+ ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ method public android.app.PendingIntent? getActionIntent();
+ method public boolean getAllowGeneratedReplies();
+ method public androidx.core.app.RemoteInput![]? getDataOnlyRemoteInputs();
+ method public android.os.Bundle getExtras();
+ method @Deprecated public int getIcon();
+ method public androidx.core.graphics.drawable.IconCompat? getIconCompat();
+ method public androidx.core.app.RemoteInput![]? getRemoteInputs();
+ method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
+ method public boolean getShowsUserInterface();
+ method public CharSequence? getTitle();
+ method public boolean isAuthenticationRequired();
+ method public boolean isContextual();
+ field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
+ field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
+ field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
+ field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
+ field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
+ field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
+ field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
+ field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
+ field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
+ field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
+ field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
+ field public android.app.PendingIntent? actionIntent;
+ field @Deprecated public int icon;
+ field public CharSequence! title;
+ }
+
+ public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action.Builder(int, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
+ method public androidx.core.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle?);
+ method public androidx.core.app.NotificationCompat.Action.Builder addRemoteInput(androidx.core.app.RemoteInput?);
+ method public androidx.core.app.NotificationCompat.Action build();
+ method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Extender);
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setAuthenticationRequired(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setContextual(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
+ method public androidx.core.app.NotificationCompat.Action.Builder setShowsUserInterface(boolean);
+ }
+
+ public static interface NotificationCompat.Action.Extender {
+ method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
+ }
+
+ public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
+ ctor public NotificationCompat.Action.WearableExtender();
+ ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender clone();
+ method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
+ method @Deprecated public CharSequence? getCancelLabel();
+ method @Deprecated public CharSequence? getConfirmLabel();
+ method public boolean getHintDisplayActionInline();
+ method public boolean getHintLaunchesActivity();
+ method @Deprecated public CharSequence? getInProgressLabel();
+ method public boolean isAvailableOffline();
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setCancelLabel(CharSequence?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setConfirmLabel(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setInProgressLabel(CharSequence?);
+ }
+
+ public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigPictureStyle();
+ ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap?);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.drawable.Icon?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap?);
+ method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.drawable.Icon?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle setBigContentTitle(CharSequence?);
+ method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle setContentDescription(CharSequence?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle setSummaryText(CharSequence?);
+ method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle showBigPictureWhenCollapsed(boolean);
+ }
+
+ public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigTextStyle();
+ ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public androidx.core.app.NotificationCompat.BigTextStyle bigText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.BigTextStyle setBigContentTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.BigTextStyle setSummaryText(CharSequence?);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata {
+ method public static androidx.core.app.NotificationCompat.BubbleMetadata? fromPlatform(android.app.Notification.BubbleMetadata?);
+ method public boolean getAutoExpandBubble();
+ method public android.app.PendingIntent? getDeleteIntent();
+ method @Dimension(unit=androidx.annotation.Dimension.DP) public int getDesiredHeight();
+ method @DimenRes public int getDesiredHeightResId();
+ method public androidx.core.graphics.drawable.IconCompat? getIcon();
+ method public android.app.PendingIntent? getIntent();
+ method public String? getShortcutId();
+ method public boolean isNotificationSuppressed();
+ method public static android.app.Notification.BubbleMetadata? toPlatform(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata.Builder {
+ ctor @Deprecated public NotificationCompat.BubbleMetadata.Builder();
+ ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
+ ctor public NotificationCompat.BubbleMetadata.Builder(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata build();
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIntent(android.app.PendingIntent);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setSuppressNotification(boolean);
+ }
+
+ public static class NotificationCompat.Builder {
+ ctor @RequiresApi(19) public NotificationCompat.Builder(android.content.Context, android.app.Notification);
+ ctor public NotificationCompat.Builder(android.content.Context, String);
+ ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
+ method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.Builder addAction(androidx.core.app.NotificationCompat.Action?);
+ method public androidx.core.app.NotificationCompat.Builder addExtras(android.os.Bundle?);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(androidx.core.app.NotificationCompat.Action?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
+ method public androidx.core.app.NotificationCompat.Builder addPerson(androidx.core.app.Person?);
+ method public android.app.Notification build();
+ method public androidx.core.app.NotificationCompat.Builder clearActions();
+ method public androidx.core.app.NotificationCompat.Builder clearInvisibleActions();
+ method public androidx.core.app.NotificationCompat.Builder clearPeople();
+ method public android.widget.RemoteViews? createBigContentView();
+ method public android.widget.RemoteViews? createContentView();
+ method public android.widget.RemoteViews? createHeadsUpContentView();
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Extender);
+ method public android.os.Bundle getExtras();
+ method @Deprecated public android.app.Notification getNotification();
+ method protected static CharSequence? limitCharSequenceLength(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setAllowSystemGeneratedContextualActions(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setAutoCancel(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setBadgeIconType(int);
+ method public androidx.core.app.NotificationCompat.Builder setBubbleMetadata(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ method public androidx.core.app.NotificationCompat.Builder setCategory(String?);
+ method public androidx.core.app.NotificationCompat.Builder setChannelId(String);
+ method @RequiresApi(24) public androidx.core.app.NotificationCompat.Builder setChronometerCountDown(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.Builder setColorized(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setContent(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setContentInfo(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.Builder setContentText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setContentTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setDefaults(int);
+ method public androidx.core.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.Builder setExtras(android.os.Bundle?);
+ method public androidx.core.app.NotificationCompat.Builder setForegroundServiceBehavior(int);
+ method public androidx.core.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent?, boolean);
+ method public androidx.core.app.NotificationCompat.Builder setGroup(String?);
+ method public androidx.core.app.NotificationCompat.Builder setGroupAlertBehavior(int);
+ method public androidx.core.app.NotificationCompat.Builder setGroupSummary(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap?);
+ method public androidx.core.app.NotificationCompat.Builder setLights(@ColorInt int, int, int);
+ method public androidx.core.app.NotificationCompat.Builder setLocalOnly(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder setNotificationSilent();
+ method public androidx.core.app.NotificationCompat.Builder setNumber(int);
+ method public androidx.core.app.NotificationCompat.Builder setOngoing(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setPriority(int);
+ method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
+ method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
+ method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
+ method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
+ method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
+ method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setSilent(boolean);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.Builder setSmallIcon(androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int);
+ method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int, int);
+ method public androidx.core.app.NotificationCompat.Builder setSortKey(String?);
+ method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?);
+ method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?, int);
+ method public androidx.core.app.NotificationCompat.Builder setStyle(androidx.core.app.NotificationCompat.Style?);
+ method public androidx.core.app.NotificationCompat.Builder setSubText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?, android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setTimeoutAfter(long);
+ method public androidx.core.app.NotificationCompat.Builder setUsesChronometer(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setVibrate(long[]?);
+ method public androidx.core.app.NotificationCompat.Builder setVisibility(int);
+ method public androidx.core.app.NotificationCompat.Builder setWhen(long);
+ field @Deprecated public java.util.ArrayList<java.lang.String!>! mPeople;
+ }
+
+ public static class NotificationCompat.CallStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.CallStyle();
+ ctor public NotificationCompat.CallStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public static androidx.core.app.NotificationCompat.CallStyle forIncomingCall(androidx.core.app.Person, android.app.PendingIntent, android.app.PendingIntent);
+ method public static androidx.core.app.NotificationCompat.CallStyle forOngoingCall(androidx.core.app.Person, android.app.PendingIntent);
+ method public static androidx.core.app.NotificationCompat.CallStyle forScreeningCall(androidx.core.app.Person, android.app.PendingIntent, android.app.PendingIntent);
+ method public androidx.core.app.NotificationCompat.CallStyle setAnswerButtonColorHint(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CallStyle setDeclineButtonColorHint(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CallStyle setIsVideo(boolean);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.drawable.Icon?);
+ method public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.Bitmap?);
+ method public androidx.core.app.NotificationCompat.CallStyle setVerificationText(CharSequence?);
+ field public static final int CALL_TYPE_INCOMING = 1; // 0x1
+ field public static final int CALL_TYPE_ONGOING = 2; // 0x2
+ field public static final int CALL_TYPE_SCREENING = 3; // 0x3
+ field public static final int CALL_TYPE_UNKNOWN = 0; // 0x0
+ }
+
+ public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.CarExtender();
+ ctor public NotificationCompat.CarExtender(android.app.Notification);
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+ method @ColorInt public int getColor();
+ method public android.graphics.Bitmap? getLargeIcon();
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation? getUnreadConversation();
+ method public androidx.core.app.NotificationCompat.CarExtender setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap?);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation?);
+ }
+
+ @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation {
+ method @Deprecated public long getLatestTimestamp();
+ method @Deprecated public String![]? getMessages();
+ method @Deprecated public String? getParticipant();
+ method @Deprecated public String![]? getParticipants();
+ method @Deprecated public android.app.PendingIntent? getReadPendingIntent();
+ method @Deprecated public androidx.core.app.RemoteInput? getRemoteInput();
+ method @Deprecated public android.app.PendingIntent? getReplyPendingIntent();
+ }
+
+ @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
+ ctor @Deprecated public NotificationCompat.CarExtender.UnreadConversation.Builder(String);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(String?);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation build();
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent?);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent?, androidx.core.app.RemoteInput?);
+ }
+
+ public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.DecoratedCustomViewStyle();
+ }
+
+ public static interface NotificationCompat.Extender {
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+ }
+
+ public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.InboxStyle();
+ ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public androidx.core.app.NotificationCompat.InboxStyle addLine(CharSequence?);
+ method public androidx.core.app.NotificationCompat.InboxStyle setBigContentTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.InboxStyle setSummaryText(CharSequence?);
+ }
+
+ public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
+ ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+ method public void addCompatExtras(android.os.Bundle);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
+ method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
+ method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
+ method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
+ method public androidx.core.app.Person getUser();
+ method @Deprecated public CharSequence? getUserDisplayName();
+ method public boolean isGroupConversation();
+ method public androidx.core.app.NotificationCompat.MessagingStyle setConversationTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle setGroupConversation(boolean);
+ field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+ }
+
+ public static final class NotificationCompat.MessagingStyle.Message {
+ ctor public NotificationCompat.MessagingStyle.Message(CharSequence?, long, androidx.core.app.Person?);
+ ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence?, long, CharSequence?);
+ method public String? getDataMimeType();
+ method public android.net.Uri? getDataUri();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.Person? getPerson();
+ method @Deprecated public CharSequence? getSender();
+ method public CharSequence? getText();
+ method public long getTimestamp();
+ method public androidx.core.app.NotificationCompat.MessagingStyle.Message setData(String?, android.net.Uri?);
+ }
+
+ public abstract static class NotificationCompat.Style {
+ ctor public NotificationCompat.Style();
+ method public android.app.Notification? build();
+ method public void setBuilder(androidx.core.app.NotificationCompat.Builder?);
+ }
+
+ public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.WearableExtender();
+ ctor public NotificationCompat.WearableExtender(android.app.Notification);
+ method public androidx.core.app.NotificationCompat.WearableExtender addAction(androidx.core.app.NotificationCompat.Action);
+ method public androidx.core.app.NotificationCompat.WearableExtender addActions(java.util.List<androidx.core.app.NotificationCompat.Action!>);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification!>);
+ method public androidx.core.app.NotificationCompat.WearableExtender clearActions();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender clearPages();
+ method public androidx.core.app.NotificationCompat.WearableExtender clone();
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+ method public java.util.List<androidx.core.app.NotificationCompat.Action!> getActions();
+ method @Deprecated public android.graphics.Bitmap? getBackground();
+ method public String? getBridgeTag();
+ method public int getContentAction();
+ method @Deprecated public int getContentIcon();
+ method @Deprecated public int getContentIconGravity();
+ method public boolean getContentIntentAvailableOffline();
+ method @Deprecated public int getCustomContentHeight();
+ method @Deprecated public int getCustomSizePreset();
+ method public String? getDismissalId();
+ method @Deprecated public android.app.PendingIntent? getDisplayIntent();
+ method @Deprecated public int getGravity();
+ method @Deprecated public boolean getHintAmbientBigPicture();
+ method @Deprecated public boolean getHintAvoidBackgroundClipping();
+ method public boolean getHintContentIntentLaunchesActivity();
+ method @Deprecated public boolean getHintHideIcon();
+ method @Deprecated public int getHintScreenTimeout();
+ method @Deprecated public boolean getHintShowBackgroundOnly();
+ method @Deprecated public java.util.List<android.app.Notification!> getPages();
+ method public boolean getStartScrollBottom();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap?);
+ method public androidx.core.app.NotificationCompat.WearableExtender setBridgeTag(String?);
+ method public androidx.core.app.NotificationCompat.WearableExtender setContentAction(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIcon(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIconGravity(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender setDismissalId(String?);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent?);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setGravity(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
+ field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+ field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+ field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
+ field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
+ field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
+ field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
+ field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
+ field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
+ field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+ }
+
+ public final class NotificationCompatExtras {
+ field public static final String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+ field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
+ field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+ field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+ field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+ field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
+ }
+
+ public abstract class NotificationCompatSideChannelService extends android.app.Service {
+ ctor public NotificationCompatSideChannelService();
+ method public abstract void cancel(String!, int, String!);
+ method public abstract void cancelAll(String!);
+ method public abstract void notify(String!, int, String!, android.app.Notification!);
+ method public android.os.IBinder! onBind(android.content.Intent!);
+ }
+
+ public final class NotificationManagerCompat {
+ method public boolean areNotificationsEnabled();
+ method public void cancel(int);
+ method public void cancel(String?, int);
+ method public void cancelAll();
+ method public void createNotificationChannel(android.app.NotificationChannel);
+ method public void createNotificationChannel(androidx.core.app.NotificationChannelCompat);
+ method public void createNotificationChannelGroup(android.app.NotificationChannelGroup);
+ method public void createNotificationChannelGroup(androidx.core.app.NotificationChannelGroupCompat);
+ method public void createNotificationChannelGroups(java.util.List<android.app.NotificationChannelGroup!>);
+ method public void createNotificationChannelGroupsCompat(java.util.List<androidx.core.app.NotificationChannelGroupCompat!>);
+ method public void createNotificationChannels(java.util.List<android.app.NotificationChannel!>);
+ method public void createNotificationChannelsCompat(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.core.app.NotificationManagerCompat from(android.content.Context);
+ method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
+ method public int getImportance();
+ method public android.app.NotificationChannel? getNotificationChannel(String);
+ method public android.app.NotificationChannel? getNotificationChannel(String, String);
+ method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String);
+ method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String, String);
+ method public android.app.NotificationChannelGroup? getNotificationChannelGroup(String);
+ method public androidx.core.app.NotificationChannelGroupCompat? getNotificationChannelGroupCompat(String);
+ method public java.util.List<android.app.NotificationChannelGroup!> getNotificationChannelGroups();
+ method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroupsCompat();
+ method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
+ method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannelsCompat();
+ method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(int, android.app.Notification);
+ method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(String?, int, android.app.Notification);
+ field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+ field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
+ field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+ field public static final int IMPORTANCE_HIGH = 4; // 0x4
+ field public static final int IMPORTANCE_LOW = 2; // 0x2
+ field public static final int IMPORTANCE_MAX = 5; // 0x5
+ field public static final int IMPORTANCE_MIN = 1; // 0x1
+ field public static final int IMPORTANCE_NONE = 0; // 0x0
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+ }
+
+ public interface OnMultiWindowModeChangedProvider {
+ method public void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ method public void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ }
+
+ public interface OnNewIntentProvider {
+ method public void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ method public void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ }
+
+ public interface OnPictureInPictureModeChangedProvider {
+ method public void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ method public void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ }
+
+ public final class PendingIntentCompat {
+ method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, android.os.Bundle, boolean);
+ method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, boolean);
+ method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, boolean);
+ method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, android.os.Bundle, boolean);
+ method public static android.app.PendingIntent getBroadcast(android.content.Context, int, android.content.Intent, int, boolean);
+ method @RequiresApi(26) public static android.app.PendingIntent getForegroundService(android.content.Context, int, android.content.Intent, int, boolean);
+ method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int, boolean);
+ }
+
+ public class Person {
+ method public static androidx.core.app.Person fromBundle(android.os.Bundle);
+ method public androidx.core.graphics.drawable.IconCompat? getIcon();
+ method public String? getKey();
+ method public CharSequence? getName();
+ method public String? getUri();
+ method public boolean isBot();
+ method public boolean isImportant();
+ method public androidx.core.app.Person.Builder toBuilder();
+ method public android.os.Bundle toBundle();
+ }
+
+ public static class Person.Builder {
+ ctor public Person.Builder();
+ method public androidx.core.app.Person build();
+ method public androidx.core.app.Person.Builder setBot(boolean);
+ method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
+ method public androidx.core.app.Person.Builder setImportant(boolean);
+ method public androidx.core.app.Person.Builder setKey(String?);
+ method public androidx.core.app.Person.Builder setName(CharSequence?);
+ method public androidx.core.app.Person.Builder setUri(String?);
+ }
+
+ public final class PictureInPictureModeChangedInfo {
+ ctor public PictureInPictureModeChangedInfo(boolean);
+ ctor @RequiresApi(26) public PictureInPictureModeChangedInfo(boolean, android.content.res.Configuration);
+ method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
+ method public boolean isInPictureInPictureMode();
+ }
+
+ public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
+ ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
+ ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
+ method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
+ method public android.app.PendingIntent getActionIntent();
+ method public CharSequence getContentDescription();
+ method public androidx.core.graphics.drawable.IconCompat getIcon();
+ method public CharSequence getTitle();
+ method public boolean isEnabled();
+ method public void setEnabled(boolean);
+ method public void setShouldShowIcon(boolean);
+ method public boolean shouldShowIcon();
+ method @RequiresApi(26) public android.app.RemoteAction toRemoteAction();
+ }
+
+ public final class RemoteInput {
+ method public static void addDataResultToIntent(androidx.core.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String!,android.net.Uri!>);
+ method public static void addResultsToIntent(androidx.core.app.RemoteInput![], android.content.Intent, android.os.Bundle);
+ method public boolean getAllowFreeFormInput();
+ method public java.util.Set<java.lang.String!>? getAllowedDataTypes();
+ method public CharSequence![]? getChoices();
+ method public static java.util.Map<java.lang.String!,android.net.Uri!>? getDataResultsFromIntent(android.content.Intent, String);
+ method public int getEditChoicesBeforeSending();
+ method public android.os.Bundle getExtras();
+ method public CharSequence? getLabel();
+ method public String getResultKey();
+ method public static android.os.Bundle? getResultsFromIntent(android.content.Intent);
+ method public static int getResultsSource(android.content.Intent);
+ method public boolean isDataOnly();
+ method public static void setResultsSource(android.content.Intent, int);
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
+ field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+ field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+ field public static final int SOURCE_CHOICE = 1; // 0x1
+ field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
+ }
+
+ public static final class RemoteInput.Builder {
+ ctor public RemoteInput.Builder(String);
+ method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
+ method public androidx.core.app.RemoteInput build();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
+ method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+ method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence![]?);
+ method public androidx.core.app.RemoteInput.Builder setEditChoicesBeforeSending(int);
+ method public androidx.core.app.RemoteInput.Builder setLabel(CharSequence?);
+ }
+
+ public final class ServiceCompat {
+ method public static void stopForeground(android.app.Service, int);
+ field public static final int START_STICKY = 1; // 0x1
+ field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+ field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
+ }
+
+ public final class ShareCompat {
+ method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
+ method @Deprecated public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
+ method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
+ method public static String? getCallingPackage(android.app.Activity);
+ field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_ACTIVITY_INTEROP = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
+ field public static final String EXTRA_CALLING_PACKAGE_INTEROP = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
+ }
+
+ public static class ShareCompat.IntentBuilder {
+ ctor public ShareCompat.IntentBuilder(android.content.Context);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
+ method public android.content.Intent createChooserIntent();
+ method @Deprecated public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
+ method public android.content.Intent getIntent();
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setHtmlText(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setStream(android.net.Uri?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setSubject(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setText(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setType(String?);
+ method public void startChooser();
+ }
+
+ public static class ShareCompat.IntentReader {
+ ctor public ShareCompat.IntentReader(android.app.Activity);
+ ctor public ShareCompat.IntentReader(android.content.Context, android.content.Intent);
+ method @Deprecated public static androidx.core.app.ShareCompat.IntentReader from(android.app.Activity);
+ method public android.content.ComponentName? getCallingActivity();
+ method public android.graphics.drawable.Drawable? getCallingActivityIcon();
+ method public android.graphics.drawable.Drawable? getCallingApplicationIcon();
+ method public CharSequence? getCallingApplicationLabel();
+ method public String? getCallingPackage();
+ method public String![]? getEmailBcc();
+ method public String![]? getEmailCc();
+ method public String![]? getEmailTo();
+ method public String? getHtmlText();
+ method public android.net.Uri? getStream();
+ method public android.net.Uri? getStream(int);
+ method public int getStreamCount();
+ method public String? getSubject();
+ method public CharSequence? getText();
+ method public String? getType();
+ method public boolean isMultipleShare();
+ method public boolean isShareIntent();
+ method public boolean isSingleShare();
+ }
+
+ public abstract class SharedElementCallback {
+ ctor public SharedElementCallback();
+ method public android.os.Parcelable! onCaptureSharedElementSnapshot(android.view.View!, android.graphics.Matrix!, android.graphics.RectF!);
+ method public android.view.View! onCreateSnapshotView(android.content.Context!, android.os.Parcelable!);
+ method public void onMapSharedElements(java.util.List<java.lang.String!>!, java.util.Map<java.lang.String!,android.view.View!>!);
+ method public void onRejectSharedElements(java.util.List<android.view.View!>!);
+ method public void onSharedElementEnd(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementStart(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementsArrived(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
+ }
+
+ public static interface SharedElementCallback.OnSharedElementsReadyListener {
+ method public void onSharedElementsReady();
+ }
+
+ public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
+ method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
+ method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
+ method public androidx.core.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+ method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
+ method public android.content.Intent? editIntentAt(int);
+ method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
+ method @Deprecated public android.content.Intent! getIntent(int);
+ method public int getIntentCount();
+ method public android.content.Intent![] getIntents();
+ method public android.app.PendingIntent? getPendingIntent(int, int);
+ method public android.app.PendingIntent? getPendingIntent(int, int, android.os.Bundle?);
+ method @Deprecated public java.util.Iterator<android.content.Intent!> iterator();
+ method public void startActivities();
+ method public void startActivities(android.os.Bundle?);
+ }
+
+ public static interface TaskStackBuilder.SupportParentable {
+ method public android.content.Intent? getSupportParentActivityIntent();
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentProviderCompat {
+ method public static android.content.Context requireContext(android.content.ContentProvider);
+ }
+
+ public final class ContentResolverCompat {
+ method public static android.database.Cursor? query(android.content.ContentResolver, android.net.Uri, String![]?, String?, String![]?, String?, androidx.core.os.CancellationSignal?);
+ }
+
+ public class ContextCompat {
+ ctor protected ContextCompat();
+ method public static int checkSelfPermission(android.content.Context, String);
+ method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
+ method public static String? getAttributionTag(android.content.Context);
+ method public static java.io.File getCodeCacheDir(android.content.Context);
+ method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
+ method public static java.io.File? getDataDir(android.content.Context);
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
+ method public static java.io.File![] getExternalCacheDirs(android.content.Context);
+ method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
+ method public static java.util.concurrent.Executor getMainExecutor(android.content.Context);
+ method public static java.io.File? getNoBackupFilesDir(android.content.Context);
+ method public static java.io.File![] getObbDirs(android.content.Context);
+ method public static <T> T? getSystemService(android.content.Context, Class<T!>);
+ method public static String? getSystemServiceName(android.content.Context, Class<?>);
+ method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, int);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, String?, android.os.Handler?, int);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![]);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
+ method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
+ method public static void startForegroundService(android.content.Context, android.content.Intent);
+ field public static final int RECEIVER_EXPORTED = 2; // 0x2
+ field public static final int RECEIVER_NOT_EXPORTED = 4; // 0x4
+ field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
+ }
+
+ public class FileProvider extends android.content.ContentProvider {
+ ctor public FileProvider();
+ ctor protected FileProvider(@XmlRes int);
+ method public int delete(android.net.Uri, String?, String![]?);
+ method public String? getType(android.net.Uri);
+ method public static android.net.Uri! getUriForFile(android.content.Context, String, java.io.File);
+ method public static android.net.Uri getUriForFile(android.content.Context, String, java.io.File, String);
+ method public android.net.Uri! insert(android.net.Uri, android.content.ContentValues);
+ method public boolean onCreate();
+ method public android.database.Cursor query(android.net.Uri, String![]?, String?, String![]?, String?);
+ method public int update(android.net.Uri, android.content.ContentValues, String?, String![]?);
+ }
+
+ public final class IntentCompat {
+ method public static android.content.Intent createManageUnusedAppRestrictionsIntent(android.content.Context, String);
+ method public static android.os.Parcelable![]? getParcelableArrayExtra(android.content.Intent, String?, Class<? extends android.os.Parcelable>);
+ method public static <T> java.util.ArrayList<T!>? getParcelableArrayListExtra(android.content.Intent, String?, Class<? extends T>);
+ method public static <T> T? getParcelableExtra(android.content.Intent, String?, Class<T!>);
+ method public static android.content.Intent makeMainSelectorActivity(String, String);
+ field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
+ field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+ field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
+ field public static final String EXTRA_TIME = "android.intent.extra.TIME";
+ }
+
+ public class IntentSanitizer {
+ method public android.content.Intent sanitize(android.content.Intent, androidx.core.util.Consumer<java.lang.String!>);
+ method public android.content.Intent sanitizeByFiltering(android.content.Intent);
+ method public android.content.Intent sanitizeByThrowing(android.content.Intent);
+ }
+
+ public static final class IntentSanitizer.Builder {
+ ctor public IntentSanitizer.Builder();
+ method public androidx.core.content.IntentSanitizer.Builder allowAction(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowAction(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowAnyComponent();
+ method public androidx.core.content.IntentSanitizer.Builder allowCategory(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowCategory(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowClipData(androidx.core.util.Predicate<android.content.ClipData!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowClipDataText();
+ method public androidx.core.content.IntentSanitizer.Builder allowClipDataUri(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowClipDataUriWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowComponent(android.content.ComponentName);
+ method public androidx.core.content.IntentSanitizer.Builder allowComponent(androidx.core.util.Predicate<android.content.ComponentName!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowComponentWithPackage(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowData(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowDataWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<?>);
+ method public <T> androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<T!>, androidx.core.util.Predicate<T!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, androidx.core.util.Predicate<java.lang.Object!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraStream(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraStreamUriWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowFlags(int);
+ method public androidx.core.content.IntentSanitizer.Builder allowHistoryStackFlags();
+ method public androidx.core.content.IntentSanitizer.Builder allowIdentifier();
+ method public androidx.core.content.IntentSanitizer.Builder allowPackage(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowPackage(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowReceiverFlags();
+ method public androidx.core.content.IntentSanitizer.Builder allowSelector();
+ method public androidx.core.content.IntentSanitizer.Builder allowSourceBounds();
+ method public androidx.core.content.IntentSanitizer.Builder allowType(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowType(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer build();
+ }
+
+ public final class LocusIdCompat {
+ ctor public LocusIdCompat(String);
+ method public String getId();
+ method @RequiresApi(29) public android.content.LocusId toLocusId();
+ method @RequiresApi(29) public static androidx.core.content.LocusIdCompat toLocusIdCompat(android.content.LocusId);
+ }
+
+ public final class MimeTypeFilter {
+ method public static boolean matches(String?, String);
+ method public static String? matches(String?, String![]);
+ method public static String? matches(String![]?, String);
+ method public static String![] matchesMany(String![]?, String);
+ }
+
+ public interface OnConfigurationChangedProvider {
+ method public void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ method public void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ }
+
+ public interface OnTrimMemoryProvider {
+ method public void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ method public void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ }
+
+ public final class PackageManagerCompat {
+ method public static com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> getUnusedAppRestrictionsStatus(android.content.Context);
+ field public static final String ACTION_PERMISSION_REVOCATION_SETTINGS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
+ }
+
+ public final class PermissionChecker {
+ method public static int checkCallingOrSelfPermission(android.content.Context, String);
+ method public static int checkCallingPermission(android.content.Context, String, String?);
+ method public static int checkPermission(android.content.Context, String, int, int, String?);
+ method public static int checkSelfPermission(android.content.Context, String);
+ field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+ field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
+ field public static final int PERMISSION_GRANTED = 0; // 0x0
+ }
+
+ @Deprecated public final class SharedPreferencesCompat {
+ }
+
+ @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
+ method @Deprecated public void apply(android.content.SharedPreferences.Editor);
+ method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
+ }
+
+ public class UnusedAppRestrictionsBackportCallback {
+ method public void onResult(boolean, boolean) throws android.os.RemoteException;
+ }
+
+ public abstract class UnusedAppRestrictionsBackportService extends android.app.Service {
+ ctor public UnusedAppRestrictionsBackportService();
+ method protected abstract void isPermissionRevocationEnabled(androidx.core.content.UnusedAppRestrictionsBackportCallback);
+ method public android.os.IBinder? onBind(android.content.Intent?);
+ field public static final String ACTION_UNUSED_APP_RESTRICTIONS_BACKPORT_CONNECTION = "android.support.unusedapprestrictions.action.CustomUnusedAppRestrictionsBackportService";
+ }
+
+ public final class UnusedAppRestrictionsConstants {
+ field public static final int API_30 = 4; // 0x4
+ field public static final int API_30_BACKPORT = 3; // 0x3
+ field public static final int API_31 = 5; // 0x5
+ field public static final int DISABLED = 2; // 0x2
+ field public static final int ERROR = 0; // 0x0
+ field public static final int FEATURE_NOT_AVAILABLE = 1; // 0x1
+ }
+
+ public class UriMatcherCompat {
+ method public static androidx.core.util.Predicate<android.net.Uri!> asPredicate(android.content.UriMatcher);
+ }
+
+}
+
+package androidx.core.content.pm {
+
+ @Deprecated public final class ActivityInfoCompat {
+ field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
+ }
+
+ public final class PackageInfoCompat {
+ method public static long getLongVersionCode(android.content.pm.PackageInfo);
+ method public static java.util.List<android.content.pm.Signature!> getSignatures(android.content.pm.PackageManager, String) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static boolean hasSignatures(android.content.pm.PackageManager, String, @Size(min=1) java.util.Map<byte[]!,java.lang.Integer!>, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
+ }
+
+ public final class PermissionInfoCompat {
+ method public static int getProtection(android.content.pm.PermissionInfo);
+ method public static int getProtectionFlags(android.content.pm.PermissionInfo);
+ }
+
+ public class ShortcutInfoCompat {
+ method public android.content.ComponentName? getActivity();
+ method public java.util.Set<java.lang.String!>? getCategories();
+ method public CharSequence? getDisabledMessage();
+ method public int getDisabledReason();
+ method public int getExcludedFromSurfaces();
+ method public android.os.PersistableBundle? getExtras();
+ method public String getId();
+ method public android.content.Intent getIntent();
+ method public android.content.Intent![] getIntents();
+ method public long getLastChangedTimestamp();
+ method public androidx.core.content.LocusIdCompat? getLocusId();
+ method public CharSequence? getLongLabel();
+ method public String getPackage();
+ method public int getRank();
+ method public CharSequence getShortLabel();
+ method public android.os.UserHandle? getUserHandle();
+ method public boolean hasKeyFieldsOnly();
+ method public boolean isCached();
+ method public boolean isDeclaredInManifest();
+ method public boolean isDynamic();
+ method public boolean isEnabled();
+ method public boolean isExcludedFromSurfaces(int);
+ method public boolean isImmutable();
+ method public boolean isPinned();
+ method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
+ field public static final int SURFACE_LAUNCHER = 1; // 0x1
+ }
+
+ public static class ShortcutInfoCompat.Builder {
+ ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String, String, java.util.List<java.lang.String!>);
+ method public androidx.core.content.pm.ShortcutInfoCompat build();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setCategories(java.util.Set<java.lang.String!>);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExcludedFromSurfaces(int);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExtras(android.os.PersistableBundle);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIsConversation();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
+ method @Deprecated public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived(boolean);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPerson(androidx.core.app.Person);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPersons(androidx.core.app.Person![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setRank(int);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setSliceUri(android.net.Uri);
+ }
+
+ public class ShortcutManagerCompat {
+ method public static boolean addDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
+ method public static void disableShortcuts(android.content.Context, java.util.List<java.lang.String!>, CharSequence?);
+ method public static void enableShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getDynamicShortcuts(android.content.Context);
+ method public static int getIconMaxHeight(android.content.Context);
+ method public static int getIconMaxWidth(android.content.Context);
+ method public static int getMaxShortcutCountPerActivity(android.content.Context);
+ method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getShortcuts(android.content.Context, int);
+ method public static boolean isRateLimitingActive(android.content.Context);
+ method public static boolean isRequestPinShortcutSupported(android.content.Context);
+ method public static boolean pushDynamicShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
+ method public static void removeAllDynamicShortcuts(android.content.Context);
+ method public static void removeDynamicShortcuts(android.content.Context, java.util.List<java.lang.String!>);
+ method public static void removeLongLivedShortcuts(android.content.Context, java.util.List<java.lang.String!>);
+ method public static void reportShortcutUsed(android.content.Context, String);
+ method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
+ method public static boolean setDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static boolean updateShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
+ field public static final int FLAG_MATCH_CACHED = 8; // 0x8
+ field public static final int FLAG_MATCH_DYNAMIC = 2; // 0x2
+ field public static final int FLAG_MATCH_MANIFEST = 1; // 0x1
+ field public static final int FLAG_MATCH_PINNED = 4; // 0x4
+ }
+
+}
+
+package androidx.core.content.res {
+
+ public final class ConfigurationHelper {
+ method public static int getDensityDpi(android.content.res.Resources);
+ }
+
+ public final class ResourcesCompat {
+ method public static void clearCachesForTheme(android.content.res.Resources.Theme);
+ method public static android.graphics.Typeface? getCachedFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
+ method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static float getFloat(android.content.res.Resources, @DimenRes int);
+ method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
+ method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
+ field @AnyRes public static final int ID_NULL = 0; // 0x0
+ }
+
+ public abstract static class ResourcesCompat.FontCallback {
+ ctor public ResourcesCompat.FontCallback();
+ method public abstract void onFontRetrievalFailed(int);
+ method public abstract void onFontRetrieved(android.graphics.Typeface);
+ }
+
+ public static final class ResourcesCompat.ThemeCompat {
+ method public static void rebase(android.content.res.Resources.Theme);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorWindowCompat {
+ method public static android.database.CursorWindow create(String?, long);
+ }
+
+ @Deprecated public final class DatabaseUtilsCompat {
+ method @Deprecated public static String![]! appendSelectionArgs(String![]!, String![]!);
+ method @Deprecated public static String! concatenateWhere(String!, String!);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteCursorCompat {
+ method public static void setFillWindowForwardOnly(android.database.sqlite.SQLiteCursor, boolean);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapCompat {
+ method public static android.graphics.Bitmap createScaledBitmap(android.graphics.Bitmap, int, int, android.graphics.Rect?, boolean);
+ method public static int getAllocationByteCount(android.graphics.Bitmap);
+ method public static boolean hasMipMap(android.graphics.Bitmap);
+ method public static void setHasMipMap(android.graphics.Bitmap, boolean);
+ }
+
+ public class BlendModeColorFilterCompat {
+ method public static android.graphics.ColorFilter? createBlendModeColorFilterCompat(int, androidx.core.graphics.BlendModeCompat);
+ }
+
+ public enum BlendModeCompat {
+ enum_constant public static final androidx.core.graphics.BlendModeCompat CLEAR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_BURN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_DODGE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DARKEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat DIFFERENCE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OVER;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat EXCLUSION;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HARD_LIGHT;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HUE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat LIGHTEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat LUMINOSITY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat MODULATE;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat MULTIPLY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat OVERLAY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat PLUS;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SATURATION;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SCREEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SOFT_LIGHT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OVER;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat XOR;
+ }
+
+ public final class ColorUtils {
+ method @ColorInt public static int HSLToColor(float[]);
+ method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
+ method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
+ method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
+ method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double);
+ method public static void XYZToLAB(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double, double[]);
+ method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
+ method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
+ method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
+ method public static double calculateContrast(@ColorInt int, @ColorInt int);
+ method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
+ method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
+ method public static void colorToHSL(@ColorInt int, float[]);
+ method public static void colorToLAB(@ColorInt int, double[]);
+ method public static void colorToXYZ(@ColorInt int, double[]);
+ method public static int compositeColors(@ColorInt int, @ColorInt int);
+ method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
+ method public static double distanceEuclidean(double[], double[]);
+ method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
+ }
+
+ public final class Insets {
+ method public static androidx.core.graphics.Insets add(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public static androidx.core.graphics.Insets max(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public static androidx.core.graphics.Insets min(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public static androidx.core.graphics.Insets of(int, int, int, int);
+ method public static androidx.core.graphics.Insets of(android.graphics.Rect);
+ method public static androidx.core.graphics.Insets subtract(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method @RequiresApi(api=29) public static androidx.core.graphics.Insets toCompatInsets(android.graphics.Insets);
+ method @RequiresApi(29) public android.graphics.Insets toPlatformInsets();
+ field public static final androidx.core.graphics.Insets NONE;
+ field public final int bottom;
+ field public final int left;
+ field public final int right;
+ field public final int top;
+ }
+
+ public final class PaintCompat {
+ method public static boolean hasGlyph(android.graphics.Paint, String);
+ method public static boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat?);
+ }
+
+ public final class PathSegment {
+ ctor public PathSegment(android.graphics.PointF, float, android.graphics.PointF, float);
+ method public android.graphics.PointF getEnd();
+ method public float getEndFraction();
+ method public android.graphics.PointF getStart();
+ method public float getStartFraction();
+ }
+
+ public final class PathUtils {
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path);
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path, @FloatRange(from=0) float);
+ }
+
+ public class TypefaceCompat {
+ method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, int);
+ method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, @IntRange(from=1, to=1000) int, boolean);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class DrawableCompat {
+ method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
+ method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
+ method public static void clearColorFilter(android.graphics.drawable.Drawable);
+ method public static int getAlpha(android.graphics.drawable.Drawable);
+ method public static android.graphics.ColorFilter? getColorFilter(android.graphics.drawable.Drawable);
+ method public static int getLayoutDirection(android.graphics.drawable.Drawable);
+ method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
+ method @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
+ method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
+ method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
+ method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
+ method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
+ method public static void setTint(android.graphics.drawable.Drawable, @ColorInt int);
+ method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList?);
+ method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode?);
+ method public static <T extends android.graphics.drawable.Drawable> T! unwrap(android.graphics.drawable.Drawable);
+ method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
+ }
+
+ public class IconCompat implements androidx.versionedparcelable.VersionedParcelable {
+ method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
+ method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
+ method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
+ method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithData(byte[], int, int);
+ method public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.Context, @DrawableRes int);
+ method @DrawableRes public int getResId();
+ method public String getResPackage();
+ method public int getType();
+ method public android.net.Uri getUri();
+ method public android.graphics.drawable.Drawable? loadDrawable(android.content.Context);
+ method public void onPostParceling();
+ method public void onPreParceling(boolean);
+ method public androidx.core.graphics.drawable.IconCompat setTint(@ColorInt int);
+ method public androidx.core.graphics.drawable.IconCompat setTintList(android.content.res.ColorStateList?);
+ method public androidx.core.graphics.drawable.IconCompat setTintMode(android.graphics.PorterDuff.Mode?);
+ method public android.os.Bundle toBundle();
+ method @Deprecated @RequiresApi(23) public android.graphics.drawable.Icon toIcon();
+ method @RequiresApi(23) public android.graphics.drawable.Icon toIcon(android.content.Context?);
+ field public static final int TYPE_ADAPTIVE_BITMAP = 5; // 0x5
+ field public static final int TYPE_BITMAP = 1; // 0x1
+ field public static final int TYPE_DATA = 3; // 0x3
+ field public static final int TYPE_RESOURCE = 2; // 0x2
+ field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+ field public static final int TYPE_URI = 4; // 0x4
+ field public static final int TYPE_URI_ADAPTIVE_BITMAP = 6; // 0x6
+ }
+
+ public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.Bitmap? getBitmap();
+ method public float getCornerRadius();
+ method public int getGravity();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public boolean hasAntiAlias();
+ method public boolean hasMipMap();
+ method public boolean isCircular();
+ method public void setAlpha(int);
+ method public void setAntiAlias(boolean);
+ method public void setCircular(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setCornerRadius(float);
+ method public void setDither(boolean);
+ method public void setGravity(int);
+ method public void setMipMap(boolean);
+ method public void setTargetDensity(android.graphics.Canvas);
+ method public void setTargetDensity(android.util.DisplayMetrics);
+ method public void setTargetDensity(int);
+ }
+
+ public final class RoundedBitmapDrawableFactory {
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ }
+
+}
+
+package androidx.core.hardware.display {
+
+ public final class DisplayManagerCompat {
+ method public android.view.Display? getDisplay(int);
+ method public android.view.Display![] getDisplays();
+ method public android.view.Display![] getDisplays(String?);
+ method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
+ field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+ }
+
+}
+
+package androidx.core.hardware.fingerprint {
+
+ @Deprecated public class FingerprintManagerCompat {
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
+ method @Deprecated public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
+ }
+
+ @Deprecated public abstract static class FingerprintManagerCompat.AuthenticationCallback {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationCallback();
+ method @Deprecated public void onAuthenticationError(int, CharSequence!);
+ method @Deprecated public void onAuthenticationFailed();
+ method @Deprecated public void onAuthenticationHelp(int, CharSequence!);
+ method @Deprecated public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
+ }
+
+ @Deprecated public static final class FingerprintManagerCompat.AuthenticationResult {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
+ method @Deprecated public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
+ }
+
+ @Deprecated public static class FingerprintManagerCompat.CryptoObject {
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(java.security.Signature);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
+ method @Deprecated public javax.crypto.Cipher? getCipher();
+ method @Deprecated public javax.crypto.Mac? getMac();
+ method @Deprecated public java.security.Signature? getSignature();
+ }
+
+}
+
+package androidx.core.location {
+
+ public abstract class GnssStatusCompat {
+ method @FloatRange(from=0, to=360) public abstract float getAzimuthDegrees(@IntRange(from=0) int);
+ method @FloatRange(from=0, to=63) public abstract float getBasebandCn0DbHz(@IntRange(from=0) int);
+ method @FloatRange(from=0) public abstract float getCarrierFrequencyHz(@IntRange(from=0) int);
+ method @FloatRange(from=0, to=63) public abstract float getCn0DbHz(@IntRange(from=0) int);
+ method public abstract int getConstellationType(@IntRange(from=0) int);
+ method @FloatRange(from=0xffffffa6, to=90) public abstract float getElevationDegrees(@IntRange(from=0) int);
+ method @IntRange(from=0) public abstract int getSatelliteCount();
+ method @IntRange(from=1, to=200) public abstract int getSvid(@IntRange(from=0) int);
+ method public abstract boolean hasAlmanacData(@IntRange(from=0) int);
+ method public abstract boolean hasBasebandCn0DbHz(@IntRange(from=0) int);
+ method public abstract boolean hasCarrierFrequencyHz(@IntRange(from=0) int);
+ method public abstract boolean hasEphemerisData(@IntRange(from=0) int);
+ method public abstract boolean usedInFix(@IntRange(from=0) int);
+ method @RequiresApi(android.os.Build.VERSION_CODES.N) public static androidx.core.location.GnssStatusCompat wrap(android.location.GnssStatus);
+ method public static androidx.core.location.GnssStatusCompat wrap(android.location.GpsStatus);
+ field public static final int CONSTELLATION_BEIDOU = 5; // 0x5
+ field public static final int CONSTELLATION_GALILEO = 6; // 0x6
+ field public static final int CONSTELLATION_GLONASS = 3; // 0x3
+ field public static final int CONSTELLATION_GPS = 1; // 0x1
+ field public static final int CONSTELLATION_IRNSS = 7; // 0x7
+ field public static final int CONSTELLATION_QZSS = 4; // 0x4
+ field public static final int CONSTELLATION_SBAS = 2; // 0x2
+ field public static final int CONSTELLATION_UNKNOWN = 0; // 0x0
+ }
+
+ public abstract static class GnssStatusCompat.Callback {
+ ctor public GnssStatusCompat.Callback();
+ method public void onFirstFix(@IntRange(from=0) int);
+ method public void onSatelliteStatusChanged(androidx.core.location.GnssStatusCompat);
+ method public void onStarted();
+ method public void onStopped();
+ }
+
+ public final class LocationCompat {
+ method public static float getBearingAccuracyDegrees(android.location.Location);
+ method public static long getElapsedRealtimeMillis(android.location.Location);
+ method public static long getElapsedRealtimeNanos(android.location.Location);
+ method @FloatRange(from=0.0) public static float getMslAltitudeAccuracyMeters(android.location.Location);
+ method public static double getMslAltitudeMeters(android.location.Location);
+ method public static float getSpeedAccuracyMetersPerSecond(android.location.Location);
+ method public static float getVerticalAccuracyMeters(android.location.Location);
+ method public static boolean hasBearingAccuracy(android.location.Location);
+ method public static boolean hasMslAltitude(android.location.Location);
+ method public static boolean hasMslAltitudeAccuracy(android.location.Location);
+ method public static boolean hasSpeedAccuracy(android.location.Location);
+ method public static boolean hasVerticalAccuracy(android.location.Location);
+ method public static boolean isMock(android.location.Location);
+ method public static void removeMslAltitude(android.location.Location);
+ method public static void removeMslAltitudeAccuracy(android.location.Location);
+ method public static void setBearingAccuracyDegrees(android.location.Location, float);
+ method public static void setMock(android.location.Location, boolean);
+ method public static void setMslAltitudeAccuracyMeters(android.location.Location, @FloatRange(from=0.0) float);
+ method public static void setMslAltitudeMeters(android.location.Location, double);
+ method public static void setSpeedAccuracyMetersPerSecond(android.location.Location, float);
+ method public static void setVerticalAccuracyMeters(android.location.Location, float);
+ field public static final String EXTRA_BEARING_ACCURACY = "bearingAccuracy";
+ field public static final String EXTRA_IS_MOCK = "mockLocation";
+ field public static final String EXTRA_MSL_ALTITUDE = "androidx.core.location.extra.MSL_ALTITUDE";
+ field public static final String EXTRA_MSL_ALTITUDE_ACCURACY = "androidx.core.location.extra.MSL_ALTITUDE_ACCURACY";
+ field public static final String EXTRA_SPEED_ACCURACY = "speedAccuracy";
+ field public static final String EXTRA_VERTICAL_ACCURACY = "verticalAccuracy";
+ }
+
+ public interface LocationListenerCompat extends android.location.LocationListener {
+ method public default void onStatusChanged(String, int, android.os.Bundle?);
+ }
+
+ public final class LocationManagerCompat {
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void getCurrentLocation(android.location.LocationManager, String, androidx.core.os.CancellationSignal?, java.util.concurrent.Executor, androidx.core.util.Consumer<android.location.Location!>);
+ method public static String? getGnssHardwareModelName(android.location.LocationManager);
+ method public static int getGnssYearOfHardware(android.location.LocationManager);
+ method public static boolean hasProvider(android.location.LocationManager, String);
+ method public static boolean isLocationEnabled(android.location.LocationManager);
+ method @RequiresApi(android.os.Build.VERSION_CODES.N) @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssMeasurementsCallback(android.location.LocationManager, android.location.GnssMeasurementsEvent.Callback, android.os.Handler);
+ method @RequiresApi(android.os.Build.VERSION_CODES.R) @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssMeasurementsCallback(android.location.LocationManager, java.util.concurrent.Executor, android.location.GnssMeasurementsEvent.Callback);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback, android.os.Handler);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, java.util.concurrent.Executor, androidx.core.location.GnssStatusCompat.Callback);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void removeUpdates(android.location.LocationManager, androidx.core.location.LocationListenerCompat);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, androidx.core.location.LocationListenerCompat, android.os.Looper);
+ method @RequiresApi(android.os.Build.VERSION_CODES.N) public static void unregisterGnssMeasurementsCallback(android.location.LocationManager, android.location.GnssMeasurementsEvent.Callback);
+ method public static void unregisterGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback);
+ }
+
+ public final class LocationRequestCompat {
+ method @IntRange(from=1) public long getDurationMillis();
+ method @IntRange(from=0) public long getIntervalMillis();
+ method @IntRange(from=0) public long getMaxUpdateDelayMillis();
+ method @IntRange(from=1, to=java.lang.Integer.MAX_VALUE) public int getMaxUpdates();
+ method @FloatRange(from=0, to=java.lang.Float.MAX_VALUE) public float getMinUpdateDistanceMeters();
+ method @IntRange(from=0) public long getMinUpdateIntervalMillis();
+ method public int getQuality();
+ method @RequiresApi(31) public android.location.LocationRequest toLocationRequest();
+ method @RequiresApi(19) public android.location.LocationRequest? toLocationRequest(String);
+ field public static final long PASSIVE_INTERVAL = 9223372036854775807L; // 0x7fffffffffffffffL
+ field public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; // 0x66
+ field public static final int QUALITY_HIGH_ACCURACY = 100; // 0x64
+ field public static final int QUALITY_LOW_POWER = 104; // 0x68
+ }
+
+ public static final class LocationRequestCompat.Builder {
+ ctor public LocationRequestCompat.Builder(long);
+ ctor public LocationRequestCompat.Builder(androidx.core.location.LocationRequestCompat);
+ method public androidx.core.location.LocationRequestCompat build();
+ method public androidx.core.location.LocationRequestCompat.Builder clearMinUpdateIntervalMillis();
+ method public androidx.core.location.LocationRequestCompat.Builder setDurationMillis(@IntRange(from=1) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setIntervalMillis(@IntRange(from=0) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdateDelayMillis(@IntRange(from=0) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdates(@IntRange(from=1, to=java.lang.Integer.MAX_VALUE) int);
+ method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateDistanceMeters(@FloatRange(from=0, to=java.lang.Float.MAX_VALUE) float);
+ method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateIntervalMillis(@IntRange(from=0) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setQuality(int);
+ }
+
+}
+
+package androidx.core.math {
+
+ public class MathUtils {
+ method public static int addExact(int, int);
+ method public static long addExact(long, long);
+ method public static float clamp(float, float, float);
+ method public static double clamp(double, double, double);
+ method public static int clamp(int, int, int);
+ method public static long clamp(long, long, long);
+ method public static int decrementExact(int);
+ method public static long decrementExact(long);
+ method public static int incrementExact(int);
+ method public static long incrementExact(long);
+ method public static int multiplyExact(int, int);
+ method public static long multiplyExact(long, long);
+ method public static int negateExact(int);
+ method public static long negateExact(long);
+ method public static int subtractExact(int, int);
+ method public static long subtractExact(long, long);
+ method public static int toIntExact(long);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class ConnectivityManagerCompat {
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+ method public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+ }
+
+ public final class MailTo {
+ method public String? getBcc();
+ method public String? getBody();
+ method public String? getCc();
+ method public java.util.Map<java.lang.String!,java.lang.String!>? getHeaders();
+ method public String? getSubject();
+ method public String? getTo();
+ method public static boolean isMailTo(String?);
+ method public static boolean isMailTo(android.net.Uri?);
+ method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
+ method public static androidx.core.net.MailTo parse(android.net.Uri) throws androidx.core.net.ParseException;
+ field public static final String MAILTO_SCHEME = "mailto:";
+ }
+
+ public class ParseException extends java.lang.RuntimeException {
+ field public final String response;
+ }
+
+ public final class TrafficStatsCompat {
+ method @Deprecated public static void clearThreadStatsTag();
+ method @Deprecated public static int getThreadStatsTag();
+ method @Deprecated public static void incrementOperationCount(int);
+ method @Deprecated public static void incrementOperationCount(int, int);
+ method @Deprecated public static void setThreadStatsTag(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
+ }
+
+ public final class UriCompat {
+ method public static String toSafeString(android.net.Uri);
+ }
+
+}
+
+package androidx.core.os {
+
+ public class BuildCompat {
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N) public static boolean isAtLeastN();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N_MR1) public static boolean isAtLeastNMR1();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O) public static boolean isAtLeastO();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O_MR1) public static boolean isAtLeastOMR1();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.P) public static boolean isAtLeastP();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
+ method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
+ field @ChecksSdkIntAtLeast(extension=android.os.ext.SdkExtensions.AD_SERVICES) public static final int AD_SERVICES_EXTENSION_INT;
+ field @ChecksSdkIntAtLeast(extension=android.os.Build.VERSION_CODES.R) public static final int R_EXTENSION_INT;
+ field @ChecksSdkIntAtLeast(extension=android.os.Build.VERSION_CODES.S) public static final int S_EXTENSION_INT;
+ field @ChecksSdkIntAtLeast(extension=android.os.Build.VERSION_CODES.TIRAMISU) public static final int T_EXTENSION_INT;
+ }
+
+ public final class BundleCompat {
+ method public static <T> T? getParcelable(android.os.Bundle, String?, Class<T!>);
+ method public static android.os.Parcelable![]? getParcelableArray(android.os.Bundle, String?, Class<? extends android.os.Parcelable>);
+ method public static <T> java.util.ArrayList<T!>? getParcelableArrayList(android.os.Bundle, String?, Class<? extends T>);
+ method public static <T> android.util.SparseArray<T!>? getSparseParcelableArray(android.os.Bundle, String?, Class<? extends T>);
+ }
+
+ public final class CancellationSignal {
+ ctor public CancellationSignal();
+ method public void cancel();
+ method public Object? getCancellationSignalObject();
+ method public boolean isCanceled();
+ method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener?);
+ method public void throwIfCanceled();
+ }
+
+ public static interface CancellationSignal.OnCancelListener {
+ method public void onCancel();
+ }
+
+ public final class ConfigurationCompat {
+ method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
+ }
+
+ public final class EnvironmentCompat {
+ method public static String getStorageState(java.io.File);
+ field public static final String MEDIA_UNKNOWN = "unknown";
+ }
+
+ public final class ExecutorCompat {
+ method public static java.util.concurrent.Executor create(android.os.Handler);
+ }
+
+ public final class HandlerCompat {
+ method public static android.os.Handler createAsync(android.os.Looper);
+ method public static android.os.Handler createAsync(android.os.Looper, android.os.Handler.Callback);
+ method @RequiresApi(16) public static boolean hasCallbacks(android.os.Handler, Runnable);
+ method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
+ }
+
+ public final class LocaleListCompat {
+ method public static androidx.core.os.LocaleListCompat create(java.util.Locale!...);
+ method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
+ method public java.util.Locale? get(int);
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
+ method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
+ method public java.util.Locale? getFirstMatch(String![]);
+ method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
+ method public boolean isEmpty();
+ method @RequiresApi(21) public static boolean matchesLanguageAndScript(java.util.Locale, java.util.Locale);
+ method @IntRange(from=0) public int size();
+ method public String toLanguageTags();
+ method public Object? unwrap();
+ method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
+ method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
+ }
+
+ public final class MessageCompat {
+ method public static boolean isAsynchronous(android.os.Message);
+ method public static void setAsynchronous(android.os.Message, boolean);
+ }
+
+ public class OperationCanceledException extends java.lang.RuntimeException {
+ ctor public OperationCanceledException();
+ ctor public OperationCanceledException(String?);
+ }
+
+ public final class ParcelCompat {
+ method public static <T> Object![]? readArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> java.util.ArrayList<T!>? readArrayList(android.os.Parcel, ClassLoader?, Class<? extends T>);
+ method public static boolean readBoolean(android.os.Parcel);
+ method public static <K, V> java.util.HashMap<K!,V!>? readHashMap(android.os.Parcel, ClassLoader?, Class<? extends K>, Class<? extends V>);
+ method public static <T> void readList(android.os.Parcel, java.util.List<? super T>, ClassLoader?, Class<T!>);
+ method public static <K, V> void readMap(android.os.Parcel, java.util.Map<? super K,? super V>, ClassLoader?, Class<K!>, Class<V!>);
+ method public static <T extends android.os.Parcelable> T? readParcelable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @Deprecated public static <T> T![]? readParcelableArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> android.os.Parcelable![]? readParcelableArrayTyped(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(30) public static <T> android.os.Parcelable.Creator<T!>? readParcelableCreator(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public static <T> java.util.List<T!> readParcelableList(android.os.Parcel, java.util.List<T!>, ClassLoader?, Class<T!>);
+ method public static <T extends java.io.Serializable> T? readSerializable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> android.util.SparseArray<T!>? readSparseArray(android.os.Parcel, ClassLoader?, Class<? extends T>);
+ method public static void writeBoolean(android.os.Parcel, boolean);
+ }
+
+ @Deprecated public final class ParcelableCompat {
+ method @Deprecated public static <T> android.os.Parcelable.Creator<T!>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T!>!);
+ }
+
+ @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
+ method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
+ method @Deprecated public T![]! newArray(int);
+ }
+
+ public final class ProcessCompat {
+ method public static boolean isApplicationUid(int);
+ }
+
+ @Deprecated public final class TraceCompat {
+ method @Deprecated public static void beginAsyncSection(String, int);
+ method @Deprecated public static void beginSection(String);
+ method @Deprecated public static void endAsyncSection(String, int);
+ method @Deprecated public static void endSection();
+ method @Deprecated public static boolean isEnabled();
+ method @Deprecated public static void setCounter(String, int);
+ }
+
+ @RequiresApi(17) public class UserHandleCompat {
+ method public static android.os.UserHandle getUserHandleForUid(int);
+ }
+
+ public class UserManagerCompat {
+ method public static boolean isUserUnlocked(android.content.Context);
+ }
+
+}
+
+package androidx.core.provider {
+
+ public final class DocumentsContractCompat {
+ method public static android.net.Uri? buildChildDocumentsUri(String, String?);
+ method public static android.net.Uri? buildChildDocumentsUriUsingTree(android.net.Uri, String);
+ method public static android.net.Uri? buildDocumentUri(String, String);
+ method public static android.net.Uri? buildDocumentUriUsingTree(android.net.Uri, String);
+ method public static android.net.Uri? buildTreeDocumentUri(String, String);
+ method public static android.net.Uri? createDocument(android.content.ContentResolver, android.net.Uri, String, String) throws java.io.FileNotFoundException;
+ method public static String? getDocumentId(android.net.Uri);
+ method public static String? getTreeDocumentId(android.net.Uri);
+ method public static boolean isDocumentUri(android.content.Context, android.net.Uri?);
+ method public static boolean isTreeUri(android.net.Uri);
+ method public static boolean removeDocument(android.content.ContentResolver, android.net.Uri, android.net.Uri) throws java.io.FileNotFoundException;
+ method public static android.net.Uri? renameDocument(android.content.ContentResolver, android.net.Uri, String) throws java.io.FileNotFoundException;
+ }
+
+ public static final class DocumentsContractCompat.DocumentCompat {
+ field public static final int FLAG_VIRTUAL_DOCUMENT = 512; // 0x200
+ }
+
+ public final class FontRequest {
+ ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
+ ctor public FontRequest(String, String, String, @ArrayRes int);
+ method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
+ method @ArrayRes public int getCertificatesArrayResId();
+ method public String getProviderAuthority();
+ method public String getProviderPackage();
+ method public String getQuery();
+ }
+
+ public class FontsContractCompat {
+ method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![]);
+ method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
+ }
+
+ public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
+ ctor public FontsContractCompat.Columns();
+ field public static final String FILE_ID = "file_id";
+ field public static final String ITALIC = "font_italic";
+ field public static final String RESULT_CODE = "result_code";
+ field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
+ field public static final int RESULT_CODE_OK = 0; // 0x0
+ field public static final String TTC_INDEX = "font_ttc_index";
+ field public static final String VARIATION_SETTINGS = "font_variation_settings";
+ field public static final String WEIGHT = "font_weight";
+ }
+
+ public static class FontsContractCompat.FontFamilyResult {
+ method public androidx.core.provider.FontsContractCompat.FontInfo![]! getFonts();
+ method public int getStatusCode();
+ field public static final int STATUS_OK = 0; // 0x0
+ field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
+ field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
+ }
+
+ public static class FontsContractCompat.FontInfo {
+ method public int getResultCode();
+ method @IntRange(from=0) public int getTtcIndex();
+ method public android.net.Uri getUri();
+ method @IntRange(from=1, to=1000) public int getWeight();
+ method public boolean isItalic();
+ }
+
+ public static class FontsContractCompat.FontRequestCallback {
+ ctor public FontsContractCompat.FontRequestCallback();
+ method public void onTypefaceRequestFailed(int);
+ method public void onTypefaceRetrieved(android.graphics.Typeface!);
+ field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
+ field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
+ field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+ field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
+ field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
+ }
+
+}
+
+package androidx.core.telephony {
+
+ @RequiresApi(22) public class SubscriptionManagerCompat {
+ method public static int getSlotIndex(int);
+ }
+
+ public class TelephonyManagerCompat {
+ method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static String? getImei(android.telephony.TelephonyManager);
+ method public static int getSubscriptionId(android.telephony.TelephonyManager);
+ }
+
+}
+
+package androidx.core.telephony.mbms {
+
+ public final class MbmsHelper {
+ method public static CharSequence? getBestNameForService(android.content.Context, android.telephony.mbms.ServiceInfo);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class BidiFormatter {
+ method public static androidx.core.text.BidiFormatter! getInstance();
+ method public static androidx.core.text.BidiFormatter! getInstance(boolean);
+ method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
+ method public boolean getStereoReset();
+ method public boolean isRtl(String!);
+ method public boolean isRtl(CharSequence!);
+ method public boolean isRtlContext();
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public String! unicodeWrap(String!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, boolean);
+ method public String! unicodeWrap(String!);
+ method public CharSequence! unicodeWrap(CharSequence!);
+ }
+
+ public static final class BidiFormatter.Builder {
+ ctor public BidiFormatter.Builder();
+ ctor public BidiFormatter.Builder(boolean);
+ ctor public BidiFormatter.Builder(java.util.Locale!);
+ method public androidx.core.text.BidiFormatter! build();
+ method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
+ method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
+ }
+
+ public final class HtmlCompat {
+ method public static android.text.Spanned fromHtml(String, int);
+ method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
+ method public static String toHtml(android.text.Spanned, int);
+ field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
+ field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
+ field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
+ field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
+ field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
+ }
+
+ public final class ICUCompat {
+ method public static String? maximizeAndGetScript(java.util.Locale);
+ }
+
+ public class PrecomputedTextCompat implements android.text.Spannable {
+ method public char charAt(int);
+ method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
+ method @IntRange(from=0) public int getParagraphCount();
+ method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
+ method public androidx.core.text.PrecomputedTextCompat.Params getParams();
+ method public int getSpanEnd(Object!);
+ method public int getSpanFlags(Object!);
+ method public int getSpanStart(Object!);
+ method public <T> T![]! getSpans(int, int, Class<T!>!);
+ method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
+ method public int length();
+ method public int nextSpanTransition(int, int, Class!);
+ method public void removeSpan(Object!);
+ method public void setSpan(Object!, int, int, int);
+ method public CharSequence! subSequence(int, int);
+ }
+
+ public static final class PrecomputedTextCompat.Params {
+ ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
+ method @RequiresApi(23) public int getBreakStrategy();
+ method @RequiresApi(23) public int getHyphenationFrequency();
+ method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
+ method public android.text.TextPaint getTextPaint();
+ }
+
+ public static class PrecomputedTextCompat.Params.Builder {
+ ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
+ method public androidx.core.text.PrecomputedTextCompat.Params build();
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
+ method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
+ }
+
+ public interface TextDirectionHeuristicCompat {
+ method public boolean isRtl(char[]!, int, int);
+ method public boolean isRtl(CharSequence!, int, int);
+ }
+
+ public final class TextDirectionHeuristicsCompat {
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
+ }
+
+ public final class TextUtilsCompat {
+ method public static int getLayoutDirectionFromLocale(java.util.Locale?);
+ method public static String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.text.util {
+
+ public final class LinkifyCompat {
+ method public static boolean addLinks(android.text.Spannable, int);
+ method public static boolean addLinks(android.widget.TextView, int);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ }
+
+}
+
+package androidx.core.util {
+
+ public class AtomicFile {
+ ctor public AtomicFile(java.io.File);
+ method public void delete();
+ method public void failWrite(java.io.FileOutputStream?);
+ method public void finishWrite(java.io.FileOutputStream?);
+ method public java.io.File getBaseFile();
+ method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+ method public byte[] readFully() throws java.io.IOException;
+ method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+ }
+
+ public interface Consumer<T> {
+ method public void accept(T!);
+ }
+
+ public class ObjectsCompat {
+ method public static boolean equals(Object?, Object?);
+ method public static int hash(java.lang.Object!...);
+ method public static int hashCode(Object?);
+ method public static <T> T requireNonNull(T?);
+ method public static <T> T requireNonNull(T?, String);
+ method public static String? toString(Object?, String?);
+ }
+
+ public class Pair<F, S> {
+ ctor public Pair(F!, S!);
+ method public static <A, B> androidx.core.util.Pair<A!,B!> create(A!, B!);
+ field public final F! first;
+ field public final S! second;
+ }
+
+ public final class PatternsCompat {
+ field public static final java.util.regex.Pattern DOMAIN_NAME;
+ field public static final java.util.regex.Pattern EMAIL_ADDRESS;
+ field public static final java.util.regex.Pattern IP_ADDRESS;
+ field public static final java.util.regex.Pattern WEB_URL;
+ }
+
+ public final class Pools {
+ }
+
+ public static interface Pools.Pool<T> {
+ method public T? acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
+ ctor public Pools.SimplePool(int);
+ method public T! acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
+ ctor public Pools.SynchronizedPool(int);
+ }
+
+ public interface Predicate<T> {
+ method public default androidx.core.util.Predicate<T!>! and(androidx.core.util.Predicate<? super T>!);
+ method public static <T> androidx.core.util.Predicate<T!>! isEqual(Object!);
+ method public default androidx.core.util.Predicate<T!>! negate();
+ method public static <T> androidx.core.util.Predicate<T!>! not(androidx.core.util.Predicate<? super T>!);
+ method public default androidx.core.util.Predicate<T!>! or(androidx.core.util.Predicate<? super T>!);
+ method public boolean test(T!);
+ }
+
+ public final class SizeFCompat {
+ ctor public SizeFCompat(float, float);
+ method public float getHeight();
+ method public float getWidth();
+ method @RequiresApi(21) public android.util.SizeF toSizeF();
+ method @RequiresApi(21) public static androidx.core.util.SizeFCompat toSizeFCompat(android.util.SizeF);
+ }
+
+ public interface Supplier<T> {
+ method public T! get();
+ }
+
+}
+
+package androidx.core.view {
+
+ public class AccessibilityDelegateCompat {
+ ctor public AccessibilityDelegateCompat();
+ method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
+ method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
+ method public void sendAccessibilityEvent(android.view.View, int);
+ method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
+ }
+
+ public abstract class ActionProvider {
+ ctor public ActionProvider(android.content.Context);
+ method public android.content.Context getContext();
+ method public boolean hasSubMenu();
+ method public boolean isVisible();
+ method public abstract android.view.View onCreateActionView();
+ method public android.view.View onCreateActionView(android.view.MenuItem);
+ method public boolean onPerformDefaultAction();
+ method public void onPrepareSubMenu(android.view.SubMenu);
+ method public boolean overridesItemVisibility();
+ method public void refreshVisibility();
+ method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener?);
+ }
+
+ public static interface ActionProvider.VisibilityListener {
+ method public void onActionProviderVisibilityChanged(boolean);
+ }
+
+ public final class ContentInfoCompat {
+ method public android.content.ClipData getClip();
+ method public android.os.Bundle? getExtras();
+ method public int getFlags();
+ method public android.net.Uri? getLinkUri();
+ method public int getSource();
+ method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
+ method @RequiresApi(31) public static android.util.Pair<android.view.ContentInfo!,android.view.ContentInfo!> partition(android.view.ContentInfo, java.util.function.Predicate<android.content.ClipData.Item!>);
+ method @RequiresApi(31) public android.view.ContentInfo toContentInfo();
+ method @RequiresApi(31) public static androidx.core.view.ContentInfoCompat toContentInfoCompat(android.view.ContentInfo);
+ field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
+ field public static final int SOURCE_APP = 0; // 0x0
+ field public static final int SOURCE_AUTOFILL = 4; // 0x4
+ field public static final int SOURCE_CLIPBOARD = 1; // 0x1
+ field public static final int SOURCE_DRAG_AND_DROP = 3; // 0x3
+ field public static final int SOURCE_INPUT_METHOD = 2; // 0x2
+ field public static final int SOURCE_PROCESS_TEXT = 5; // 0x5
+ }
+
+ public static final class ContentInfoCompat.Builder {
+ ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
+ ctor public ContentInfoCompat.Builder(android.content.ClipData, int);
+ method public androidx.core.view.ContentInfoCompat build();
+ method public androidx.core.view.ContentInfoCompat.Builder setClip(android.content.ClipData);
+ method public androidx.core.view.ContentInfoCompat.Builder setExtras(android.os.Bundle?);
+ method public androidx.core.view.ContentInfoCompat.Builder setFlags(int);
+ method public androidx.core.view.ContentInfoCompat.Builder setLinkUri(android.net.Uri?);
+ method public androidx.core.view.ContentInfoCompat.Builder setSource(int);
+ }
+
+ public final class DisplayCompat {
+ method public static androidx.core.view.DisplayCompat.ModeCompat getMode(android.content.Context, android.view.Display);
+ method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+ }
+
+ public static final class DisplayCompat.ModeCompat {
+ method public int getPhysicalHeight();
+ method public int getPhysicalWidth();
+ method @Deprecated public boolean isNative();
+ method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+ }
+
+ public final class DisplayCutoutCompat {
+ ctor public DisplayCutoutCompat(android.graphics.Rect?, java.util.List<android.graphics.Rect!>?);
+ ctor public DisplayCutoutCompat(androidx.core.graphics.Insets, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, androidx.core.graphics.Insets);
+ method public java.util.List<android.graphics.Rect!> getBoundingRects();
+ method public int getSafeInsetBottom();
+ method public int getSafeInsetLeft();
+ method public int getSafeInsetRight();
+ method public int getSafeInsetTop();
+ method public androidx.core.graphics.Insets getWaterfallInsets();
+ }
+
+ public final class DragAndDropPermissionsCompat {
+ method public void release();
+ }
+
+ public class DragStartHelper {
+ ctor public DragStartHelper(android.view.View, androidx.core.view.DragStartHelper.OnDragStartListener);
+ method public void attach();
+ method public void detach();
+ method public void getTouchPosition(android.graphics.Point);
+ method public boolean onLongClick(android.view.View);
+ method public boolean onTouch(android.view.View, android.view.MotionEvent);
+ }
+
+ public static interface DragStartHelper.OnDragStartListener {
+ method public boolean onDragStart(android.view.View, androidx.core.view.DragStartHelper);
+ }
+
+ public final class GestureDetectorCompat {
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler?);
+ method public boolean isLongpressEnabled();
+ method public boolean onTouchEvent(android.view.MotionEvent);
+ method public void setIsLongpressEnabled(boolean);
+ method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener?);
+ }
+
+ public final class GravityCompat {
+ method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
+ method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static int getAbsoluteGravity(int, int);
+ field public static final int END = 8388613; // 0x800005
+ field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+ field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+ field public static final int START = 8388611; // 0x800003
+ }
+
+ public final class InputDeviceCompat {
+ field public static final int SOURCE_ANY = -256; // 0xffffff00
+ field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+ field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+ field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+ field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+ field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+ field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+ field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+ field public static final int SOURCE_DPAD = 513; // 0x201
+ field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+ field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+ field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+ field public static final int SOURCE_KEYBOARD = 257; // 0x101
+ field public static final int SOURCE_MOUSE = 8194; // 0x2002
+ field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
+ field public static final int SOURCE_STYLUS = 16386; // 0x4002
+ field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+ field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+ field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+ field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+ field public static final int SOURCE_UNKNOWN = 0; // 0x0
+ }
+
+ public final class LayoutInflaterCompat {
+ method @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
+ method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
+ method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
+ }
+
+ @Deprecated public interface LayoutInflaterFactory {
+ method @Deprecated public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
+ }
+
+ public final class MarginLayoutParamsCompat {
+ method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
+ method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
+ method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
+ }
+
+ public final class MenuCompat {
+ method public static void setGroupDividerEnabled(android.view.Menu, boolean);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ }
+
+ public interface MenuHost {
+ method public void addMenuProvider(androidx.core.view.MenuProvider);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+ method public void invalidateMenu();
+ method public void removeMenuProvider(androidx.core.view.MenuProvider);
+ }
+
+ public class MenuHostHelper {
+ ctor public MenuHostHelper(Runnable);
+ method public void addMenuProvider(androidx.core.view.MenuProvider);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+ method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
+ method public void onMenuClosed(android.view.Menu);
+ method public boolean onMenuItemSelected(android.view.MenuItem);
+ method public void onPrepareMenu(android.view.Menu);
+ method public void removeMenuProvider(androidx.core.view.MenuProvider);
+ }
+
+ public final class MenuItemCompat {
+ method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
+ method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
+ method public static androidx.core.view.ActionProvider? getActionProvider(android.view.MenuItem);
+ method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
+ method public static int getAlphabeticModifiers(android.view.MenuItem);
+ method public static CharSequence? getContentDescription(android.view.MenuItem);
+ method public static android.content.res.ColorStateList? getIconTintList(android.view.MenuItem);
+ method public static android.graphics.PorterDuff.Mode? getIconTintMode(android.view.MenuItem);
+ method public static int getNumericModifiers(android.view.MenuItem);
+ method public static CharSequence? getTooltipText(android.view.MenuItem);
+ method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
+ method public static android.view.MenuItem? setActionProvider(android.view.MenuItem, androidx.core.view.ActionProvider?);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, int);
+ method public static void setAlphabeticShortcut(android.view.MenuItem, char, int);
+ method public static void setContentDescription(android.view.MenuItem, CharSequence?);
+ method public static void setIconTintList(android.view.MenuItem, android.content.res.ColorStateList?);
+ method public static void setIconTintMode(android.view.MenuItem, android.graphics.PorterDuff.Mode?);
+ method public static void setNumericShortcut(android.view.MenuItem, char, int);
+ method @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
+ method public static void setShortcut(android.view.MenuItem, char, char, int, int);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ method public static void setTooltipText(android.view.MenuItem, CharSequence?);
+ field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
+ method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
+ method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
+ }
+
+ public interface MenuProvider {
+ method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
+ method public default void onMenuClosed(android.view.Menu);
+ method public boolean onMenuItemSelected(android.view.MenuItem);
+ method public default void onPrepareMenu(android.view.Menu);
+ }
+
+ public final class MotionEventCompat {
+ method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
+ method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
+ method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
+ method @Deprecated public static int getButtonState(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
+ method @Deprecated public static int getSource(android.view.MotionEvent!);
+ method @Deprecated public static float getX(android.view.MotionEvent!, int);
+ method @Deprecated public static float getY(android.view.MotionEvent!, int);
+ method public static boolean isFromSource(android.view.MotionEvent, int);
+ field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
+ field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
+ field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
+ field @Deprecated public static final int ACTION_MASK = 255; // 0xff
+ field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
+ field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+ field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+ field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
+ field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
+ field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
+ field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
+ field @Deprecated public static final int AXIS_GAS = 22; // 0x16
+ field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
+ field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
+ field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
+ field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
+ field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
+ field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
+ field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
+ field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
+ field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
+ field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
+ field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
+ field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
+ field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
+ field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
+ field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
+ field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
+ field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
+ field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
+ field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
+ field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
+ field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
+ field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
+ field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+ field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+ field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
+ field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
+ field @Deprecated public static final int AXIS_RX = 12; // 0xc
+ field @Deprecated public static final int AXIS_RY = 13; // 0xd
+ field @Deprecated public static final int AXIS_RZ = 14; // 0xe
+ field public static final int AXIS_SCROLL = 26; // 0x1a
+ field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
+ field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
+ field @Deprecated public static final int AXIS_TILT = 25; // 0x19
+ field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+ field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
+ field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+ field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+ field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
+ field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
+ field @Deprecated public static final int AXIS_X = 0; // 0x0
+ field @Deprecated public static final int AXIS_Y = 1; // 0x1
+ field @Deprecated public static final int AXIS_Z = 11; // 0xb
+ field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
+ }
+
+ public interface NestedScrollingChild {
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean isNestedScrollingEnabled();
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(int);
+ method public void stopNestedScroll();
+ }
+
+ public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public interface NestedScrollingChild3 extends androidx.core.view.NestedScrollingChild2 {
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
+ }
+
+ public class NestedScrollingChildHelper {
+ ctor public NestedScrollingChildHelper(android.view.View);
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isNestedScrollingEnabled();
+ method public void onDetachedFromWindow();
+ method public void onStopNestedScroll(android.view.View);
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll();
+ method public void stopNestedScroll(int);
+ }
+
+ public interface NestedScrollingParent {
+ method public int getNestedScrollAxes();
+ method public boolean onNestedFling(android.view.View, float, float, boolean);
+ method public boolean onNestedPreFling(android.view.View, float, float);
+ method public void onNestedPreScroll(android.view.View, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
+ method public void onStopNestedScroll(android.view.View);
+ }
+
+ public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ }
+
+ public interface NestedScrollingParent3 extends androidx.core.view.NestedScrollingParent2 {
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
+ }
+
+ public class NestedScrollingParentHelper {
+ ctor public NestedScrollingParentHelper(android.view.ViewGroup);
+ method public int getNestedScrollAxes();
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View);
+ method public void onStopNestedScroll(android.view.View, int);
+ }
+
+ public interface OnApplyWindowInsetsListener {
+ method public androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
+ }
+
+ public interface OnReceiveContentListener {
+ method public androidx.core.view.ContentInfoCompat? onReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
+ }
+
+ public interface OnReceiveContentViewBehavior {
+ method public androidx.core.view.ContentInfoCompat? onReceiveContent(androidx.core.view.ContentInfoCompat);
+ }
+
+ public final class OneShotPreDrawListener implements android.view.View.OnAttachStateChangeListener android.view.ViewTreeObserver.OnPreDrawListener {
+ method public static androidx.core.view.OneShotPreDrawListener add(android.view.View, Runnable);
+ method public boolean onPreDraw();
+ method public void onViewAttachedToWindow(android.view.View);
+ method public void onViewDetachedFromWindow(android.view.View);
+ method public void removeListener();
+ }
+
+ public final class PointerIconCompat {
+ method public static androidx.core.view.PointerIconCompat create(android.graphics.Bitmap, float, float);
+ method public static androidx.core.view.PointerIconCompat getSystemIcon(android.content.Context, int);
+ method public static androidx.core.view.PointerIconCompat load(android.content.res.Resources, int);
+ field public static final int TYPE_ALIAS = 1010; // 0x3f2
+ field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+ field public static final int TYPE_ARROW = 1000; // 0x3e8
+ field public static final int TYPE_CELL = 1006; // 0x3ee
+ field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+ field public static final int TYPE_COPY = 1011; // 0x3f3
+ field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+ field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+ field public static final int TYPE_GRAB = 1020; // 0x3fc
+ field public static final int TYPE_GRABBING = 1021; // 0x3fd
+ field public static final int TYPE_HAND = 1002; // 0x3ea
+ field public static final int TYPE_HELP = 1003; // 0x3eb
+ field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+ field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+ field public static final int TYPE_NULL = 0; // 0x0
+ field public static final int TYPE_TEXT = 1008; // 0x3f0
+ field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+ field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+ field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+ field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+ field public static final int TYPE_WAIT = 1004; // 0x3ec
+ field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+ field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+ }
+
+ public final class ScaleGestureDetectorCompat {
+ method @Deprecated public static boolean isQuickScaleEnabled(Object!);
+ method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
+ method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
+ method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
+ }
+
+ public interface ScrollingView {
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ }
+
+ public interface TintableBackgroundView {
+ method public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @Deprecated public final class VelocityTrackerCompat {
+ method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
+ method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
+ }
+
+ public class ViewCompat {
+ ctor @Deprecated protected ViewCompat();
+ method public static int addAccessibilityAction(android.view.View, CharSequence, androidx.core.view.accessibility.AccessibilityViewCommand);
+ method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View!>, int);
+ method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
+ method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
+ method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
+ method public static void cancelDragAndDrop(android.view.View);
+ method @Deprecated public static int combineMeasuredStates(int, int);
+ method public static androidx.core.view.WindowInsetsCompat computeSystemWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat, android.graphics.Rect);
+ method public static androidx.core.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
+ method public static void dispatchFinishTemporaryDetach(android.view.View);
+ method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
+ method public static boolean dispatchNestedPreFling(android.view.View, float, float);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, int);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
+ method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int, int[]);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int);
+ method public static void dispatchStartTemporaryDetach(android.view.View);
+ method public static void enableAccessibleClickableSpanSupport(android.view.View);
+ method public static int generateViewId();
+ method public static androidx.core.view.AccessibilityDelegateCompat? getAccessibilityDelegate(android.view.View);
+ method public static int getAccessibilityLiveRegion(android.view.View);
+ method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
+ method @UiThread public static CharSequence? getAccessibilityPaneTitle(android.view.View);
+ method @Deprecated public static float getAlpha(android.view.View!);
+ method public static android.content.res.ColorStateList? getBackgroundTintList(android.view.View);
+ method public static android.graphics.PorterDuff.Mode? getBackgroundTintMode(android.view.View);
+ method public static android.graphics.Rect? getClipBounds(android.view.View);
+ method public static android.view.Display? getDisplay(android.view.View);
+ method public static float getElevation(android.view.View);
+ method public static boolean getFitsSystemWindows(android.view.View);
+ method public static int getImportantForAccessibility(android.view.View);
+ method public static int getImportantForAutofill(android.view.View);
+ method public static int getLabelFor(android.view.View);
+ method @Deprecated public static int getLayerType(android.view.View!);
+ method public static int getLayoutDirection(android.view.View);
+ method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
+ method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
+ method @Deprecated public static int getMeasuredState(android.view.View!);
+ method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
+ method public static int getMinimumHeight(android.view.View);
+ method public static int getMinimumWidth(android.view.View);
+ method public static int getNextClusterForwardId(android.view.View);
+ method public static String![]? getOnReceiveContentMimeTypes(android.view.View);
+ method @Deprecated public static int getOverScrollMode(android.view.View!);
+ method @Px public static int getPaddingEnd(android.view.View);
+ method @Px public static int getPaddingStart(android.view.View);
+ method public static android.view.ViewParent? getParentForAccessibility(android.view.View);
+ method @Deprecated public static float getPivotX(android.view.View!);
+ method @Deprecated public static float getPivotY(android.view.View!);
+ method public static androidx.core.view.WindowInsetsCompat? getRootWindowInsets(android.view.View);
+ method @Deprecated public static float getRotation(android.view.View!);
+ method @Deprecated public static float getRotationX(android.view.View!);
+ method @Deprecated public static float getRotationY(android.view.View!);
+ method @Deprecated public static float getScaleX(android.view.View!);
+ method @Deprecated public static float getScaleY(android.view.View!);
+ method public static int getScrollIndicators(android.view.View);
+ method @UiThread public static CharSequence? getStateDescription(android.view.View);
+ method public static java.util.List<android.graphics.Rect!> getSystemGestureExclusionRects(android.view.View);
+ method public static String? getTransitionName(android.view.View);
+ method @Deprecated public static float getTranslationX(android.view.View!);
+ method @Deprecated public static float getTranslationY(android.view.View!);
+ method public static float getTranslationZ(android.view.View);
+ method @Deprecated public static androidx.core.view.WindowInsetsControllerCompat? getWindowInsetsController(android.view.View);
+ method @Deprecated public static int getWindowSystemUiVisibility(android.view.View);
+ method @Deprecated public static float getX(android.view.View!);
+ method @Deprecated public static float getY(android.view.View!);
+ method public static float getZ(android.view.View);
+ method public static boolean hasAccessibilityDelegate(android.view.View);
+ method public static boolean hasExplicitFocusable(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View, int);
+ method public static boolean hasOnClickListeners(android.view.View);
+ method public static boolean hasOverlappingRendering(android.view.View);
+ method public static boolean hasTransientState(android.view.View);
+ method @UiThread public static boolean isAccessibilityHeading(android.view.View);
+ method public static boolean isAttachedToWindow(android.view.View);
+ method public static boolean isFocusedByDefault(android.view.View);
+ method public static boolean isImportantForAccessibility(android.view.View);
+ method public static boolean isImportantForAutofill(android.view.View);
+ method public static boolean isInLayout(android.view.View);
+ method public static boolean isKeyboardNavigationCluster(android.view.View);
+ method public static boolean isLaidOut(android.view.View);
+ method public static boolean isLayoutDirectionResolved(android.view.View);
+ method public static boolean isNestedScrollingEnabled(android.view.View);
+ method @Deprecated public static boolean isOpaque(android.view.View!);
+ method public static boolean isPaddingRelative(android.view.View);
+ method @UiThread public static boolean isScreenReaderFocusable(android.view.View);
+ method @Deprecated public static void jumpDrawablesToCurrentState(android.view.View!);
+ method public static android.view.View? keyboardNavigationClusterSearch(android.view.View, android.view.View?, int);
+ method public static void offsetLeftAndRight(android.view.View, int);
+ method public static void offsetTopAndBottom(android.view.View, int);
+ method public static androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
+ method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
+ method public static androidx.core.view.ContentInfoCompat? performReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
+ method public static void postInvalidateOnAnimation(android.view.View);
+ method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
+ method public static void postOnAnimation(android.view.View, Runnable);
+ method public static void postOnAnimationDelayed(android.view.View, Runnable, long);
+ method public static void removeAccessibilityAction(android.view.View, int);
+ method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static void replaceAccessibilityAction(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat, CharSequence?, androidx.core.view.accessibility.AccessibilityViewCommand?);
+ method public static void requestApplyInsets(android.view.View);
+ method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
+ method @Deprecated public static int resolveSizeAndState(int, int, int);
+ method public static boolean restoreDefaultFocus(android.view.View);
+ method public static void saveAttributeDataForStyleable(android.view.View, android.content.Context, int[], android.util.AttributeSet?, android.content.res.TypedArray, int, int);
+ method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat?);
+ method @UiThread public static void setAccessibilityHeading(android.view.View, boolean);
+ method public static void setAccessibilityLiveRegion(android.view.View, int);
+ method @UiThread public static void setAccessibilityPaneTitle(android.view.View, CharSequence?);
+ method @Deprecated public static void setActivated(android.view.View!, boolean);
+ method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) float);
+ method public static void setAutofillHints(android.view.View, java.lang.String!...);
+ method public static void setBackground(android.view.View, android.graphics.drawable.Drawable?);
+ method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList?);
+ method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode?);
+ method @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
+ method public static void setClipBounds(android.view.View, android.graphics.Rect?);
+ method public static void setElevation(android.view.View, float);
+ method @Deprecated public static void setFitsSystemWindows(android.view.View!, boolean);
+ method public static void setFocusedByDefault(android.view.View, boolean);
+ method public static void setHasTransientState(android.view.View, boolean);
+ method @UiThread public static void setImportantForAccessibility(android.view.View, int);
+ method public static void setImportantForAutofill(android.view.View, int);
+ method public static void setKeyboardNavigationCluster(android.view.View, boolean);
+ method public static void setLabelFor(android.view.View, @IdRes int);
+ method public static void setLayerPaint(android.view.View, android.graphics.Paint?);
+ method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
+ method public static void setLayoutDirection(android.view.View, int);
+ method public static void setNestedScrollingEnabled(android.view.View, boolean);
+ method public static void setNextClusterForwardId(android.view.View, int);
+ method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener?);
+ method public static void setOnReceiveContentListener(android.view.View, String![]?, androidx.core.view.OnReceiveContentListener?);
+ method @Deprecated public static void setOverScrollMode(android.view.View!, int);
+ method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
+ method @Deprecated public static void setPivotX(android.view.View!, float);
+ method @Deprecated public static void setPivotY(android.view.View!, float);
+ method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat?);
+ method @Deprecated public static void setRotation(android.view.View!, float);
+ method @Deprecated public static void setRotationX(android.view.View!, float);
+ method @Deprecated public static void setRotationY(android.view.View!, float);
+ method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
+ method @Deprecated public static void setScaleX(android.view.View!, float);
+ method @Deprecated public static void setScaleY(android.view.View!, float);
+ method @UiThread public static void setScreenReaderFocusable(android.view.View, boolean);
+ method public static void setScrollIndicators(android.view.View, int);
+ method public static void setScrollIndicators(android.view.View, int, int);
+ method @UiThread public static void setStateDescription(android.view.View, CharSequence?);
+ method public static void setSystemGestureExclusionRects(android.view.View, java.util.List<android.graphics.Rect!>);
+ method public static void setTooltipText(android.view.View, CharSequence?);
+ method public static void setTransitionName(android.view.View, String?);
+ method @Deprecated public static void setTranslationX(android.view.View!, float);
+ method @Deprecated public static void setTranslationY(android.view.View!, float);
+ method public static void setTranslationZ(android.view.View, float);
+ method public static void setWindowInsetsAnimationCallback(android.view.View, androidx.core.view.WindowInsetsAnimationCompat.Callback?);
+ method @Deprecated public static void setX(android.view.View!, float);
+ method @Deprecated public static void setY(android.view.View!, float);
+ method public static void setZ(android.view.View, float);
+ method public static boolean startDragAndDrop(android.view.View, android.content.ClipData?, android.view.View.DragShadowBuilder, Object?, int);
+ method public static boolean startNestedScroll(android.view.View, int);
+ method public static boolean startNestedScroll(android.view.View, int, int);
+ method public static void stopNestedScroll(android.view.View);
+ method public static void stopNestedScroll(android.view.View, int);
+ method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
+ field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+ field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+ field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+ field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+ field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
+ field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+ field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+ field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+ field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+ field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+ field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+ field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+ field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+ field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+ field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+ field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+ field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
+ field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+ field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+ field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+ field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+ field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+ field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+ field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+ field public static final int TYPE_NON_TOUCH = 1; // 0x1
+ field public static final int TYPE_TOUCH = 0; // 0x0
+ }
+
+ public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
+ method public boolean onUnhandledKeyEvent(android.view.View, android.view.KeyEvent);
+ }
+
+ public final class ViewConfigurationCompat {
+ method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method public static int getScaledHoverSlop(android.view.ViewConfiguration);
+ method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
+ method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
+ method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration, android.content.Context);
+ }
+
+ public final class ViewGroupCompat {
+ method public static int getLayoutMode(android.view.ViewGroup);
+ method public static int getNestedScrollAxes(android.view.ViewGroup);
+ method public static boolean isTransitionGroup(android.view.ViewGroup);
+ method @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void setLayoutMode(android.view.ViewGroup, int);
+ method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
+ method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+ field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+ field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+ }
+
+ public final class ViewParentCompat {
+ method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
+ method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
+ method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
+ method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[], int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int, int[]);
+ method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int, int);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View, int);
+ method @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ }
+
+ public final class ViewPropertyAnimatorCompat {
+ method public androidx.core.view.ViewPropertyAnimatorCompat alpha(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat alphaBy(float);
+ method public void cancel();
+ method public long getDuration();
+ method public android.view.animation.Interpolator? getInterpolator();
+ method public long getStartDelay();
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotation(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setDuration(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator?);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setListener(androidx.core.view.ViewPropertyAnimatorListener?);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setStartDelay(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener?);
+ method public void start();
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationZ(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationZBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat withEndAction(Runnable);
+ method public androidx.core.view.ViewPropertyAnimatorCompat withLayer();
+ method public androidx.core.view.ViewPropertyAnimatorCompat withStartAction(Runnable);
+ method public androidx.core.view.ViewPropertyAnimatorCompat x(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat xBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat y(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat yBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat z(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat zBy(float);
+ }
+
+ public interface ViewPropertyAnimatorListener {
+ method public void onAnimationCancel(android.view.View);
+ method public void onAnimationEnd(android.view.View);
+ method public void onAnimationStart(android.view.View);
+ }
+
+ public class ViewPropertyAnimatorListenerAdapter implements androidx.core.view.ViewPropertyAnimatorListener {
+ ctor public ViewPropertyAnimatorListenerAdapter();
+ method public void onAnimationCancel(android.view.View);
+ method public void onAnimationEnd(android.view.View);
+ method public void onAnimationStart(android.view.View);
+ }
+
+ public interface ViewPropertyAnimatorUpdateListener {
+ method public void onAnimationUpdate(android.view.View);
+ }
+
+ public final class WindowCompat {
+ method public static androidx.core.view.WindowInsetsControllerCompat getInsetsController(android.view.Window, android.view.View);
+ method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes int);
+ method public static void setDecorFitsSystemWindows(android.view.Window, boolean);
+ field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+ field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ }
+
+ public final class WindowInsetsAnimationCompat {
+ ctor public WindowInsetsAnimationCompat(int, android.view.animation.Interpolator?, long);
+ method @FloatRange(from=0.0f, to=1.0f) public float getAlpha();
+ method public long getDurationMillis();
+ method @FloatRange(from=0.0f, to=1.0f) public float getFraction();
+ method public float getInterpolatedFraction();
+ method public android.view.animation.Interpolator? getInterpolator();
+ method public int getTypeMask();
+ method public void setAlpha(@FloatRange(from=0.0f, to=1.0f) float);
+ method public void setFraction(@FloatRange(from=0.0f, to=1.0f) float);
+ }
+
+ public static final class WindowInsetsAnimationCompat.BoundsCompat {
+ ctor public WindowInsetsAnimationCompat.BoundsCompat(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public androidx.core.graphics.Insets getLowerBound();
+ method public androidx.core.graphics.Insets getUpperBound();
+ method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat inset(androidx.core.graphics.Insets);
+ method @RequiresApi(30) public android.view.WindowInsetsAnimation.Bounds toBounds();
+ method @RequiresApi(30) public static androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat toBoundsCompat(android.view.WindowInsetsAnimation.Bounds);
+ }
+
+ public abstract static class WindowInsetsAnimationCompat.Callback {
+ ctor public WindowInsetsAnimationCompat.Callback(int);
+ method public final int getDispatchMode();
+ method public void onEnd(androidx.core.view.WindowInsetsAnimationCompat);
+ method public void onPrepare(androidx.core.view.WindowInsetsAnimationCompat);
+ method public abstract androidx.core.view.WindowInsetsCompat onProgress(androidx.core.view.WindowInsetsCompat, java.util.List<androidx.core.view.WindowInsetsAnimationCompat!>);
+ method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat onStart(androidx.core.view.WindowInsetsAnimationCompat, androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat);
+ field public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1; // 0x1
+ field public static final int DISPATCH_MODE_STOP = 0; // 0x0
+ }
+
+ public interface WindowInsetsAnimationControlListenerCompat {
+ method public void onCancelled(androidx.core.view.WindowInsetsAnimationControllerCompat?);
+ method public void onFinished(androidx.core.view.WindowInsetsAnimationControllerCompat);
+ method public void onReady(androidx.core.view.WindowInsetsAnimationControllerCompat, int);
+ }
+
+ public final class WindowInsetsAnimationControllerCompat {
+ method public void finish(boolean);
+ method public float getCurrentAlpha();
+ method @FloatRange(from=0.0f, to=1.0f) public float getCurrentFraction();
+ method public androidx.core.graphics.Insets getCurrentInsets();
+ method public androidx.core.graphics.Insets getHiddenStateInsets();
+ method public androidx.core.graphics.Insets getShownStateInsets();
+ method public int getTypes();
+ method public boolean isCancelled();
+ method public boolean isFinished();
+ method public boolean isReady();
+ method public void setInsetsAndAlpha(androidx.core.graphics.Insets?, @FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float);
+ }
+
+ public class WindowInsetsCompat {
+ ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat?);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat consumeDisplayCutout();
+ method @Deprecated public androidx.core.view.WindowInsetsCompat consumeStableInsets();
+ method @Deprecated public androidx.core.view.WindowInsetsCompat consumeSystemWindowInsets();
+ method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
+ method public androidx.core.graphics.Insets getInsets(int);
+ method public androidx.core.graphics.Insets getInsetsIgnoringVisibility(int);
+ method @Deprecated public androidx.core.graphics.Insets getMandatorySystemGestureInsets();
+ method @Deprecated public int getStableInsetBottom();
+ method @Deprecated public int getStableInsetLeft();
+ method @Deprecated public int getStableInsetRight();
+ method @Deprecated public int getStableInsetTop();
+ method @Deprecated public androidx.core.graphics.Insets getStableInsets();
+ method @Deprecated public androidx.core.graphics.Insets getSystemGestureInsets();
+ method @Deprecated public int getSystemWindowInsetBottom();
+ method @Deprecated public int getSystemWindowInsetLeft();
+ method @Deprecated public int getSystemWindowInsetRight();
+ method @Deprecated public int getSystemWindowInsetTop();
+ method @Deprecated public androidx.core.graphics.Insets getSystemWindowInsets();
+ method @Deprecated public androidx.core.graphics.Insets getTappableElementInsets();
+ method public boolean hasInsets();
+ method @Deprecated public boolean hasStableInsets();
+ method @Deprecated public boolean hasSystemWindowInsets();
+ method public androidx.core.view.WindowInsetsCompat inset(androidx.core.graphics.Insets);
+ method public androidx.core.view.WindowInsetsCompat inset(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+ method public boolean isConsumed();
+ method public boolean isRound();
+ method public boolean isVisible(int);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
+ method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
+ method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
+ method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets, android.view.View?);
+ field public static final androidx.core.view.WindowInsetsCompat CONSUMED;
+ }
+
+ public static final class WindowInsetsCompat.Builder {
+ ctor public WindowInsetsCompat.Builder();
+ ctor public WindowInsetsCompat.Builder(androidx.core.view.WindowInsetsCompat);
+ method public androidx.core.view.WindowInsetsCompat build();
+ method public androidx.core.view.WindowInsetsCompat.Builder setDisplayCutout(androidx.core.view.DisplayCutoutCompat?);
+ method public androidx.core.view.WindowInsetsCompat.Builder setInsets(int, androidx.core.graphics.Insets);
+ method public androidx.core.view.WindowInsetsCompat.Builder setInsetsIgnoringVisibility(int, androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setMandatorySystemGestureInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setStableInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemGestureInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemWindowInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setTappableElementInsets(androidx.core.graphics.Insets);
+ method public androidx.core.view.WindowInsetsCompat.Builder setVisible(int, boolean);
+ }
+
+ public static final class WindowInsetsCompat.Type {
+ method public static int captionBar();
+ method public static int displayCutout();
+ method public static int ime();
+ method public static int mandatorySystemGestures();
+ method public static int navigationBars();
+ method public static int statusBars();
+ method public static int systemBars();
+ method public static int systemGestures();
+ method public static int tappableElement();
+ }
+
+ public final class WindowInsetsControllerCompat {
+ ctor public WindowInsetsControllerCompat(android.view.Window, android.view.View);
+ method public void addOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
+ method public void controlWindowInsetsAnimation(int, long, android.view.animation.Interpolator?, android.os.CancellationSignal?, androidx.core.view.WindowInsetsAnimationControlListenerCompat);
+ method public int getSystemBarsBehavior();
+ method public void hide(int);
+ method public boolean isAppearanceLightNavigationBars();
+ method public boolean isAppearanceLightStatusBars();
+ method public void removeOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
+ method public void setAppearanceLightNavigationBars(boolean);
+ method public void setAppearanceLightStatusBars(boolean);
+ method public void setSystemBarsBehavior(int);
+ method public void show(int);
+ method @Deprecated @RequiresApi(30) public static androidx.core.view.WindowInsetsControllerCompat toWindowInsetsControllerCompat(android.view.WindowInsetsController);
+ field public static final int BEHAVIOR_DEFAULT = 1; // 0x1
+ field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1; // 0x1
+ field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0; // 0x0
+ field public static final int BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE = 2; // 0x2
+ }
+
+ public static interface WindowInsetsControllerCompat.OnControllableInsetsChangedListener {
+ method public void onControllableInsetsChanged(androidx.core.view.WindowInsetsControllerCompat, int);
+ }
+
+}
+
+package androidx.core.view.accessibility {
+
+ public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
+ method public void onClick(android.view.View);
+ }
+
+ public final class AccessibilityEventCompat {
+ method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! asRecord(android.view.accessibility.AccessibilityEvent!);
+ method public static int getAction(android.view.accessibility.AccessibilityEvent);
+ method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
+ method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
+ method @Deprecated public static int getRecordCount(android.view.accessibility.AccessibilityEvent!);
+ method public static void setAction(android.view.accessibility.AccessibilityEvent, int);
+ method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
+ method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
+ field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
+ field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
+ field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
+ field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
+ field public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 64; // 0x40
+ field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+ field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+ field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+ field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+ field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+ field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+ field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+ field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+ field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+ field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+ field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+ field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+ field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+ field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+ field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+ field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+ field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+ }
+
+ public final class AccessibilityManagerCompat {
+ method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ }
+
+ @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ method @Deprecated public void onAccessibilityStateChanged(boolean);
+ }
+
+ @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+ }
+
+ public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+ method public void onTouchExplorationStateChanged(boolean);
+ }
+
+ public class AccessibilityNodeInfoCompat {
+ ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
+ method public void addAction(int);
+ method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public void addChild(android.view.View!);
+ method public void addChild(android.view.View!, int);
+ method public boolean canOpenPopup();
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByText(String!);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByViewId(String!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
+ method @Deprecated public int getActions();
+ method public java.util.List<java.lang.String!> getAvailableExtraData();
+ method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
+ method public void getBoundsInScreen(android.graphics.Rect!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
+ method public int getChildCount();
+ method public CharSequence! getClassName();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
+ method public CharSequence! getContentDescription();
+ method public int getDrawingOrder();
+ method public CharSequence! getError();
+ method public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo? getExtraRenderingInfo();
+ method public android.os.Bundle! getExtras();
+ method public CharSequence? getHintText();
+ method @Deprecated public Object! getInfo();
+ method public int getInputType();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
+ method public int getLiveRegion();
+ method public int getMaxTextLength();
+ method public int getMinMillisBetweenContentChanges();
+ method public int getMovementGranularities();
+ method public CharSequence! getPackageName();
+ method public CharSequence? getPaneTitle();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
+ method public CharSequence? getRoleDescription();
+ method public CharSequence? getStateDescription();
+ method public CharSequence! getText();
+ method public int getTextSelectionEnd();
+ method public int getTextSelectionStart();
+ method public CharSequence? getTooltipText();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+ method public String? getUniqueId();
+ method public String! getViewIdResourceName();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
+ method public int getWindowId();
+ method public boolean hasRequestInitialAccessibilityFocus();
+ method public boolean isAccessibilityFocused();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isClickable();
+ method public boolean isContentInvalid();
+ method public boolean isContextClickable();
+ method public boolean isDismissable();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public boolean isFocused();
+ method public boolean isHeading();
+ method public boolean isImportantForAccessibility();
+ method public boolean isLongClickable();
+ method public boolean isMultiLine();
+ method public boolean isPassword();
+ method public boolean isScreenReaderFocusable();
+ method public boolean isScrollable();
+ method public boolean isSelected();
+ method public boolean isShowingHintText();
+ method public boolean isTextEntryKey();
+ method public boolean isTextSelectable();
+ method public boolean isVisibleToUser();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method public boolean performAction(int);
+ method public boolean performAction(int, android.os.Bundle!);
+ method @Deprecated public void recycle();
+ method public boolean refresh();
+ method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public boolean removeChild(android.view.View!);
+ method public boolean removeChild(android.view.View!, int);
+ method public void setAccessibilityFocused(boolean);
+ method public void setAvailableExtraData(java.util.List<java.lang.String!>);
+ method @Deprecated public void setBoundsInParent(android.graphics.Rect!);
+ method public void setBoundsInScreen(android.graphics.Rect!);
+ method public void setCanOpenPopup(boolean);
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setClassName(CharSequence!);
+ method public void setClickable(boolean);
+ method public void setCollectionInfo(Object!);
+ method public void setCollectionItemInfo(Object!);
+ method public void setContentDescription(CharSequence!);
+ method public void setContentInvalid(boolean);
+ method public void setContextClickable(boolean);
+ method public void setDismissable(boolean);
+ method public void setDrawingOrder(int);
+ method public void setEditable(boolean);
+ method public void setEnabled(boolean);
+ method public void setError(CharSequence!);
+ method public void setFocusable(boolean);
+ method public void setFocused(boolean);
+ method public void setHeading(boolean);
+ method public void setHintText(CharSequence?);
+ method public void setImportantForAccessibility(boolean);
+ method public void setInputType(int);
+ method public void setLabelFor(android.view.View!);
+ method public void setLabelFor(android.view.View!, int);
+ method public void setLabeledBy(android.view.View!);
+ method public void setLabeledBy(android.view.View!, int);
+ method public void setLiveRegion(int);
+ method public void setLongClickable(boolean);
+ method public void setMaxTextLength(int);
+ method public void setMinMillisBetweenContentChanges(int);
+ method public void setMovementGranularities(int);
+ method public void setMultiLine(boolean);
+ method public void setPackageName(CharSequence!);
+ method public void setPaneTitle(CharSequence?);
+ method public void setParent(android.view.View!);
+ method public void setParent(android.view.View!, int);
+ method public void setPassword(boolean);
+ method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
+ method public void setRequestInitialAccessibilityFocus(boolean);
+ method public void setRoleDescription(CharSequence?);
+ method public void setScreenReaderFocusable(boolean);
+ method public void setScrollable(boolean);
+ method public void setSelected(boolean);
+ method public void setShowingHintText(boolean);
+ method public void setSource(android.view.View!);
+ method public void setSource(android.view.View!, int);
+ method public void setStateDescription(CharSequence?);
+ method public void setText(CharSequence!);
+ method public void setTextEntryKey(boolean);
+ method public void setTextSelectable(boolean);
+ method public void setTextSelection(int, int);
+ method public void setTooltipText(CharSequence?);
+ method public void setTouchDelegateInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat);
+ method public void setTraversalAfter(android.view.View!);
+ method public void setTraversalAfter(android.view.View!, int);
+ method public void setTraversalBefore(android.view.View!);
+ method public void setTraversalBefore(android.view.View!, int);
+ method public void setUniqueId(String?);
+ method public void setViewIdResourceName(String!);
+ method public void setVisibleToUser(boolean);
+ method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
+ field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+ field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+ field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+ field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+ field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
+ field public static final String ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT = "android.view.accessibility.action.ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT";
+ field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+ field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+ field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+ field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+ field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+ field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+ field public static final int ACTION_CLICK = 16; // 0x10
+ field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+ field public static final int ACTION_COPY = 16384; // 0x4000
+ field public static final int ACTION_CUT = 65536; // 0x10000
+ field public static final int ACTION_DISMISS = 1048576; // 0x100000
+ field public static final int ACTION_EXPAND = 262144; // 0x40000
+ field public static final int ACTION_FOCUS = 1; // 0x1
+ field public static final int ACTION_LONG_CLICK = 32; // 0x20
+ field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+ field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+ field public static final int ACTION_PASTE = 32768; // 0x8000
+ field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+ field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+ field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+ field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+ field public static final int ACTION_SELECT = 4; // 0x4
+ field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+ field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+ field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH = "android.core.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH";
+ field public static final int EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH = 20000; // 0x4e20
+ field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX = "android.core.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX";
+ field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY = "android.core.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_KEY";
+ field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+ field public static final int FOCUS_INPUT = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+ field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+ field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+ field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+ }
+
+ public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
+ ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!);
+ method public int getId();
+ method public CharSequence! getLabel();
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_CANCEL;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_DROP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_START;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_IME_ENTER;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PRESS_AND_HOLD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SHOW_TEXT_SUGGESTIONS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+ method public int getColumnCount();
+ method public int getRowCount();
+ method public int getSelectionMode();
+ method public boolean isHierarchical();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
+ field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+ field public static final int SELECTION_MODE_NONE = 0; // 0x0
+ field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ method @Deprecated public boolean isHeading();
+ method public boolean isSelected();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
+ }
+
+ public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+ method public float getCurrent();
+ method public float getMax();
+ method public float getMin();
+ method public int getType();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! obtain(int, float, float, float);
+ field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+ field public static final int RANGE_TYPE_INT = 0; // 0x0
+ field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+ }
+
+ public static final class AccessibilityNodeInfoCompat.TouchDelegateInfoCompat {
+ ctor public AccessibilityNodeInfoCompat.TouchDelegateInfoCompat(java.util.Map<android.graphics.Region!,android.view.View!>);
+ method public android.graphics.Region? getRegionAt(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getRegionCount();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getTargetForRegion(android.graphics.Region);
+ }
+
+ public class AccessibilityNodeProviderCompat {
+ ctor public AccessibilityNodeProviderCompat();
+ ctor public AccessibilityNodeProviderCompat(Object?);
+ method public void addExtraDataToAccessibilityNodeInfo(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat, String, android.os.Bundle?);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>? findAccessibilityNodeInfosByText(String, int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
+ method public Object? getProvider();
+ method public boolean performAction(int, int, android.os.Bundle?);
+ field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+ }
+
+ public class AccessibilityRecordCompat {
+ ctor @Deprecated public AccessibilityRecordCompat(Object!);
+ method @Deprecated public boolean equals(Object?);
+ method @Deprecated public int getAddedCount();
+ method @Deprecated public CharSequence! getBeforeText();
+ method @Deprecated public CharSequence! getClassName();
+ method @Deprecated public CharSequence! getContentDescription();
+ method @Deprecated public int getCurrentItemIndex();
+ method @Deprecated public int getFromIndex();
+ method @Deprecated public Object! getImpl();
+ method @Deprecated public int getItemCount();
+ method @Deprecated public int getMaxScrollX();
+ method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord);
+ method @Deprecated public int getMaxScrollY();
+ method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord);
+ method @Deprecated public android.os.Parcelable! getParcelableData();
+ method @Deprecated public int getRemovedCount();
+ method @Deprecated public int getScrollX();
+ method @Deprecated public int getScrollY();
+ method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
+ method @Deprecated public java.util.List<java.lang.CharSequence!>! getText();
+ method @Deprecated public int getToIndex();
+ method @Deprecated public int getWindowId();
+ method @Deprecated public int hashCode();
+ method @Deprecated public boolean isChecked();
+ method @Deprecated public boolean isEnabled();
+ method @Deprecated public boolean isFullScreen();
+ method @Deprecated public boolean isPassword();
+ method @Deprecated public boolean isScrollable();
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
+ method @Deprecated public void recycle();
+ method @Deprecated public void setAddedCount(int);
+ method @Deprecated public void setBeforeText(CharSequence!);
+ method @Deprecated public void setChecked(boolean);
+ method @Deprecated public void setClassName(CharSequence!);
+ method @Deprecated public void setContentDescription(CharSequence!);
+ method @Deprecated public void setCurrentItemIndex(int);
+ method @Deprecated public void setEnabled(boolean);
+ method @Deprecated public void setFromIndex(int);
+ method @Deprecated public void setFullScreen(boolean);
+ method @Deprecated public void setItemCount(int);
+ method @Deprecated public void setMaxScrollX(int);
+ method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
+ method @Deprecated public void setMaxScrollY(int);
+ method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
+ method @Deprecated public void setParcelableData(android.os.Parcelable!);
+ method @Deprecated public void setPassword(boolean);
+ method @Deprecated public void setRemovedCount(int);
+ method @Deprecated public void setScrollX(int);
+ method @Deprecated public void setScrollY(int);
+ method @Deprecated public void setScrollable(boolean);
+ method @Deprecated public void setSource(android.view.View!);
+ method @Deprecated public void setSource(android.view.View!, int);
+ method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
+ method @Deprecated public void setToIndex(int);
+ }
+
+ public interface AccessibilityViewCommand {
+ method public boolean perform(android.view.View, androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments?);
+ }
+
+ public abstract static class AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.CommandArguments();
+ }
+
+ public static final class AccessibilityViewCommand.MoveAtGranularityArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveAtGranularityArguments();
+ method public boolean getExtendSelection();
+ method public int getGranularity();
+ }
+
+ public static final class AccessibilityViewCommand.MoveHtmlArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveHtmlArguments();
+ method public String? getHTMLElement();
+ }
+
+ public static final class AccessibilityViewCommand.MoveWindowArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveWindowArguments();
+ method public int getX();
+ method public int getY();
+ }
+
+ public static final class AccessibilityViewCommand.ScrollToPositionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.ScrollToPositionArguments();
+ method public int getColumn();
+ method public int getRow();
+ }
+
+ public static final class AccessibilityViewCommand.SetProgressArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetProgressArguments();
+ method public float getProgress();
+ }
+
+ public static final class AccessibilityViewCommand.SetSelectionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetSelectionArguments();
+ method public int getEnd();
+ method public int getStart();
+ }
+
+ public static final class AccessibilityViewCommand.SetTextArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetTextArguments();
+ method public CharSequence? getText();
+ }
+
+ public class AccessibilityWindowInfoCompat {
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getAnchor();
+ method public void getBoundsInScreen(android.graphics.Rect);
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
+ method public int getChildCount();
+ method public int getDisplayId();
+ method public int getId();
+ method public int getLayer();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
+ method public void getRegionInScreen(android.graphics.Region);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
+ method public CharSequence? getTitle();
+ method public int getType();
+ method public boolean isAccessibilityFocused();
+ method public boolean isActive();
+ method public boolean isFocused();
+ method public boolean isInPictureInPictureMode();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
+ method @Deprecated public void recycle();
+ method public android.view.accessibility.AccessibilityWindowInfo? unwrap();
+ field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+ field public static final int TYPE_APPLICATION = 1; // 0x1
+ field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+ field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+ field public static final int TYPE_SYSTEM = 3; // 0x3
+ }
+
+}
+
+package androidx.core.view.animation {
+
+ public final class PathInterpolatorCompat {
+ method public static android.view.animation.Interpolator create(android.graphics.Path);
+ method public static android.view.animation.Interpolator create(float, float);
+ method public static android.view.animation.Interpolator create(float, float, float, float);
+ }
+
+}
+
+package androidx.core.view.inputmethod {
+
+ public final class EditorInfoCompat {
+ ctor @Deprecated public EditorInfoCompat();
+ method public static String![] getContentMimeTypes(android.view.inputmethod.EditorInfo);
+ method public static CharSequence? getInitialSelectedText(android.view.inputmethod.EditorInfo, int);
+ method public static CharSequence? getInitialTextAfterCursor(android.view.inputmethod.EditorInfo, int, int);
+ method public static CharSequence? getInitialTextBeforeCursor(android.view.inputmethod.EditorInfo, int, int);
+ method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, String![]?);
+ method public static void setInitialSurroundingSubText(android.view.inputmethod.EditorInfo, CharSequence, int);
+ method public static void setInitialSurroundingText(android.view.inputmethod.EditorInfo, CharSequence);
+ field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
+ field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
+ }
+
+ public final class InputConnectionCompat {
+ ctor @Deprecated public InputConnectionCompat();
+ method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
+ method @Deprecated public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
+ method public static android.view.inputmethod.InputConnection createWrapper(android.view.View, android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+ field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
+ }
+
+ public static interface InputConnectionCompat.OnCommitContentListener {
+ method public boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
+ }
+
+ public final class InputContentInfoCompat {
+ ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri?);
+ method public android.net.Uri getContentUri();
+ method public android.content.ClipDescription getDescription();
+ method public android.net.Uri? getLinkUri();
+ method public void releasePermission();
+ method public void requestPermission();
+ method public Object? unwrap();
+ method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
+ ctor public AutoScrollHelper(android.view.View);
+ method public abstract boolean canTargetScrollHorizontally(int);
+ method public abstract boolean canTargetScrollVertically(int);
+ method public boolean isEnabled();
+ method public boolean isExclusive();
+ method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
+ method public abstract void scrollTargetBy(int, int);
+ method public androidx.core.widget.AutoScrollHelper setActivationDelay(int);
+ method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
+ method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
+ method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
+ method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRampDownDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRampUpDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRelativeEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRelativeVelocity(float, float);
+ field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
+ field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
+ field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
+ field public static final float NO_MAX = 3.4028235E38f;
+ field public static final float NO_MIN = 0.0f;
+ field public static final float RELATIVE_UNSPECIFIED = 0.0f;
+ }
+
+ public final class CheckedTextViewCompat {
+ method public static android.graphics.drawable.Drawable? getCheckMarkDrawable(android.widget.CheckedTextView);
+ method public static android.content.res.ColorStateList? getCheckMarkTintList(android.widget.CheckedTextView);
+ method public static android.graphics.PorterDuff.Mode? getCheckMarkTintMode(android.widget.CheckedTextView);
+ method public static void setCheckMarkTintList(android.widget.CheckedTextView, android.content.res.ColorStateList?);
+ method public static void setCheckMarkTintMode(android.widget.CheckedTextView, android.graphics.PorterDuff.Mode?);
+ }
+
+ public final class CompoundButtonCompat {
+ method public static android.graphics.drawable.Drawable? getButtonDrawable(android.widget.CompoundButton);
+ method public static android.content.res.ColorStateList? getButtonTintList(android.widget.CompoundButton);
+ method public static android.graphics.PorterDuff.Mode? getButtonTintMode(android.widget.CompoundButton);
+ method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList?);
+ method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode?);
+ }
+
+ public class ContentLoadingProgressBar extends android.widget.ProgressBar {
+ ctor public ContentLoadingProgressBar(android.content.Context);
+ ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
+ method public void hide();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void show();
+ }
+
+ public final class EdgeEffectCompat {
+ ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
+ method public static android.widget.EdgeEffect create(android.content.Context, android.util.AttributeSet?);
+ method @Deprecated public boolean draw(android.graphics.Canvas!);
+ method @Deprecated public void finish();
+ method public static float getDistance(android.widget.EdgeEffect);
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean onAbsorb(int);
+ method @Deprecated public boolean onPull(float);
+ method @Deprecated public boolean onPull(float, float);
+ method public static void onPull(android.widget.EdgeEffect, float, float);
+ method public static float onPullDistance(android.widget.EdgeEffect, float, float);
+ method @Deprecated public boolean onRelease();
+ method @Deprecated public void setSize(int, int);
+ }
+
+ public class ImageViewCompat {
+ method public static android.content.res.ColorStateList? getImageTintList(android.widget.ImageView);
+ method public static android.graphics.PorterDuff.Mode? getImageTintMode(android.widget.ImageView);
+ method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList?);
+ method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode?);
+ }
+
+ public final class ListPopupWindowCompat {
+ method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
+ method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+ }
+
+ public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
+ ctor public ListViewAutoScrollHelper(android.widget.ListView);
+ method public boolean canTargetScrollHorizontally(int);
+ method public boolean canTargetScrollVertically(int);
+ method public void scrollTargetBy(int, int);
+ }
+
+ public final class ListViewCompat {
+ method public static boolean canScrollList(android.widget.ListView, int);
+ method public static void scrollListBy(android.widget.ListView, int);
+ }
+
+ public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
+ ctor public NestedScrollView(android.content.Context);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?, int);
+ method public boolean arrowScroll(int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
+ method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fling(int);
+ method public boolean fullScroll(int);
+ method public int getMaxScrollAmount();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isFillViewport();
+ method public boolean isSmoothScrollingEnabled();
+ method public void onAttachedToWindow();
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ method public boolean pageScroll(int);
+ method public void setFillViewport(boolean);
+ method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener?);
+ method public void setSmoothScrollingEnabled(boolean);
+ method public final void smoothScrollBy(int, int);
+ method public final void smoothScrollBy(int, int, int);
+ method public final void smoothScrollTo(int, int);
+ method public final void smoothScrollTo(int, int, int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public static interface NestedScrollView.OnScrollChangeListener {
+ method public void onScrollChange(androidx.core.widget.NestedScrollView, int, int, int, int);
+ }
+
+ public final class PopupMenuCompat {
+ method public static android.view.View.OnTouchListener? getDragToOpenListener(Object);
+ }
+
+ public final class PopupWindowCompat {
+ method public static boolean getOverlapAnchor(android.widget.PopupWindow);
+ method public static int getWindowLayoutType(android.widget.PopupWindow);
+ method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
+ method public static void setWindowLayoutType(android.widget.PopupWindow, int);
+ method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
+ }
+
+ @Deprecated public final class ScrollerCompat {
+ method @Deprecated public void abortAnimation();
+ method @Deprecated public boolean computeScrollOffset();
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
+ method @Deprecated public float getCurrVelocity();
+ method @Deprecated public int getCurrX();
+ method @Deprecated public int getCurrY();
+ method @Deprecated public int getFinalX();
+ method @Deprecated public int getFinalY();
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean isOverScrolled();
+ method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
+ method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
+ method @Deprecated public boolean springBack(int, int, int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int, int);
+ }
+
+ public final class TextViewCompat {
+ method public static int getAutoSizeMaxTextSize(android.widget.TextView);
+ method public static int getAutoSizeMinTextSize(android.widget.TextView);
+ method public static int getAutoSizeStepGranularity(android.widget.TextView);
+ method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
+ method public static int getAutoSizeTextType(android.widget.TextView);
+ method public static android.content.res.ColorStateList? getCompoundDrawableTintList(android.widget.TextView);
+ method public static android.graphics.PorterDuff.Mode? getCompoundDrawableTintMode(android.widget.TextView);
+ method public static android.graphics.drawable.Drawable![] getCompoundDrawablesRelative(android.widget.TextView);
+ method public static int getFirstBaselineToTopHeight(android.widget.TextView);
+ method public static int getLastBaselineToBottomHeight(android.widget.TextView);
+ method public static int getMaxLines(android.widget.TextView);
+ method public static int getMinLines(android.widget.TextView);
+ method public static androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParams(android.widget.TextView);
+ method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
+ method public static void setCompoundDrawableTintList(android.widget.TextView, android.content.res.ColorStateList?);
+ method public static void setCompoundDrawableTintMode(android.widget.TextView, android.graphics.PorterDuff.Mode?);
+ method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+ method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
+ method public static void setFirstBaselineToTopHeight(android.widget.TextView, @IntRange(from=0) @Px int);
+ method public static void setLastBaselineToBottomHeight(android.widget.TextView, @IntRange(from=0) @Px int);
+ method public static void setLineHeight(android.widget.TextView, @IntRange(from=0) @Px int);
+ method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
+ method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
+ method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
+ field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+ field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
+ }
+
+ public interface TintableCompoundButton {
+ method public android.content.res.ColorStateList? getSupportButtonTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface TintableCompoundDrawablesView {
+ method public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+}
+
diff --git a/core/core/api/public_plus_experimental_1.10.0-beta01.txt b/core/core/api/public_plus_experimental_1.10.0-beta01.txt
new file mode 100644
index 0000000..2b431b6
--- /dev/null
+++ b/core/core/api/public_plus_experimental_1.10.0-beta01.txt
@@ -0,0 +1,3935 @@
+// Signature format: 4.0
+package androidx.core.accessibilityservice {
+
+ public final class AccessibilityServiceInfoCompat {
+ method public static String capabilityToString(int);
+ method public static String feedbackTypeToString(int);
+ method public static String? flagToString(int);
+ method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static String? loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
+ field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
+ field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+ field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+ field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+ field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+ field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+ field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+ field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+ field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+ }
+
+}
+
+package androidx.core.app {
+
+ public class ActivityCompat extends androidx.core.content.ContextCompat {
+ ctor protected ActivityCompat();
+ method public static void finishAffinity(android.app.Activity);
+ method public static void finishAfterTransition(android.app.Activity);
+ method public static android.net.Uri? getReferrer(android.app.Activity);
+ method @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
+ method public static boolean isLaunchedFromBubble(android.app.Activity);
+ method public static void postponeEnterTransition(android.app.Activity);
+ method public static void recreate(android.app.Activity);
+ method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
+ method public static void requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
+ method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setLocusContext(android.app.Activity, androidx.core.content.LocusIdCompat?, android.os.Bundle?);
+ method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, String);
+ method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle?);
+ method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+ method public static void startPostponedEnterTransition(android.app.Activity);
+ }
+
+ public static interface ActivityCompat.OnRequestPermissionsResultCallback {
+ method public void onRequestPermissionsResult(int, String![], int[]);
+ }
+
+ public static interface ActivityCompat.PermissionCompatDelegate {
+ method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
+ method public boolean requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ }
+
+ public final class ActivityManagerCompat {
+ method public static boolean isLowRamDevice(android.app.ActivityManager);
+ }
+
+ public class ActivityOptionsCompat {
+ ctor protected ActivityOptionsCompat();
+ method public android.graphics.Rect? getLaunchBounds();
+ method public static androidx.core.app.ActivityOptionsCompat makeBasic();
+ method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View!,java.lang.String!>!...);
+ method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
+ method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+ method public void requestUsageTimeReport(android.app.PendingIntent);
+ method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
+ method public android.os.Bundle? toBundle();
+ method public void update(androidx.core.app.ActivityOptionsCompat);
+ field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+ field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+ }
+
+ public final class AlarmManagerCompat {
+ method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
+ method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ }
+
+ @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
+ ctor public AppComponentFactory();
+ method public final android.app.Activity instantiateActivity(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Application instantiateApplication(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.ContentProvider instantiateProvider(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.BroadcastReceiver instantiateReceiver(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Service instantiateService(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ }
+
+ public class AppLaunchChecker {
+ ctor @Deprecated public AppLaunchChecker();
+ method public static boolean hasStartedFromLauncher(android.content.Context);
+ method public static void onActivityCreate(android.app.Activity);
+ }
+
+ public final class AppOpsManagerCompat {
+ method public static int checkOrNoteProxyOp(android.content.Context, int, String, String);
+ method public static int noteOp(android.content.Context, String, int, String);
+ method public static int noteOpNoThrow(android.content.Context, String, int, String);
+ method public static int noteProxyOp(android.content.Context, String, String);
+ method public static int noteProxyOpNoThrow(android.content.Context, String, String);
+ method public static String? permissionToOp(String);
+ field public static final int MODE_ALLOWED = 0; // 0x0
+ field public static final int MODE_DEFAULT = 3; // 0x3
+ field public static final int MODE_ERRORED = 2; // 0x2
+ field public static final int MODE_IGNORED = 1; // 0x1
+ }
+
+ public final class BundleCompat {
+ method public static android.os.IBinder? getBinder(android.os.Bundle, String?);
+ method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
+ }
+
+ public class DialogCompat {
+ method public static android.view.View requireViewById(android.app.Dialog, int);
+ }
+
+ public class FrameMetricsAggregator {
+ ctor public FrameMetricsAggregator();
+ ctor public FrameMetricsAggregator(int);
+ method public void add(android.app.Activity);
+ method public android.util.SparseIntArray![]? getMetrics();
+ method public android.util.SparseIntArray![]? remove(android.app.Activity);
+ method public android.util.SparseIntArray![]? reset();
+ method public android.util.SparseIntArray![]? stop();
+ field public static final int ANIMATION_DURATION = 256; // 0x100
+ field public static final int ANIMATION_INDEX = 8; // 0x8
+ field public static final int COMMAND_DURATION = 32; // 0x20
+ field public static final int COMMAND_INDEX = 5; // 0x5
+ field public static final int DELAY_DURATION = 128; // 0x80
+ field public static final int DELAY_INDEX = 7; // 0x7
+ field public static final int DRAW_DURATION = 8; // 0x8
+ field public static final int DRAW_INDEX = 3; // 0x3
+ field public static final int EVERY_DURATION = 511; // 0x1ff
+ field public static final int INPUT_DURATION = 2; // 0x2
+ field public static final int INPUT_INDEX = 1; // 0x1
+ field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
+ field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
+ field public static final int SWAP_DURATION = 64; // 0x40
+ field public static final int SWAP_INDEX = 6; // 0x6
+ field public static final int SYNC_DURATION = 16; // 0x10
+ field public static final int SYNC_INDEX = 4; // 0x4
+ field public static final int TOTAL_DURATION = 1; // 0x1
+ field public static final int TOTAL_INDEX = 0; // 0x0
+ }
+
+ @Deprecated public abstract class JobIntentService extends android.app.Service {
+ ctor @Deprecated public JobIntentService();
+ method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
+ method @Deprecated public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+ method @Deprecated public boolean isStopped();
+ method @Deprecated public android.os.IBinder! onBind(android.content.Intent);
+ method @Deprecated protected abstract void onHandleWork(android.content.Intent);
+ method @Deprecated public boolean onStopCurrentWork();
+ method @Deprecated public void setInterruptIfStopped(boolean);
+ }
+
+ public final class LocaleManagerCompat {
+ method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
+ }
+
+ public final class MultiWindowModeChangedInfo {
+ ctor public MultiWindowModeChangedInfo(boolean);
+ ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
+ method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
+ method public boolean isInMultiWindowMode();
+ }
+
+ public final class NavUtils {
+ method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static String? getParentActivityName(android.app.Activity);
+ method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void navigateUpFromSameTask(android.app.Activity);
+ method public static void navigateUpTo(android.app.Activity, android.content.Intent);
+ method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
+ field public static final String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+ }
+
+ public class NotificationChannelCompat {
+ method public boolean canBubble();
+ method public boolean canBypassDnd();
+ method public boolean canShowBadge();
+ method public android.media.AudioAttributes? getAudioAttributes();
+ method public String? getConversationId();
+ method public String? getDescription();
+ method public String? getGroup();
+ method public String getId();
+ method public int getImportance();
+ method public int getLightColor();
+ method public int getLockscreenVisibility();
+ method public CharSequence? getName();
+ method public String? getParentChannelId();
+ method public android.net.Uri? getSound();
+ method public long[]? getVibrationPattern();
+ method public boolean isImportantConversation();
+ method public boolean shouldShowLights();
+ method public boolean shouldVibrate();
+ method public androidx.core.app.NotificationChannelCompat.Builder toBuilder();
+ field public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
+ }
+
+ public static class NotificationChannelCompat.Builder {
+ ctor public NotificationChannelCompat.Builder(String, int);
+ method public androidx.core.app.NotificationChannelCompat build();
+ method public androidx.core.app.NotificationChannelCompat.Builder setConversationId(String, String);
+ method public androidx.core.app.NotificationChannelCompat.Builder setDescription(String?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setGroup(String?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setImportance(int);
+ method public androidx.core.app.NotificationChannelCompat.Builder setLightColor(int);
+ method public androidx.core.app.NotificationChannelCompat.Builder setLightsEnabled(boolean);
+ method public androidx.core.app.NotificationChannelCompat.Builder setName(CharSequence?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setShowBadge(boolean);
+ method public androidx.core.app.NotificationChannelCompat.Builder setSound(android.net.Uri?, android.media.AudioAttributes?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setVibrationEnabled(boolean);
+ method public androidx.core.app.NotificationChannelCompat.Builder setVibrationPattern(long[]?);
+ }
+
+ public class NotificationChannelGroupCompat {
+ method public java.util.List<androidx.core.app.NotificationChannelCompat!> getChannels();
+ method public String? getDescription();
+ method public String getId();
+ method public CharSequence? getName();
+ method public boolean isBlocked();
+ method public androidx.core.app.NotificationChannelGroupCompat.Builder toBuilder();
+ }
+
+ public static class NotificationChannelGroupCompat.Builder {
+ ctor public NotificationChannelGroupCompat.Builder(String);
+ method public androidx.core.app.NotificationChannelGroupCompat build();
+ method public androidx.core.app.NotificationChannelGroupCompat.Builder setDescription(String?);
+ method public androidx.core.app.NotificationChannelGroupCompat.Builder setName(CharSequence?);
+ }
+
+ public class NotificationCompat {
+ ctor @Deprecated public NotificationCompat();
+ method public static androidx.core.app.NotificationCompat.Action? getAction(android.app.Notification, int);
+ method public static int getActionCount(android.app.Notification);
+ method public static boolean getAllowSystemGeneratedContextualActions(android.app.Notification);
+ method public static boolean getAutoCancel(android.app.Notification);
+ method public static int getBadgeIconType(android.app.Notification);
+ method public static androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata(android.app.Notification);
+ method public static String? getCategory(android.app.Notification);
+ method public static String? getChannelId(android.app.Notification);
+ method public static int getColor(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getContentInfo(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getContentText(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getContentTitle(android.app.Notification);
+ method public static android.os.Bundle? getExtras(android.app.Notification);
+ method public static String? getGroup(android.app.Notification);
+ method public static int getGroupAlertBehavior(android.app.Notification);
+ method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
+ method public static boolean getLocalOnly(android.app.Notification);
+ method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
+ method public static boolean getOngoing(android.app.Notification);
+ method public static boolean getOnlyAlertOnce(android.app.Notification);
+ method public static java.util.List<androidx.core.app.Person!> getPeople(android.app.Notification);
+ method public static android.app.Notification? getPublicVersion(android.app.Notification);
+ method public static CharSequence? getSettingsText(android.app.Notification);
+ method public static String? getShortcutId(android.app.Notification);
+ method @RequiresApi(19) public static boolean getShowWhen(android.app.Notification);
+ method public static String? getSortKey(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getSubText(android.app.Notification);
+ method public static long getTimeoutAfter(android.app.Notification);
+ method @RequiresApi(19) public static boolean getUsesChronometer(android.app.Notification);
+ method public static int getVisibility(android.app.Notification);
+ method public static boolean isGroupSummary(android.app.Notification);
+ field public static final int BADGE_ICON_LARGE = 2; // 0x2
+ field public static final int BADGE_ICON_NONE = 0; // 0x0
+ field public static final int BADGE_ICON_SMALL = 1; // 0x1
+ field public static final String CATEGORY_ALARM = "alarm";
+ field public static final String CATEGORY_CALL = "call";
+ field public static final String CATEGORY_EMAIL = "email";
+ field public static final String CATEGORY_ERROR = "err";
+ field public static final String CATEGORY_EVENT = "event";
+ field public static final String CATEGORY_LOCATION_SHARING = "location_sharing";
+ field public static final String CATEGORY_MESSAGE = "msg";
+ field public static final String CATEGORY_MISSED_CALL = "missed_call";
+ field public static final String CATEGORY_NAVIGATION = "navigation";
+ field public static final String CATEGORY_PROGRESS = "progress";
+ field public static final String CATEGORY_PROMO = "promo";
+ field public static final String CATEGORY_RECOMMENDATION = "recommendation";
+ field public static final String CATEGORY_REMINDER = "reminder";
+ field public static final String CATEGORY_SERVICE = "service";
+ field public static final String CATEGORY_SOCIAL = "social";
+ field public static final String CATEGORY_STATUS = "status";
+ field public static final String CATEGORY_STOPWATCH = "stopwatch";
+ field public static final String CATEGORY_SYSTEM = "sys";
+ field public static final String CATEGORY_TRANSPORT = "transport";
+ field public static final String CATEGORY_WORKOUT = "workout";
+ field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
+ field public static final int DEFAULT_ALL = -1; // 0xffffffff
+ field public static final int DEFAULT_LIGHTS = 4; // 0x4
+ field public static final int DEFAULT_SOUND = 1; // 0x1
+ field public static final int DEFAULT_VIBRATE = 2; // 0x2
+ field public static final String EXTRA_ANSWER_COLOR = "android.answerColor";
+ field public static final String EXTRA_ANSWER_INTENT = "android.answerIntent";
+ field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+ field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+ field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CALL_IS_VIDEO = "android.callIsVideo";
+ field public static final String EXTRA_CALL_PERSON = "android.callPerson";
+ field public static final String EXTRA_CALL_PERSON_COMPAT = "android.callPersonCompat";
+ field public static final String EXTRA_CALL_TYPE = "android.callType";
+ field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+ field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
+ field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
+ field public static final String EXTRA_COLORIZED = "android.colorized";
+ field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+ field public static final String EXTRA_COMPAT_TEMPLATE = "androidx.core.app.extra.COMPAT_TEMPLATE";
+ field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+ field public static final String EXTRA_DECLINE_COLOR = "android.declineColor";
+ field public static final String EXTRA_DECLINE_INTENT = "android.declineIntent";
+ field public static final String EXTRA_HANG_UP_INTENT = "android.hangUpIntent";
+ field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
+ field public static final String EXTRA_HISTORIC_MESSAGES = "android.messages.historic";
+ field public static final String EXTRA_INFO_TEXT = "android.infoText";
+ field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
+ field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
+ field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+ field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
+ field public static final String EXTRA_MESSAGES = "android.messages";
+ field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+ field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
+ field @Deprecated public static final String EXTRA_PEOPLE = "android.people";
+ field public static final String EXTRA_PEOPLE_LIST = "android.people.list";
+ field public static final String EXTRA_PICTURE = "android.picture";
+ field public static final String EXTRA_PICTURE_CONTENT_DESCRIPTION = "android.pictureContentDescription";
+ field public static final String EXTRA_PICTURE_ICON = "android.pictureIcon";
+ field public static final String EXTRA_PROGRESS = "android.progress";
+ field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+ field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
+ field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+ field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+ field public static final String EXTRA_SHOW_BIG_PICTURE_WHEN_COLLAPSED = "android.showBigPictureWhenCollapsed";
+ field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+ field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
+ field public static final String EXTRA_SMALL_ICON = "android.icon";
+ field public static final String EXTRA_SUB_TEXT = "android.subText";
+ field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
+ field public static final String EXTRA_TEMPLATE = "android.template";
+ field public static final String EXTRA_TEXT = "android.text";
+ field public static final String EXTRA_TEXT_LINES = "android.textLines";
+ field public static final String EXTRA_TITLE = "android.title";
+ field public static final String EXTRA_TITLE_BIG = "android.title.big";
+ field public static final String EXTRA_VERIFICATION_ICON = "android.verificationIcon";
+ field public static final String EXTRA_VERIFICATION_ICON_COMPAT = "android.verificationIconCompat";
+ field public static final String EXTRA_VERIFICATION_TEXT = "android.verificationText";
+ field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+ field public static final int FLAG_BUBBLE = 4096; // 0x1000
+ field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+ field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+ field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
+ field public static final int FLAG_INSISTENT = 4; // 0x4
+ field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+ field public static final int FLAG_NO_CLEAR = 32; // 0x20
+ field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+ field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+ field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int FOREGROUND_SERVICE_DEFAULT = 0; // 0x0
+ field public static final int FOREGROUND_SERVICE_DEFERRED = 2; // 0x2
+ field public static final int FOREGROUND_SERVICE_IMMEDIATE = 1; // 0x1
+ field public static final int GROUP_ALERT_ALL = 0; // 0x0
+ field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+ field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
+ field public static final String GROUP_KEY_SILENT = "silent";
+ field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
+ field public static final int PRIORITY_DEFAULT = 0; // 0x0
+ field public static final int PRIORITY_HIGH = 1; // 0x1
+ field public static final int PRIORITY_LOW = -1; // 0xffffffff
+ field public static final int PRIORITY_MAX = 2; // 0x2
+ field public static final int PRIORITY_MIN = -2; // 0xfffffffe
+ field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+ field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+ field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+ field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+ }
+
+ public static class NotificationCompat.Action {
+ ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ method public android.app.PendingIntent? getActionIntent();
+ method public boolean getAllowGeneratedReplies();
+ method public androidx.core.app.RemoteInput![]? getDataOnlyRemoteInputs();
+ method public android.os.Bundle getExtras();
+ method @Deprecated public int getIcon();
+ method public androidx.core.graphics.drawable.IconCompat? getIconCompat();
+ method public androidx.core.app.RemoteInput![]? getRemoteInputs();
+ method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
+ method public boolean getShowsUserInterface();
+ method public CharSequence? getTitle();
+ method public boolean isAuthenticationRequired();
+ method public boolean isContextual();
+ field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
+ field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
+ field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
+ field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
+ field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
+ field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
+ field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
+ field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
+ field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
+ field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
+ field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
+ field public android.app.PendingIntent? actionIntent;
+ field @Deprecated public int icon;
+ field public CharSequence! title;
+ }
+
+ public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action.Builder(int, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
+ method public androidx.core.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle?);
+ method public androidx.core.app.NotificationCompat.Action.Builder addRemoteInput(androidx.core.app.RemoteInput?);
+ method public androidx.core.app.NotificationCompat.Action build();
+ method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Extender);
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setAuthenticationRequired(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setContextual(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
+ method public androidx.core.app.NotificationCompat.Action.Builder setShowsUserInterface(boolean);
+ }
+
+ public static interface NotificationCompat.Action.Extender {
+ method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
+ }
+
+ public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
+ ctor public NotificationCompat.Action.WearableExtender();
+ ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender clone();
+ method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
+ method @Deprecated public CharSequence? getCancelLabel();
+ method @Deprecated public CharSequence? getConfirmLabel();
+ method public boolean getHintDisplayActionInline();
+ method public boolean getHintLaunchesActivity();
+ method @Deprecated public CharSequence? getInProgressLabel();
+ method public boolean isAvailableOffline();
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setCancelLabel(CharSequence?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setConfirmLabel(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setInProgressLabel(CharSequence?);
+ }
+
+ public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigPictureStyle();
+ ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap?);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.drawable.Icon?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap?);
+ method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.drawable.Icon?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle setBigContentTitle(CharSequence?);
+ method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle setContentDescription(CharSequence?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle setSummaryText(CharSequence?);
+ method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle showBigPictureWhenCollapsed(boolean);
+ }
+
+ public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigTextStyle();
+ ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public androidx.core.app.NotificationCompat.BigTextStyle bigText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.BigTextStyle setBigContentTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.BigTextStyle setSummaryText(CharSequence?);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata {
+ method public static androidx.core.app.NotificationCompat.BubbleMetadata? fromPlatform(android.app.Notification.BubbleMetadata?);
+ method public boolean getAutoExpandBubble();
+ method public android.app.PendingIntent? getDeleteIntent();
+ method @Dimension(unit=androidx.annotation.Dimension.DP) public int getDesiredHeight();
+ method @DimenRes public int getDesiredHeightResId();
+ method public androidx.core.graphics.drawable.IconCompat? getIcon();
+ method public android.app.PendingIntent? getIntent();
+ method public String? getShortcutId();
+ method public boolean isNotificationSuppressed();
+ method public static android.app.Notification.BubbleMetadata? toPlatform(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata.Builder {
+ ctor @Deprecated public NotificationCompat.BubbleMetadata.Builder();
+ ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
+ ctor public NotificationCompat.BubbleMetadata.Builder(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata build();
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIntent(android.app.PendingIntent);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setSuppressNotification(boolean);
+ }
+
+ public static class NotificationCompat.Builder {
+ ctor @RequiresApi(19) public NotificationCompat.Builder(android.content.Context, android.app.Notification);
+ ctor public NotificationCompat.Builder(android.content.Context, String);
+ ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
+ method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.Builder addAction(androidx.core.app.NotificationCompat.Action?);
+ method public androidx.core.app.NotificationCompat.Builder addExtras(android.os.Bundle?);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(androidx.core.app.NotificationCompat.Action?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
+ method public androidx.core.app.NotificationCompat.Builder addPerson(androidx.core.app.Person?);
+ method public android.app.Notification build();
+ method public androidx.core.app.NotificationCompat.Builder clearActions();
+ method public androidx.core.app.NotificationCompat.Builder clearInvisibleActions();
+ method public androidx.core.app.NotificationCompat.Builder clearPeople();
+ method public android.widget.RemoteViews? createBigContentView();
+ method public android.widget.RemoteViews? createContentView();
+ method public android.widget.RemoteViews? createHeadsUpContentView();
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Extender);
+ method public android.os.Bundle getExtras();
+ method @Deprecated public android.app.Notification getNotification();
+ method protected static CharSequence? limitCharSequenceLength(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setAllowSystemGeneratedContextualActions(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setAutoCancel(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setBadgeIconType(int);
+ method public androidx.core.app.NotificationCompat.Builder setBubbleMetadata(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ method public androidx.core.app.NotificationCompat.Builder setCategory(String?);
+ method public androidx.core.app.NotificationCompat.Builder setChannelId(String);
+ method @RequiresApi(24) public androidx.core.app.NotificationCompat.Builder setChronometerCountDown(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.Builder setColorized(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setContent(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setContentInfo(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.Builder setContentText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setContentTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setDefaults(int);
+ method public androidx.core.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.Builder setExtras(android.os.Bundle?);
+ method public androidx.core.app.NotificationCompat.Builder setForegroundServiceBehavior(int);
+ method public androidx.core.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent?, boolean);
+ method public androidx.core.app.NotificationCompat.Builder setGroup(String?);
+ method public androidx.core.app.NotificationCompat.Builder setGroupAlertBehavior(int);
+ method public androidx.core.app.NotificationCompat.Builder setGroupSummary(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap?);
+ method public androidx.core.app.NotificationCompat.Builder setLights(@ColorInt int, int, int);
+ method public androidx.core.app.NotificationCompat.Builder setLocalOnly(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder setNotificationSilent();
+ method public androidx.core.app.NotificationCompat.Builder setNumber(int);
+ method public androidx.core.app.NotificationCompat.Builder setOngoing(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setPriority(int);
+ method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
+ method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
+ method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
+ method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
+ method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
+ method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setSilent(boolean);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.Builder setSmallIcon(androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int);
+ method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int, int);
+ method public androidx.core.app.NotificationCompat.Builder setSortKey(String?);
+ method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?);
+ method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?, int);
+ method public androidx.core.app.NotificationCompat.Builder setStyle(androidx.core.app.NotificationCompat.Style?);
+ method public androidx.core.app.NotificationCompat.Builder setSubText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?, android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setTimeoutAfter(long);
+ method public androidx.core.app.NotificationCompat.Builder setUsesChronometer(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setVibrate(long[]?);
+ method public androidx.core.app.NotificationCompat.Builder setVisibility(int);
+ method public androidx.core.app.NotificationCompat.Builder setWhen(long);
+ field @Deprecated public java.util.ArrayList<java.lang.String!>! mPeople;
+ }
+
+ public static class NotificationCompat.CallStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.CallStyle();
+ ctor public NotificationCompat.CallStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public static androidx.core.app.NotificationCompat.CallStyle forIncomingCall(androidx.core.app.Person, android.app.PendingIntent, android.app.PendingIntent);
+ method public static androidx.core.app.NotificationCompat.CallStyle forOngoingCall(androidx.core.app.Person, android.app.PendingIntent);
+ method public static androidx.core.app.NotificationCompat.CallStyle forScreeningCall(androidx.core.app.Person, android.app.PendingIntent, android.app.PendingIntent);
+ method public androidx.core.app.NotificationCompat.CallStyle setAnswerButtonColorHint(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CallStyle setDeclineButtonColorHint(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CallStyle setIsVideo(boolean);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.drawable.Icon?);
+ method public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.Bitmap?);
+ method public androidx.core.app.NotificationCompat.CallStyle setVerificationText(CharSequence?);
+ field public static final int CALL_TYPE_INCOMING = 1; // 0x1
+ field public static final int CALL_TYPE_ONGOING = 2; // 0x2
+ field public static final int CALL_TYPE_SCREENING = 3; // 0x3
+ field public static final int CALL_TYPE_UNKNOWN = 0; // 0x0
+ }
+
+ public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.CarExtender();
+ ctor public NotificationCompat.CarExtender(android.app.Notification);
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+ method @ColorInt public int getColor();
+ method public android.graphics.Bitmap? getLargeIcon();
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation? getUnreadConversation();
+ method public androidx.core.app.NotificationCompat.CarExtender setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap?);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation?);
+ }
+
+ @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation {
+ method @Deprecated public long getLatestTimestamp();
+ method @Deprecated public String![]? getMessages();
+ method @Deprecated public String? getParticipant();
+ method @Deprecated public String![]? getParticipants();
+ method @Deprecated public android.app.PendingIntent? getReadPendingIntent();
+ method @Deprecated public androidx.core.app.RemoteInput? getRemoteInput();
+ method @Deprecated public android.app.PendingIntent? getReplyPendingIntent();
+ }
+
+ @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
+ ctor @Deprecated public NotificationCompat.CarExtender.UnreadConversation.Builder(String);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(String?);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation build();
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent?);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent?, androidx.core.app.RemoteInput?);
+ }
+
+ public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.DecoratedCustomViewStyle();
+ }
+
+ public static interface NotificationCompat.Extender {
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+ }
+
+ public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.InboxStyle();
+ ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public androidx.core.app.NotificationCompat.InboxStyle addLine(CharSequence?);
+ method public androidx.core.app.NotificationCompat.InboxStyle setBigContentTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.InboxStyle setSummaryText(CharSequence?);
+ }
+
+ public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
+ ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+ method public void addCompatExtras(android.os.Bundle);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
+ method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
+ method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
+ method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
+ method public androidx.core.app.Person getUser();
+ method @Deprecated public CharSequence? getUserDisplayName();
+ method public boolean isGroupConversation();
+ method public androidx.core.app.NotificationCompat.MessagingStyle setConversationTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle setGroupConversation(boolean);
+ field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+ }
+
+ public static final class NotificationCompat.MessagingStyle.Message {
+ ctor public NotificationCompat.MessagingStyle.Message(CharSequence?, long, androidx.core.app.Person?);
+ ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence?, long, CharSequence?);
+ method public String? getDataMimeType();
+ method public android.net.Uri? getDataUri();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.Person? getPerson();
+ method @Deprecated public CharSequence? getSender();
+ method public CharSequence? getText();
+ method public long getTimestamp();
+ method public androidx.core.app.NotificationCompat.MessagingStyle.Message setData(String?, android.net.Uri?);
+ }
+
+ public abstract static class NotificationCompat.Style {
+ ctor public NotificationCompat.Style();
+ method public android.app.Notification? build();
+ method public void setBuilder(androidx.core.app.NotificationCompat.Builder?);
+ }
+
+ public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.WearableExtender();
+ ctor public NotificationCompat.WearableExtender(android.app.Notification);
+ method public androidx.core.app.NotificationCompat.WearableExtender addAction(androidx.core.app.NotificationCompat.Action);
+ method public androidx.core.app.NotificationCompat.WearableExtender addActions(java.util.List<androidx.core.app.NotificationCompat.Action!>);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification!>);
+ method public androidx.core.app.NotificationCompat.WearableExtender clearActions();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender clearPages();
+ method public androidx.core.app.NotificationCompat.WearableExtender clone();
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+ method public java.util.List<androidx.core.app.NotificationCompat.Action!> getActions();
+ method @Deprecated public android.graphics.Bitmap? getBackground();
+ method public String? getBridgeTag();
+ method public int getContentAction();
+ method @Deprecated public int getContentIcon();
+ method @Deprecated public int getContentIconGravity();
+ method public boolean getContentIntentAvailableOffline();
+ method @Deprecated public int getCustomContentHeight();
+ method @Deprecated public int getCustomSizePreset();
+ method public String? getDismissalId();
+ method @Deprecated public android.app.PendingIntent? getDisplayIntent();
+ method @Deprecated public int getGravity();
+ method @Deprecated public boolean getHintAmbientBigPicture();
+ method @Deprecated public boolean getHintAvoidBackgroundClipping();
+ method public boolean getHintContentIntentLaunchesActivity();
+ method @Deprecated public boolean getHintHideIcon();
+ method @Deprecated public int getHintScreenTimeout();
+ method @Deprecated public boolean getHintShowBackgroundOnly();
+ method @Deprecated public java.util.List<android.app.Notification!> getPages();
+ method public boolean getStartScrollBottom();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap?);
+ method public androidx.core.app.NotificationCompat.WearableExtender setBridgeTag(String?);
+ method public androidx.core.app.NotificationCompat.WearableExtender setContentAction(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIcon(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIconGravity(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender setDismissalId(String?);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent?);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setGravity(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
+ field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+ field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+ field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
+ field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
+ field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
+ field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
+ field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
+ field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
+ field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+ }
+
+ public final class NotificationCompatExtras {
+ field public static final String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+ field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
+ field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+ field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+ field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+ field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
+ }
+
+ public abstract class NotificationCompatSideChannelService extends android.app.Service {
+ ctor public NotificationCompatSideChannelService();
+ method public abstract void cancel(String!, int, String!);
+ method public abstract void cancelAll(String!);
+ method public abstract void notify(String!, int, String!, android.app.Notification!);
+ method public android.os.IBinder! onBind(android.content.Intent!);
+ }
+
+ public final class NotificationManagerCompat {
+ method public boolean areNotificationsEnabled();
+ method public void cancel(int);
+ method public void cancel(String?, int);
+ method public void cancelAll();
+ method public void createNotificationChannel(android.app.NotificationChannel);
+ method public void createNotificationChannel(androidx.core.app.NotificationChannelCompat);
+ method public void createNotificationChannelGroup(android.app.NotificationChannelGroup);
+ method public void createNotificationChannelGroup(androidx.core.app.NotificationChannelGroupCompat);
+ method public void createNotificationChannelGroups(java.util.List<android.app.NotificationChannelGroup!>);
+ method public void createNotificationChannelGroupsCompat(java.util.List<androidx.core.app.NotificationChannelGroupCompat!>);
+ method public void createNotificationChannels(java.util.List<android.app.NotificationChannel!>);
+ method public void createNotificationChannelsCompat(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.core.app.NotificationManagerCompat from(android.content.Context);
+ method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
+ method public int getImportance();
+ method public android.app.NotificationChannel? getNotificationChannel(String);
+ method public android.app.NotificationChannel? getNotificationChannel(String, String);
+ method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String);
+ method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String, String);
+ method public android.app.NotificationChannelGroup? getNotificationChannelGroup(String);
+ method public androidx.core.app.NotificationChannelGroupCompat? getNotificationChannelGroupCompat(String);
+ method public java.util.List<android.app.NotificationChannelGroup!> getNotificationChannelGroups();
+ method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroupsCompat();
+ method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
+ method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannelsCompat();
+ method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(int, android.app.Notification);
+ method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(String?, int, android.app.Notification);
+ field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+ field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
+ field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+ field public static final int IMPORTANCE_HIGH = 4; // 0x4
+ field public static final int IMPORTANCE_LOW = 2; // 0x2
+ field public static final int IMPORTANCE_MAX = 5; // 0x5
+ field public static final int IMPORTANCE_MIN = 1; // 0x1
+ field public static final int IMPORTANCE_NONE = 0; // 0x0
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+ }
+
+ public interface OnMultiWindowModeChangedProvider {
+ method public void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ method public void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ }
+
+ public interface OnNewIntentProvider {
+ method public void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ method public void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ }
+
+ public interface OnPictureInPictureModeChangedProvider {
+ method public void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ method public void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ }
+
+ public final class PendingIntentCompat {
+ method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, android.os.Bundle, boolean);
+ method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, boolean);
+ method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, boolean);
+ method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, android.os.Bundle, boolean);
+ method public static android.app.PendingIntent getBroadcast(android.content.Context, int, android.content.Intent, int, boolean);
+ method @RequiresApi(26) public static android.app.PendingIntent getForegroundService(android.content.Context, int, android.content.Intent, int, boolean);
+ method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int, boolean);
+ }
+
+ public class Person {
+ method public static androidx.core.app.Person fromBundle(android.os.Bundle);
+ method public androidx.core.graphics.drawable.IconCompat? getIcon();
+ method public String? getKey();
+ method public CharSequence? getName();
+ method public String? getUri();
+ method public boolean isBot();
+ method public boolean isImportant();
+ method public androidx.core.app.Person.Builder toBuilder();
+ method public android.os.Bundle toBundle();
+ }
+
+ public static class Person.Builder {
+ ctor public Person.Builder();
+ method public androidx.core.app.Person build();
+ method public androidx.core.app.Person.Builder setBot(boolean);
+ method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
+ method public androidx.core.app.Person.Builder setImportant(boolean);
+ method public androidx.core.app.Person.Builder setKey(String?);
+ method public androidx.core.app.Person.Builder setName(CharSequence?);
+ method public androidx.core.app.Person.Builder setUri(String?);
+ }
+
+ public final class PictureInPictureModeChangedInfo {
+ ctor public PictureInPictureModeChangedInfo(boolean);
+ ctor @RequiresApi(26) public PictureInPictureModeChangedInfo(boolean, android.content.res.Configuration);
+ method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
+ method public boolean isInPictureInPictureMode();
+ }
+
+ public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
+ ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
+ ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
+ method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
+ method public android.app.PendingIntent getActionIntent();
+ method public CharSequence getContentDescription();
+ method public androidx.core.graphics.drawable.IconCompat getIcon();
+ method public CharSequence getTitle();
+ method public boolean isEnabled();
+ method public void setEnabled(boolean);
+ method public void setShouldShowIcon(boolean);
+ method public boolean shouldShowIcon();
+ method @RequiresApi(26) public android.app.RemoteAction toRemoteAction();
+ }
+
+ public final class RemoteInput {
+ method public static void addDataResultToIntent(androidx.core.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String!,android.net.Uri!>);
+ method public static void addResultsToIntent(androidx.core.app.RemoteInput![], android.content.Intent, android.os.Bundle);
+ method public boolean getAllowFreeFormInput();
+ method public java.util.Set<java.lang.String!>? getAllowedDataTypes();
+ method public CharSequence![]? getChoices();
+ method public static java.util.Map<java.lang.String!,android.net.Uri!>? getDataResultsFromIntent(android.content.Intent, String);
+ method public int getEditChoicesBeforeSending();
+ method public android.os.Bundle getExtras();
+ method public CharSequence? getLabel();
+ method public String getResultKey();
+ method public static android.os.Bundle? getResultsFromIntent(android.content.Intent);
+ method public static int getResultsSource(android.content.Intent);
+ method public boolean isDataOnly();
+ method public static void setResultsSource(android.content.Intent, int);
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
+ field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+ field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+ field public static final int SOURCE_CHOICE = 1; // 0x1
+ field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
+ }
+
+ public static final class RemoteInput.Builder {
+ ctor public RemoteInput.Builder(String);
+ method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
+ method public androidx.core.app.RemoteInput build();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
+ method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+ method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence![]?);
+ method public androidx.core.app.RemoteInput.Builder setEditChoicesBeforeSending(int);
+ method public androidx.core.app.RemoteInput.Builder setLabel(CharSequence?);
+ }
+
+ public final class ServiceCompat {
+ method public static void stopForeground(android.app.Service, int);
+ field public static final int START_STICKY = 1; // 0x1
+ field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+ field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
+ }
+
+ public final class ShareCompat {
+ method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
+ method @Deprecated public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
+ method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
+ method public static String? getCallingPackage(android.app.Activity);
+ field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_ACTIVITY_INTEROP = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
+ field public static final String EXTRA_CALLING_PACKAGE_INTEROP = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
+ }
+
+ public static class ShareCompat.IntentBuilder {
+ ctor public ShareCompat.IntentBuilder(android.content.Context);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
+ method public android.content.Intent createChooserIntent();
+ method @Deprecated public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
+ method public android.content.Intent getIntent();
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setHtmlText(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setStream(android.net.Uri?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setSubject(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setText(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setType(String?);
+ method public void startChooser();
+ }
+
+ public static class ShareCompat.IntentReader {
+ ctor public ShareCompat.IntentReader(android.app.Activity);
+ ctor public ShareCompat.IntentReader(android.content.Context, android.content.Intent);
+ method @Deprecated public static androidx.core.app.ShareCompat.IntentReader from(android.app.Activity);
+ method public android.content.ComponentName? getCallingActivity();
+ method public android.graphics.drawable.Drawable? getCallingActivityIcon();
+ method public android.graphics.drawable.Drawable? getCallingApplicationIcon();
+ method public CharSequence? getCallingApplicationLabel();
+ method public String? getCallingPackage();
+ method public String![]? getEmailBcc();
+ method public String![]? getEmailCc();
+ method public String![]? getEmailTo();
+ method public String? getHtmlText();
+ method public android.net.Uri? getStream();
+ method public android.net.Uri? getStream(int);
+ method public int getStreamCount();
+ method public String? getSubject();
+ method public CharSequence? getText();
+ method public String? getType();
+ method public boolean isMultipleShare();
+ method public boolean isShareIntent();
+ method public boolean isSingleShare();
+ }
+
+ public abstract class SharedElementCallback {
+ ctor public SharedElementCallback();
+ method public android.os.Parcelable! onCaptureSharedElementSnapshot(android.view.View!, android.graphics.Matrix!, android.graphics.RectF!);
+ method public android.view.View! onCreateSnapshotView(android.content.Context!, android.os.Parcelable!);
+ method public void onMapSharedElements(java.util.List<java.lang.String!>!, java.util.Map<java.lang.String!,android.view.View!>!);
+ method public void onRejectSharedElements(java.util.List<android.view.View!>!);
+ method public void onSharedElementEnd(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementStart(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementsArrived(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
+ }
+
+ public static interface SharedElementCallback.OnSharedElementsReadyListener {
+ method public void onSharedElementsReady();
+ }
+
+ public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
+ method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
+ method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
+ method public androidx.core.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+ method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
+ method public android.content.Intent? editIntentAt(int);
+ method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
+ method @Deprecated public android.content.Intent! getIntent(int);
+ method public int getIntentCount();
+ method public android.content.Intent![] getIntents();
+ method public android.app.PendingIntent? getPendingIntent(int, int);
+ method public android.app.PendingIntent? getPendingIntent(int, int, android.os.Bundle?);
+ method @Deprecated public java.util.Iterator<android.content.Intent!> iterator();
+ method public void startActivities();
+ method public void startActivities(android.os.Bundle?);
+ }
+
+ public static interface TaskStackBuilder.SupportParentable {
+ method public android.content.Intent? getSupportParentActivityIntent();
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentProviderCompat {
+ method public static android.content.Context requireContext(android.content.ContentProvider);
+ }
+
+ public final class ContentResolverCompat {
+ method public static android.database.Cursor? query(android.content.ContentResolver, android.net.Uri, String![]?, String?, String![]?, String?, androidx.core.os.CancellationSignal?);
+ }
+
+ public class ContextCompat {
+ ctor protected ContextCompat();
+ method public static int checkSelfPermission(android.content.Context, String);
+ method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
+ method public static String? getAttributionTag(android.content.Context);
+ method public static java.io.File getCodeCacheDir(android.content.Context);
+ method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
+ method public static java.io.File? getDataDir(android.content.Context);
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
+ method public static java.io.File![] getExternalCacheDirs(android.content.Context);
+ method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
+ method public static java.util.concurrent.Executor getMainExecutor(android.content.Context);
+ method public static java.io.File? getNoBackupFilesDir(android.content.Context);
+ method public static java.io.File![] getObbDirs(android.content.Context);
+ method public static <T> T? getSystemService(android.content.Context, Class<T!>);
+ method public static String? getSystemServiceName(android.content.Context, Class<?>);
+ method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, int);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, String?, android.os.Handler?, int);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![]);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
+ method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
+ method public static void startForegroundService(android.content.Context, android.content.Intent);
+ field public static final int RECEIVER_EXPORTED = 2; // 0x2
+ field public static final int RECEIVER_NOT_EXPORTED = 4; // 0x4
+ field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
+ }
+
+ public class FileProvider extends android.content.ContentProvider {
+ ctor public FileProvider();
+ ctor protected FileProvider(@XmlRes int);
+ method public int delete(android.net.Uri, String?, String![]?);
+ method public String? getType(android.net.Uri);
+ method public static android.net.Uri! getUriForFile(android.content.Context, String, java.io.File);
+ method public static android.net.Uri getUriForFile(android.content.Context, String, java.io.File, String);
+ method public android.net.Uri! insert(android.net.Uri, android.content.ContentValues);
+ method public boolean onCreate();
+ method public android.database.Cursor query(android.net.Uri, String![]?, String?, String![]?, String?);
+ method public int update(android.net.Uri, android.content.ContentValues, String?, String![]?);
+ }
+
+ public final class IntentCompat {
+ method public static android.content.Intent createManageUnusedAppRestrictionsIntent(android.content.Context, String);
+ method public static android.os.Parcelable![]? getParcelableArrayExtra(android.content.Intent, String?, Class<? extends android.os.Parcelable>);
+ method public static <T> java.util.ArrayList<T!>? getParcelableArrayListExtra(android.content.Intent, String?, Class<? extends T>);
+ method public static <T> T? getParcelableExtra(android.content.Intent, String?, Class<T!>);
+ method public static android.content.Intent makeMainSelectorActivity(String, String);
+ field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
+ field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+ field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
+ field public static final String EXTRA_TIME = "android.intent.extra.TIME";
+ }
+
+ public class IntentSanitizer {
+ method public android.content.Intent sanitize(android.content.Intent, androidx.core.util.Consumer<java.lang.String!>);
+ method public android.content.Intent sanitizeByFiltering(android.content.Intent);
+ method public android.content.Intent sanitizeByThrowing(android.content.Intent);
+ }
+
+ public static final class IntentSanitizer.Builder {
+ ctor public IntentSanitizer.Builder();
+ method public androidx.core.content.IntentSanitizer.Builder allowAction(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowAction(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowAnyComponent();
+ method public androidx.core.content.IntentSanitizer.Builder allowCategory(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowCategory(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowClipData(androidx.core.util.Predicate<android.content.ClipData!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowClipDataText();
+ method public androidx.core.content.IntentSanitizer.Builder allowClipDataUri(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowClipDataUriWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowComponent(android.content.ComponentName);
+ method public androidx.core.content.IntentSanitizer.Builder allowComponent(androidx.core.util.Predicate<android.content.ComponentName!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowComponentWithPackage(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowData(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowDataWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<?>);
+ method public <T> androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<T!>, androidx.core.util.Predicate<T!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, androidx.core.util.Predicate<java.lang.Object!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraStream(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraStreamUriWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowFlags(int);
+ method public androidx.core.content.IntentSanitizer.Builder allowHistoryStackFlags();
+ method public androidx.core.content.IntentSanitizer.Builder allowIdentifier();
+ method public androidx.core.content.IntentSanitizer.Builder allowPackage(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowPackage(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowReceiverFlags();
+ method public androidx.core.content.IntentSanitizer.Builder allowSelector();
+ method public androidx.core.content.IntentSanitizer.Builder allowSourceBounds();
+ method public androidx.core.content.IntentSanitizer.Builder allowType(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowType(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer build();
+ }
+
+ public final class LocusIdCompat {
+ ctor public LocusIdCompat(String);
+ method public String getId();
+ method @RequiresApi(29) public android.content.LocusId toLocusId();
+ method @RequiresApi(29) public static androidx.core.content.LocusIdCompat toLocusIdCompat(android.content.LocusId);
+ }
+
+ public final class MimeTypeFilter {
+ method public static boolean matches(String?, String);
+ method public static String? matches(String?, String![]);
+ method public static String? matches(String![]?, String);
+ method public static String![] matchesMany(String![]?, String);
+ }
+
+ public interface OnConfigurationChangedProvider {
+ method public void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ method public void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ }
+
+ public interface OnTrimMemoryProvider {
+ method public void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ method public void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ }
+
+ public final class PackageManagerCompat {
+ method public static com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> getUnusedAppRestrictionsStatus(android.content.Context);
+ field public static final String ACTION_PERMISSION_REVOCATION_SETTINGS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
+ }
+
+ public final class PermissionChecker {
+ method public static int checkCallingOrSelfPermission(android.content.Context, String);
+ method public static int checkCallingPermission(android.content.Context, String, String?);
+ method public static int checkPermission(android.content.Context, String, int, int, String?);
+ method public static int checkSelfPermission(android.content.Context, String);
+ field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+ field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
+ field public static final int PERMISSION_GRANTED = 0; // 0x0
+ }
+
+ @Deprecated public final class SharedPreferencesCompat {
+ }
+
+ @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
+ method @Deprecated public void apply(android.content.SharedPreferences.Editor);
+ method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
+ }
+
+ public class UnusedAppRestrictionsBackportCallback {
+ method public void onResult(boolean, boolean) throws android.os.RemoteException;
+ }
+
+ public abstract class UnusedAppRestrictionsBackportService extends android.app.Service {
+ ctor public UnusedAppRestrictionsBackportService();
+ method protected abstract void isPermissionRevocationEnabled(androidx.core.content.UnusedAppRestrictionsBackportCallback);
+ method public android.os.IBinder? onBind(android.content.Intent?);
+ field public static final String ACTION_UNUSED_APP_RESTRICTIONS_BACKPORT_CONNECTION = "android.support.unusedapprestrictions.action.CustomUnusedAppRestrictionsBackportService";
+ }
+
+ public final class UnusedAppRestrictionsConstants {
+ field public static final int API_30 = 4; // 0x4
+ field public static final int API_30_BACKPORT = 3; // 0x3
+ field public static final int API_31 = 5; // 0x5
+ field public static final int DISABLED = 2; // 0x2
+ field public static final int ERROR = 0; // 0x0
+ field public static final int FEATURE_NOT_AVAILABLE = 1; // 0x1
+ }
+
+ public class UriMatcherCompat {
+ method public static androidx.core.util.Predicate<android.net.Uri!> asPredicate(android.content.UriMatcher);
+ }
+
+}
+
+package androidx.core.content.pm {
+
+ @Deprecated public final class ActivityInfoCompat {
+ field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
+ }
+
+ public final class PackageInfoCompat {
+ method public static long getLongVersionCode(android.content.pm.PackageInfo);
+ method public static java.util.List<android.content.pm.Signature!> getSignatures(android.content.pm.PackageManager, String) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static boolean hasSignatures(android.content.pm.PackageManager, String, @Size(min=1) java.util.Map<byte[]!,java.lang.Integer!>, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
+ }
+
+ public final class PermissionInfoCompat {
+ method public static int getProtection(android.content.pm.PermissionInfo);
+ method public static int getProtectionFlags(android.content.pm.PermissionInfo);
+ }
+
+ public class ShortcutInfoCompat {
+ method public android.content.ComponentName? getActivity();
+ method public java.util.Set<java.lang.String!>? getCategories();
+ method public CharSequence? getDisabledMessage();
+ method public int getDisabledReason();
+ method public int getExcludedFromSurfaces();
+ method public android.os.PersistableBundle? getExtras();
+ method public String getId();
+ method public android.content.Intent getIntent();
+ method public android.content.Intent![] getIntents();
+ method public long getLastChangedTimestamp();
+ method public androidx.core.content.LocusIdCompat? getLocusId();
+ method public CharSequence? getLongLabel();
+ method public String getPackage();
+ method public int getRank();
+ method public CharSequence getShortLabel();
+ method public android.os.UserHandle? getUserHandle();
+ method public boolean hasKeyFieldsOnly();
+ method public boolean isCached();
+ method public boolean isDeclaredInManifest();
+ method public boolean isDynamic();
+ method public boolean isEnabled();
+ method public boolean isExcludedFromSurfaces(int);
+ method public boolean isImmutable();
+ method public boolean isPinned();
+ method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
+ field public static final int SURFACE_LAUNCHER = 1; // 0x1
+ }
+
+ public static class ShortcutInfoCompat.Builder {
+ ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String, String, java.util.List<java.lang.String!>);
+ method public androidx.core.content.pm.ShortcutInfoCompat build();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setCategories(java.util.Set<java.lang.String!>);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExcludedFromSurfaces(int);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExtras(android.os.PersistableBundle);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIsConversation();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
+ method @Deprecated public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived(boolean);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPerson(androidx.core.app.Person);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPersons(androidx.core.app.Person![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setRank(int);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setSliceUri(android.net.Uri);
+ }
+
+ public class ShortcutManagerCompat {
+ method public static boolean addDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
+ method public static void disableShortcuts(android.content.Context, java.util.List<java.lang.String!>, CharSequence?);
+ method public static void enableShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getDynamicShortcuts(android.content.Context);
+ method public static int getIconMaxHeight(android.content.Context);
+ method public static int getIconMaxWidth(android.content.Context);
+ method public static int getMaxShortcutCountPerActivity(android.content.Context);
+ method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getShortcuts(android.content.Context, int);
+ method public static boolean isRateLimitingActive(android.content.Context);
+ method public static boolean isRequestPinShortcutSupported(android.content.Context);
+ method public static boolean pushDynamicShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
+ method public static void removeAllDynamicShortcuts(android.content.Context);
+ method public static void removeDynamicShortcuts(android.content.Context, java.util.List<java.lang.String!>);
+ method public static void removeLongLivedShortcuts(android.content.Context, java.util.List<java.lang.String!>);
+ method public static void reportShortcutUsed(android.content.Context, String);
+ method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
+ method public static boolean setDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static boolean updateShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
+ field public static final int FLAG_MATCH_CACHED = 8; // 0x8
+ field public static final int FLAG_MATCH_DYNAMIC = 2; // 0x2
+ field public static final int FLAG_MATCH_MANIFEST = 1; // 0x1
+ field public static final int FLAG_MATCH_PINNED = 4; // 0x4
+ }
+
+}
+
+package androidx.core.content.res {
+
+ public final class ConfigurationHelper {
+ method public static int getDensityDpi(android.content.res.Resources);
+ }
+
+ public final class ResourcesCompat {
+ method public static void clearCachesForTheme(android.content.res.Resources.Theme);
+ method public static android.graphics.Typeface? getCachedFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
+ method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static float getFloat(android.content.res.Resources, @DimenRes int);
+ method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
+ method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
+ field @AnyRes public static final int ID_NULL = 0; // 0x0
+ }
+
+ public abstract static class ResourcesCompat.FontCallback {
+ ctor public ResourcesCompat.FontCallback();
+ method public abstract void onFontRetrievalFailed(int);
+ method public abstract void onFontRetrieved(android.graphics.Typeface);
+ }
+
+ public static final class ResourcesCompat.ThemeCompat {
+ method public static void rebase(android.content.res.Resources.Theme);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorWindowCompat {
+ method public static android.database.CursorWindow create(String?, long);
+ }
+
+ @Deprecated public final class DatabaseUtilsCompat {
+ method @Deprecated public static String![]! appendSelectionArgs(String![]!, String![]!);
+ method @Deprecated public static String! concatenateWhere(String!, String!);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteCursorCompat {
+ method public static void setFillWindowForwardOnly(android.database.sqlite.SQLiteCursor, boolean);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapCompat {
+ method public static android.graphics.Bitmap createScaledBitmap(android.graphics.Bitmap, int, int, android.graphics.Rect?, boolean);
+ method public static int getAllocationByteCount(android.graphics.Bitmap);
+ method public static boolean hasMipMap(android.graphics.Bitmap);
+ method public static void setHasMipMap(android.graphics.Bitmap, boolean);
+ }
+
+ public class BlendModeColorFilterCompat {
+ method public static android.graphics.ColorFilter? createBlendModeColorFilterCompat(int, androidx.core.graphics.BlendModeCompat);
+ }
+
+ public enum BlendModeCompat {
+ enum_constant public static final androidx.core.graphics.BlendModeCompat CLEAR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_BURN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_DODGE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DARKEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat DIFFERENCE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OVER;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat EXCLUSION;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HARD_LIGHT;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HUE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat LIGHTEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat LUMINOSITY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat MODULATE;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat MULTIPLY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat OVERLAY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat PLUS;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SATURATION;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SCREEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SOFT_LIGHT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OVER;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat XOR;
+ }
+
+ public final class ColorUtils {
+ method @ColorInt public static int HSLToColor(float[]);
+ method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
+ method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
+ method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
+ method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double);
+ method public static void XYZToLAB(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double, double[]);
+ method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
+ method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
+ method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
+ method public static double calculateContrast(@ColorInt int, @ColorInt int);
+ method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
+ method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
+ method public static void colorToHSL(@ColorInt int, float[]);
+ method public static void colorToLAB(@ColorInt int, double[]);
+ method public static void colorToXYZ(@ColorInt int, double[]);
+ method public static int compositeColors(@ColorInt int, @ColorInt int);
+ method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
+ method public static double distanceEuclidean(double[], double[]);
+ method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
+ }
+
+ public final class Insets {
+ method public static androidx.core.graphics.Insets add(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public static androidx.core.graphics.Insets max(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public static androidx.core.graphics.Insets min(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public static androidx.core.graphics.Insets of(int, int, int, int);
+ method public static androidx.core.graphics.Insets of(android.graphics.Rect);
+ method public static androidx.core.graphics.Insets subtract(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method @RequiresApi(api=29) public static androidx.core.graphics.Insets toCompatInsets(android.graphics.Insets);
+ method @RequiresApi(29) public android.graphics.Insets toPlatformInsets();
+ field public static final androidx.core.graphics.Insets NONE;
+ field public final int bottom;
+ field public final int left;
+ field public final int right;
+ field public final int top;
+ }
+
+ public final class PaintCompat {
+ method public static boolean hasGlyph(android.graphics.Paint, String);
+ method public static boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat?);
+ }
+
+ public final class PathSegment {
+ ctor public PathSegment(android.graphics.PointF, float, android.graphics.PointF, float);
+ method public android.graphics.PointF getEnd();
+ method public float getEndFraction();
+ method public android.graphics.PointF getStart();
+ method public float getStartFraction();
+ }
+
+ public final class PathUtils {
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path);
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path, @FloatRange(from=0) float);
+ }
+
+ public class TypefaceCompat {
+ method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, int);
+ method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, @IntRange(from=1, to=1000) int, boolean);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class DrawableCompat {
+ method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
+ method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
+ method public static void clearColorFilter(android.graphics.drawable.Drawable);
+ method public static int getAlpha(android.graphics.drawable.Drawable);
+ method public static android.graphics.ColorFilter? getColorFilter(android.graphics.drawable.Drawable);
+ method public static int getLayoutDirection(android.graphics.drawable.Drawable);
+ method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
+ method @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
+ method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
+ method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
+ method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
+ method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
+ method public static void setTint(android.graphics.drawable.Drawable, @ColorInt int);
+ method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList?);
+ method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode?);
+ method public static <T extends android.graphics.drawable.Drawable> T! unwrap(android.graphics.drawable.Drawable);
+ method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
+ }
+
+ public class IconCompat implements androidx.versionedparcelable.VersionedParcelable {
+ method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
+ method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
+ method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
+ method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithData(byte[], int, int);
+ method public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.Context, @DrawableRes int);
+ method @DrawableRes public int getResId();
+ method public String getResPackage();
+ method public int getType();
+ method public android.net.Uri getUri();
+ method public android.graphics.drawable.Drawable? loadDrawable(android.content.Context);
+ method public void onPostParceling();
+ method public void onPreParceling(boolean);
+ method public androidx.core.graphics.drawable.IconCompat setTint(@ColorInt int);
+ method public androidx.core.graphics.drawable.IconCompat setTintList(android.content.res.ColorStateList?);
+ method public androidx.core.graphics.drawable.IconCompat setTintMode(android.graphics.PorterDuff.Mode?);
+ method public android.os.Bundle toBundle();
+ method @Deprecated @RequiresApi(23) public android.graphics.drawable.Icon toIcon();
+ method @RequiresApi(23) public android.graphics.drawable.Icon toIcon(android.content.Context?);
+ field public static final int TYPE_ADAPTIVE_BITMAP = 5; // 0x5
+ field public static final int TYPE_BITMAP = 1; // 0x1
+ field public static final int TYPE_DATA = 3; // 0x3
+ field public static final int TYPE_RESOURCE = 2; // 0x2
+ field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+ field public static final int TYPE_URI = 4; // 0x4
+ field public static final int TYPE_URI_ADAPTIVE_BITMAP = 6; // 0x6
+ }
+
+ public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.Bitmap? getBitmap();
+ method public float getCornerRadius();
+ method public int getGravity();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public boolean hasAntiAlias();
+ method public boolean hasMipMap();
+ method public boolean isCircular();
+ method public void setAlpha(int);
+ method public void setAntiAlias(boolean);
+ method public void setCircular(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setCornerRadius(float);
+ method public void setDither(boolean);
+ method public void setGravity(int);
+ method public void setMipMap(boolean);
+ method public void setTargetDensity(android.graphics.Canvas);
+ method public void setTargetDensity(android.util.DisplayMetrics);
+ method public void setTargetDensity(int);
+ }
+
+ public final class RoundedBitmapDrawableFactory {
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ }
+
+}
+
+package androidx.core.hardware.display {
+
+ public final class DisplayManagerCompat {
+ method public android.view.Display? getDisplay(int);
+ method public android.view.Display![] getDisplays();
+ method public android.view.Display![] getDisplays(String?);
+ method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
+ field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+ }
+
+}
+
+package androidx.core.hardware.fingerprint {
+
+ @Deprecated public class FingerprintManagerCompat {
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
+ method @Deprecated public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
+ }
+
+ @Deprecated public abstract static class FingerprintManagerCompat.AuthenticationCallback {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationCallback();
+ method @Deprecated public void onAuthenticationError(int, CharSequence!);
+ method @Deprecated public void onAuthenticationFailed();
+ method @Deprecated public void onAuthenticationHelp(int, CharSequence!);
+ method @Deprecated public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
+ }
+
+ @Deprecated public static final class FingerprintManagerCompat.AuthenticationResult {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
+ method @Deprecated public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
+ }
+
+ @Deprecated public static class FingerprintManagerCompat.CryptoObject {
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(java.security.Signature);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
+ method @Deprecated public javax.crypto.Cipher? getCipher();
+ method @Deprecated public javax.crypto.Mac? getMac();
+ method @Deprecated public java.security.Signature? getSignature();
+ }
+
+}
+
+package androidx.core.location {
+
+ public abstract class GnssStatusCompat {
+ method @FloatRange(from=0, to=360) public abstract float getAzimuthDegrees(@IntRange(from=0) int);
+ method @FloatRange(from=0, to=63) public abstract float getBasebandCn0DbHz(@IntRange(from=0) int);
+ method @FloatRange(from=0) public abstract float getCarrierFrequencyHz(@IntRange(from=0) int);
+ method @FloatRange(from=0, to=63) public abstract float getCn0DbHz(@IntRange(from=0) int);
+ method public abstract int getConstellationType(@IntRange(from=0) int);
+ method @FloatRange(from=0xffffffa6, to=90) public abstract float getElevationDegrees(@IntRange(from=0) int);
+ method @IntRange(from=0) public abstract int getSatelliteCount();
+ method @IntRange(from=1, to=200) public abstract int getSvid(@IntRange(from=0) int);
+ method public abstract boolean hasAlmanacData(@IntRange(from=0) int);
+ method public abstract boolean hasBasebandCn0DbHz(@IntRange(from=0) int);
+ method public abstract boolean hasCarrierFrequencyHz(@IntRange(from=0) int);
+ method public abstract boolean hasEphemerisData(@IntRange(from=0) int);
+ method public abstract boolean usedInFix(@IntRange(from=0) int);
+ method @RequiresApi(android.os.Build.VERSION_CODES.N) public static androidx.core.location.GnssStatusCompat wrap(android.location.GnssStatus);
+ method public static androidx.core.location.GnssStatusCompat wrap(android.location.GpsStatus);
+ field public static final int CONSTELLATION_BEIDOU = 5; // 0x5
+ field public static final int CONSTELLATION_GALILEO = 6; // 0x6
+ field public static final int CONSTELLATION_GLONASS = 3; // 0x3
+ field public static final int CONSTELLATION_GPS = 1; // 0x1
+ field public static final int CONSTELLATION_IRNSS = 7; // 0x7
+ field public static final int CONSTELLATION_QZSS = 4; // 0x4
+ field public static final int CONSTELLATION_SBAS = 2; // 0x2
+ field public static final int CONSTELLATION_UNKNOWN = 0; // 0x0
+ }
+
+ public abstract static class GnssStatusCompat.Callback {
+ ctor public GnssStatusCompat.Callback();
+ method public void onFirstFix(@IntRange(from=0) int);
+ method public void onSatelliteStatusChanged(androidx.core.location.GnssStatusCompat);
+ method public void onStarted();
+ method public void onStopped();
+ }
+
+ public final class LocationCompat {
+ method public static float getBearingAccuracyDegrees(android.location.Location);
+ method public static long getElapsedRealtimeMillis(android.location.Location);
+ method public static long getElapsedRealtimeNanos(android.location.Location);
+ method @FloatRange(from=0.0) public static float getMslAltitudeAccuracyMeters(android.location.Location);
+ method public static double getMslAltitudeMeters(android.location.Location);
+ method public static float getSpeedAccuracyMetersPerSecond(android.location.Location);
+ method public static float getVerticalAccuracyMeters(android.location.Location);
+ method public static boolean hasBearingAccuracy(android.location.Location);
+ method public static boolean hasMslAltitude(android.location.Location);
+ method public static boolean hasMslAltitudeAccuracy(android.location.Location);
+ method public static boolean hasSpeedAccuracy(android.location.Location);
+ method public static boolean hasVerticalAccuracy(android.location.Location);
+ method public static boolean isMock(android.location.Location);
+ method public static void removeMslAltitude(android.location.Location);
+ method public static void removeMslAltitudeAccuracy(android.location.Location);
+ method public static void setBearingAccuracyDegrees(android.location.Location, float);
+ method public static void setMock(android.location.Location, boolean);
+ method public static void setMslAltitudeAccuracyMeters(android.location.Location, @FloatRange(from=0.0) float);
+ method public static void setMslAltitudeMeters(android.location.Location, double);
+ method public static void setSpeedAccuracyMetersPerSecond(android.location.Location, float);
+ method public static void setVerticalAccuracyMeters(android.location.Location, float);
+ field public static final String EXTRA_BEARING_ACCURACY = "bearingAccuracy";
+ field public static final String EXTRA_IS_MOCK = "mockLocation";
+ field public static final String EXTRA_MSL_ALTITUDE = "androidx.core.location.extra.MSL_ALTITUDE";
+ field public static final String EXTRA_MSL_ALTITUDE_ACCURACY = "androidx.core.location.extra.MSL_ALTITUDE_ACCURACY";
+ field public static final String EXTRA_SPEED_ACCURACY = "speedAccuracy";
+ field public static final String EXTRA_VERTICAL_ACCURACY = "verticalAccuracy";
+ }
+
+ public interface LocationListenerCompat extends android.location.LocationListener {
+ method public default void onStatusChanged(String, int, android.os.Bundle?);
+ }
+
+ public final class LocationManagerCompat {
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void getCurrentLocation(android.location.LocationManager, String, androidx.core.os.CancellationSignal?, java.util.concurrent.Executor, androidx.core.util.Consumer<android.location.Location!>);
+ method public static String? getGnssHardwareModelName(android.location.LocationManager);
+ method public static int getGnssYearOfHardware(android.location.LocationManager);
+ method public static boolean hasProvider(android.location.LocationManager, String);
+ method public static boolean isLocationEnabled(android.location.LocationManager);
+ method @RequiresApi(android.os.Build.VERSION_CODES.N) @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssMeasurementsCallback(android.location.LocationManager, android.location.GnssMeasurementsEvent.Callback, android.os.Handler);
+ method @RequiresApi(android.os.Build.VERSION_CODES.R) @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssMeasurementsCallback(android.location.LocationManager, java.util.concurrent.Executor, android.location.GnssMeasurementsEvent.Callback);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback, android.os.Handler);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, java.util.concurrent.Executor, androidx.core.location.GnssStatusCompat.Callback);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void removeUpdates(android.location.LocationManager, androidx.core.location.LocationListenerCompat);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, androidx.core.location.LocationListenerCompat, android.os.Looper);
+ method @RequiresApi(android.os.Build.VERSION_CODES.N) public static void unregisterGnssMeasurementsCallback(android.location.LocationManager, android.location.GnssMeasurementsEvent.Callback);
+ method public static void unregisterGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback);
+ }
+
+ public final class LocationRequestCompat {
+ method @IntRange(from=1) public long getDurationMillis();
+ method @IntRange(from=0) public long getIntervalMillis();
+ method @IntRange(from=0) public long getMaxUpdateDelayMillis();
+ method @IntRange(from=1, to=java.lang.Integer.MAX_VALUE) public int getMaxUpdates();
+ method @FloatRange(from=0, to=java.lang.Float.MAX_VALUE) public float getMinUpdateDistanceMeters();
+ method @IntRange(from=0) public long getMinUpdateIntervalMillis();
+ method public int getQuality();
+ method @RequiresApi(31) public android.location.LocationRequest toLocationRequest();
+ method @RequiresApi(19) public android.location.LocationRequest? toLocationRequest(String);
+ field public static final long PASSIVE_INTERVAL = 9223372036854775807L; // 0x7fffffffffffffffL
+ field public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; // 0x66
+ field public static final int QUALITY_HIGH_ACCURACY = 100; // 0x64
+ field public static final int QUALITY_LOW_POWER = 104; // 0x68
+ }
+
+ public static final class LocationRequestCompat.Builder {
+ ctor public LocationRequestCompat.Builder(long);
+ ctor public LocationRequestCompat.Builder(androidx.core.location.LocationRequestCompat);
+ method public androidx.core.location.LocationRequestCompat build();
+ method public androidx.core.location.LocationRequestCompat.Builder clearMinUpdateIntervalMillis();
+ method public androidx.core.location.LocationRequestCompat.Builder setDurationMillis(@IntRange(from=1) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setIntervalMillis(@IntRange(from=0) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdateDelayMillis(@IntRange(from=0) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdates(@IntRange(from=1, to=java.lang.Integer.MAX_VALUE) int);
+ method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateDistanceMeters(@FloatRange(from=0, to=java.lang.Float.MAX_VALUE) float);
+ method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateIntervalMillis(@IntRange(from=0) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setQuality(int);
+ }
+
+}
+
+package androidx.core.math {
+
+ public class MathUtils {
+ method public static int addExact(int, int);
+ method public static long addExact(long, long);
+ method public static float clamp(float, float, float);
+ method public static double clamp(double, double, double);
+ method public static int clamp(int, int, int);
+ method public static long clamp(long, long, long);
+ method public static int decrementExact(int);
+ method public static long decrementExact(long);
+ method public static int incrementExact(int);
+ method public static long incrementExact(long);
+ method public static int multiplyExact(int, int);
+ method public static long multiplyExact(long, long);
+ method public static int negateExact(int);
+ method public static long negateExact(long);
+ method public static int subtractExact(int, int);
+ method public static long subtractExact(long, long);
+ method public static int toIntExact(long);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class ConnectivityManagerCompat {
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+ method public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+ }
+
+ public final class MailTo {
+ method public String? getBcc();
+ method public String? getBody();
+ method public String? getCc();
+ method public java.util.Map<java.lang.String!,java.lang.String!>? getHeaders();
+ method public String? getSubject();
+ method public String? getTo();
+ method public static boolean isMailTo(String?);
+ method public static boolean isMailTo(android.net.Uri?);
+ method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
+ method public static androidx.core.net.MailTo parse(android.net.Uri) throws androidx.core.net.ParseException;
+ field public static final String MAILTO_SCHEME = "mailto:";
+ }
+
+ public class ParseException extends java.lang.RuntimeException {
+ field public final String response;
+ }
+
+ public final class TrafficStatsCompat {
+ method @Deprecated public static void clearThreadStatsTag();
+ method @Deprecated public static int getThreadStatsTag();
+ method @Deprecated public static void incrementOperationCount(int);
+ method @Deprecated public static void incrementOperationCount(int, int);
+ method @Deprecated public static void setThreadStatsTag(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
+ }
+
+ public final class UriCompat {
+ method public static String toSafeString(android.net.Uri);
+ }
+
+}
+
+package androidx.core.os {
+
+ public class BuildCompat {
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N) public static boolean isAtLeastN();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N_MR1) public static boolean isAtLeastNMR1();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O) public static boolean isAtLeastO();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O_MR1) public static boolean isAtLeastOMR1();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.P) public static boolean isAtLeastP();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
+ method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
+ method @Deprecated @ChecksSdkIntAtLeast(api=32, codename="Sv2") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastSv2();
+ method @ChecksSdkIntAtLeast(api=33, codename="Tiramisu") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastT();
+ method @ChecksSdkIntAtLeast(codename="UpsideDownCake") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastU();
+ field @ChecksSdkIntAtLeast(extension=android.os.ext.SdkExtensions.AD_SERVICES) public static final int AD_SERVICES_EXTENSION_INT;
+ field @ChecksSdkIntAtLeast(extension=android.os.Build.VERSION_CODES.R) public static final int R_EXTENSION_INT;
+ field @ChecksSdkIntAtLeast(extension=android.os.Build.VERSION_CODES.S) public static final int S_EXTENSION_INT;
+ field @ChecksSdkIntAtLeast(extension=android.os.Build.VERSION_CODES.TIRAMISU) public static final int T_EXTENSION_INT;
+ }
+
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public static @interface BuildCompat.PrereleaseSdkCheck {
+ }
+
+ public final class BundleCompat {
+ method public static <T> T? getParcelable(android.os.Bundle, String?, Class<T!>);
+ method public static android.os.Parcelable![]? getParcelableArray(android.os.Bundle, String?, Class<? extends android.os.Parcelable>);
+ method public static <T> java.util.ArrayList<T!>? getParcelableArrayList(android.os.Bundle, String?, Class<? extends T>);
+ method public static <T> android.util.SparseArray<T!>? getSparseParcelableArray(android.os.Bundle, String?, Class<? extends T>);
+ }
+
+ public final class CancellationSignal {
+ ctor public CancellationSignal();
+ method public void cancel();
+ method public Object? getCancellationSignalObject();
+ method public boolean isCanceled();
+ method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener?);
+ method public void throwIfCanceled();
+ }
+
+ public static interface CancellationSignal.OnCancelListener {
+ method public void onCancel();
+ }
+
+ public final class ConfigurationCompat {
+ method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
+ }
+
+ public final class EnvironmentCompat {
+ method public static String getStorageState(java.io.File);
+ field public static final String MEDIA_UNKNOWN = "unknown";
+ }
+
+ public final class ExecutorCompat {
+ method public static java.util.concurrent.Executor create(android.os.Handler);
+ }
+
+ public final class HandlerCompat {
+ method public static android.os.Handler createAsync(android.os.Looper);
+ method public static android.os.Handler createAsync(android.os.Looper, android.os.Handler.Callback);
+ method @RequiresApi(16) public static boolean hasCallbacks(android.os.Handler, Runnable);
+ method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
+ }
+
+ public final class LocaleListCompat {
+ method public static androidx.core.os.LocaleListCompat create(java.util.Locale!...);
+ method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
+ method public java.util.Locale? get(int);
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
+ method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
+ method public java.util.Locale? getFirstMatch(String![]);
+ method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
+ method public boolean isEmpty();
+ method @RequiresApi(21) public static boolean matchesLanguageAndScript(java.util.Locale, java.util.Locale);
+ method @IntRange(from=0) public int size();
+ method public String toLanguageTags();
+ method public Object? unwrap();
+ method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
+ method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
+ }
+
+ public final class MessageCompat {
+ method public static boolean isAsynchronous(android.os.Message);
+ method public static void setAsynchronous(android.os.Message, boolean);
+ }
+
+ public class OperationCanceledException extends java.lang.RuntimeException {
+ ctor public OperationCanceledException();
+ ctor public OperationCanceledException(String?);
+ }
+
+ public final class ParcelCompat {
+ method public static <T> Object![]? readArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> java.util.ArrayList<T!>? readArrayList(android.os.Parcel, ClassLoader?, Class<? extends T>);
+ method public static boolean readBoolean(android.os.Parcel);
+ method public static <K, V> java.util.HashMap<K!,V!>? readHashMap(android.os.Parcel, ClassLoader?, Class<? extends K>, Class<? extends V>);
+ method public static <T> void readList(android.os.Parcel, java.util.List<? super T>, ClassLoader?, Class<T!>);
+ method public static <K, V> void readMap(android.os.Parcel, java.util.Map<? super K,? super V>, ClassLoader?, Class<K!>, Class<V!>);
+ method public static <T extends android.os.Parcelable> T? readParcelable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @Deprecated public static <T> T![]? readParcelableArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> android.os.Parcelable![]? readParcelableArrayTyped(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(30) public static <T> android.os.Parcelable.Creator<T!>? readParcelableCreator(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public static <T> java.util.List<T!> readParcelableList(android.os.Parcel, java.util.List<T!>, ClassLoader?, Class<T!>);
+ method public static <T extends java.io.Serializable> T? readSerializable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> android.util.SparseArray<T!>? readSparseArray(android.os.Parcel, ClassLoader?, Class<? extends T>);
+ method public static void writeBoolean(android.os.Parcel, boolean);
+ }
+
+ @Deprecated public final class ParcelableCompat {
+ method @Deprecated public static <T> android.os.Parcelable.Creator<T!>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T!>!);
+ }
+
+ @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
+ method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
+ method @Deprecated public T![]! newArray(int);
+ }
+
+ public final class ProcessCompat {
+ method public static boolean isApplicationUid(int);
+ }
+
+ @Deprecated public final class TraceCompat {
+ method @Deprecated public static void beginAsyncSection(String, int);
+ method @Deprecated public static void beginSection(String);
+ method @Deprecated public static void endAsyncSection(String, int);
+ method @Deprecated public static void endSection();
+ method @Deprecated public static boolean isEnabled();
+ method @Deprecated public static void setCounter(String, int);
+ }
+
+ @RequiresApi(17) public class UserHandleCompat {
+ method public static android.os.UserHandle getUserHandleForUid(int);
+ }
+
+ public class UserManagerCompat {
+ method public static boolean isUserUnlocked(android.content.Context);
+ }
+
+}
+
+package androidx.core.provider {
+
+ public final class DocumentsContractCompat {
+ method public static android.net.Uri? buildChildDocumentsUri(String, String?);
+ method public static android.net.Uri? buildChildDocumentsUriUsingTree(android.net.Uri, String);
+ method public static android.net.Uri? buildDocumentUri(String, String);
+ method public static android.net.Uri? buildDocumentUriUsingTree(android.net.Uri, String);
+ method public static android.net.Uri? buildTreeDocumentUri(String, String);
+ method public static android.net.Uri? createDocument(android.content.ContentResolver, android.net.Uri, String, String) throws java.io.FileNotFoundException;
+ method public static String? getDocumentId(android.net.Uri);
+ method public static String? getTreeDocumentId(android.net.Uri);
+ method public static boolean isDocumentUri(android.content.Context, android.net.Uri?);
+ method public static boolean isTreeUri(android.net.Uri);
+ method public static boolean removeDocument(android.content.ContentResolver, android.net.Uri, android.net.Uri) throws java.io.FileNotFoundException;
+ method public static android.net.Uri? renameDocument(android.content.ContentResolver, android.net.Uri, String) throws java.io.FileNotFoundException;
+ }
+
+ public static final class DocumentsContractCompat.DocumentCompat {
+ field public static final int FLAG_VIRTUAL_DOCUMENT = 512; // 0x200
+ }
+
+ public final class FontRequest {
+ ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
+ ctor public FontRequest(String, String, String, @ArrayRes int);
+ method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
+ method @ArrayRes public int getCertificatesArrayResId();
+ method public String getProviderAuthority();
+ method public String getProviderPackage();
+ method public String getQuery();
+ }
+
+ public class FontsContractCompat {
+ method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![]);
+ method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
+ }
+
+ public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
+ ctor public FontsContractCompat.Columns();
+ field public static final String FILE_ID = "file_id";
+ field public static final String ITALIC = "font_italic";
+ field public static final String RESULT_CODE = "result_code";
+ field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
+ field public static final int RESULT_CODE_OK = 0; // 0x0
+ field public static final String TTC_INDEX = "font_ttc_index";
+ field public static final String VARIATION_SETTINGS = "font_variation_settings";
+ field public static final String WEIGHT = "font_weight";
+ }
+
+ public static class FontsContractCompat.FontFamilyResult {
+ method public androidx.core.provider.FontsContractCompat.FontInfo![]! getFonts();
+ method public int getStatusCode();
+ field public static final int STATUS_OK = 0; // 0x0
+ field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
+ field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
+ }
+
+ public static class FontsContractCompat.FontInfo {
+ method public int getResultCode();
+ method @IntRange(from=0) public int getTtcIndex();
+ method public android.net.Uri getUri();
+ method @IntRange(from=1, to=1000) public int getWeight();
+ method public boolean isItalic();
+ }
+
+ public static class FontsContractCompat.FontRequestCallback {
+ ctor public FontsContractCompat.FontRequestCallback();
+ method public void onTypefaceRequestFailed(int);
+ method public void onTypefaceRetrieved(android.graphics.Typeface!);
+ field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
+ field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
+ field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+ field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
+ field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
+ }
+
+}
+
+package androidx.core.telephony {
+
+ @RequiresApi(22) public class SubscriptionManagerCompat {
+ method public static int getSlotIndex(int);
+ }
+
+ public class TelephonyManagerCompat {
+ method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static String? getImei(android.telephony.TelephonyManager);
+ method public static int getSubscriptionId(android.telephony.TelephonyManager);
+ }
+
+}
+
+package androidx.core.telephony.mbms {
+
+ public final class MbmsHelper {
+ method public static CharSequence? getBestNameForService(android.content.Context, android.telephony.mbms.ServiceInfo);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class BidiFormatter {
+ method public static androidx.core.text.BidiFormatter! getInstance();
+ method public static androidx.core.text.BidiFormatter! getInstance(boolean);
+ method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
+ method public boolean getStereoReset();
+ method public boolean isRtl(String!);
+ method public boolean isRtl(CharSequence!);
+ method public boolean isRtlContext();
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public String! unicodeWrap(String!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, boolean);
+ method public String! unicodeWrap(String!);
+ method public CharSequence! unicodeWrap(CharSequence!);
+ }
+
+ public static final class BidiFormatter.Builder {
+ ctor public BidiFormatter.Builder();
+ ctor public BidiFormatter.Builder(boolean);
+ ctor public BidiFormatter.Builder(java.util.Locale!);
+ method public androidx.core.text.BidiFormatter! build();
+ method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
+ method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
+ }
+
+ public final class HtmlCompat {
+ method public static android.text.Spanned fromHtml(String, int);
+ method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
+ method public static String toHtml(android.text.Spanned, int);
+ field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
+ field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
+ field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
+ field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
+ field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
+ }
+
+ public final class ICUCompat {
+ method public static String? maximizeAndGetScript(java.util.Locale);
+ }
+
+ public class PrecomputedTextCompat implements android.text.Spannable {
+ method public char charAt(int);
+ method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
+ method @IntRange(from=0) public int getParagraphCount();
+ method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
+ method public androidx.core.text.PrecomputedTextCompat.Params getParams();
+ method public int getSpanEnd(Object!);
+ method public int getSpanFlags(Object!);
+ method public int getSpanStart(Object!);
+ method public <T> T![]! getSpans(int, int, Class<T!>!);
+ method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
+ method public int length();
+ method public int nextSpanTransition(int, int, Class!);
+ method public void removeSpan(Object!);
+ method public void setSpan(Object!, int, int, int);
+ method public CharSequence! subSequence(int, int);
+ }
+
+ public static final class PrecomputedTextCompat.Params {
+ ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
+ method @RequiresApi(23) public int getBreakStrategy();
+ method @RequiresApi(23) public int getHyphenationFrequency();
+ method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
+ method public android.text.TextPaint getTextPaint();
+ }
+
+ public static class PrecomputedTextCompat.Params.Builder {
+ ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
+ method public androidx.core.text.PrecomputedTextCompat.Params build();
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
+ method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
+ }
+
+ public interface TextDirectionHeuristicCompat {
+ method public boolean isRtl(char[]!, int, int);
+ method public boolean isRtl(CharSequence!, int, int);
+ }
+
+ public final class TextDirectionHeuristicsCompat {
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
+ }
+
+ public final class TextUtilsCompat {
+ method public static int getLayoutDirectionFromLocale(java.util.Locale?);
+ method public static String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.text.util {
+
+ public final class LinkifyCompat {
+ method public static boolean addLinks(android.text.Spannable, int);
+ method public static boolean addLinks(android.widget.TextView, int);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ }
+
+}
+
+package androidx.core.util {
+
+ public class AtomicFile {
+ ctor public AtomicFile(java.io.File);
+ method public void delete();
+ method public void failWrite(java.io.FileOutputStream?);
+ method public void finishWrite(java.io.FileOutputStream?);
+ method public java.io.File getBaseFile();
+ method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+ method public byte[] readFully() throws java.io.IOException;
+ method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+ }
+
+ public interface Consumer<T> {
+ method public void accept(T!);
+ }
+
+ public class ObjectsCompat {
+ method public static boolean equals(Object?, Object?);
+ method public static int hash(java.lang.Object!...);
+ method public static int hashCode(Object?);
+ method public static <T> T requireNonNull(T?);
+ method public static <T> T requireNonNull(T?, String);
+ method public static String? toString(Object?, String?);
+ }
+
+ public class Pair<F, S> {
+ ctor public Pair(F!, S!);
+ method public static <A, B> androidx.core.util.Pair<A!,B!> create(A!, B!);
+ field public final F! first;
+ field public final S! second;
+ }
+
+ public final class PatternsCompat {
+ field public static final java.util.regex.Pattern DOMAIN_NAME;
+ field public static final java.util.regex.Pattern EMAIL_ADDRESS;
+ field public static final java.util.regex.Pattern IP_ADDRESS;
+ field public static final java.util.regex.Pattern WEB_URL;
+ }
+
+ public final class Pools {
+ }
+
+ public static interface Pools.Pool<T> {
+ method public T? acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
+ ctor public Pools.SimplePool(int);
+ method public T! acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
+ ctor public Pools.SynchronizedPool(int);
+ }
+
+ public interface Predicate<T> {
+ method public default androidx.core.util.Predicate<T!>! and(androidx.core.util.Predicate<? super T>!);
+ method public static <T> androidx.core.util.Predicate<T!>! isEqual(Object!);
+ method public default androidx.core.util.Predicate<T!>! negate();
+ method public static <T> androidx.core.util.Predicate<T!>! not(androidx.core.util.Predicate<? super T>!);
+ method public default androidx.core.util.Predicate<T!>! or(androidx.core.util.Predicate<? super T>!);
+ method public boolean test(T!);
+ }
+
+ public final class SizeFCompat {
+ ctor public SizeFCompat(float, float);
+ method public float getHeight();
+ method public float getWidth();
+ method @RequiresApi(21) public android.util.SizeF toSizeF();
+ method @RequiresApi(21) public static androidx.core.util.SizeFCompat toSizeFCompat(android.util.SizeF);
+ }
+
+ public interface Supplier<T> {
+ method public T! get();
+ }
+
+}
+
+package androidx.core.view {
+
+ public class AccessibilityDelegateCompat {
+ ctor public AccessibilityDelegateCompat();
+ method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
+ method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
+ method public void sendAccessibilityEvent(android.view.View, int);
+ method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
+ }
+
+ public abstract class ActionProvider {
+ ctor public ActionProvider(android.content.Context);
+ method public android.content.Context getContext();
+ method public boolean hasSubMenu();
+ method public boolean isVisible();
+ method public abstract android.view.View onCreateActionView();
+ method public android.view.View onCreateActionView(android.view.MenuItem);
+ method public boolean onPerformDefaultAction();
+ method public void onPrepareSubMenu(android.view.SubMenu);
+ method public boolean overridesItemVisibility();
+ method public void refreshVisibility();
+ method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener?);
+ }
+
+ public static interface ActionProvider.VisibilityListener {
+ method public void onActionProviderVisibilityChanged(boolean);
+ }
+
+ public final class ContentInfoCompat {
+ method public android.content.ClipData getClip();
+ method public android.os.Bundle? getExtras();
+ method public int getFlags();
+ method public android.net.Uri? getLinkUri();
+ method public int getSource();
+ method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
+ method @RequiresApi(31) public static android.util.Pair<android.view.ContentInfo!,android.view.ContentInfo!> partition(android.view.ContentInfo, java.util.function.Predicate<android.content.ClipData.Item!>);
+ method @RequiresApi(31) public android.view.ContentInfo toContentInfo();
+ method @RequiresApi(31) public static androidx.core.view.ContentInfoCompat toContentInfoCompat(android.view.ContentInfo);
+ field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
+ field public static final int SOURCE_APP = 0; // 0x0
+ field public static final int SOURCE_AUTOFILL = 4; // 0x4
+ field public static final int SOURCE_CLIPBOARD = 1; // 0x1
+ field public static final int SOURCE_DRAG_AND_DROP = 3; // 0x3
+ field public static final int SOURCE_INPUT_METHOD = 2; // 0x2
+ field public static final int SOURCE_PROCESS_TEXT = 5; // 0x5
+ }
+
+ public static final class ContentInfoCompat.Builder {
+ ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
+ ctor public ContentInfoCompat.Builder(android.content.ClipData, int);
+ method public androidx.core.view.ContentInfoCompat build();
+ method public androidx.core.view.ContentInfoCompat.Builder setClip(android.content.ClipData);
+ method public androidx.core.view.ContentInfoCompat.Builder setExtras(android.os.Bundle?);
+ method public androidx.core.view.ContentInfoCompat.Builder setFlags(int);
+ method public androidx.core.view.ContentInfoCompat.Builder setLinkUri(android.net.Uri?);
+ method public androidx.core.view.ContentInfoCompat.Builder setSource(int);
+ }
+
+ public final class DisplayCompat {
+ method public static androidx.core.view.DisplayCompat.ModeCompat getMode(android.content.Context, android.view.Display);
+ method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+ }
+
+ public static final class DisplayCompat.ModeCompat {
+ method public int getPhysicalHeight();
+ method public int getPhysicalWidth();
+ method @Deprecated public boolean isNative();
+ method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+ }
+
+ public final class DisplayCutoutCompat {
+ ctor public DisplayCutoutCompat(android.graphics.Rect?, java.util.List<android.graphics.Rect!>?);
+ ctor public DisplayCutoutCompat(androidx.core.graphics.Insets, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, androidx.core.graphics.Insets);
+ method public java.util.List<android.graphics.Rect!> getBoundingRects();
+ method public int getSafeInsetBottom();
+ method public int getSafeInsetLeft();
+ method public int getSafeInsetRight();
+ method public int getSafeInsetTop();
+ method public androidx.core.graphics.Insets getWaterfallInsets();
+ }
+
+ public final class DragAndDropPermissionsCompat {
+ method public void release();
+ }
+
+ public class DragStartHelper {
+ ctor public DragStartHelper(android.view.View, androidx.core.view.DragStartHelper.OnDragStartListener);
+ method public void attach();
+ method public void detach();
+ method public void getTouchPosition(android.graphics.Point);
+ method public boolean onLongClick(android.view.View);
+ method public boolean onTouch(android.view.View, android.view.MotionEvent);
+ }
+
+ public static interface DragStartHelper.OnDragStartListener {
+ method public boolean onDragStart(android.view.View, androidx.core.view.DragStartHelper);
+ }
+
+ public final class GestureDetectorCompat {
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler?);
+ method public boolean isLongpressEnabled();
+ method public boolean onTouchEvent(android.view.MotionEvent);
+ method public void setIsLongpressEnabled(boolean);
+ method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener?);
+ }
+
+ public final class GravityCompat {
+ method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
+ method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static int getAbsoluteGravity(int, int);
+ field public static final int END = 8388613; // 0x800005
+ field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+ field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+ field public static final int START = 8388611; // 0x800003
+ }
+
+ public final class InputDeviceCompat {
+ field public static final int SOURCE_ANY = -256; // 0xffffff00
+ field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+ field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+ field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+ field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+ field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+ field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+ field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+ field public static final int SOURCE_DPAD = 513; // 0x201
+ field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+ field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+ field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+ field public static final int SOURCE_KEYBOARD = 257; // 0x101
+ field public static final int SOURCE_MOUSE = 8194; // 0x2002
+ field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
+ field public static final int SOURCE_STYLUS = 16386; // 0x4002
+ field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+ field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+ field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+ field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+ field public static final int SOURCE_UNKNOWN = 0; // 0x0
+ }
+
+ public final class LayoutInflaterCompat {
+ method @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
+ method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
+ method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
+ }
+
+ @Deprecated public interface LayoutInflaterFactory {
+ method @Deprecated public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
+ }
+
+ public final class MarginLayoutParamsCompat {
+ method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
+ method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
+ method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
+ }
+
+ public final class MenuCompat {
+ method public static void setGroupDividerEnabled(android.view.Menu, boolean);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ }
+
+ public interface MenuHost {
+ method public void addMenuProvider(androidx.core.view.MenuProvider);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+ method public void invalidateMenu();
+ method public void removeMenuProvider(androidx.core.view.MenuProvider);
+ }
+
+ public class MenuHostHelper {
+ ctor public MenuHostHelper(Runnable);
+ method public void addMenuProvider(androidx.core.view.MenuProvider);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+ method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
+ method public void onMenuClosed(android.view.Menu);
+ method public boolean onMenuItemSelected(android.view.MenuItem);
+ method public void onPrepareMenu(android.view.Menu);
+ method public void removeMenuProvider(androidx.core.view.MenuProvider);
+ }
+
+ public final class MenuItemCompat {
+ method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
+ method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
+ method public static androidx.core.view.ActionProvider? getActionProvider(android.view.MenuItem);
+ method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
+ method public static int getAlphabeticModifiers(android.view.MenuItem);
+ method public static CharSequence? getContentDescription(android.view.MenuItem);
+ method public static android.content.res.ColorStateList? getIconTintList(android.view.MenuItem);
+ method public static android.graphics.PorterDuff.Mode? getIconTintMode(android.view.MenuItem);
+ method public static int getNumericModifiers(android.view.MenuItem);
+ method public static CharSequence? getTooltipText(android.view.MenuItem);
+ method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
+ method public static android.view.MenuItem? setActionProvider(android.view.MenuItem, androidx.core.view.ActionProvider?);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, int);
+ method public static void setAlphabeticShortcut(android.view.MenuItem, char, int);
+ method public static void setContentDescription(android.view.MenuItem, CharSequence?);
+ method public static void setIconTintList(android.view.MenuItem, android.content.res.ColorStateList?);
+ method public static void setIconTintMode(android.view.MenuItem, android.graphics.PorterDuff.Mode?);
+ method public static void setNumericShortcut(android.view.MenuItem, char, int);
+ method @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
+ method public static void setShortcut(android.view.MenuItem, char, char, int, int);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ method public static void setTooltipText(android.view.MenuItem, CharSequence?);
+ field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
+ method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
+ method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
+ }
+
+ public interface MenuProvider {
+ method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
+ method public default void onMenuClosed(android.view.Menu);
+ method public boolean onMenuItemSelected(android.view.MenuItem);
+ method public default void onPrepareMenu(android.view.Menu);
+ }
+
+ public final class MotionEventCompat {
+ method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
+ method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
+ method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
+ method @Deprecated public static int getButtonState(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
+ method @Deprecated public static int getSource(android.view.MotionEvent!);
+ method @Deprecated public static float getX(android.view.MotionEvent!, int);
+ method @Deprecated public static float getY(android.view.MotionEvent!, int);
+ method public static boolean isFromSource(android.view.MotionEvent, int);
+ field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
+ field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
+ field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
+ field @Deprecated public static final int ACTION_MASK = 255; // 0xff
+ field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
+ field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+ field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+ field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
+ field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
+ field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
+ field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
+ field @Deprecated public static final int AXIS_GAS = 22; // 0x16
+ field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
+ field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
+ field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
+ field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
+ field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
+ field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
+ field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
+ field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
+ field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
+ field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
+ field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
+ field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
+ field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
+ field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
+ field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
+ field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
+ field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
+ field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
+ field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
+ field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
+ field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
+ field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
+ field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+ field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+ field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
+ field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
+ field @Deprecated public static final int AXIS_RX = 12; // 0xc
+ field @Deprecated public static final int AXIS_RY = 13; // 0xd
+ field @Deprecated public static final int AXIS_RZ = 14; // 0xe
+ field public static final int AXIS_SCROLL = 26; // 0x1a
+ field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
+ field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
+ field @Deprecated public static final int AXIS_TILT = 25; // 0x19
+ field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+ field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
+ field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+ field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+ field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
+ field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
+ field @Deprecated public static final int AXIS_X = 0; // 0x0
+ field @Deprecated public static final int AXIS_Y = 1; // 0x1
+ field @Deprecated public static final int AXIS_Z = 11; // 0xb
+ field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
+ }
+
+ public interface NestedScrollingChild {
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean isNestedScrollingEnabled();
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(int);
+ method public void stopNestedScroll();
+ }
+
+ public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public interface NestedScrollingChild3 extends androidx.core.view.NestedScrollingChild2 {
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
+ }
+
+ public class NestedScrollingChildHelper {
+ ctor public NestedScrollingChildHelper(android.view.View);
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isNestedScrollingEnabled();
+ method public void onDetachedFromWindow();
+ method public void onStopNestedScroll(android.view.View);
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll();
+ method public void stopNestedScroll(int);
+ }
+
+ public interface NestedScrollingParent {
+ method public int getNestedScrollAxes();
+ method public boolean onNestedFling(android.view.View, float, float, boolean);
+ method public boolean onNestedPreFling(android.view.View, float, float);
+ method public void onNestedPreScroll(android.view.View, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
+ method public void onStopNestedScroll(android.view.View);
+ }
+
+ public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ }
+
+ public interface NestedScrollingParent3 extends androidx.core.view.NestedScrollingParent2 {
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
+ }
+
+ public class NestedScrollingParentHelper {
+ ctor public NestedScrollingParentHelper(android.view.ViewGroup);
+ method public int getNestedScrollAxes();
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View);
+ method public void onStopNestedScroll(android.view.View, int);
+ }
+
+ public interface OnApplyWindowInsetsListener {
+ method public androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
+ }
+
+ public interface OnReceiveContentListener {
+ method public androidx.core.view.ContentInfoCompat? onReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
+ }
+
+ public interface OnReceiveContentViewBehavior {
+ method public androidx.core.view.ContentInfoCompat? onReceiveContent(androidx.core.view.ContentInfoCompat);
+ }
+
+ public final class OneShotPreDrawListener implements android.view.View.OnAttachStateChangeListener android.view.ViewTreeObserver.OnPreDrawListener {
+ method public static androidx.core.view.OneShotPreDrawListener add(android.view.View, Runnable);
+ method public boolean onPreDraw();
+ method public void onViewAttachedToWindow(android.view.View);
+ method public void onViewDetachedFromWindow(android.view.View);
+ method public void removeListener();
+ }
+
+ public final class PointerIconCompat {
+ method public static androidx.core.view.PointerIconCompat create(android.graphics.Bitmap, float, float);
+ method public static androidx.core.view.PointerIconCompat getSystemIcon(android.content.Context, int);
+ method public static androidx.core.view.PointerIconCompat load(android.content.res.Resources, int);
+ field public static final int TYPE_ALIAS = 1010; // 0x3f2
+ field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+ field public static final int TYPE_ARROW = 1000; // 0x3e8
+ field public static final int TYPE_CELL = 1006; // 0x3ee
+ field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+ field public static final int TYPE_COPY = 1011; // 0x3f3
+ field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+ field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+ field public static final int TYPE_GRAB = 1020; // 0x3fc
+ field public static final int TYPE_GRABBING = 1021; // 0x3fd
+ field public static final int TYPE_HAND = 1002; // 0x3ea
+ field public static final int TYPE_HELP = 1003; // 0x3eb
+ field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+ field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+ field public static final int TYPE_NULL = 0; // 0x0
+ field public static final int TYPE_TEXT = 1008; // 0x3f0
+ field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+ field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+ field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+ field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+ field public static final int TYPE_WAIT = 1004; // 0x3ec
+ field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+ field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+ }
+
+ public final class ScaleGestureDetectorCompat {
+ method @Deprecated public static boolean isQuickScaleEnabled(Object!);
+ method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
+ method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
+ method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
+ }
+
+ public interface ScrollingView {
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ }
+
+ public interface TintableBackgroundView {
+ method public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @Deprecated public final class VelocityTrackerCompat {
+ method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
+ method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
+ }
+
+ public class ViewCompat {
+ ctor @Deprecated protected ViewCompat();
+ method public static int addAccessibilityAction(android.view.View, CharSequence, androidx.core.view.accessibility.AccessibilityViewCommand);
+ method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View!>, int);
+ method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
+ method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
+ method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
+ method public static void cancelDragAndDrop(android.view.View);
+ method @Deprecated public static int combineMeasuredStates(int, int);
+ method public static androidx.core.view.WindowInsetsCompat computeSystemWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat, android.graphics.Rect);
+ method public static androidx.core.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
+ method public static void dispatchFinishTemporaryDetach(android.view.View);
+ method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
+ method public static boolean dispatchNestedPreFling(android.view.View, float, float);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, int);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
+ method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int, int[]);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int);
+ method public static void dispatchStartTemporaryDetach(android.view.View);
+ method public static void enableAccessibleClickableSpanSupport(android.view.View);
+ method public static int generateViewId();
+ method public static androidx.core.view.AccessibilityDelegateCompat? getAccessibilityDelegate(android.view.View);
+ method public static int getAccessibilityLiveRegion(android.view.View);
+ method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
+ method @UiThread public static CharSequence? getAccessibilityPaneTitle(android.view.View);
+ method @Deprecated public static float getAlpha(android.view.View!);
+ method public static android.content.res.ColorStateList? getBackgroundTintList(android.view.View);
+ method public static android.graphics.PorterDuff.Mode? getBackgroundTintMode(android.view.View);
+ method public static android.graphics.Rect? getClipBounds(android.view.View);
+ method public static android.view.Display? getDisplay(android.view.View);
+ method public static float getElevation(android.view.View);
+ method public static boolean getFitsSystemWindows(android.view.View);
+ method public static int getImportantForAccessibility(android.view.View);
+ method public static int getImportantForAutofill(android.view.View);
+ method public static int getLabelFor(android.view.View);
+ method @Deprecated public static int getLayerType(android.view.View!);
+ method public static int getLayoutDirection(android.view.View);
+ method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
+ method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
+ method @Deprecated public static int getMeasuredState(android.view.View!);
+ method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
+ method public static int getMinimumHeight(android.view.View);
+ method public static int getMinimumWidth(android.view.View);
+ method public static int getNextClusterForwardId(android.view.View);
+ method public static String![]? getOnReceiveContentMimeTypes(android.view.View);
+ method @Deprecated public static int getOverScrollMode(android.view.View!);
+ method @Px public static int getPaddingEnd(android.view.View);
+ method @Px public static int getPaddingStart(android.view.View);
+ method public static android.view.ViewParent? getParentForAccessibility(android.view.View);
+ method @Deprecated public static float getPivotX(android.view.View!);
+ method @Deprecated public static float getPivotY(android.view.View!);
+ method public static androidx.core.view.WindowInsetsCompat? getRootWindowInsets(android.view.View);
+ method @Deprecated public static float getRotation(android.view.View!);
+ method @Deprecated public static float getRotationX(android.view.View!);
+ method @Deprecated public static float getRotationY(android.view.View!);
+ method @Deprecated public static float getScaleX(android.view.View!);
+ method @Deprecated public static float getScaleY(android.view.View!);
+ method public static int getScrollIndicators(android.view.View);
+ method @UiThread public static CharSequence? getStateDescription(android.view.View);
+ method public static java.util.List<android.graphics.Rect!> getSystemGestureExclusionRects(android.view.View);
+ method public static String? getTransitionName(android.view.View);
+ method @Deprecated public static float getTranslationX(android.view.View!);
+ method @Deprecated public static float getTranslationY(android.view.View!);
+ method public static float getTranslationZ(android.view.View);
+ method @Deprecated public static androidx.core.view.WindowInsetsControllerCompat? getWindowInsetsController(android.view.View);
+ method @Deprecated public static int getWindowSystemUiVisibility(android.view.View);
+ method @Deprecated public static float getX(android.view.View!);
+ method @Deprecated public static float getY(android.view.View!);
+ method public static float getZ(android.view.View);
+ method public static boolean hasAccessibilityDelegate(android.view.View);
+ method public static boolean hasExplicitFocusable(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View, int);
+ method public static boolean hasOnClickListeners(android.view.View);
+ method public static boolean hasOverlappingRendering(android.view.View);
+ method public static boolean hasTransientState(android.view.View);
+ method @UiThread public static boolean isAccessibilityHeading(android.view.View);
+ method public static boolean isAttachedToWindow(android.view.View);
+ method public static boolean isFocusedByDefault(android.view.View);
+ method public static boolean isImportantForAccessibility(android.view.View);
+ method public static boolean isImportantForAutofill(android.view.View);
+ method public static boolean isInLayout(android.view.View);
+ method public static boolean isKeyboardNavigationCluster(android.view.View);
+ method public static boolean isLaidOut(android.view.View);
+ method public static boolean isLayoutDirectionResolved(android.view.View);
+ method public static boolean isNestedScrollingEnabled(android.view.View);
+ method @Deprecated public static boolean isOpaque(android.view.View!);
+ method public static boolean isPaddingRelative(android.view.View);
+ method @UiThread public static boolean isScreenReaderFocusable(android.view.View);
+ method @Deprecated public static void jumpDrawablesToCurrentState(android.view.View!);
+ method public static android.view.View? keyboardNavigationClusterSearch(android.view.View, android.view.View?, int);
+ method public static void offsetLeftAndRight(android.view.View, int);
+ method public static void offsetTopAndBottom(android.view.View, int);
+ method public static androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
+ method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
+ method public static androidx.core.view.ContentInfoCompat? performReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
+ method public static void postInvalidateOnAnimation(android.view.View);
+ method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
+ method public static void postOnAnimation(android.view.View, Runnable);
+ method public static void postOnAnimationDelayed(android.view.View, Runnable, long);
+ method public static void removeAccessibilityAction(android.view.View, int);
+ method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static void replaceAccessibilityAction(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat, CharSequence?, androidx.core.view.accessibility.AccessibilityViewCommand?);
+ method public static void requestApplyInsets(android.view.View);
+ method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
+ method @Deprecated public static int resolveSizeAndState(int, int, int);
+ method public static boolean restoreDefaultFocus(android.view.View);
+ method public static void saveAttributeDataForStyleable(android.view.View, android.content.Context, int[], android.util.AttributeSet?, android.content.res.TypedArray, int, int);
+ method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat?);
+ method @UiThread public static void setAccessibilityHeading(android.view.View, boolean);
+ method public static void setAccessibilityLiveRegion(android.view.View, int);
+ method @UiThread public static void setAccessibilityPaneTitle(android.view.View, CharSequence?);
+ method @Deprecated public static void setActivated(android.view.View!, boolean);
+ method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) float);
+ method public static void setAutofillHints(android.view.View, java.lang.String!...);
+ method public static void setBackground(android.view.View, android.graphics.drawable.Drawable?);
+ method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList?);
+ method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode?);
+ method @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
+ method public static void setClipBounds(android.view.View, android.graphics.Rect?);
+ method public static void setElevation(android.view.View, float);
+ method @Deprecated public static void setFitsSystemWindows(android.view.View!, boolean);
+ method public static void setFocusedByDefault(android.view.View, boolean);
+ method public static void setHasTransientState(android.view.View, boolean);
+ method @UiThread public static void setImportantForAccessibility(android.view.View, int);
+ method public static void setImportantForAutofill(android.view.View, int);
+ method public static void setKeyboardNavigationCluster(android.view.View, boolean);
+ method public static void setLabelFor(android.view.View, @IdRes int);
+ method public static void setLayerPaint(android.view.View, android.graphics.Paint?);
+ method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
+ method public static void setLayoutDirection(android.view.View, int);
+ method public static void setNestedScrollingEnabled(android.view.View, boolean);
+ method public static void setNextClusterForwardId(android.view.View, int);
+ method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener?);
+ method public static void setOnReceiveContentListener(android.view.View, String![]?, androidx.core.view.OnReceiveContentListener?);
+ method @Deprecated public static void setOverScrollMode(android.view.View!, int);
+ method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
+ method @Deprecated public static void setPivotX(android.view.View!, float);
+ method @Deprecated public static void setPivotY(android.view.View!, float);
+ method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat?);
+ method @Deprecated public static void setRotation(android.view.View!, float);
+ method @Deprecated public static void setRotationX(android.view.View!, float);
+ method @Deprecated public static void setRotationY(android.view.View!, float);
+ method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
+ method @Deprecated public static void setScaleX(android.view.View!, float);
+ method @Deprecated public static void setScaleY(android.view.View!, float);
+ method @UiThread public static void setScreenReaderFocusable(android.view.View, boolean);
+ method public static void setScrollIndicators(android.view.View, int);
+ method public static void setScrollIndicators(android.view.View, int, int);
+ method @UiThread public static void setStateDescription(android.view.View, CharSequence?);
+ method public static void setSystemGestureExclusionRects(android.view.View, java.util.List<android.graphics.Rect!>);
+ method public static void setTooltipText(android.view.View, CharSequence?);
+ method public static void setTransitionName(android.view.View, String?);
+ method @Deprecated public static void setTranslationX(android.view.View!, float);
+ method @Deprecated public static void setTranslationY(android.view.View!, float);
+ method public static void setTranslationZ(android.view.View, float);
+ method public static void setWindowInsetsAnimationCallback(android.view.View, androidx.core.view.WindowInsetsAnimationCompat.Callback?);
+ method @Deprecated public static void setX(android.view.View!, float);
+ method @Deprecated public static void setY(android.view.View!, float);
+ method public static void setZ(android.view.View, float);
+ method public static boolean startDragAndDrop(android.view.View, android.content.ClipData?, android.view.View.DragShadowBuilder, Object?, int);
+ method public static boolean startNestedScroll(android.view.View, int);
+ method public static boolean startNestedScroll(android.view.View, int, int);
+ method public static void stopNestedScroll(android.view.View);
+ method public static void stopNestedScroll(android.view.View, int);
+ method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
+ field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+ field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+ field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+ field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+ field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
+ field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+ field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+ field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+ field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+ field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+ field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+ field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+ field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+ field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+ field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+ field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+ field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
+ field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+ field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+ field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+ field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+ field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+ field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+ field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+ field public static final int TYPE_NON_TOUCH = 1; // 0x1
+ field public static final int TYPE_TOUCH = 0; // 0x0
+ }
+
+ public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
+ method public boolean onUnhandledKeyEvent(android.view.View, android.view.KeyEvent);
+ }
+
+ public final class ViewConfigurationCompat {
+ method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method public static int getScaledHoverSlop(android.view.ViewConfiguration);
+ method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
+ method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
+ method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration, android.content.Context);
+ }
+
+ public final class ViewGroupCompat {
+ method public static int getLayoutMode(android.view.ViewGroup);
+ method public static int getNestedScrollAxes(android.view.ViewGroup);
+ method public static boolean isTransitionGroup(android.view.ViewGroup);
+ method @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void setLayoutMode(android.view.ViewGroup, int);
+ method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
+ method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+ field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+ field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+ }
+
+ public final class ViewParentCompat {
+ method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
+ method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
+ method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
+ method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[], int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int, int[]);
+ method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int, int);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View, int);
+ method @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ }
+
+ public final class ViewPropertyAnimatorCompat {
+ method public androidx.core.view.ViewPropertyAnimatorCompat alpha(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat alphaBy(float);
+ method public void cancel();
+ method public long getDuration();
+ method public android.view.animation.Interpolator? getInterpolator();
+ method public long getStartDelay();
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotation(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setDuration(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator?);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setListener(androidx.core.view.ViewPropertyAnimatorListener?);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setStartDelay(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener?);
+ method public void start();
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationZ(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationZBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat withEndAction(Runnable);
+ method public androidx.core.view.ViewPropertyAnimatorCompat withLayer();
+ method public androidx.core.view.ViewPropertyAnimatorCompat withStartAction(Runnable);
+ method public androidx.core.view.ViewPropertyAnimatorCompat x(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat xBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat y(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat yBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat z(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat zBy(float);
+ }
+
+ public interface ViewPropertyAnimatorListener {
+ method public void onAnimationCancel(android.view.View);
+ method public void onAnimationEnd(android.view.View);
+ method public void onAnimationStart(android.view.View);
+ }
+
+ public class ViewPropertyAnimatorListenerAdapter implements androidx.core.view.ViewPropertyAnimatorListener {
+ ctor public ViewPropertyAnimatorListenerAdapter();
+ method public void onAnimationCancel(android.view.View);
+ method public void onAnimationEnd(android.view.View);
+ method public void onAnimationStart(android.view.View);
+ }
+
+ public interface ViewPropertyAnimatorUpdateListener {
+ method public void onAnimationUpdate(android.view.View);
+ }
+
+ public final class WindowCompat {
+ method public static androidx.core.view.WindowInsetsControllerCompat getInsetsController(android.view.Window, android.view.View);
+ method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes int);
+ method public static void setDecorFitsSystemWindows(android.view.Window, boolean);
+ field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+ field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ }
+
+ public final class WindowInsetsAnimationCompat {
+ ctor public WindowInsetsAnimationCompat(int, android.view.animation.Interpolator?, long);
+ method @FloatRange(from=0.0f, to=1.0f) public float getAlpha();
+ method public long getDurationMillis();
+ method @FloatRange(from=0.0f, to=1.0f) public float getFraction();
+ method public float getInterpolatedFraction();
+ method public android.view.animation.Interpolator? getInterpolator();
+ method public int getTypeMask();
+ method public void setAlpha(@FloatRange(from=0.0f, to=1.0f) float);
+ method public void setFraction(@FloatRange(from=0.0f, to=1.0f) float);
+ }
+
+ public static final class WindowInsetsAnimationCompat.BoundsCompat {
+ ctor public WindowInsetsAnimationCompat.BoundsCompat(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public androidx.core.graphics.Insets getLowerBound();
+ method public androidx.core.graphics.Insets getUpperBound();
+ method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat inset(androidx.core.graphics.Insets);
+ method @RequiresApi(30) public android.view.WindowInsetsAnimation.Bounds toBounds();
+ method @RequiresApi(30) public static androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat toBoundsCompat(android.view.WindowInsetsAnimation.Bounds);
+ }
+
+ public abstract static class WindowInsetsAnimationCompat.Callback {
+ ctor public WindowInsetsAnimationCompat.Callback(int);
+ method public final int getDispatchMode();
+ method public void onEnd(androidx.core.view.WindowInsetsAnimationCompat);
+ method public void onPrepare(androidx.core.view.WindowInsetsAnimationCompat);
+ method public abstract androidx.core.view.WindowInsetsCompat onProgress(androidx.core.view.WindowInsetsCompat, java.util.List<androidx.core.view.WindowInsetsAnimationCompat!>);
+ method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat onStart(androidx.core.view.WindowInsetsAnimationCompat, androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat);
+ field public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1; // 0x1
+ field public static final int DISPATCH_MODE_STOP = 0; // 0x0
+ }
+
+ public interface WindowInsetsAnimationControlListenerCompat {
+ method public void onCancelled(androidx.core.view.WindowInsetsAnimationControllerCompat?);
+ method public void onFinished(androidx.core.view.WindowInsetsAnimationControllerCompat);
+ method public void onReady(androidx.core.view.WindowInsetsAnimationControllerCompat, int);
+ }
+
+ public final class WindowInsetsAnimationControllerCompat {
+ method public void finish(boolean);
+ method public float getCurrentAlpha();
+ method @FloatRange(from=0.0f, to=1.0f) public float getCurrentFraction();
+ method public androidx.core.graphics.Insets getCurrentInsets();
+ method public androidx.core.graphics.Insets getHiddenStateInsets();
+ method public androidx.core.graphics.Insets getShownStateInsets();
+ method public int getTypes();
+ method public boolean isCancelled();
+ method public boolean isFinished();
+ method public boolean isReady();
+ method public void setInsetsAndAlpha(androidx.core.graphics.Insets?, @FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float);
+ }
+
+ public class WindowInsetsCompat {
+ ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat?);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat consumeDisplayCutout();
+ method @Deprecated public androidx.core.view.WindowInsetsCompat consumeStableInsets();
+ method @Deprecated public androidx.core.view.WindowInsetsCompat consumeSystemWindowInsets();
+ method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
+ method public androidx.core.graphics.Insets getInsets(int);
+ method public androidx.core.graphics.Insets getInsetsIgnoringVisibility(int);
+ method @Deprecated public androidx.core.graphics.Insets getMandatorySystemGestureInsets();
+ method @Deprecated public int getStableInsetBottom();
+ method @Deprecated public int getStableInsetLeft();
+ method @Deprecated public int getStableInsetRight();
+ method @Deprecated public int getStableInsetTop();
+ method @Deprecated public androidx.core.graphics.Insets getStableInsets();
+ method @Deprecated public androidx.core.graphics.Insets getSystemGestureInsets();
+ method @Deprecated public int getSystemWindowInsetBottom();
+ method @Deprecated public int getSystemWindowInsetLeft();
+ method @Deprecated public int getSystemWindowInsetRight();
+ method @Deprecated public int getSystemWindowInsetTop();
+ method @Deprecated public androidx.core.graphics.Insets getSystemWindowInsets();
+ method @Deprecated public androidx.core.graphics.Insets getTappableElementInsets();
+ method public boolean hasInsets();
+ method @Deprecated public boolean hasStableInsets();
+ method @Deprecated public boolean hasSystemWindowInsets();
+ method public androidx.core.view.WindowInsetsCompat inset(androidx.core.graphics.Insets);
+ method public androidx.core.view.WindowInsetsCompat inset(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+ method public boolean isConsumed();
+ method public boolean isRound();
+ method public boolean isVisible(int);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
+ method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
+ method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
+ method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets, android.view.View?);
+ field public static final androidx.core.view.WindowInsetsCompat CONSUMED;
+ }
+
+ public static final class WindowInsetsCompat.Builder {
+ ctor public WindowInsetsCompat.Builder();
+ ctor public WindowInsetsCompat.Builder(androidx.core.view.WindowInsetsCompat);
+ method public androidx.core.view.WindowInsetsCompat build();
+ method public androidx.core.view.WindowInsetsCompat.Builder setDisplayCutout(androidx.core.view.DisplayCutoutCompat?);
+ method public androidx.core.view.WindowInsetsCompat.Builder setInsets(int, androidx.core.graphics.Insets);
+ method public androidx.core.view.WindowInsetsCompat.Builder setInsetsIgnoringVisibility(int, androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setMandatorySystemGestureInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setStableInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemGestureInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemWindowInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setTappableElementInsets(androidx.core.graphics.Insets);
+ method public androidx.core.view.WindowInsetsCompat.Builder setVisible(int, boolean);
+ }
+
+ public static final class WindowInsetsCompat.Type {
+ method public static int captionBar();
+ method public static int displayCutout();
+ method public static int ime();
+ method public static int mandatorySystemGestures();
+ method public static int navigationBars();
+ method public static int statusBars();
+ method public static int systemBars();
+ method public static int systemGestures();
+ method public static int tappableElement();
+ }
+
+ public final class WindowInsetsControllerCompat {
+ ctor public WindowInsetsControllerCompat(android.view.Window, android.view.View);
+ method public void addOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
+ method public void controlWindowInsetsAnimation(int, long, android.view.animation.Interpolator?, android.os.CancellationSignal?, androidx.core.view.WindowInsetsAnimationControlListenerCompat);
+ method public int getSystemBarsBehavior();
+ method public void hide(int);
+ method public boolean isAppearanceLightNavigationBars();
+ method public boolean isAppearanceLightStatusBars();
+ method public void removeOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
+ method public void setAppearanceLightNavigationBars(boolean);
+ method public void setAppearanceLightStatusBars(boolean);
+ method public void setSystemBarsBehavior(int);
+ method public void show(int);
+ method @Deprecated @RequiresApi(30) public static androidx.core.view.WindowInsetsControllerCompat toWindowInsetsControllerCompat(android.view.WindowInsetsController);
+ field public static final int BEHAVIOR_DEFAULT = 1; // 0x1
+ field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1; // 0x1
+ field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0; // 0x0
+ field public static final int BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE = 2; // 0x2
+ }
+
+ public static interface WindowInsetsControllerCompat.OnControllableInsetsChangedListener {
+ method public void onControllableInsetsChanged(androidx.core.view.WindowInsetsControllerCompat, int);
+ }
+
+}
+
+package androidx.core.view.accessibility {
+
+ public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
+ method public void onClick(android.view.View);
+ }
+
+ public final class AccessibilityEventCompat {
+ method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! asRecord(android.view.accessibility.AccessibilityEvent!);
+ method public static int getAction(android.view.accessibility.AccessibilityEvent);
+ method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
+ method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
+ method @Deprecated public static int getRecordCount(android.view.accessibility.AccessibilityEvent!);
+ method public static void setAction(android.view.accessibility.AccessibilityEvent, int);
+ method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
+ method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
+ field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
+ field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
+ field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
+ field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
+ field public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 64; // 0x40
+ field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+ field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+ field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+ field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+ field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+ field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+ field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+ field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+ field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+ field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+ field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+ field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+ field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+ field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+ field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+ field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+ field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+ }
+
+ public final class AccessibilityManagerCompat {
+ method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ }
+
+ @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ method @Deprecated public void onAccessibilityStateChanged(boolean);
+ }
+
+ @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+ }
+
+ public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+ method public void onTouchExplorationStateChanged(boolean);
+ }
+
+ public class AccessibilityNodeInfoCompat {
+ ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
+ method public void addAction(int);
+ method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public void addChild(android.view.View!);
+ method public void addChild(android.view.View!, int);
+ method public boolean canOpenPopup();
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByText(String!);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByViewId(String!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
+ method @Deprecated public int getActions();
+ method public java.util.List<java.lang.String!> getAvailableExtraData();
+ method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
+ method public void getBoundsInScreen(android.graphics.Rect!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
+ method public int getChildCount();
+ method public CharSequence! getClassName();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
+ method public CharSequence! getContentDescription();
+ method public int getDrawingOrder();
+ method public CharSequence! getError();
+ method public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo? getExtraRenderingInfo();
+ method public android.os.Bundle! getExtras();
+ method public CharSequence? getHintText();
+ method @Deprecated public Object! getInfo();
+ method public int getInputType();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
+ method public int getLiveRegion();
+ method public int getMaxTextLength();
+ method public int getMinMillisBetweenContentChanges();
+ method public int getMovementGranularities();
+ method public CharSequence! getPackageName();
+ method public CharSequence? getPaneTitle();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
+ method public CharSequence? getRoleDescription();
+ method public CharSequence? getStateDescription();
+ method public CharSequence! getText();
+ method public int getTextSelectionEnd();
+ method public int getTextSelectionStart();
+ method public CharSequence? getTooltipText();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+ method public String? getUniqueId();
+ method public String! getViewIdResourceName();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
+ method public int getWindowId();
+ method public boolean hasRequestInitialAccessibilityFocus();
+ method public boolean isAccessibilityFocused();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isClickable();
+ method public boolean isContentInvalid();
+ method public boolean isContextClickable();
+ method public boolean isDismissable();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public boolean isFocused();
+ method public boolean isHeading();
+ method public boolean isImportantForAccessibility();
+ method public boolean isLongClickable();
+ method public boolean isMultiLine();
+ method public boolean isPassword();
+ method public boolean isScreenReaderFocusable();
+ method public boolean isScrollable();
+ method public boolean isSelected();
+ method public boolean isShowingHintText();
+ method public boolean isTextEntryKey();
+ method public boolean isTextSelectable();
+ method public boolean isVisibleToUser();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method public boolean performAction(int);
+ method public boolean performAction(int, android.os.Bundle!);
+ method @Deprecated public void recycle();
+ method public boolean refresh();
+ method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public boolean removeChild(android.view.View!);
+ method public boolean removeChild(android.view.View!, int);
+ method public void setAccessibilityFocused(boolean);
+ method public void setAvailableExtraData(java.util.List<java.lang.String!>);
+ method @Deprecated public void setBoundsInParent(android.graphics.Rect!);
+ method public void setBoundsInScreen(android.graphics.Rect!);
+ method public void setCanOpenPopup(boolean);
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setClassName(CharSequence!);
+ method public void setClickable(boolean);
+ method public void setCollectionInfo(Object!);
+ method public void setCollectionItemInfo(Object!);
+ method public void setContentDescription(CharSequence!);
+ method public void setContentInvalid(boolean);
+ method public void setContextClickable(boolean);
+ method public void setDismissable(boolean);
+ method public void setDrawingOrder(int);
+ method public void setEditable(boolean);
+ method public void setEnabled(boolean);
+ method public void setError(CharSequence!);
+ method public void setFocusable(boolean);
+ method public void setFocused(boolean);
+ method public void setHeading(boolean);
+ method public void setHintText(CharSequence?);
+ method public void setImportantForAccessibility(boolean);
+ method public void setInputType(int);
+ method public void setLabelFor(android.view.View!);
+ method public void setLabelFor(android.view.View!, int);
+ method public void setLabeledBy(android.view.View!);
+ method public void setLabeledBy(android.view.View!, int);
+ method public void setLiveRegion(int);
+ method public void setLongClickable(boolean);
+ method public void setMaxTextLength(int);
+ method public void setMinMillisBetweenContentChanges(int);
+ method public void setMovementGranularities(int);
+ method public void setMultiLine(boolean);
+ method public void setPackageName(CharSequence!);
+ method public void setPaneTitle(CharSequence?);
+ method public void setParent(android.view.View!);
+ method public void setParent(android.view.View!, int);
+ method public void setPassword(boolean);
+ method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
+ method public void setRequestInitialAccessibilityFocus(boolean);
+ method public void setRoleDescription(CharSequence?);
+ method public void setScreenReaderFocusable(boolean);
+ method public void setScrollable(boolean);
+ method public void setSelected(boolean);
+ method public void setShowingHintText(boolean);
+ method public void setSource(android.view.View!);
+ method public void setSource(android.view.View!, int);
+ method public void setStateDescription(CharSequence?);
+ method public void setText(CharSequence!);
+ method public void setTextEntryKey(boolean);
+ method public void setTextSelectable(boolean);
+ method public void setTextSelection(int, int);
+ method public void setTooltipText(CharSequence?);
+ method public void setTouchDelegateInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat);
+ method public void setTraversalAfter(android.view.View!);
+ method public void setTraversalAfter(android.view.View!, int);
+ method public void setTraversalBefore(android.view.View!);
+ method public void setTraversalBefore(android.view.View!, int);
+ method public void setUniqueId(String?);
+ method public void setViewIdResourceName(String!);
+ method public void setVisibleToUser(boolean);
+ method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
+ field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+ field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+ field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+ field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+ field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
+ field public static final String ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT = "android.view.accessibility.action.ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT";
+ field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+ field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+ field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+ field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+ field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+ field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+ field public static final int ACTION_CLICK = 16; // 0x10
+ field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+ field public static final int ACTION_COPY = 16384; // 0x4000
+ field public static final int ACTION_CUT = 65536; // 0x10000
+ field public static final int ACTION_DISMISS = 1048576; // 0x100000
+ field public static final int ACTION_EXPAND = 262144; // 0x40000
+ field public static final int ACTION_FOCUS = 1; // 0x1
+ field public static final int ACTION_LONG_CLICK = 32; // 0x20
+ field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+ field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+ field public static final int ACTION_PASTE = 32768; // 0x8000
+ field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+ field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+ field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+ field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+ field public static final int ACTION_SELECT = 4; // 0x4
+ field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+ field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+ field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH = "android.core.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH";
+ field public static final int EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH = 20000; // 0x4e20
+ field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX = "android.core.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX";
+ field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY = "android.core.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_KEY";
+ field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+ field public static final int FOCUS_INPUT = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+ field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+ field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+ field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+ }
+
+ public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
+ ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!);
+ method public int getId();
+ method public CharSequence! getLabel();
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_CANCEL;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_DROP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_START;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_IME_ENTER;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PRESS_AND_HOLD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SHOW_TEXT_SUGGESTIONS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+ method public int getColumnCount();
+ method public int getRowCount();
+ method public int getSelectionMode();
+ method public boolean isHierarchical();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
+ field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+ field public static final int SELECTION_MODE_NONE = 0; // 0x0
+ field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ method @Deprecated public boolean isHeading();
+ method public boolean isSelected();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
+ }
+
+ public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+ method public float getCurrent();
+ method public float getMax();
+ method public float getMin();
+ method public int getType();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! obtain(int, float, float, float);
+ field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+ field public static final int RANGE_TYPE_INT = 0; // 0x0
+ field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+ }
+
+ public static final class AccessibilityNodeInfoCompat.TouchDelegateInfoCompat {
+ ctor public AccessibilityNodeInfoCompat.TouchDelegateInfoCompat(java.util.Map<android.graphics.Region!,android.view.View!>);
+ method public android.graphics.Region? getRegionAt(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getRegionCount();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getTargetForRegion(android.graphics.Region);
+ }
+
+ public class AccessibilityNodeProviderCompat {
+ ctor public AccessibilityNodeProviderCompat();
+ ctor public AccessibilityNodeProviderCompat(Object?);
+ method public void addExtraDataToAccessibilityNodeInfo(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat, String, android.os.Bundle?);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>? findAccessibilityNodeInfosByText(String, int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
+ method public Object? getProvider();
+ method public boolean performAction(int, int, android.os.Bundle?);
+ field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+ }
+
+ public class AccessibilityRecordCompat {
+ ctor @Deprecated public AccessibilityRecordCompat(Object!);
+ method @Deprecated public boolean equals(Object?);
+ method @Deprecated public int getAddedCount();
+ method @Deprecated public CharSequence! getBeforeText();
+ method @Deprecated public CharSequence! getClassName();
+ method @Deprecated public CharSequence! getContentDescription();
+ method @Deprecated public int getCurrentItemIndex();
+ method @Deprecated public int getFromIndex();
+ method @Deprecated public Object! getImpl();
+ method @Deprecated public int getItemCount();
+ method @Deprecated public int getMaxScrollX();
+ method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord);
+ method @Deprecated public int getMaxScrollY();
+ method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord);
+ method @Deprecated public android.os.Parcelable! getParcelableData();
+ method @Deprecated public int getRemovedCount();
+ method @Deprecated public int getScrollX();
+ method @Deprecated public int getScrollY();
+ method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
+ method @Deprecated public java.util.List<java.lang.CharSequence!>! getText();
+ method @Deprecated public int getToIndex();
+ method @Deprecated public int getWindowId();
+ method @Deprecated public int hashCode();
+ method @Deprecated public boolean isChecked();
+ method @Deprecated public boolean isEnabled();
+ method @Deprecated public boolean isFullScreen();
+ method @Deprecated public boolean isPassword();
+ method @Deprecated public boolean isScrollable();
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
+ method @Deprecated public void recycle();
+ method @Deprecated public void setAddedCount(int);
+ method @Deprecated public void setBeforeText(CharSequence!);
+ method @Deprecated public void setChecked(boolean);
+ method @Deprecated public void setClassName(CharSequence!);
+ method @Deprecated public void setContentDescription(CharSequence!);
+ method @Deprecated public void setCurrentItemIndex(int);
+ method @Deprecated public void setEnabled(boolean);
+ method @Deprecated public void setFromIndex(int);
+ method @Deprecated public void setFullScreen(boolean);
+ method @Deprecated public void setItemCount(int);
+ method @Deprecated public void setMaxScrollX(int);
+ method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
+ method @Deprecated public void setMaxScrollY(int);
+ method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
+ method @Deprecated public void setParcelableData(android.os.Parcelable!);
+ method @Deprecated public void setPassword(boolean);
+ method @Deprecated public void setRemovedCount(int);
+ method @Deprecated public void setScrollX(int);
+ method @Deprecated public void setScrollY(int);
+ method @Deprecated public void setScrollable(boolean);
+ method @Deprecated public void setSource(android.view.View!);
+ method @Deprecated public void setSource(android.view.View!, int);
+ method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
+ method @Deprecated public void setToIndex(int);
+ }
+
+ public interface AccessibilityViewCommand {
+ method public boolean perform(android.view.View, androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments?);
+ }
+
+ public abstract static class AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.CommandArguments();
+ }
+
+ public static final class AccessibilityViewCommand.MoveAtGranularityArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveAtGranularityArguments();
+ method public boolean getExtendSelection();
+ method public int getGranularity();
+ }
+
+ public static final class AccessibilityViewCommand.MoveHtmlArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveHtmlArguments();
+ method public String? getHTMLElement();
+ }
+
+ public static final class AccessibilityViewCommand.MoveWindowArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveWindowArguments();
+ method public int getX();
+ method public int getY();
+ }
+
+ public static final class AccessibilityViewCommand.ScrollToPositionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.ScrollToPositionArguments();
+ method public int getColumn();
+ method public int getRow();
+ }
+
+ public static final class AccessibilityViewCommand.SetProgressArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetProgressArguments();
+ method public float getProgress();
+ }
+
+ public static final class AccessibilityViewCommand.SetSelectionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetSelectionArguments();
+ method public int getEnd();
+ method public int getStart();
+ }
+
+ public static final class AccessibilityViewCommand.SetTextArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetTextArguments();
+ method public CharSequence? getText();
+ }
+
+ public class AccessibilityWindowInfoCompat {
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getAnchor();
+ method public void getBoundsInScreen(android.graphics.Rect);
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
+ method public int getChildCount();
+ method public int getDisplayId();
+ method public int getId();
+ method public int getLayer();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
+ method public void getRegionInScreen(android.graphics.Region);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
+ method public CharSequence? getTitle();
+ method public int getType();
+ method public boolean isAccessibilityFocused();
+ method public boolean isActive();
+ method public boolean isFocused();
+ method public boolean isInPictureInPictureMode();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
+ method @Deprecated public void recycle();
+ method public android.view.accessibility.AccessibilityWindowInfo? unwrap();
+ field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+ field public static final int TYPE_APPLICATION = 1; // 0x1
+ field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+ field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+ field public static final int TYPE_SYSTEM = 3; // 0x3
+ }
+
+}
+
+package androidx.core.view.animation {
+
+ public final class PathInterpolatorCompat {
+ method public static android.view.animation.Interpolator create(android.graphics.Path);
+ method public static android.view.animation.Interpolator create(float, float);
+ method public static android.view.animation.Interpolator create(float, float, float, float);
+ }
+
+}
+
+package androidx.core.view.inputmethod {
+
+ public final class EditorInfoCompat {
+ ctor @Deprecated public EditorInfoCompat();
+ method public static String![] getContentMimeTypes(android.view.inputmethod.EditorInfo);
+ method public static CharSequence? getInitialSelectedText(android.view.inputmethod.EditorInfo, int);
+ method public static CharSequence? getInitialTextAfterCursor(android.view.inputmethod.EditorInfo, int, int);
+ method public static CharSequence? getInitialTextBeforeCursor(android.view.inputmethod.EditorInfo, int, int);
+ method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, String![]?);
+ method public static void setInitialSurroundingSubText(android.view.inputmethod.EditorInfo, CharSequence, int);
+ method public static void setInitialSurroundingText(android.view.inputmethod.EditorInfo, CharSequence);
+ field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
+ field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
+ }
+
+ public final class InputConnectionCompat {
+ ctor @Deprecated public InputConnectionCompat();
+ method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
+ method @Deprecated public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
+ method public static android.view.inputmethod.InputConnection createWrapper(android.view.View, android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+ field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
+ }
+
+ public static interface InputConnectionCompat.OnCommitContentListener {
+ method public boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
+ }
+
+ public final class InputContentInfoCompat {
+ ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri?);
+ method public android.net.Uri getContentUri();
+ method public android.content.ClipDescription getDescription();
+ method public android.net.Uri? getLinkUri();
+ method public void releasePermission();
+ method public void requestPermission();
+ method public Object? unwrap();
+ method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
+ ctor public AutoScrollHelper(android.view.View);
+ method public abstract boolean canTargetScrollHorizontally(int);
+ method public abstract boolean canTargetScrollVertically(int);
+ method public boolean isEnabled();
+ method public boolean isExclusive();
+ method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
+ method public abstract void scrollTargetBy(int, int);
+ method public androidx.core.widget.AutoScrollHelper setActivationDelay(int);
+ method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
+ method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
+ method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
+ method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRampDownDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRampUpDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRelativeEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRelativeVelocity(float, float);
+ field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
+ field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
+ field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
+ field public static final float NO_MAX = 3.4028235E38f;
+ field public static final float NO_MIN = 0.0f;
+ field public static final float RELATIVE_UNSPECIFIED = 0.0f;
+ }
+
+ public final class CheckedTextViewCompat {
+ method public static android.graphics.drawable.Drawable? getCheckMarkDrawable(android.widget.CheckedTextView);
+ method public static android.content.res.ColorStateList? getCheckMarkTintList(android.widget.CheckedTextView);
+ method public static android.graphics.PorterDuff.Mode? getCheckMarkTintMode(android.widget.CheckedTextView);
+ method public static void setCheckMarkTintList(android.widget.CheckedTextView, android.content.res.ColorStateList?);
+ method public static void setCheckMarkTintMode(android.widget.CheckedTextView, android.graphics.PorterDuff.Mode?);
+ }
+
+ public final class CompoundButtonCompat {
+ method public static android.graphics.drawable.Drawable? getButtonDrawable(android.widget.CompoundButton);
+ method public static android.content.res.ColorStateList? getButtonTintList(android.widget.CompoundButton);
+ method public static android.graphics.PorterDuff.Mode? getButtonTintMode(android.widget.CompoundButton);
+ method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList?);
+ method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode?);
+ }
+
+ public class ContentLoadingProgressBar extends android.widget.ProgressBar {
+ ctor public ContentLoadingProgressBar(android.content.Context);
+ ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
+ method public void hide();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void show();
+ }
+
+ public final class EdgeEffectCompat {
+ ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
+ method public static android.widget.EdgeEffect create(android.content.Context, android.util.AttributeSet?);
+ method @Deprecated public boolean draw(android.graphics.Canvas!);
+ method @Deprecated public void finish();
+ method public static float getDistance(android.widget.EdgeEffect);
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean onAbsorb(int);
+ method @Deprecated public boolean onPull(float);
+ method @Deprecated public boolean onPull(float, float);
+ method public static void onPull(android.widget.EdgeEffect, float, float);
+ method public static float onPullDistance(android.widget.EdgeEffect, float, float);
+ method @Deprecated public boolean onRelease();
+ method @Deprecated public void setSize(int, int);
+ }
+
+ public class ImageViewCompat {
+ method public static android.content.res.ColorStateList? getImageTintList(android.widget.ImageView);
+ method public static android.graphics.PorterDuff.Mode? getImageTintMode(android.widget.ImageView);
+ method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList?);
+ method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode?);
+ }
+
+ public final class ListPopupWindowCompat {
+ method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
+ method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+ }
+
+ public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
+ ctor public ListViewAutoScrollHelper(android.widget.ListView);
+ method public boolean canTargetScrollHorizontally(int);
+ method public boolean canTargetScrollVertically(int);
+ method public void scrollTargetBy(int, int);
+ }
+
+ public final class ListViewCompat {
+ method public static boolean canScrollList(android.widget.ListView, int);
+ method public static void scrollListBy(android.widget.ListView, int);
+ }
+
+ public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
+ ctor public NestedScrollView(android.content.Context);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?, int);
+ method public boolean arrowScroll(int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
+ method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fling(int);
+ method public boolean fullScroll(int);
+ method public int getMaxScrollAmount();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isFillViewport();
+ method public boolean isSmoothScrollingEnabled();
+ method public void onAttachedToWindow();
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ method public boolean pageScroll(int);
+ method public void setFillViewport(boolean);
+ method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener?);
+ method public void setSmoothScrollingEnabled(boolean);
+ method public final void smoothScrollBy(int, int);
+ method public final void smoothScrollBy(int, int, int);
+ method public final void smoothScrollTo(int, int);
+ method public final void smoothScrollTo(int, int, int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public static interface NestedScrollView.OnScrollChangeListener {
+ method public void onScrollChange(androidx.core.widget.NestedScrollView, int, int, int, int);
+ }
+
+ public final class PopupMenuCompat {
+ method public static android.view.View.OnTouchListener? getDragToOpenListener(Object);
+ }
+
+ public final class PopupWindowCompat {
+ method public static boolean getOverlapAnchor(android.widget.PopupWindow);
+ method public static int getWindowLayoutType(android.widget.PopupWindow);
+ method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
+ method public static void setWindowLayoutType(android.widget.PopupWindow, int);
+ method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
+ }
+
+ @Deprecated public final class ScrollerCompat {
+ method @Deprecated public void abortAnimation();
+ method @Deprecated public boolean computeScrollOffset();
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
+ method @Deprecated public float getCurrVelocity();
+ method @Deprecated public int getCurrX();
+ method @Deprecated public int getCurrY();
+ method @Deprecated public int getFinalX();
+ method @Deprecated public int getFinalY();
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean isOverScrolled();
+ method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
+ method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
+ method @Deprecated public boolean springBack(int, int, int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int, int);
+ }
+
+ public final class TextViewCompat {
+ method public static int getAutoSizeMaxTextSize(android.widget.TextView);
+ method public static int getAutoSizeMinTextSize(android.widget.TextView);
+ method public static int getAutoSizeStepGranularity(android.widget.TextView);
+ method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
+ method public static int getAutoSizeTextType(android.widget.TextView);
+ method public static android.content.res.ColorStateList? getCompoundDrawableTintList(android.widget.TextView);
+ method public static android.graphics.PorterDuff.Mode? getCompoundDrawableTintMode(android.widget.TextView);
+ method public static android.graphics.drawable.Drawable![] getCompoundDrawablesRelative(android.widget.TextView);
+ method public static int getFirstBaselineToTopHeight(android.widget.TextView);
+ method public static int getLastBaselineToBottomHeight(android.widget.TextView);
+ method public static int getMaxLines(android.widget.TextView);
+ method public static int getMinLines(android.widget.TextView);
+ method public static androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParams(android.widget.TextView);
+ method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
+ method public static void setCompoundDrawableTintList(android.widget.TextView, android.content.res.ColorStateList?);
+ method public static void setCompoundDrawableTintMode(android.widget.TextView, android.graphics.PorterDuff.Mode?);
+ method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+ method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
+ method public static void setFirstBaselineToTopHeight(android.widget.TextView, @IntRange(from=0) @Px int);
+ method public static void setLastBaselineToBottomHeight(android.widget.TextView, @IntRange(from=0) @Px int);
+ method public static void setLineHeight(android.widget.TextView, @IntRange(from=0) @Px int);
+ method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
+ method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
+ method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
+ field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+ field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
+ }
+
+ public interface TintableCompoundButton {
+ method public android.content.res.ColorStateList? getSupportButtonTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface TintableCompoundDrawablesView {
+ method public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+}
+
diff --git a/core/core/api/res-1.10.0-beta01.txt b/core/core/api/res-1.10.0-beta01.txt
new file mode 100644
index 0000000..dd913d3
--- /dev/null
+++ b/core/core/api/res-1.10.0-beta01.txt
@@ -0,0 +1,21 @@
+attr alpha
+attr font
+attr fontProviderAuthority
+attr fontProviderCerts
+attr fontProviderFetchStrategy
+attr fontProviderFetchTimeout
+attr fontProviderPackage
+attr fontProviderQuery
+attr fontProviderSystemFontFamily
+attr fontStyle
+attr fontVariationSettings
+attr fontWeight
+attr lStar
+attr queryPatterns
+attr shortcutMatchRequired
+attr ttcIndex
+style TextAppearance_Compat_Notification
+style TextAppearance_Compat_Notification_Info
+style TextAppearance_Compat_Notification_Line2
+style TextAppearance_Compat_Notification_Time
+style TextAppearance_Compat_Notification_Title
diff --git a/core/core/api/restricted_1.10.0-beta01.txt b/core/core/api/restricted_1.10.0-beta01.txt
new file mode 100644
index 0000000..9556806
--- /dev/null
+++ b/core/core/api/restricted_1.10.0-beta01.txt
@@ -0,0 +1,4438 @@
+// Signature format: 4.0
+package android.support.v4.os {
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ResultReceiver implements android.os.Parcelable {
+ ctor public ResultReceiver(android.os.Handler!);
+ method public int describeContents();
+ method protected void onReceiveResult(int, android.os.Bundle!);
+ method public void send(int, android.os.Bundle!);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.os.ResultReceiver!>! CREATOR;
+ }
+
+}
+
+package androidx.core.accessibilityservice {
+
+ public final class AccessibilityServiceInfoCompat {
+ method public static String capabilityToString(int);
+ method public static String feedbackTypeToString(int);
+ method public static String? flagToString(int);
+ method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static String? loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
+ field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
+ field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+ field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+ field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+ field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+ field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+ field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+ field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+ field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+ }
+
+}
+
+package androidx.core.app {
+
+ public class ActivityCompat extends androidx.core.content.ContextCompat {
+ ctor protected ActivityCompat();
+ method public static void finishAffinity(android.app.Activity);
+ method public static void finishAfterTransition(android.app.Activity);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.ActivityCompat.PermissionCompatDelegate? getPermissionCompatDelegate();
+ method public static android.net.Uri? getReferrer(android.app.Activity);
+ method @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
+ method public static boolean isLaunchedFromBubble(android.app.Activity);
+ method public static void postponeEnterTransition(android.app.Activity);
+ method public static void recreate(android.app.Activity);
+ method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
+ method public static void requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
+ method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setLocusContext(android.app.Activity, androidx.core.content.LocusIdCompat?, android.os.Bundle?);
+ method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, String);
+ method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle?);
+ method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+ method public static void startPostponedEnterTransition(android.app.Activity);
+ }
+
+ public static interface ActivityCompat.OnRequestPermissionsResultCallback {
+ method public void onRequestPermissionsResult(int, String![], int[]);
+ }
+
+ public static interface ActivityCompat.PermissionCompatDelegate {
+ method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
+ method public boolean requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ActivityCompat.RequestPermissionsRequestCodeValidator {
+ method public void validateRequestPermissionsRequestCode(int);
+ }
+
+ public final class ActivityManagerCompat {
+ method public static boolean isLowRamDevice(android.app.ActivityManager);
+ }
+
+ public class ActivityOptionsCompat {
+ ctor protected ActivityOptionsCompat();
+ method public android.graphics.Rect? getLaunchBounds();
+ method public static androidx.core.app.ActivityOptionsCompat makeBasic();
+ method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View!,java.lang.String!>!...);
+ method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
+ method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+ method public void requestUsageTimeReport(android.app.PendingIntent);
+ method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
+ method public android.os.Bundle? toBundle();
+ method public void update(androidx.core.app.ActivityOptionsCompat);
+ field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+ field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+ }
+
+ public final class AlarmManagerCompat {
+ method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
+ method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ }
+
+ @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
+ ctor public AppComponentFactory();
+ method public final android.app.Activity instantiateActivity(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Application instantiateApplication(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.ContentProvider instantiateProvider(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.BroadcastReceiver instantiateReceiver(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Service instantiateService(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ }
+
+ public class AppLaunchChecker {
+ ctor @Deprecated public AppLaunchChecker();
+ method public static boolean hasStartedFromLauncher(android.content.Context);
+ method public static void onActivityCreate(android.app.Activity);
+ }
+
+ public final class AppOpsManagerCompat {
+ method public static int checkOrNoteProxyOp(android.content.Context, int, String, String);
+ method public static int noteOp(android.content.Context, String, int, String);
+ method public static int noteOpNoThrow(android.content.Context, String, int, String);
+ method public static int noteProxyOp(android.content.Context, String, String);
+ method public static int noteProxyOpNoThrow(android.content.Context, String, String);
+ method public static String? permissionToOp(String);
+ field public static final int MODE_ALLOWED = 0; // 0x0
+ field public static final int MODE_DEFAULT = 3; // 0x3
+ field public static final int MODE_ERRORED = 2; // 0x2
+ field public static final int MODE_IGNORED = 1; // 0x1
+ }
+
+ public final class BundleCompat {
+ method public static android.os.IBinder? getBinder(android.os.Bundle, String?);
+ method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ComponentActivity extends android.app.Activity implements androidx.core.view.KeyEventDispatcher.Component androidx.lifecycle.LifecycleOwner {
+ ctor public ComponentActivity();
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public <T extends androidx.core.app.ComponentActivity.ExtraData> T! getExtraData(Class<T!>!);
+ method public androidx.lifecycle.Lifecycle getLifecycle();
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void putExtraData(androidx.core.app.ComponentActivity.ExtraData!);
+ method protected final boolean shouldDumpInternalState(String![]?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean superDispatchKeyEvent(android.view.KeyEvent);
+ }
+
+ @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class ComponentActivity.ExtraData {
+ ctor @Deprecated public ComponentActivity.ExtraData();
+ }
+
+ @RequiresApi(api=28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class CoreComponentFactory extends android.app.AppComponentFactory {
+ ctor public CoreComponentFactory();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface CoreComponentFactory.CompatWrapped {
+ method public Object! getWrapper();
+ }
+
+ public class DialogCompat {
+ method public static android.view.View requireViewById(android.app.Dialog, int);
+ }
+
+ public class FrameMetricsAggregator {
+ ctor public FrameMetricsAggregator();
+ ctor public FrameMetricsAggregator(@androidx.core.app.FrameMetricsAggregator.MetricType int);
+ method public void add(android.app.Activity);
+ method public android.util.SparseIntArray![]? getMetrics();
+ method public android.util.SparseIntArray![]? remove(android.app.Activity);
+ method public android.util.SparseIntArray![]? reset();
+ method public android.util.SparseIntArray![]? stop();
+ field public static final int ANIMATION_DURATION = 256; // 0x100
+ field public static final int ANIMATION_INDEX = 8; // 0x8
+ field public static final int COMMAND_DURATION = 32; // 0x20
+ field public static final int COMMAND_INDEX = 5; // 0x5
+ field public static final int DELAY_DURATION = 128; // 0x80
+ field public static final int DELAY_INDEX = 7; // 0x7
+ field public static final int DRAW_DURATION = 8; // 0x8
+ field public static final int DRAW_INDEX = 3; // 0x3
+ field public static final int EVERY_DURATION = 511; // 0x1ff
+ field public static final int INPUT_DURATION = 2; // 0x2
+ field public static final int INPUT_INDEX = 1; // 0x1
+ field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
+ field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
+ field public static final int SWAP_DURATION = 64; // 0x40
+ field public static final int SWAP_INDEX = 6; // 0x6
+ field public static final int SYNC_DURATION = 16; // 0x10
+ field public static final int SYNC_INDEX = 4; // 0x4
+ field public static final int TOTAL_DURATION = 1; // 0x1
+ field public static final int TOTAL_INDEX = 0; // 0x0
+ }
+
+ @IntDef(flag=true, value={androidx.core.app.FrameMetricsAggregator.TOTAL_DURATION, androidx.core.app.FrameMetricsAggregator.INPUT_DURATION, androidx.core.app.FrameMetricsAggregator.LAYOUT_MEASURE_DURATION, androidx.core.app.FrameMetricsAggregator.DRAW_DURATION, androidx.core.app.FrameMetricsAggregator.SYNC_DURATION, androidx.core.app.FrameMetricsAggregator.COMMAND_DURATION, androidx.core.app.FrameMetricsAggregator.SWAP_DURATION, androidx.core.app.FrameMetricsAggregator.DELAY_DURATION, androidx.core.app.FrameMetricsAggregator.ANIMATION_DURATION, androidx.core.app.FrameMetricsAggregator.EVERY_DURATION}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FrameMetricsAggregator.MetricType {
+ }
+
+ @Deprecated public abstract class JobIntentService extends android.app.Service {
+ ctor @Deprecated public JobIntentService();
+ method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
+ method @Deprecated public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+ method @Deprecated public boolean isStopped();
+ method @Deprecated public android.os.IBinder! onBind(android.content.Intent);
+ method @Deprecated protected abstract void onHandleWork(android.content.Intent);
+ method @Deprecated public boolean onStopCurrentWork();
+ method @Deprecated public void setInterruptIfStopped(boolean);
+ }
+
+ public final class LocaleManagerCompat {
+ method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
+ }
+
+ public final class MultiWindowModeChangedInfo {
+ ctor public MultiWindowModeChangedInfo(boolean);
+ ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
+ method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
+ method public boolean isInMultiWindowMode();
+ }
+
+ public final class NavUtils {
+ method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static String? getParentActivityName(android.app.Activity);
+ method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void navigateUpFromSameTask(android.app.Activity);
+ method public static void navigateUpTo(android.app.Activity, android.content.Intent);
+ method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
+ field public static final String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface NotificationBuilderWithBuilderAccessor {
+ method public android.app.Notification.Builder! getBuilder();
+ }
+
+ public class NotificationChannelCompat {
+ method public boolean canBubble();
+ method public boolean canBypassDnd();
+ method public boolean canShowBadge();
+ method public android.media.AudioAttributes? getAudioAttributes();
+ method public String? getConversationId();
+ method public String? getDescription();
+ method public String? getGroup();
+ method public String getId();
+ method public int getImportance();
+ method public int getLightColor();
+ method @androidx.core.app.NotificationCompat.NotificationVisibility public int getLockscreenVisibility();
+ method public CharSequence? getName();
+ method public String? getParentChannelId();
+ method public android.net.Uri? getSound();
+ method public long[]? getVibrationPattern();
+ method public boolean isImportantConversation();
+ method public boolean shouldShowLights();
+ method public boolean shouldVibrate();
+ method public androidx.core.app.NotificationChannelCompat.Builder toBuilder();
+ field public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
+ }
+
+ public static class NotificationChannelCompat.Builder {
+ ctor public NotificationChannelCompat.Builder(String, int);
+ method public androidx.core.app.NotificationChannelCompat build();
+ method public androidx.core.app.NotificationChannelCompat.Builder setConversationId(String, String);
+ method public androidx.core.app.NotificationChannelCompat.Builder setDescription(String?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setGroup(String?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setImportance(int);
+ method public androidx.core.app.NotificationChannelCompat.Builder setLightColor(int);
+ method public androidx.core.app.NotificationChannelCompat.Builder setLightsEnabled(boolean);
+ method public androidx.core.app.NotificationChannelCompat.Builder setName(CharSequence?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setShowBadge(boolean);
+ method public androidx.core.app.NotificationChannelCompat.Builder setSound(android.net.Uri?, android.media.AudioAttributes?);
+ method public androidx.core.app.NotificationChannelCompat.Builder setVibrationEnabled(boolean);
+ method public androidx.core.app.NotificationChannelCompat.Builder setVibrationPattern(long[]?);
+ }
+
+ public class NotificationChannelGroupCompat {
+ method public java.util.List<androidx.core.app.NotificationChannelCompat!> getChannels();
+ method public String? getDescription();
+ method public String getId();
+ method public CharSequence? getName();
+ method public boolean isBlocked();
+ method public androidx.core.app.NotificationChannelGroupCompat.Builder toBuilder();
+ }
+
+ public static class NotificationChannelGroupCompat.Builder {
+ ctor public NotificationChannelGroupCompat.Builder(String);
+ method public androidx.core.app.NotificationChannelGroupCompat build();
+ method public androidx.core.app.NotificationChannelGroupCompat.Builder setDescription(String?);
+ method public androidx.core.app.NotificationChannelGroupCompat.Builder setName(CharSequence?);
+ }
+
+ public class NotificationCompat {
+ ctor @Deprecated public NotificationCompat();
+ method public static androidx.core.app.NotificationCompat.Action? getAction(android.app.Notification, int);
+ method public static int getActionCount(android.app.Notification);
+ method public static boolean getAllowSystemGeneratedContextualActions(android.app.Notification);
+ method public static boolean getAutoCancel(android.app.Notification);
+ method public static int getBadgeIconType(android.app.Notification);
+ method public static androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata(android.app.Notification);
+ method public static String? getCategory(android.app.Notification);
+ method public static String? getChannelId(android.app.Notification);
+ method public static int getColor(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getContentInfo(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getContentText(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getContentTitle(android.app.Notification);
+ method public static android.os.Bundle? getExtras(android.app.Notification);
+ method public static String? getGroup(android.app.Notification);
+ method @androidx.core.app.NotificationCompat.GroupAlertBehavior public static int getGroupAlertBehavior(android.app.Notification);
+ method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
+ method public static boolean getLocalOnly(android.app.Notification);
+ method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
+ method public static boolean getOngoing(android.app.Notification);
+ method public static boolean getOnlyAlertOnce(android.app.Notification);
+ method public static java.util.List<androidx.core.app.Person!> getPeople(android.app.Notification);
+ method public static android.app.Notification? getPublicVersion(android.app.Notification);
+ method public static CharSequence? getSettingsText(android.app.Notification);
+ method public static String? getShortcutId(android.app.Notification);
+ method @RequiresApi(19) public static boolean getShowWhen(android.app.Notification);
+ method public static String? getSortKey(android.app.Notification);
+ method @RequiresApi(19) public static CharSequence? getSubText(android.app.Notification);
+ method public static long getTimeoutAfter(android.app.Notification);
+ method @RequiresApi(19) public static boolean getUsesChronometer(android.app.Notification);
+ method @androidx.core.app.NotificationCompat.NotificationVisibility public static int getVisibility(android.app.Notification);
+ method public static boolean isGroupSummary(android.app.Notification);
+ field public static final int BADGE_ICON_LARGE = 2; // 0x2
+ field public static final int BADGE_ICON_NONE = 0; // 0x0
+ field public static final int BADGE_ICON_SMALL = 1; // 0x1
+ field public static final String CATEGORY_ALARM = "alarm";
+ field public static final String CATEGORY_CALL = "call";
+ field public static final String CATEGORY_EMAIL = "email";
+ field public static final String CATEGORY_ERROR = "err";
+ field public static final String CATEGORY_EVENT = "event";
+ field public static final String CATEGORY_LOCATION_SHARING = "location_sharing";
+ field public static final String CATEGORY_MESSAGE = "msg";
+ field public static final String CATEGORY_MISSED_CALL = "missed_call";
+ field public static final String CATEGORY_NAVIGATION = "navigation";
+ field public static final String CATEGORY_PROGRESS = "progress";
+ field public static final String CATEGORY_PROMO = "promo";
+ field public static final String CATEGORY_RECOMMENDATION = "recommendation";
+ field public static final String CATEGORY_REMINDER = "reminder";
+ field public static final String CATEGORY_SERVICE = "service";
+ field public static final String CATEGORY_SOCIAL = "social";
+ field public static final String CATEGORY_STATUS = "status";
+ field public static final String CATEGORY_STOPWATCH = "stopwatch";
+ field public static final String CATEGORY_SYSTEM = "sys";
+ field public static final String CATEGORY_TRANSPORT = "transport";
+ field public static final String CATEGORY_WORKOUT = "workout";
+ field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
+ field public static final int DEFAULT_ALL = -1; // 0xffffffff
+ field public static final int DEFAULT_LIGHTS = 4; // 0x4
+ field public static final int DEFAULT_SOUND = 1; // 0x1
+ field public static final int DEFAULT_VIBRATE = 2; // 0x2
+ field public static final String EXTRA_ANSWER_COLOR = "android.answerColor";
+ field public static final String EXTRA_ANSWER_INTENT = "android.answerIntent";
+ field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+ field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+ field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CALL_IS_VIDEO = "android.callIsVideo";
+ field public static final String EXTRA_CALL_PERSON = "android.callPerson";
+ field public static final String EXTRA_CALL_PERSON_COMPAT = "android.callPersonCompat";
+ field public static final String EXTRA_CALL_TYPE = "android.callType";
+ field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+ field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
+ field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
+ field public static final String EXTRA_COLORIZED = "android.colorized";
+ field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+ field public static final String EXTRA_COMPAT_TEMPLATE = "androidx.core.app.extra.COMPAT_TEMPLATE";
+ field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+ field public static final String EXTRA_DECLINE_COLOR = "android.declineColor";
+ field public static final String EXTRA_DECLINE_INTENT = "android.declineIntent";
+ field public static final String EXTRA_HANG_UP_INTENT = "android.hangUpIntent";
+ field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
+ field public static final String EXTRA_HISTORIC_MESSAGES = "android.messages.historic";
+ field public static final String EXTRA_INFO_TEXT = "android.infoText";
+ field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
+ field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
+ field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+ field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
+ field public static final String EXTRA_MESSAGES = "android.messages";
+ field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+ field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
+ field @Deprecated public static final String EXTRA_PEOPLE = "android.people";
+ field public static final String EXTRA_PEOPLE_LIST = "android.people.list";
+ field public static final String EXTRA_PICTURE = "android.picture";
+ field public static final String EXTRA_PICTURE_CONTENT_DESCRIPTION = "android.pictureContentDescription";
+ field public static final String EXTRA_PICTURE_ICON = "android.pictureIcon";
+ field public static final String EXTRA_PROGRESS = "android.progress";
+ field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+ field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
+ field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+ field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+ field public static final String EXTRA_SHOW_BIG_PICTURE_WHEN_COLLAPSED = "android.showBigPictureWhenCollapsed";
+ field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+ field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
+ field public static final String EXTRA_SMALL_ICON = "android.icon";
+ field public static final String EXTRA_SUB_TEXT = "android.subText";
+ field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
+ field public static final String EXTRA_TEMPLATE = "android.template";
+ field public static final String EXTRA_TEXT = "android.text";
+ field public static final String EXTRA_TEXT_LINES = "android.textLines";
+ field public static final String EXTRA_TITLE = "android.title";
+ field public static final String EXTRA_TITLE_BIG = "android.title.big";
+ field public static final String EXTRA_VERIFICATION_ICON = "android.verificationIcon";
+ field public static final String EXTRA_VERIFICATION_ICON_COMPAT = "android.verificationIconCompat";
+ field public static final String EXTRA_VERIFICATION_TEXT = "android.verificationText";
+ field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+ field public static final int FLAG_BUBBLE = 4096; // 0x1000
+ field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+ field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+ field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
+ field public static final int FLAG_INSISTENT = 4; // 0x4
+ field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+ field public static final int FLAG_NO_CLEAR = 32; // 0x20
+ field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+ field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+ field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int FOREGROUND_SERVICE_DEFAULT = 0; // 0x0
+ field public static final int FOREGROUND_SERVICE_DEFERRED = 2; // 0x2
+ field public static final int FOREGROUND_SERVICE_IMMEDIATE = 1; // 0x1
+ field public static final int GROUP_ALERT_ALL = 0; // 0x0
+ field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+ field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
+ field public static final String GROUP_KEY_SILENT = "silent";
+ field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MAX_ACTION_BUTTONS = 3; // 0x3
+ field public static final int PRIORITY_DEFAULT = 0; // 0x0
+ field public static final int PRIORITY_HIGH = 1; // 0x1
+ field public static final int PRIORITY_LOW = -1; // 0xffffffff
+ field public static final int PRIORITY_MAX = 2; // 0x2
+ field public static final int PRIORITY_MIN = -2; // 0xfffffffe
+ field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+ field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+ field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+ field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+ }
+
+ public static class NotificationCompat.Action {
+ ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ method public android.app.PendingIntent? getActionIntent();
+ method public boolean getAllowGeneratedReplies();
+ method public androidx.core.app.RemoteInput![]? getDataOnlyRemoteInputs();
+ method public android.os.Bundle getExtras();
+ method @Deprecated public int getIcon();
+ method public androidx.core.graphics.drawable.IconCompat? getIconCompat();
+ method public androidx.core.app.RemoteInput![]? getRemoteInputs();
+ method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
+ method public boolean getShowsUserInterface();
+ method public CharSequence? getTitle();
+ method public boolean isAuthenticationRequired();
+ method public boolean isContextual();
+ field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
+ field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
+ field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
+ field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
+ field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
+ field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
+ field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
+ field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
+ field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
+ field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
+ field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
+ field public android.app.PendingIntent? actionIntent;
+ field @Deprecated public int icon;
+ field public CharSequence! title;
+ }
+
+ public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action.Builder(int, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
+ method public androidx.core.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle?);
+ method public androidx.core.app.NotificationCompat.Action.Builder addRemoteInput(androidx.core.app.RemoteInput?);
+ method public androidx.core.app.NotificationCompat.Action build();
+ method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Extender);
+ method @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.NotificationCompat.Action.Builder fromAndroidAction(android.app.Notification.Action);
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setAuthenticationRequired(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setContextual(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
+ method public androidx.core.app.NotificationCompat.Action.Builder setShowsUserInterface(boolean);
+ }
+
+ public static interface NotificationCompat.Action.Extender {
+ method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
+ }
+
+ public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
+ ctor public NotificationCompat.Action.WearableExtender();
+ ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender clone();
+ method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
+ method @Deprecated public CharSequence? getCancelLabel();
+ method @Deprecated public CharSequence? getConfirmLabel();
+ method public boolean getHintDisplayActionInline();
+ method public boolean getHintLaunchesActivity();
+ method @Deprecated public CharSequence? getInProgressLabel();
+ method public boolean isAvailableOffline();
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setCancelLabel(CharSequence?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setConfirmLabel(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setInProgressLabel(CharSequence?);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.BADGE_ICON_NONE, androidx.core.app.NotificationCompat.BADGE_ICON_SMALL, androidx.core.app.NotificationCompat.BADGE_ICON_LARGE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.BadgeIconType {
+ }
+
+ public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigPictureStyle();
+ ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap?);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.drawable.Icon?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap?);
+ method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.drawable.Icon?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? getPictureIcon(android.os.Bundle?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle setBigContentTitle(CharSequence?);
+ method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle setContentDescription(CharSequence?);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle setSummaryText(CharSequence?);
+ method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle showBigPictureWhenCollapsed(boolean);
+ }
+
+ public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigTextStyle();
+ ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public androidx.core.app.NotificationCompat.BigTextStyle bigText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.BigTextStyle setBigContentTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.BigTextStyle setSummaryText(CharSequence?);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata {
+ method public static androidx.core.app.NotificationCompat.BubbleMetadata? fromPlatform(android.app.Notification.BubbleMetadata?);
+ method public boolean getAutoExpandBubble();
+ method public android.app.PendingIntent? getDeleteIntent();
+ method @Dimension(unit=androidx.annotation.Dimension.DP) public int getDesiredHeight();
+ method @DimenRes public int getDesiredHeightResId();
+ method public androidx.core.graphics.drawable.IconCompat? getIcon();
+ method public android.app.PendingIntent? getIntent();
+ method public String? getShortcutId();
+ method public boolean isNotificationSuppressed();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setFlags(int);
+ method public static android.app.Notification.BubbleMetadata? toPlatform(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata.Builder {
+ ctor @Deprecated public NotificationCompat.BubbleMetadata.Builder();
+ ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
+ ctor public NotificationCompat.BubbleMetadata.Builder(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata build();
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIntent(android.app.PendingIntent);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setSuppressNotification(boolean);
+ }
+
+ public static class NotificationCompat.Builder {
+ ctor @RequiresApi(19) public NotificationCompat.Builder(android.content.Context, android.app.Notification);
+ ctor public NotificationCompat.Builder(android.content.Context, String);
+ ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
+ method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.Builder addAction(androidx.core.app.NotificationCompat.Action?);
+ method public androidx.core.app.NotificationCompat.Builder addExtras(android.os.Bundle?);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(androidx.core.app.NotificationCompat.Action?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
+ method public androidx.core.app.NotificationCompat.Builder addPerson(androidx.core.app.Person?);
+ method public android.app.Notification build();
+ method public androidx.core.app.NotificationCompat.Builder clearActions();
+ method public androidx.core.app.NotificationCompat.Builder clearInvisibleActions();
+ method public androidx.core.app.NotificationCompat.Builder clearPeople();
+ method public android.widget.RemoteViews? createBigContentView();
+ method public android.widget.RemoteViews? createContentView();
+ method public android.widget.RemoteViews? createHeadsUpContentView();
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Extender);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getBigContentView();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata();
+ method @ColorInt @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getColor();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getContentView();
+ method public android.os.Bundle getExtras();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getForegroundServiceBehavior();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getHeadsUpContentView();
+ method @Deprecated public android.app.Notification getNotification();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getPriority();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public long getWhenIfShowing();
+ method protected static CharSequence? limitCharSequenceLength(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setAllowSystemGeneratedContextualActions(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setAutoCancel(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setBadgeIconType(@androidx.core.app.NotificationCompat.BadgeIconType int);
+ method public androidx.core.app.NotificationCompat.Builder setBubbleMetadata(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ method public androidx.core.app.NotificationCompat.Builder setCategory(String?);
+ method public androidx.core.app.NotificationCompat.Builder setChannelId(String);
+ method @RequiresApi(24) public androidx.core.app.NotificationCompat.Builder setChronometerCountDown(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.Builder setColorized(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setContent(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setContentInfo(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.Builder setContentText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setContentTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setDefaults(int);
+ method public androidx.core.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.Builder setExtras(android.os.Bundle?);
+ method public androidx.core.app.NotificationCompat.Builder setForegroundServiceBehavior(@androidx.core.app.NotificationCompat.ServiceNotificationBehavior int);
+ method public androidx.core.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent?, boolean);
+ method public androidx.core.app.NotificationCompat.Builder setGroup(String?);
+ method public androidx.core.app.NotificationCompat.Builder setGroupAlertBehavior(@androidx.core.app.NotificationCompat.GroupAlertBehavior int);
+ method public androidx.core.app.NotificationCompat.Builder setGroupSummary(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap?);
+ method public androidx.core.app.NotificationCompat.Builder setLights(@ColorInt int, int, int);
+ method public androidx.core.app.NotificationCompat.Builder setLocalOnly(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder setNotificationSilent();
+ method public androidx.core.app.NotificationCompat.Builder setNumber(int);
+ method public androidx.core.app.NotificationCompat.Builder setOngoing(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setPriority(int);
+ method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
+ method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
+ method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
+ method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
+ method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
+ method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setSilent(boolean);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.Builder setSmallIcon(androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int);
+ method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int, int);
+ method public androidx.core.app.NotificationCompat.Builder setSortKey(String?);
+ method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?);
+ method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?, @androidx.core.app.NotificationCompat.StreamType int);
+ method public androidx.core.app.NotificationCompat.Builder setStyle(androidx.core.app.NotificationCompat.Style?);
+ method public androidx.core.app.NotificationCompat.Builder setSubText(CharSequence?);
+ method public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?, android.widget.RemoteViews?);
+ method public androidx.core.app.NotificationCompat.Builder setTimeoutAfter(long);
+ method public androidx.core.app.NotificationCompat.Builder setUsesChronometer(boolean);
+ method public androidx.core.app.NotificationCompat.Builder setVibrate(long[]?);
+ method public androidx.core.app.NotificationCompat.Builder setVisibility(@androidx.core.app.NotificationCompat.NotificationVisibility int);
+ method public androidx.core.app.NotificationCompat.Builder setWhen(long);
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.ArrayList<androidx.core.app.NotificationCompat.Action!>! mActions;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.Context! mContext;
+ field @Deprecated public java.util.ArrayList<java.lang.String!>! mPeople;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.ArrayList<androidx.core.app.Person!> mPersonList;
+ }
+
+ public static class NotificationCompat.CallStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.CallStyle();
+ ctor public NotificationCompat.CallStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public static androidx.core.app.NotificationCompat.CallStyle forIncomingCall(androidx.core.app.Person, android.app.PendingIntent, android.app.PendingIntent);
+ method public static androidx.core.app.NotificationCompat.CallStyle forOngoingCall(androidx.core.app.Person, android.app.PendingIntent);
+ method public static androidx.core.app.NotificationCompat.CallStyle forScreeningCall(androidx.core.app.Person, android.app.PendingIntent, android.app.PendingIntent);
+ method @RequiresApi(20) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.ArrayList<androidx.core.app.NotificationCompat.Action!> getActionsListWithSystemActions();
+ method public androidx.core.app.NotificationCompat.CallStyle setAnswerButtonColorHint(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CallStyle setDeclineButtonColorHint(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CallStyle setIsVideo(boolean);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.drawable.Icon?);
+ method public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.Bitmap?);
+ method public androidx.core.app.NotificationCompat.CallStyle setVerificationText(CharSequence?);
+ field public static final int CALL_TYPE_INCOMING = 1; // 0x1
+ field public static final int CALL_TYPE_ONGOING = 2; // 0x2
+ field public static final int CALL_TYPE_SCREENING = 3; // 0x3
+ field public static final int CALL_TYPE_UNKNOWN = 0; // 0x0
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.CallStyle.CALL_TYPE_UNKNOWN, androidx.core.app.NotificationCompat.CallStyle.CALL_TYPE_INCOMING, androidx.core.app.NotificationCompat.CallStyle.CALL_TYPE_ONGOING, androidx.core.app.NotificationCompat.CallStyle.CALL_TYPE_SCREENING}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.CallStyle.CallType {
+ }
+
+ public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.CarExtender();
+ ctor public NotificationCompat.CarExtender(android.app.Notification);
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+ method @ColorInt public int getColor();
+ method public android.graphics.Bitmap? getLargeIcon();
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation? getUnreadConversation();
+ method public androidx.core.app.NotificationCompat.CarExtender setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap?);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation?);
+ }
+
+ @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation {
+ method @Deprecated public long getLatestTimestamp();
+ method @Deprecated public String![]? getMessages();
+ method @Deprecated public String? getParticipant();
+ method @Deprecated public String![]? getParticipants();
+ method @Deprecated public android.app.PendingIntent? getReadPendingIntent();
+ method @Deprecated public androidx.core.app.RemoteInput? getRemoteInput();
+ method @Deprecated public android.app.PendingIntent? getReplyPendingIntent();
+ }
+
+ @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
+ ctor @Deprecated public NotificationCompat.CarExtender.UnreadConversation.Builder(String);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(String?);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation build();
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent?);
+ method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent?, androidx.core.app.RemoteInput?);
+ }
+
+ public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.DecoratedCustomViewStyle();
+ }
+
+ public static interface NotificationCompat.Extender {
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.GROUP_ALERT_ALL, androidx.core.app.NotificationCompat.GROUP_ALERT_SUMMARY, androidx.core.app.NotificationCompat.GROUP_ALERT_CHILDREN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.GroupAlertBehavior {
+ }
+
+ public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.InboxStyle();
+ ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder?);
+ method public androidx.core.app.NotificationCompat.InboxStyle addLine(CharSequence?);
+ method public androidx.core.app.NotificationCompat.InboxStyle setBigContentTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.InboxStyle setSummaryText(CharSequence?);
+ }
+
+ public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
+ ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
+ method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
+ method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
+ method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
+ method public androidx.core.app.Person getUser();
+ method @Deprecated public CharSequence? getUserDisplayName();
+ method public boolean isGroupConversation();
+ method public androidx.core.app.NotificationCompat.MessagingStyle setConversationTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle setGroupConversation(boolean);
+ field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+ }
+
+ public static final class NotificationCompat.MessagingStyle.Message {
+ ctor public NotificationCompat.MessagingStyle.Message(CharSequence?, long, androidx.core.app.Person?);
+ ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence?, long, CharSequence?);
+ method public String? getDataMimeType();
+ method public android.net.Uri? getDataUri();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.Person? getPerson();
+ method @Deprecated public CharSequence? getSender();
+ method public CharSequence? getText();
+ method public long getTimestamp();
+ method public androidx.core.app.NotificationCompat.MessagingStyle.Message setData(String?, android.net.Uri?);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.VISIBILITY_PUBLIC, androidx.core.app.NotificationCompat.VISIBILITY_PRIVATE, androidx.core.app.NotificationCompat.VISIBILITY_SECRET}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.NotificationVisibility {
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_DEFAULT, androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE, androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_DEFERRED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.ServiceNotificationBehavior {
+ }
+
+ @IntDef({android.media.AudioManager.STREAM_VOICE_CALL, android.media.AudioManager.STREAM_SYSTEM, android.media.AudioManager.STREAM_RING, android.media.AudioManager.STREAM_MUSIC, android.media.AudioManager.STREAM_ALARM, android.media.AudioManager.STREAM_NOTIFICATION, android.media.AudioManager.STREAM_DTMF, android.media.AudioManager.STREAM_ACCESSIBILITY}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.StreamType {
+ }
+
+ public abstract static class NotificationCompat.Style {
+ ctor public NotificationCompat.Style();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addCompatExtras(android.os.Bundle);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void apply(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews applyStandardTemplate(boolean, int, boolean);
+ method public android.app.Notification? build();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void buildIntoRemoteViews(android.widget.RemoteViews!, android.widget.RemoteViews!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void clearCompatExtraKeys(android.os.Bundle);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.Bitmap! createColoredBitmap(int, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean displayCustomViewInline();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.NotificationCompat.Style? extractStyleFromNotification(android.app.Notification);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected String? getClassName();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeBigContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeHeadsUpContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void restoreFromCompatExtras(android.os.Bundle);
+ method public void setBuilder(androidx.core.app.NotificationCompat.Builder?);
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected androidx.core.app.NotificationCompat.Builder! mBuilder;
+ }
+
+ public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.WearableExtender();
+ ctor public NotificationCompat.WearableExtender(android.app.Notification);
+ method public androidx.core.app.NotificationCompat.WearableExtender addAction(androidx.core.app.NotificationCompat.Action);
+ method public androidx.core.app.NotificationCompat.WearableExtender addActions(java.util.List<androidx.core.app.NotificationCompat.Action!>);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification!>);
+ method public androidx.core.app.NotificationCompat.WearableExtender clearActions();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender clearPages();
+ method public androidx.core.app.NotificationCompat.WearableExtender clone();
+ method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+ method public java.util.List<androidx.core.app.NotificationCompat.Action!> getActions();
+ method @Deprecated public android.graphics.Bitmap? getBackground();
+ method public String? getBridgeTag();
+ method public int getContentAction();
+ method @Deprecated public int getContentIcon();
+ method @Deprecated public int getContentIconGravity();
+ method public boolean getContentIntentAvailableOffline();
+ method @Deprecated public int getCustomContentHeight();
+ method @Deprecated public int getCustomSizePreset();
+ method public String? getDismissalId();
+ method @Deprecated public android.app.PendingIntent? getDisplayIntent();
+ method @Deprecated public int getGravity();
+ method @Deprecated public boolean getHintAmbientBigPicture();
+ method @Deprecated public boolean getHintAvoidBackgroundClipping();
+ method public boolean getHintContentIntentLaunchesActivity();
+ method @Deprecated public boolean getHintHideIcon();
+ method @Deprecated public int getHintScreenTimeout();
+ method @Deprecated public boolean getHintShowBackgroundOnly();
+ method @Deprecated public java.util.List<android.app.Notification!> getPages();
+ method public boolean getStartScrollBottom();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap?);
+ method public androidx.core.app.NotificationCompat.WearableExtender setBridgeTag(String?);
+ method public androidx.core.app.NotificationCompat.WearableExtender setContentAction(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIcon(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIconGravity(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender setDismissalId(String?);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent?);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setGravity(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
+ field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+ field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+ field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
+ field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
+ field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
+ field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
+ field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
+ field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
+ field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+ }
+
+ public final class NotificationCompatExtras {
+ field public static final String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+ field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
+ field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+ field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+ field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+ field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
+ }
+
+ public abstract class NotificationCompatSideChannelService extends android.app.Service {
+ ctor public NotificationCompatSideChannelService();
+ method public abstract void cancel(String!, int, String!);
+ method public abstract void cancelAll(String!);
+ method public abstract void notify(String!, int, String!, android.app.Notification!);
+ method public android.os.IBinder! onBind(android.content.Intent!);
+ }
+
+ public final class NotificationManagerCompat {
+ method public boolean areNotificationsEnabled();
+ method public void cancel(int);
+ method public void cancel(String?, int);
+ method public void cancelAll();
+ method public void createNotificationChannel(android.app.NotificationChannel);
+ method public void createNotificationChannel(androidx.core.app.NotificationChannelCompat);
+ method public void createNotificationChannelGroup(android.app.NotificationChannelGroup);
+ method public void createNotificationChannelGroup(androidx.core.app.NotificationChannelGroupCompat);
+ method public void createNotificationChannelGroups(java.util.List<android.app.NotificationChannelGroup!>);
+ method public void createNotificationChannelGroupsCompat(java.util.List<androidx.core.app.NotificationChannelGroupCompat!>);
+ method public void createNotificationChannels(java.util.List<android.app.NotificationChannel!>);
+ method public void createNotificationChannelsCompat(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.core.app.NotificationManagerCompat from(android.content.Context);
+ method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
+ method public int getImportance();
+ method public android.app.NotificationChannel? getNotificationChannel(String);
+ method public android.app.NotificationChannel? getNotificationChannel(String, String);
+ method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String);
+ method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String, String);
+ method public android.app.NotificationChannelGroup? getNotificationChannelGroup(String);
+ method public androidx.core.app.NotificationChannelGroupCompat? getNotificationChannelGroupCompat(String);
+ method public java.util.List<android.app.NotificationChannelGroup!> getNotificationChannelGroups();
+ method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroupsCompat();
+ method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
+ method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannelsCompat();
+ method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(int, android.app.Notification);
+ method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(String?, int, android.app.Notification);
+ field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+ field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
+ field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+ field public static final int IMPORTANCE_HIGH = 4; // 0x4
+ field public static final int IMPORTANCE_LOW = 2; // 0x2
+ field public static final int IMPORTANCE_MAX = 5; // 0x5
+ field public static final int IMPORTANCE_MIN = 1; // 0x1
+ field public static final int IMPORTANCE_NONE = 0; // 0x0
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+ }
+
+ public interface OnMultiWindowModeChangedProvider {
+ method public void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ method public void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ }
+
+ public interface OnNewIntentProvider {
+ method public void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ method public void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ }
+
+ public interface OnPictureInPictureModeChangedProvider {
+ method public void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ method public void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ }
+
+ public final class PendingIntentCompat {
+ method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, android.os.Bundle, boolean);
+ method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, boolean);
+ method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, boolean);
+ method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, android.os.Bundle, boolean);
+ method public static android.app.PendingIntent getBroadcast(android.content.Context, int, android.content.Intent, int, boolean);
+ method @RequiresApi(26) public static android.app.PendingIntent getForegroundService(android.content.Context, int, android.content.Intent, int, boolean);
+ method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int, boolean);
+ }
+
+ public class Person {
+ method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.Person fromAndroidPerson(android.app.Person);
+ method public static androidx.core.app.Person fromBundle(android.os.Bundle);
+ method @RequiresApi(22) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.Person fromPersistableBundle(android.os.PersistableBundle);
+ method public androidx.core.graphics.drawable.IconCompat? getIcon();
+ method public String? getKey();
+ method public CharSequence? getName();
+ method public String? getUri();
+ method public boolean isBot();
+ method public boolean isImportant();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String resolveToLegacyUri();
+ method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.app.Person toAndroidPerson();
+ method public androidx.core.app.Person.Builder toBuilder();
+ method public android.os.Bundle toBundle();
+ method @RequiresApi(22) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.PersistableBundle toPersistableBundle();
+ }
+
+ public static class Person.Builder {
+ ctor public Person.Builder();
+ method public androidx.core.app.Person build();
+ method public androidx.core.app.Person.Builder setBot(boolean);
+ method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
+ method public androidx.core.app.Person.Builder setImportant(boolean);
+ method public androidx.core.app.Person.Builder setKey(String?);
+ method public androidx.core.app.Person.Builder setName(CharSequence?);
+ method public androidx.core.app.Person.Builder setUri(String?);
+ }
+
+ public final class PictureInPictureModeChangedInfo {
+ ctor public PictureInPictureModeChangedInfo(boolean);
+ ctor @RequiresApi(26) public PictureInPictureModeChangedInfo(boolean, android.content.res.Configuration);
+ method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
+ method public boolean isInPictureInPictureMode();
+ }
+
+ @androidx.versionedparcelable.VersionedParcelize(jetifyAs="android.support.v4.app.RemoteActionCompat") public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
+ ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public RemoteActionCompat();
+ ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
+ method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
+ method public android.app.PendingIntent getActionIntent();
+ method public CharSequence getContentDescription();
+ method public androidx.core.graphics.drawable.IconCompat getIcon();
+ method public CharSequence getTitle();
+ method public boolean isEnabled();
+ method public void setEnabled(boolean);
+ method public void setShouldShowIcon(boolean);
+ method public boolean shouldShowIcon();
+ method @RequiresApi(26) public android.app.RemoteAction toRemoteAction();
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(4) public android.app.PendingIntent mActionIntent;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(3) public CharSequence mContentDescription;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(5) public boolean mEnabled;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(1) public androidx.core.graphics.drawable.IconCompat mIcon;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(6) public boolean mShouldShowIcon;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(2) public CharSequence mTitle;
+ }
+
+ public final class RemoteInput {
+ method public static void addDataResultToIntent(androidx.core.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String!,android.net.Uri!>);
+ method public static void addResultsToIntent(androidx.core.app.RemoteInput![], android.content.Intent, android.os.Bundle);
+ method public boolean getAllowFreeFormInput();
+ method public java.util.Set<java.lang.String!>? getAllowedDataTypes();
+ method public CharSequence![]? getChoices();
+ method public static java.util.Map<java.lang.String!,android.net.Uri!>? getDataResultsFromIntent(android.content.Intent, String);
+ method @androidx.core.app.RemoteInput.EditChoicesBeforeSending public int getEditChoicesBeforeSending();
+ method public android.os.Bundle getExtras();
+ method public CharSequence? getLabel();
+ method public String getResultKey();
+ method public static android.os.Bundle? getResultsFromIntent(android.content.Intent);
+ method @androidx.core.app.RemoteInput.Source public static int getResultsSource(android.content.Intent);
+ method public boolean isDataOnly();
+ method public static void setResultsSource(android.content.Intent, @androidx.core.app.RemoteInput.Source int);
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
+ field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+ field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+ field public static final int SOURCE_CHOICE = 1; // 0x1
+ field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
+ }
+
+ public static final class RemoteInput.Builder {
+ ctor public RemoteInput.Builder(String);
+ method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
+ method public androidx.core.app.RemoteInput build();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
+ method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+ method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence![]?);
+ method public androidx.core.app.RemoteInput.Builder setEditChoicesBeforeSending(@androidx.core.app.RemoteInput.EditChoicesBeforeSending int);
+ method public androidx.core.app.RemoteInput.Builder setLabel(CharSequence?);
+ }
+
+ @IntDef({androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO, androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_DISABLED, androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_ENABLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RemoteInput.EditChoicesBeforeSending {
+ }
+
+ @IntDef({androidx.core.app.RemoteInput.SOURCE_FREE_FORM_INPUT, androidx.core.app.RemoteInput.SOURCE_CHOICE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RemoteInput.Source {
+ }
+
+ public final class ServiceCompat {
+ method public static void stopForeground(android.app.Service, @androidx.core.app.ServiceCompat.StopForegroundFlags int);
+ field public static final int START_STICKY = 1; // 0x1
+ field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+ field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
+ }
+
+ @IntDef(flag=true, value={androidx.core.app.ServiceCompat.STOP_FOREGROUND_REMOVE, androidx.core.app.ServiceCompat.STOP_FOREGROUND_DETACH}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ServiceCompat.StopForegroundFlags {
+ }
+
+ public final class ShareCompat {
+ method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
+ method @Deprecated public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
+ method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
+ method public static String? getCallingPackage(android.app.Activity);
+ field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_ACTIVITY_INTEROP = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
+ field public static final String EXTRA_CALLING_PACKAGE_INTEROP = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
+ }
+
+ public static class ShareCompat.IntentBuilder {
+ ctor public ShareCompat.IntentBuilder(android.content.Context);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
+ method public android.content.Intent createChooserIntent();
+ method @Deprecated public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
+ method public android.content.Intent getIntent();
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setHtmlText(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setStream(android.net.Uri?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setSubject(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setText(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setType(String?);
+ method public void startChooser();
+ }
+
+ public static class ShareCompat.IntentReader {
+ ctor public ShareCompat.IntentReader(android.app.Activity);
+ ctor public ShareCompat.IntentReader(android.content.Context, android.content.Intent);
+ method @Deprecated public static androidx.core.app.ShareCompat.IntentReader from(android.app.Activity);
+ method public android.content.ComponentName? getCallingActivity();
+ method public android.graphics.drawable.Drawable? getCallingActivityIcon();
+ method public android.graphics.drawable.Drawable? getCallingApplicationIcon();
+ method public CharSequence? getCallingApplicationLabel();
+ method public String? getCallingPackage();
+ method public String![]? getEmailBcc();
+ method public String![]? getEmailCc();
+ method public String![]? getEmailTo();
+ method public String? getHtmlText();
+ method public android.net.Uri? getStream();
+ method public android.net.Uri? getStream(int);
+ method public int getStreamCount();
+ method public String? getSubject();
+ method public CharSequence? getText();
+ method public String? getType();
+ method public boolean isMultipleShare();
+ method public boolean isShareIntent();
+ method public boolean isSingleShare();
+ }
+
+ public abstract class SharedElementCallback {
+ ctor public SharedElementCallback();
+ method public android.os.Parcelable! onCaptureSharedElementSnapshot(android.view.View!, android.graphics.Matrix!, android.graphics.RectF!);
+ method public android.view.View! onCreateSnapshotView(android.content.Context!, android.os.Parcelable!);
+ method public void onMapSharedElements(java.util.List<java.lang.String!>!, java.util.Map<java.lang.String!,android.view.View!>!);
+ method public void onRejectSharedElements(java.util.List<android.view.View!>!);
+ method public void onSharedElementEnd(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementStart(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementsArrived(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
+ }
+
+ public static interface SharedElementCallback.OnSharedElementsReadyListener {
+ method public void onSharedElementsReady();
+ }
+
+ public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
+ method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
+ method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
+ method public androidx.core.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+ method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
+ method public android.content.Intent? editIntentAt(int);
+ method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
+ method @Deprecated public android.content.Intent! getIntent(int);
+ method public int getIntentCount();
+ method public android.content.Intent![] getIntents();
+ method public android.app.PendingIntent? getPendingIntent(int, int);
+ method public android.app.PendingIntent? getPendingIntent(int, int, android.os.Bundle?);
+ method @Deprecated public java.util.Iterator<android.content.Intent!> iterator();
+ method public void startActivities();
+ method public void startActivities(android.os.Bundle?);
+ }
+
+ public static interface TaskStackBuilder.SupportParentable {
+ method public android.content.Intent? getSupportParentActivityIntent();
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentProviderCompat {
+ method public static android.content.Context requireContext(android.content.ContentProvider);
+ }
+
+ public final class ContentResolverCompat {
+ method public static android.database.Cursor? query(android.content.ContentResolver, android.net.Uri, String![]?, String?, String![]?, String?, androidx.core.os.CancellationSignal?);
+ }
+
+ public class ContextCompat {
+ ctor protected ContextCompat();
+ method public static int checkSelfPermission(android.content.Context, String);
+ method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
+ method public static String? getAttributionTag(android.content.Context);
+ method public static java.io.File getCodeCacheDir(android.content.Context);
+ method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
+ method public static java.io.File? getDataDir(android.content.Context);
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
+ method public static java.io.File![] getExternalCacheDirs(android.content.Context);
+ method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
+ method public static java.util.concurrent.Executor getMainExecutor(android.content.Context);
+ method public static java.io.File? getNoBackupFilesDir(android.content.Context);
+ method public static java.io.File![] getObbDirs(android.content.Context);
+ method public static <T> T? getSystemService(android.content.Context, Class<T!>);
+ method public static String? getSystemServiceName(android.content.Context, Class<?>);
+ method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, int);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, String?, android.os.Handler?, int);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![]);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
+ method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
+ method public static void startForegroundService(android.content.Context, android.content.Intent);
+ field public static final int RECEIVER_EXPORTED = 2; // 0x2
+ field public static final int RECEIVER_NOT_EXPORTED = 4; // 0x4
+ field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
+ }
+
+ public class FileProvider extends android.content.ContentProvider {
+ ctor public FileProvider();
+ ctor protected FileProvider(@XmlRes int);
+ method public int delete(android.net.Uri, String?, String![]?);
+ method public String? getType(android.net.Uri);
+ method public static android.net.Uri! getUriForFile(android.content.Context, String, java.io.File);
+ method public static android.net.Uri getUriForFile(android.content.Context, String, java.io.File, String);
+ method public android.net.Uri! insert(android.net.Uri, android.content.ContentValues);
+ method public boolean onCreate();
+ method public android.database.Cursor query(android.net.Uri, String![]?, String?, String![]?, String?);
+ method public int update(android.net.Uri, android.content.ContentValues, String?, String![]?);
+ }
+
+ public final class IntentCompat {
+ method public static android.content.Intent createManageUnusedAppRestrictionsIntent(android.content.Context, String);
+ method public static android.os.Parcelable![]? getParcelableArrayExtra(android.content.Intent, String?, Class<? extends android.os.Parcelable>);
+ method public static <T> java.util.ArrayList<T!>? getParcelableArrayListExtra(android.content.Intent, String?, Class<? extends T>);
+ method public static <T> T? getParcelableExtra(android.content.Intent, String?, Class<T!>);
+ method public static android.content.Intent makeMainSelectorActivity(String, String);
+ field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
+ field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+ field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
+ field public static final String EXTRA_TIME = "android.intent.extra.TIME";
+ }
+
+ public class IntentSanitizer {
+ method public android.content.Intent sanitize(android.content.Intent, androidx.core.util.Consumer<java.lang.String!>);
+ method public android.content.Intent sanitizeByFiltering(android.content.Intent);
+ method public android.content.Intent sanitizeByThrowing(android.content.Intent);
+ }
+
+ public static final class IntentSanitizer.Builder {
+ ctor public IntentSanitizer.Builder();
+ method public androidx.core.content.IntentSanitizer.Builder allowAction(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowAction(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowAnyComponent();
+ method public androidx.core.content.IntentSanitizer.Builder allowCategory(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowCategory(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowClipData(androidx.core.util.Predicate<android.content.ClipData!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowClipDataText();
+ method public androidx.core.content.IntentSanitizer.Builder allowClipDataUri(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowClipDataUriWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowComponent(android.content.ComponentName);
+ method public androidx.core.content.IntentSanitizer.Builder allowComponent(androidx.core.util.Predicate<android.content.ComponentName!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowComponentWithPackage(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowData(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowDataWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<?>);
+ method public <T> androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<T!>, androidx.core.util.Predicate<T!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, androidx.core.util.Predicate<java.lang.Object!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraStream(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraStreamUriWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowFlags(int);
+ method public androidx.core.content.IntentSanitizer.Builder allowHistoryStackFlags();
+ method public androidx.core.content.IntentSanitizer.Builder allowIdentifier();
+ method public androidx.core.content.IntentSanitizer.Builder allowPackage(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowPackage(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowReceiverFlags();
+ method public androidx.core.content.IntentSanitizer.Builder allowSelector();
+ method public androidx.core.content.IntentSanitizer.Builder allowSourceBounds();
+ method public androidx.core.content.IntentSanitizer.Builder allowType(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowType(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer build();
+ }
+
+ public final class LocusIdCompat {
+ ctor public LocusIdCompat(String);
+ method public String getId();
+ method @RequiresApi(29) public android.content.LocusId toLocusId();
+ method @RequiresApi(29) public static androidx.core.content.LocusIdCompat toLocusIdCompat(android.content.LocusId);
+ }
+
+ public final class MimeTypeFilter {
+ method public static boolean matches(String?, String);
+ method public static String? matches(String?, String![]);
+ method public static String? matches(String![]?, String);
+ method public static String![] matchesMany(String![]?, String);
+ }
+
+ public interface OnConfigurationChangedProvider {
+ method public void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ method public void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ }
+
+ public interface OnTrimMemoryProvider {
+ method public void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ method public void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ }
+
+ public final class PackageManagerCompat {
+ method public static com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> getUnusedAppRestrictionsStatus(android.content.Context);
+ field public static final String ACTION_PERMISSION_REVOCATION_SETTINGS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
+ }
+
+ public final class PermissionChecker {
+ method @androidx.core.content.PermissionChecker.PermissionResult public static int checkCallingOrSelfPermission(android.content.Context, String);
+ method @androidx.core.content.PermissionChecker.PermissionResult public static int checkCallingPermission(android.content.Context, String, String?);
+ method @androidx.core.content.PermissionChecker.PermissionResult public static int checkPermission(android.content.Context, String, int, int, String?);
+ method @androidx.core.content.PermissionChecker.PermissionResult public static int checkSelfPermission(android.content.Context, String);
+ field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+ field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
+ field public static final int PERMISSION_GRANTED = 0; // 0x0
+ }
+
+ @IntDef({androidx.core.content.PermissionChecker.PERMISSION_GRANTED, androidx.core.content.PermissionChecker.PERMISSION_DENIED, androidx.core.content.PermissionChecker.PERMISSION_DENIED_APP_OP}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PermissionChecker.PermissionResult {
+ }
+
+ @Deprecated public final class SharedPreferencesCompat {
+ }
+
+ @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
+ method @Deprecated public void apply(android.content.SharedPreferences.Editor);
+ method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
+ }
+
+ public class UnusedAppRestrictionsBackportCallback {
+ method public void onResult(boolean, boolean) throws android.os.RemoteException;
+ }
+
+ public abstract class UnusedAppRestrictionsBackportService extends android.app.Service {
+ ctor public UnusedAppRestrictionsBackportService();
+ method protected abstract void isPermissionRevocationEnabled(androidx.core.content.UnusedAppRestrictionsBackportCallback);
+ method public android.os.IBinder? onBind(android.content.Intent?);
+ field public static final String ACTION_UNUSED_APP_RESTRICTIONS_BACKPORT_CONNECTION = "android.support.unusedapprestrictions.action.CustomUnusedAppRestrictionsBackportService";
+ }
+
+ public final class UnusedAppRestrictionsConstants {
+ field public static final int API_30 = 4; // 0x4
+ field public static final int API_30_BACKPORT = 3; // 0x3
+ field public static final int API_31 = 5; // 0x5
+ field public static final int DISABLED = 2; // 0x2
+ field public static final int ERROR = 0; // 0x0
+ field public static final int FEATURE_NOT_AVAILABLE = 1; // 0x1
+ }
+
+ public class UriMatcherCompat {
+ method public static androidx.core.util.Predicate<android.net.Uri!> asPredicate(android.content.UriMatcher);
+ }
+
+}
+
+package androidx.core.content.pm {
+
+ @Deprecated public final class ActivityInfoCompat {
+ field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
+ }
+
+ public final class PackageInfoCompat {
+ method public static long getLongVersionCode(android.content.pm.PackageInfo);
+ method public static java.util.List<android.content.pm.Signature!> getSignatures(android.content.pm.PackageManager, String) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static boolean hasSignatures(android.content.pm.PackageManager, String, @Size(min=1) java.util.Map<byte[]!,java.lang.Integer!>, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
+ }
+
+ public final class PermissionInfoCompat {
+ method public static int getProtection(android.content.pm.PermissionInfo);
+ method public static int getProtectionFlags(android.content.pm.PermissionInfo);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ShortcutInfoChangeListener {
+ ctor public ShortcutInfoChangeListener();
+ method @AnyThread public void onAllShortcutsRemoved();
+ method @AnyThread public void onShortcutAdded(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method @AnyThread public void onShortcutRemoved(java.util.List<java.lang.String!>);
+ method @AnyThread public void onShortcutUpdated(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method @AnyThread public void onShortcutUsageReported(java.util.List<java.lang.String!>);
+ }
+
+ public class ShortcutInfoCompat {
+ method public android.content.ComponentName? getActivity();
+ method public java.util.Set<java.lang.String!>? getCategories();
+ method public CharSequence? getDisabledMessage();
+ method public int getDisabledReason();
+ method @androidx.core.content.pm.ShortcutInfoCompat.Surface public int getExcludedFromSurfaces();
+ method public android.os.PersistableBundle? getExtras();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.graphics.drawable.IconCompat! getIcon();
+ method public String getId();
+ method public android.content.Intent getIntent();
+ method public android.content.Intent![] getIntents();
+ method public long getLastChangedTimestamp();
+ method public androidx.core.content.LocusIdCompat? getLocusId();
+ method public CharSequence? getLongLabel();
+ method public String getPackage();
+ method public int getRank();
+ method public CharSequence getShortLabel();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.Bundle? getTransientExtras();
+ method public android.os.UserHandle? getUserHandle();
+ method public boolean hasKeyFieldsOnly();
+ method public boolean isCached();
+ method public boolean isDeclaredInManifest();
+ method public boolean isDynamic();
+ method public boolean isEnabled();
+ method public boolean isExcludedFromSurfaces(@androidx.core.content.pm.ShortcutInfoCompat.Surface int);
+ method public boolean isImmutable();
+ method public boolean isPinned();
+ method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
+ field public static final int SURFACE_LAUNCHER = 1; // 0x1
+ }
+
+ public static class ShortcutInfoCompat.Builder {
+ ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(androidx.core.content.pm.ShortcutInfoCompat);
+ ctor @RequiresApi(25) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(android.content.Context, android.content.pm.ShortcutInfo);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String, String, java.util.List<java.lang.String!>);
+ method public androidx.core.content.pm.ShortcutInfoCompat build();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setCategories(java.util.Set<java.lang.String!>);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExcludedFromSurfaces(int);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExtras(android.os.PersistableBundle);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIsConversation();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
+ method @Deprecated public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived(boolean);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPerson(androidx.core.app.Person);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPersons(androidx.core.app.Person![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setRank(int);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setSliceUri(android.net.Uri);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.content.pm.ShortcutInfoCompat.Builder setTransientExtras(android.os.Bundle);
+ }
+
+ @IntDef(flag=true, value={androidx.core.content.pm.ShortcutInfoCompat.SURFACE_LAUNCHER}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ShortcutInfoCompat.Surface {
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ShortcutInfoCompatSaver<T> {
+ ctor public ShortcutInfoCompatSaver();
+ method @AnyThread public abstract T! addShortcuts(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>!);
+ method @WorkerThread public java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>! getShortcuts() throws java.lang.Exception;
+ method @AnyThread public abstract T! removeAllShortcuts();
+ method @AnyThread public abstract T! removeShortcuts(java.util.List<java.lang.String!>!);
+ }
+
+ public class ShortcutManagerCompat {
+ method public static boolean addDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
+ method public static void disableShortcuts(android.content.Context, java.util.List<java.lang.String!>, CharSequence?);
+ method public static void enableShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getDynamicShortcuts(android.content.Context);
+ method public static int getIconMaxHeight(android.content.Context);
+ method public static int getIconMaxWidth(android.content.Context);
+ method public static int getMaxShortcutCountPerActivity(android.content.Context);
+ method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getShortcuts(android.content.Context, @androidx.core.content.pm.ShortcutManagerCompat.ShortcutMatchFlags int);
+ method public static boolean isRateLimitingActive(android.content.Context);
+ method public static boolean isRequestPinShortcutSupported(android.content.Context);
+ method public static boolean pushDynamicShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
+ method public static void removeAllDynamicShortcuts(android.content.Context);
+ method public static void removeDynamicShortcuts(android.content.Context, java.util.List<java.lang.String!>);
+ method public static void removeLongLivedShortcuts(android.content.Context, java.util.List<java.lang.String!>);
+ method public static void reportShortcutUsed(android.content.Context, String);
+ method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
+ method public static boolean setDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static boolean updateShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
+ field public static final int FLAG_MATCH_CACHED = 8; // 0x8
+ field public static final int FLAG_MATCH_DYNAMIC = 2; // 0x2
+ field public static final int FLAG_MATCH_MANIFEST = 1; // 0x1
+ field public static final int FLAG_MATCH_PINNED = 4; // 0x4
+ }
+
+ @IntDef(flag=true, value={androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_MANIFEST, androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_DYNAMIC, androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_PINNED, androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_CACHED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ShortcutManagerCompat.ShortcutMatchFlags {
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class ShortcutXmlParser {
+ method @WorkerThread public static java.util.List<java.lang.String!> getShortcutIds(android.content.Context);
+ method @VisibleForTesting public static java.util.List<java.lang.String!> parseShortcutIds(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ }
+
+}
+
+package androidx.core.content.res {
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ColorStateListInflaterCompat {
+ method public static android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static android.content.res.ColorStateList createFromXmlInner(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static android.content.res.ColorStateList? inflate(android.content.res.Resources, @XmlRes int, android.content.res.Resources.Theme?);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ComplexColorCompat {
+ method @ColorInt public int getColor();
+ method public android.graphics.Shader? getShader();
+ method public static androidx.core.content.res.ComplexColorCompat? inflate(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?);
+ method public boolean isGradient();
+ method public boolean isStateful();
+ method public boolean onStateChanged(int[]!);
+ method public void setColor(@ColorInt int);
+ method public boolean willDraw();
+ }
+
+ public final class ConfigurationHelper {
+ method public static int getDensityDpi(android.content.res.Resources);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class FontResourcesParserCompat {
+ method public static androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry? parse(org.xmlpull.v1.XmlPullParser, android.content.res.Resources) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static java.util.List<java.util.List<byte[]!>!> readCerts(android.content.res.Resources, @ArrayRes int);
+ field public static final int FETCH_STRATEGY_ASYNC = 1; // 0x1
+ field public static final int FETCH_STRATEGY_BLOCKING = 0; // 0x0
+ field public static final int INFINITE_TIMEOUT_VALUE = -1; // 0xffffffff
+ }
+
+ public static interface FontResourcesParserCompat.FamilyResourceEntry {
+ }
+
+ @IntDef({androidx.core.content.res.FontResourcesParserCompat.FETCH_STRATEGY_BLOCKING, androidx.core.content.res.FontResourcesParserCompat.FETCH_STRATEGY_ASYNC}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FontResourcesParserCompat.FetchStrategy {
+ }
+
+ public static final class FontResourcesParserCompat.FontFamilyFilesResourceEntry implements androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry {
+ ctor public FontResourcesParserCompat.FontFamilyFilesResourceEntry(androidx.core.content.res.FontResourcesParserCompat.FontFileResourceEntry![]);
+ method public androidx.core.content.res.FontResourcesParserCompat.FontFileResourceEntry![] getEntries();
+ }
+
+ public static final class FontResourcesParserCompat.FontFileResourceEntry {
+ ctor public FontResourcesParserCompat.FontFileResourceEntry(String, int, boolean, String?, int, int);
+ method public String getFileName();
+ method public int getResourceId();
+ method public int getTtcIndex();
+ method public String? getVariationSettings();
+ method public int getWeight();
+ method public boolean isItalic();
+ }
+
+ public static final class FontResourcesParserCompat.ProviderResourceEntry implements androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry {
+ ctor public FontResourcesParserCompat.ProviderResourceEntry(androidx.core.provider.FontRequest, @androidx.core.content.res.FontResourcesParserCompat.FetchStrategy int, int);
+ method @androidx.core.content.res.FontResourcesParserCompat.FetchStrategy public int getFetchStrategy();
+ method public androidx.core.provider.FontRequest getRequest();
+ method public int getTimeout();
+ }
+
+ public final class ResourcesCompat {
+ method public static void clearCachesForTheme(android.content.res.Resources.Theme);
+ method public static android.graphics.Typeface? getCachedFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
+ method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static float getFloat(android.content.res.Resources, @DimenRes int);
+ method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
+ method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int, android.util.TypedValue, int, androidx.core.content.res.ResourcesCompat.FontCallback?) throws android.content.res.Resources.NotFoundException;
+ field @AnyRes public static final int ID_NULL = 0; // 0x0
+ }
+
+ public abstract static class ResourcesCompat.FontCallback {
+ ctor public ResourcesCompat.FontCallback();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final void callbackFailAsync(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int, android.os.Handler?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final void callbackSuccessAsync(android.graphics.Typeface, android.os.Handler?);
+ method public abstract void onFontRetrievalFailed(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int);
+ method public abstract void onFontRetrieved(android.graphics.Typeface);
+ }
+
+ public static final class ResourcesCompat.ThemeCompat {
+ method public static void rebase(android.content.res.Resources.Theme);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypedArrayUtils {
+ method public static int getAttr(android.content.Context, int, int);
+ method public static boolean getBoolean(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, boolean);
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+ method public static int getInt(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, int);
+ method public static boolean getNamedBoolean(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, boolean);
+ method @ColorInt public static int getNamedColor(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, @ColorInt int);
+ method public static android.content.res.ColorStateList? getNamedColorStateList(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?, String, @StyleableRes int);
+ method public static androidx.core.content.res.ComplexColorCompat! getNamedComplexColor(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?, String, @StyleableRes int, @ColorInt int);
+ method public static float getNamedFloat(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, float);
+ method public static int getNamedInt(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, int);
+ method @AnyRes public static int getNamedResourceId(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, @AnyRes int);
+ method public static String? getNamedString(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int);
+ method @AnyRes public static int getResourceId(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, @AnyRes int);
+ method public static String? getString(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+ method public static CharSequence? getText(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+ method public static CharSequence![]? getTextArray(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+ method public static boolean hasAttribute(org.xmlpull.v1.XmlPullParser, String);
+ method public static android.content.res.TypedArray obtainAttributes(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet, int[]);
+ method public static android.util.TypedValue? peekNamedValue(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, int);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorWindowCompat {
+ method public static android.database.CursorWindow create(String?, long);
+ }
+
+ @Deprecated public final class DatabaseUtilsCompat {
+ method @Deprecated public static String![]! appendSelectionArgs(String![]!, String![]!);
+ method @Deprecated public static String! concatenateWhere(String!, String!);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteCursorCompat {
+ method public static void setFillWindowForwardOnly(android.database.sqlite.SQLiteCursor, boolean);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapCompat {
+ method public static android.graphics.Bitmap createScaledBitmap(android.graphics.Bitmap, int, int, android.graphics.Rect?, boolean);
+ method public static int getAllocationByteCount(android.graphics.Bitmap);
+ method public static boolean hasMipMap(android.graphics.Bitmap);
+ method public static void setHasMipMap(android.graphics.Bitmap, boolean);
+ }
+
+ public class BlendModeColorFilterCompat {
+ method public static android.graphics.ColorFilter? createBlendModeColorFilterCompat(int, androidx.core.graphics.BlendModeCompat);
+ }
+
+ public enum BlendModeCompat {
+ enum_constant public static final androidx.core.graphics.BlendModeCompat CLEAR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_BURN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_DODGE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DARKEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat DIFFERENCE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OVER;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat EXCLUSION;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HARD_LIGHT;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HUE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat LIGHTEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat LUMINOSITY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat MODULATE;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat MULTIPLY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat OVERLAY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat PLUS;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SATURATION;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SCREEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SOFT_LIGHT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OVER;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat XOR;
+ }
+
+ public final class ColorUtils {
+ method @ColorInt public static int HSLToColor(float[]);
+ method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
+ method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
+ method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
+ method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double);
+ method public static void XYZToLAB(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double, double[]);
+ method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
+ method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
+ method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
+ method public static double calculateContrast(@ColorInt int, @ColorInt int);
+ method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
+ method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
+ method public static void colorToHSL(@ColorInt int, float[]);
+ method public static void colorToLAB(@ColorInt int, double[]);
+ method public static void colorToXYZ(@ColorInt int, double[]);
+ method public static int compositeColors(@ColorInt int, @ColorInt int);
+ method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
+ method public static double distanceEuclidean(double[], double[]);
+ method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
+ }
+
+ public final class Insets {
+ method public static androidx.core.graphics.Insets add(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public static androidx.core.graphics.Insets max(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public static androidx.core.graphics.Insets min(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public static androidx.core.graphics.Insets of(int, int, int, int);
+ method public static androidx.core.graphics.Insets of(android.graphics.Rect);
+ method public static androidx.core.graphics.Insets subtract(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method @RequiresApi(api=29) public static androidx.core.graphics.Insets toCompatInsets(android.graphics.Insets);
+ method @RequiresApi(29) public android.graphics.Insets toPlatformInsets();
+ method @Deprecated @RequiresApi(api=29) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.Insets wrap(android.graphics.Insets);
+ field public static final androidx.core.graphics.Insets NONE;
+ field public final int bottom;
+ field public final int left;
+ field public final int right;
+ field public final int top;
+ }
+
+ public final class PaintCompat {
+ method public static boolean hasGlyph(android.graphics.Paint, String);
+ method public static boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat?);
+ }
+
+ public final class PathSegment {
+ ctor public PathSegment(android.graphics.PointF, float, android.graphics.PointF, float);
+ method public android.graphics.PointF getEnd();
+ method public float getEndFraction();
+ method public android.graphics.PointF getStart();
+ method public float getStartFraction();
+ }
+
+ public final class PathUtils {
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path);
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path, @FloatRange(from=0) float);
+ }
+
+ public class TypefaceCompat {
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public static void clearCache();
+ method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, int);
+ method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, @IntRange(from=1, to=1000) int, boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromFontInfo(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromResourcesFamilyXml(android.content.Context, androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry, android.content.res.Resources, int, int, androidx.core.content.res.ResourcesCompat.FontCallback?, android.os.Handler?, boolean);
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromResourcesFontFile(android.content.Context, android.content.res.Resources, int, String!, int);
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? findFromCache(android.content.res.Resources, int, int);
+ }
+
+ @RequiresApi(26) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatApi26Impl {
+ ctor public TypefaceCompatApi26Impl();
+ method protected android.graphics.Typeface? createFromFamiliesWithDefault(Object!);
+ method public android.graphics.Typeface? createFromFontFamilyFilesResourceEntry(android.content.Context!, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry!, android.content.res.Resources!, int);
+ method public android.graphics.Typeface? createFromFontInfo(android.content.Context!, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
+ method public android.graphics.Typeface? createFromResourcesFontFile(android.content.Context!, android.content.res.Resources!, int, String!, int);
+ method protected java.lang.reflect.Method! obtainAbortCreationMethod(Class<?>!) throws java.lang.NoSuchMethodException;
+ method protected java.lang.reflect.Method! obtainAddFontFromAssetManagerMethod(Class<?>!) throws java.lang.NoSuchMethodException;
+ method protected java.lang.reflect.Method! obtainAddFontFromBufferMethod(Class<?>!) throws java.lang.NoSuchMethodException;
+ method protected java.lang.reflect.Method! obtainCreateFromFamiliesWithDefaultMethod(Class<?>!) throws java.lang.NoSuchMethodException;
+ method protected Class<?>! obtainFontFamily() throws java.lang.ClassNotFoundException;
+ method protected java.lang.reflect.Constructor<?>! obtainFontFamilyCtor(Class<?>!) throws java.lang.NoSuchMethodException;
+ method protected java.lang.reflect.Method! obtainFreezeMethod(Class<?>!) throws java.lang.NoSuchMethodException;
+ field protected final java.lang.reflect.Method! mAbortCreation;
+ field protected final java.lang.reflect.Method! mAddFontFromAssetManager;
+ field protected final java.lang.reflect.Method! mAddFontFromBuffer;
+ field protected final java.lang.reflect.Method! mCreateFromFamiliesWithDefault;
+ field protected final Class<?>! mFontFamily;
+ field protected final java.lang.reflect.Constructor<?>! mFontFamilyCtor;
+ field protected final java.lang.reflect.Method! mFreeze;
+ }
+
+ @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatApi28Impl extends androidx.core.graphics.TypefaceCompatApi26Impl {
+ ctor public TypefaceCompatApi28Impl();
+ }
+
+ @RequiresApi(29) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class TypefaceCompatApi29Impl {
+ ctor public TypefaceCompatApi29Impl();
+ method public android.graphics.Typeface? createFromFontFamilyFilesResourceEntry(android.content.Context!, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry!, android.content.res.Resources!, int);
+ method public android.graphics.Typeface? createFromFontInfo(android.content.Context!, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
+ method protected android.graphics.Typeface! createFromInputStream(android.content.Context!, java.io.InputStream!);
+ method public android.graphics.Typeface? createFromResourcesFontFile(android.content.Context!, android.content.res.Resources!, int, String!, int);
+ method protected androidx.core.provider.FontsContractCompat.FontInfo! findBestInfo(androidx.core.provider.FontsContractCompat.FontInfo![]!, int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatUtil {
+ method public static void closeQuietly(java.io.Closeable?);
+ method @RequiresApi(19) public static java.nio.ByteBuffer? copyToDirectBuffer(android.content.Context, android.content.res.Resources, int);
+ method public static boolean copyToFile(java.io.File, java.io.InputStream);
+ method public static boolean copyToFile(java.io.File, android.content.res.Resources, int);
+ method public static java.io.File? getTempFile(android.content.Context);
+ method @RequiresApi(19) public static java.nio.ByteBuffer? mmap(android.content.Context, android.os.CancellationSignal?, android.net.Uri);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class DrawableCompat {
+ method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
+ method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
+ method public static void clearColorFilter(android.graphics.drawable.Drawable);
+ method public static int getAlpha(android.graphics.drawable.Drawable);
+ method public static android.graphics.ColorFilter? getColorFilter(android.graphics.drawable.Drawable);
+ method public static int getLayoutDirection(android.graphics.drawable.Drawable);
+ method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
+ method @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
+ method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
+ method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
+ method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
+ method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
+ method public static void setTint(android.graphics.drawable.Drawable, @ColorInt int);
+ method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList?);
+ method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode?);
+ method public static <T extends android.graphics.drawable.Drawable> T! unwrap(android.graphics.drawable.Drawable);
+ method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
+ }
+
+ @androidx.versionedparcelable.VersionedParcelize(allowSerialization=true, ignoreParcelables=true, isCustom=true, jetifyAs="android.support.v4.graphics.drawable.IconCompat") public class IconCompat extends androidx.versionedparcelable.CustomVersionedParcelable {
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addToShortcutIntent(android.content.Intent, android.graphics.drawable.Drawable?, android.content.Context);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void checkResource(android.content.Context);
+ method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
+ method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
+ method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.graphics.drawable.Icon);
+ method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? createFromIconOrNullIfZeroResId(android.graphics.drawable.Icon);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
+ method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
+ method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithData(byte[], int, int);
+ method public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.Context, @DrawableRes int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.res.Resources?, String, @DrawableRes int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.Bitmap? getBitmap();
+ method @DrawableRes public int getResId();
+ method public String getResPackage();
+ method public int getType();
+ method public android.net.Uri getUri();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.io.InputStream? getUriInputStream(android.content.Context);
+ method public android.graphics.drawable.Drawable? loadDrawable(android.content.Context);
+ method public androidx.core.graphics.drawable.IconCompat setTint(@ColorInt int);
+ method public androidx.core.graphics.drawable.IconCompat setTintList(android.content.res.ColorStateList?);
+ method public androidx.core.graphics.drawable.IconCompat setTintMode(android.graphics.PorterDuff.Mode?);
+ method public android.os.Bundle toBundle();
+ method @Deprecated @RequiresApi(23) public android.graphics.drawable.Icon toIcon();
+ method @RequiresApi(23) public android.graphics.drawable.Icon toIcon(android.content.Context?);
+ field public static final int TYPE_ADAPTIVE_BITMAP = 5; // 0x5
+ field public static final int TYPE_BITMAP = 1; // 0x1
+ field public static final int TYPE_DATA = 3; // 0x3
+ field public static final int TYPE_RESOURCE = 2; // 0x2
+ field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+ field public static final int TYPE_URI = 4; // 0x4
+ field public static final int TYPE_URI_ADAPTIVE_BITMAP = 6; // 0x6
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.versionedparcelable.ParcelField(value=1, defaultValue="androidx.core.graphics.drawable.IconCompat.TYPE_UNKNOWN") public int mType;
+ }
+
+ public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.Bitmap? getBitmap();
+ method public float getCornerRadius();
+ method public int getGravity();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public boolean hasAntiAlias();
+ method public boolean hasMipMap();
+ method public boolean isCircular();
+ method public void setAlpha(int);
+ method public void setAntiAlias(boolean);
+ method public void setCircular(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setCornerRadius(float);
+ method public void setDither(boolean);
+ method public void setGravity(int);
+ method public void setMipMap(boolean);
+ method public void setTargetDensity(android.graphics.Canvas);
+ method public void setTargetDensity(android.util.DisplayMetrics);
+ method public void setTargetDensity(int);
+ }
+
+ public final class RoundedBitmapDrawableFactory {
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintAwareDrawable {
+ method public void setTint(@ColorInt int);
+ method public void setTintList(android.content.res.ColorStateList!);
+ method public void setTintMode(android.graphics.PorterDuff.Mode!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface WrappedDrawable {
+ method public android.graphics.drawable.Drawable! getWrappedDrawable();
+ method public void setWrappedDrawable(android.graphics.drawable.Drawable!);
+ }
+
+}
+
+package androidx.core.hardware.display {
+
+ public final class DisplayManagerCompat {
+ method public android.view.Display? getDisplay(int);
+ method public android.view.Display![] getDisplays();
+ method public android.view.Display![] getDisplays(String?);
+ method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
+ field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+ }
+
+}
+
+package androidx.core.hardware.fingerprint {
+
+ @Deprecated public class FingerprintManagerCompat {
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
+ method @Deprecated public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
+ }
+
+ @Deprecated public abstract static class FingerprintManagerCompat.AuthenticationCallback {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationCallback();
+ method @Deprecated public void onAuthenticationError(int, CharSequence!);
+ method @Deprecated public void onAuthenticationFailed();
+ method @Deprecated public void onAuthenticationHelp(int, CharSequence!);
+ method @Deprecated public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
+ }
+
+ @Deprecated public static final class FingerprintManagerCompat.AuthenticationResult {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
+ method @Deprecated public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
+ }
+
+ @Deprecated public static class FingerprintManagerCompat.CryptoObject {
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(java.security.Signature);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
+ method @Deprecated public javax.crypto.Cipher? getCipher();
+ method @Deprecated public javax.crypto.Mac? getMac();
+ method @Deprecated public java.security.Signature? getSignature();
+ }
+
+}
+
+package androidx.core.internal.view {
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportMenu extends android.view.Menu {
+ method public void setGroupDividerEnabled(boolean);
+ field public static final int CATEGORY_MASK = -65536; // 0xffff0000
+ field public static final int CATEGORY_SHIFT = 16; // 0x10
+ field public static final int FLAG_KEEP_OPEN_ON_SUBMENU_OPENED = 4; // 0x4
+ field public static final int SUPPORTED_MODIFIERS_MASK = 69647; // 0x1100f
+ field public static final int USER_MASK = 65535; // 0xffff
+ field public static final int USER_SHIFT = 0; // 0x0
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportMenuItem extends android.view.MenuItem {
+ method public int getAlphabeticModifiers();
+ method public CharSequence? getContentDescription();
+ method public android.content.res.ColorStateList? getIconTintList();
+ method public android.graphics.PorterDuff.Mode? getIconTintMode();
+ method public int getNumericModifiers();
+ method public androidx.core.view.ActionProvider? getSupportActionProvider();
+ method public CharSequence? getTooltipText();
+ method public boolean requiresActionButton();
+ method public boolean requiresOverflow();
+ method public android.view.MenuItem setAlphabeticShortcut(char, int);
+ method public androidx.core.internal.view.SupportMenuItem setContentDescription(CharSequence?);
+ method public android.view.MenuItem setIconTintList(android.content.res.ColorStateList?);
+ method public android.view.MenuItem setIconTintMode(android.graphics.PorterDuff.Mode?);
+ method public android.view.MenuItem setNumericShortcut(char, int);
+ method public android.view.MenuItem setShortcut(char, char, int, int);
+ method public androidx.core.internal.view.SupportMenuItem setSupportActionProvider(androidx.core.view.ActionProvider?);
+ method public androidx.core.internal.view.SupportMenuItem setTooltipText(CharSequence?);
+ field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportSubMenu extends androidx.core.internal.view.SupportMenu android.view.SubMenu {
+ }
+
+}
+
+package androidx.core.location {
+
+ public abstract class GnssStatusCompat {
+ method @FloatRange(from=0, to=360) public abstract float getAzimuthDegrees(@IntRange(from=0) int);
+ method @FloatRange(from=0, to=63) public abstract float getBasebandCn0DbHz(@IntRange(from=0) int);
+ method @FloatRange(from=0) public abstract float getCarrierFrequencyHz(@IntRange(from=0) int);
+ method @FloatRange(from=0, to=63) public abstract float getCn0DbHz(@IntRange(from=0) int);
+ method public abstract int getConstellationType(@IntRange(from=0) int);
+ method @FloatRange(from=0xffffffa6, to=90) public abstract float getElevationDegrees(@IntRange(from=0) int);
+ method @IntRange(from=0) public abstract int getSatelliteCount();
+ method @IntRange(from=1, to=200) public abstract int getSvid(@IntRange(from=0) int);
+ method public abstract boolean hasAlmanacData(@IntRange(from=0) int);
+ method public abstract boolean hasBasebandCn0DbHz(@IntRange(from=0) int);
+ method public abstract boolean hasCarrierFrequencyHz(@IntRange(from=0) int);
+ method public abstract boolean hasEphemerisData(@IntRange(from=0) int);
+ method public abstract boolean usedInFix(@IntRange(from=0) int);
+ method @RequiresApi(android.os.Build.VERSION_CODES.N) public static androidx.core.location.GnssStatusCompat wrap(android.location.GnssStatus);
+ method public static androidx.core.location.GnssStatusCompat wrap(android.location.GpsStatus);
+ field public static final int CONSTELLATION_BEIDOU = 5; // 0x5
+ field public static final int CONSTELLATION_GALILEO = 6; // 0x6
+ field public static final int CONSTELLATION_GLONASS = 3; // 0x3
+ field public static final int CONSTELLATION_GPS = 1; // 0x1
+ field public static final int CONSTELLATION_IRNSS = 7; // 0x7
+ field public static final int CONSTELLATION_QZSS = 4; // 0x4
+ field public static final int CONSTELLATION_SBAS = 2; // 0x2
+ field public static final int CONSTELLATION_UNKNOWN = 0; // 0x0
+ }
+
+ public abstract static class GnssStatusCompat.Callback {
+ ctor public GnssStatusCompat.Callback();
+ method public void onFirstFix(@IntRange(from=0) int);
+ method public void onSatelliteStatusChanged(androidx.core.location.GnssStatusCompat);
+ method public void onStarted();
+ method public void onStopped();
+ }
+
+ public final class LocationCompat {
+ method public static float getBearingAccuracyDegrees(android.location.Location);
+ method public static long getElapsedRealtimeMillis(android.location.Location);
+ method public static long getElapsedRealtimeNanos(android.location.Location);
+ method @FloatRange(from=0.0) public static float getMslAltitudeAccuracyMeters(android.location.Location);
+ method public static double getMslAltitudeMeters(android.location.Location);
+ method public static float getSpeedAccuracyMetersPerSecond(android.location.Location);
+ method public static float getVerticalAccuracyMeters(android.location.Location);
+ method public static boolean hasBearingAccuracy(android.location.Location);
+ method public static boolean hasMslAltitude(android.location.Location);
+ method public static boolean hasMslAltitudeAccuracy(android.location.Location);
+ method public static boolean hasSpeedAccuracy(android.location.Location);
+ method public static boolean hasVerticalAccuracy(android.location.Location);
+ method public static boolean isMock(android.location.Location);
+ method public static void removeMslAltitude(android.location.Location);
+ method public static void removeMslAltitudeAccuracy(android.location.Location);
+ method public static void setBearingAccuracyDegrees(android.location.Location, float);
+ method public static void setMock(android.location.Location, boolean);
+ method public static void setMslAltitudeAccuracyMeters(android.location.Location, @FloatRange(from=0.0) float);
+ method public static void setMslAltitudeMeters(android.location.Location, double);
+ method public static void setSpeedAccuracyMetersPerSecond(android.location.Location, float);
+ method public static void setVerticalAccuracyMeters(android.location.Location, float);
+ field public static final String EXTRA_BEARING_ACCURACY = "bearingAccuracy";
+ field public static final String EXTRA_IS_MOCK = "mockLocation";
+ field public static final String EXTRA_MSL_ALTITUDE = "androidx.core.location.extra.MSL_ALTITUDE";
+ field public static final String EXTRA_MSL_ALTITUDE_ACCURACY = "androidx.core.location.extra.MSL_ALTITUDE_ACCURACY";
+ field public static final String EXTRA_SPEED_ACCURACY = "speedAccuracy";
+ field public static final String EXTRA_VERTICAL_ACCURACY = "verticalAccuracy";
+ }
+
+ public interface LocationListenerCompat extends android.location.LocationListener {
+ method public default void onStatusChanged(String, int, android.os.Bundle?);
+ }
+
+ public final class LocationManagerCompat {
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void getCurrentLocation(android.location.LocationManager, String, androidx.core.os.CancellationSignal?, java.util.concurrent.Executor, androidx.core.util.Consumer<android.location.Location!>);
+ method public static String? getGnssHardwareModelName(android.location.LocationManager);
+ method public static int getGnssYearOfHardware(android.location.LocationManager);
+ method public static boolean hasProvider(android.location.LocationManager, String);
+ method public static boolean isLocationEnabled(android.location.LocationManager);
+ method @RequiresApi(android.os.Build.VERSION_CODES.N) @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssMeasurementsCallback(android.location.LocationManager, android.location.GnssMeasurementsEvent.Callback, android.os.Handler);
+ method @RequiresApi(android.os.Build.VERSION_CODES.R) @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssMeasurementsCallback(android.location.LocationManager, java.util.concurrent.Executor, android.location.GnssMeasurementsEvent.Callback);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback, android.os.Handler);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, java.util.concurrent.Executor, androidx.core.location.GnssStatusCompat.Callback);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void removeUpdates(android.location.LocationManager, androidx.core.location.LocationListenerCompat);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, androidx.core.location.LocationListenerCompat, android.os.Looper);
+ method @RequiresApi(android.os.Build.VERSION_CODES.N) public static void unregisterGnssMeasurementsCallback(android.location.LocationManager, android.location.GnssMeasurementsEvent.Callback);
+ method public static void unregisterGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback);
+ }
+
+ public final class LocationRequestCompat {
+ method @IntRange(from=1) public long getDurationMillis();
+ method @IntRange(from=0) public long getIntervalMillis();
+ method @IntRange(from=0) public long getMaxUpdateDelayMillis();
+ method @IntRange(from=1, to=java.lang.Integer.MAX_VALUE) public int getMaxUpdates();
+ method @FloatRange(from=0, to=java.lang.Float.MAX_VALUE) public float getMinUpdateDistanceMeters();
+ method @IntRange(from=0) public long getMinUpdateIntervalMillis();
+ method public int getQuality();
+ method @RequiresApi(31) public android.location.LocationRequest toLocationRequest();
+ method @RequiresApi(19) public android.location.LocationRequest? toLocationRequest(String);
+ field public static final long PASSIVE_INTERVAL = 9223372036854775807L; // 0x7fffffffffffffffL
+ field public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; // 0x66
+ field public static final int QUALITY_HIGH_ACCURACY = 100; // 0x64
+ field public static final int QUALITY_LOW_POWER = 104; // 0x68
+ }
+
+ public static final class LocationRequestCompat.Builder {
+ ctor public LocationRequestCompat.Builder(long);
+ ctor public LocationRequestCompat.Builder(androidx.core.location.LocationRequestCompat);
+ method public androidx.core.location.LocationRequestCompat build();
+ method public androidx.core.location.LocationRequestCompat.Builder clearMinUpdateIntervalMillis();
+ method public androidx.core.location.LocationRequestCompat.Builder setDurationMillis(@IntRange(from=1) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setIntervalMillis(@IntRange(from=0) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdateDelayMillis(@IntRange(from=0) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdates(@IntRange(from=1, to=java.lang.Integer.MAX_VALUE) int);
+ method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateDistanceMeters(@FloatRange(from=0, to=java.lang.Float.MAX_VALUE) float);
+ method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateIntervalMillis(@IntRange(from=0) long);
+ method public androidx.core.location.LocationRequestCompat.Builder setQuality(int);
+ }
+
+}
+
+package androidx.core.math {
+
+ public class MathUtils {
+ method public static int addExact(int, int);
+ method public static long addExact(long, long);
+ method public static float clamp(float, float, float);
+ method public static double clamp(double, double, double);
+ method public static int clamp(int, int, int);
+ method public static long clamp(long, long, long);
+ method public static int decrementExact(int);
+ method public static long decrementExact(long);
+ method public static int incrementExact(int);
+ method public static long incrementExact(long);
+ method public static int multiplyExact(int, int);
+ method public static long multiplyExact(long, long);
+ method public static int negateExact(int);
+ method public static long negateExact(long);
+ method public static int subtractExact(int, int);
+ method public static long subtractExact(long, long);
+ method public static int toIntExact(long);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class ConnectivityManagerCompat {
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+ method @androidx.core.net.ConnectivityManagerCompat.RestrictBackgroundStatus public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+ }
+
+ @IntDef({androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_DISABLED, androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_WHITELISTED, androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_ENABLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ConnectivityManagerCompat.RestrictBackgroundStatus {
+ }
+
+ public final class MailTo {
+ method public String? getBcc();
+ method public String? getBody();
+ method public String? getCc();
+ method public java.util.Map<java.lang.String!,java.lang.String!>? getHeaders();
+ method public String? getSubject();
+ method public String? getTo();
+ method public static boolean isMailTo(String?);
+ method public static boolean isMailTo(android.net.Uri?);
+ method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
+ method public static androidx.core.net.MailTo parse(android.net.Uri) throws androidx.core.net.ParseException;
+ field public static final String MAILTO_SCHEME = "mailto:";
+ }
+
+ public class ParseException extends java.lang.RuntimeException {
+ field public final String response;
+ }
+
+ public final class TrafficStatsCompat {
+ method @Deprecated public static void clearThreadStatsTag();
+ method @Deprecated public static int getThreadStatsTag();
+ method @Deprecated public static void incrementOperationCount(int);
+ method @Deprecated public static void incrementOperationCount(int, int);
+ method @Deprecated public static void setThreadStatsTag(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
+ }
+
+ public final class UriCompat {
+ method public static String toSafeString(android.net.Uri);
+ }
+
+}
+
+package androidx.core.os {
+
+ public class BuildCompat {
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N) public static boolean isAtLeastN();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N_MR1) public static boolean isAtLeastNMR1();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O) public static boolean isAtLeastO();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O_MR1) public static boolean isAtLeastOMR1();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.P) public static boolean isAtLeastP();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
+ method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
+ method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
+ field @ChecksSdkIntAtLeast(extension=android.os.ext.SdkExtensions.AD_SERVICES) public static final int AD_SERVICES_EXTENSION_INT;
+ field @ChecksSdkIntAtLeast(extension=android.os.Build.VERSION_CODES.R) public static final int R_EXTENSION_INT;
+ field @ChecksSdkIntAtLeast(extension=android.os.Build.VERSION_CODES.S) public static final int S_EXTENSION_INT;
+ field @ChecksSdkIntAtLeast(extension=android.os.Build.VERSION_CODES.TIRAMISU) public static final int T_EXTENSION_INT;
+ }
+
+ public final class BundleCompat {
+ method public static <T> T? getParcelable(android.os.Bundle, String?, Class<T!>);
+ method public static android.os.Parcelable![]? getParcelableArray(android.os.Bundle, String?, Class<? extends android.os.Parcelable>);
+ method public static <T> java.util.ArrayList<T!>? getParcelableArrayList(android.os.Bundle, String?, Class<? extends T>);
+ method public static <T> android.util.SparseArray<T!>? getSparseParcelableArray(android.os.Bundle, String?, Class<? extends T>);
+ }
+
+ public final class CancellationSignal {
+ ctor public CancellationSignal();
+ method public void cancel();
+ method public Object? getCancellationSignalObject();
+ method public boolean isCanceled();
+ method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener?);
+ method public void throwIfCanceled();
+ }
+
+ public static interface CancellationSignal.OnCancelListener {
+ method public void onCancel();
+ }
+
+ public final class ConfigurationCompat {
+ method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
+ }
+
+ public final class EnvironmentCompat {
+ method public static String getStorageState(java.io.File);
+ field public static final String MEDIA_UNKNOWN = "unknown";
+ }
+
+ public final class ExecutorCompat {
+ method public static java.util.concurrent.Executor create(android.os.Handler);
+ }
+
+ public final class HandlerCompat {
+ method public static android.os.Handler createAsync(android.os.Looper);
+ method public static android.os.Handler createAsync(android.os.Looper, android.os.Handler.Callback);
+ method @RequiresApi(16) public static boolean hasCallbacks(android.os.Handler, Runnable);
+ method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
+ }
+
+ public final class LocaleListCompat {
+ method public static androidx.core.os.LocaleListCompat create(java.util.Locale!...);
+ method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
+ method public java.util.Locale? get(int);
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
+ method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
+ method public java.util.Locale? getFirstMatch(String![]);
+ method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
+ method public boolean isEmpty();
+ method @RequiresApi(21) public static boolean matchesLanguageAndScript(java.util.Locale, java.util.Locale);
+ method @IntRange(from=0) public int size();
+ method public String toLanguageTags();
+ method public Object? unwrap();
+ method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
+ method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
+ }
+
+ public final class MessageCompat {
+ method public static boolean isAsynchronous(android.os.Message);
+ method public static void setAsynchronous(android.os.Message, boolean);
+ }
+
+ public class OperationCanceledException extends java.lang.RuntimeException {
+ ctor public OperationCanceledException();
+ ctor public OperationCanceledException(String?);
+ }
+
+ public final class ParcelCompat {
+ method public static <T> Object![]? readArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> java.util.ArrayList<T!>? readArrayList(android.os.Parcel, ClassLoader?, Class<? extends T>);
+ method public static boolean readBoolean(android.os.Parcel);
+ method public static <K, V> java.util.HashMap<K!,V!>? readHashMap(android.os.Parcel, ClassLoader?, Class<? extends K>, Class<? extends V>);
+ method public static <T> void readList(android.os.Parcel, java.util.List<? super T>, ClassLoader?, Class<T!>);
+ method public static <K, V> void readMap(android.os.Parcel, java.util.Map<? super K,? super V>, ClassLoader?, Class<K!>, Class<V!>);
+ method public static <T extends android.os.Parcelable> T? readParcelable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @Deprecated public static <T> T![]? readParcelableArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> android.os.Parcelable![]? readParcelableArrayTyped(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(30) public static <T> android.os.Parcelable.Creator<T!>? readParcelableCreator(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public static <T> java.util.List<T!> readParcelableList(android.os.Parcel, java.util.List<T!>, ClassLoader?, Class<T!>);
+ method public static <T extends java.io.Serializable> T? readSerializable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> android.util.SparseArray<T!>? readSparseArray(android.os.Parcel, ClassLoader?, Class<? extends T>);
+ method public static void writeBoolean(android.os.Parcel, boolean);
+ }
+
+ @Deprecated public final class ParcelableCompat {
+ method @Deprecated public static <T> android.os.Parcelable.Creator<T!>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T!>!);
+ }
+
+ @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
+ method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
+ method @Deprecated public T![]! newArray(int);
+ }
+
+ public final class ProcessCompat {
+ method public static boolean isApplicationUid(int);
+ }
+
+ @Deprecated public final class TraceCompat {
+ method @Deprecated public static void beginAsyncSection(String, int);
+ method @Deprecated public static void beginSection(String);
+ method @Deprecated public static void endAsyncSection(String, int);
+ method @Deprecated public static void endSection();
+ method @Deprecated public static boolean isEnabled();
+ method @Deprecated public static void setCounter(String, int);
+ }
+
+ @RequiresApi(17) public class UserHandleCompat {
+ method public static android.os.UserHandle getUserHandleForUid(int);
+ }
+
+ public class UserManagerCompat {
+ method public static boolean isUserUnlocked(android.content.Context);
+ }
+
+}
+
+package androidx.core.provider {
+
+ public final class DocumentsContractCompat {
+ method public static android.net.Uri? buildChildDocumentsUri(String, String?);
+ method public static android.net.Uri? buildChildDocumentsUriUsingTree(android.net.Uri, String);
+ method public static android.net.Uri? buildDocumentUri(String, String);
+ method public static android.net.Uri? buildDocumentUriUsingTree(android.net.Uri, String);
+ method public static android.net.Uri? buildTreeDocumentUri(String, String);
+ method public static android.net.Uri? createDocument(android.content.ContentResolver, android.net.Uri, String, String) throws java.io.FileNotFoundException;
+ method public static String? getDocumentId(android.net.Uri);
+ method public static String? getTreeDocumentId(android.net.Uri);
+ method public static boolean isDocumentUri(android.content.Context, android.net.Uri?);
+ method public static boolean isTreeUri(android.net.Uri);
+ method public static boolean removeDocument(android.content.ContentResolver, android.net.Uri, android.net.Uri) throws java.io.FileNotFoundException;
+ method public static android.net.Uri? renameDocument(android.content.ContentResolver, android.net.Uri, String) throws java.io.FileNotFoundException;
+ }
+
+ public static final class DocumentsContractCompat.DocumentCompat {
+ field public static final int FLAG_VIRTUAL_DOCUMENT = 512; // 0x200
+ }
+
+ public final class FontRequest {
+ ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
+ ctor public FontRequest(String, String, String, @ArrayRes int);
+ method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
+ method @ArrayRes public int getCertificatesArrayResId();
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getIdentifier();
+ method public String getProviderAuthority();
+ method public String getProviderPackage();
+ method public String getQuery();
+ }
+
+ public class FontsContractCompat {
+ method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![]);
+ method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface! getFontSync(android.content.Context!, androidx.core.provider.FontRequest!, androidx.core.content.res.ResourcesCompat.FontCallback?, android.os.Handler?, boolean, int, int);
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public static android.content.pm.ProviderInfo? getProvider(android.content.pm.PackageManager, androidx.core.provider.FontRequest, android.content.res.Resources?) throws android.content.pm.PackageManager.NameNotFoundException;
+ method @Deprecated @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static java.util.Map<android.net.Uri!,java.nio.ByteBuffer!>! prepareFontData(android.content.Context!, androidx.core.provider.FontsContractCompat.FontInfo![]!, android.os.CancellationSignal!);
+ method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void resetCache();
+ field @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String PARCEL_FONT_RESULTS = "font_results";
+ }
+
+ public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
+ ctor public FontsContractCompat.Columns();
+ field public static final String FILE_ID = "file_id";
+ field public static final String ITALIC = "font_italic";
+ field public static final String RESULT_CODE = "result_code";
+ field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
+ field public static final int RESULT_CODE_OK = 0; // 0x0
+ field public static final String TTC_INDEX = "font_ttc_index";
+ field public static final String VARIATION_SETTINGS = "font_variation_settings";
+ field public static final String WEIGHT = "font_weight";
+ }
+
+ public static class FontsContractCompat.FontFamilyResult {
+ ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public FontsContractCompat.FontFamilyResult(int, androidx.core.provider.FontsContractCompat.FontInfo![]?);
+ method public androidx.core.provider.FontsContractCompat.FontInfo![]! getFonts();
+ method public int getStatusCode();
+ field public static final int STATUS_OK = 0; // 0x0
+ field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
+ field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
+ }
+
+ public static class FontsContractCompat.FontInfo {
+ ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public FontsContractCompat.FontInfo(android.net.Uri, @IntRange(from=0) int, @IntRange(from=1, to=1000) int, boolean, int);
+ method public int getResultCode();
+ method @IntRange(from=0) public int getTtcIndex();
+ method public android.net.Uri getUri();
+ method @IntRange(from=1, to=1000) public int getWeight();
+ method public boolean isItalic();
+ }
+
+ public static class FontsContractCompat.FontRequestCallback {
+ ctor public FontsContractCompat.FontRequestCallback();
+ method public void onTypefaceRequestFailed(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int);
+ method public void onTypefaceRetrieved(android.graphics.Typeface!);
+ field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
+ field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
+ field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+ field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
+ field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
+ field @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int RESULT_OK = 0; // 0x0
+ }
+
+ @IntDef({androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_PROVIDER_NOT_FOUND, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_NOT_FOUND, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_UNAVAILABLE, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_MALFORMED_QUERY, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_WRONG_CERTIFICATES, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_SECURITY_VIOLATION, androidx.core.provider.FontsContractCompat.FontRequestCallback.RESULT_OK}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FontsContractCompat.FontRequestCallback.FontRequestFailReason {
+ }
+
+ @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SelfDestructiveThread {
+ ctor @Deprecated public SelfDestructiveThread(String!, int, int);
+ method @Deprecated @VisibleForTesting public int getGeneration();
+ method @Deprecated @VisibleForTesting public boolean isRunning();
+ method @Deprecated public <T> void postAndReply(java.util.concurrent.Callable<T!>!, androidx.core.provider.SelfDestructiveThread.ReplyCallback<T!>!);
+ method @Deprecated public <T> T! postAndWait(java.util.concurrent.Callable<T!>!, int) throws java.lang.InterruptedException;
+ }
+
+ @Deprecated public static interface SelfDestructiveThread.ReplyCallback<T> {
+ method @Deprecated public void onReply(T!);
+ }
+
+}
+
+package androidx.core.telephony {
+
+ @RequiresApi(22) public class SubscriptionManagerCompat {
+ method public static int getSlotIndex(int);
+ }
+
+ public class TelephonyManagerCompat {
+ method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static String? getImei(android.telephony.TelephonyManager);
+ method public static int getSubscriptionId(android.telephony.TelephonyManager);
+ }
+
+}
+
+package androidx.core.telephony.mbms {
+
+ public final class MbmsHelper {
+ method public static CharSequence? getBestNameForService(android.content.Context, android.telephony.mbms.ServiceInfo);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class BidiFormatter {
+ method public static androidx.core.text.BidiFormatter! getInstance();
+ method public static androidx.core.text.BidiFormatter! getInstance(boolean);
+ method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
+ method public boolean getStereoReset();
+ method public boolean isRtl(String!);
+ method public boolean isRtl(CharSequence!);
+ method public boolean isRtlContext();
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public String! unicodeWrap(String!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, boolean);
+ method public String! unicodeWrap(String!);
+ method public CharSequence! unicodeWrap(CharSequence!);
+ }
+
+ public static final class BidiFormatter.Builder {
+ ctor public BidiFormatter.Builder();
+ ctor public BidiFormatter.Builder(boolean);
+ ctor public BidiFormatter.Builder(java.util.Locale!);
+ method public androidx.core.text.BidiFormatter! build();
+ method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
+ method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
+ }
+
+ public final class HtmlCompat {
+ method public static android.text.Spanned fromHtml(String, int);
+ method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
+ method public static String toHtml(android.text.Spanned, int);
+ field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
+ field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
+ field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
+ field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
+ field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
+ }
+
+ public final class ICUCompat {
+ method public static String? maximizeAndGetScript(java.util.Locale);
+ }
+
+ public class PrecomputedTextCompat implements android.text.Spannable {
+ method public char charAt(int);
+ method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
+ method @IntRange(from=0) public int getParagraphCount();
+ method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
+ method public androidx.core.text.PrecomputedTextCompat.Params getParams();
+ method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.text.PrecomputedText? getPrecomputedText();
+ method public int getSpanEnd(Object!);
+ method public int getSpanFlags(Object!);
+ method public int getSpanStart(Object!);
+ method public <T> T![]! getSpans(int, int, Class<T!>!);
+ method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
+ method public int length();
+ method public int nextSpanTransition(int, int, Class!);
+ method public void removeSpan(Object!);
+ method public void setSpan(Object!, int, int, int);
+ method public CharSequence! subSequence(int, int);
+ }
+
+ public static final class PrecomputedTextCompat.Params {
+ ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean equalsWithoutTextDirection(androidx.core.text.PrecomputedTextCompat.Params);
+ method @RequiresApi(23) public int getBreakStrategy();
+ method @RequiresApi(23) public int getHyphenationFrequency();
+ method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
+ method public android.text.TextPaint getTextPaint();
+ }
+
+ public static class PrecomputedTextCompat.Params.Builder {
+ ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
+ method public androidx.core.text.PrecomputedTextCompat.Params build();
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
+ method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
+ }
+
+ public interface TextDirectionHeuristicCompat {
+ method public boolean isRtl(char[]!, int, int);
+ method public boolean isRtl(CharSequence!, int, int);
+ }
+
+ public final class TextDirectionHeuristicsCompat {
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
+ }
+
+ public final class TextUtilsCompat {
+ method public static int getLayoutDirectionFromLocale(java.util.Locale?);
+ method public static String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.text.util {
+
+ public final class LinkifyCompat {
+ method public static boolean addLinks(android.text.Spannable, @androidx.core.text.util.LinkifyCompat.LinkifyMask int);
+ method public static boolean addLinks(android.widget.TextView, @androidx.core.text.util.LinkifyCompat.LinkifyMask int);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ }
+
+ @IntDef(flag=true, value={android.text.util.Linkify.WEB_URLS, android.text.util.Linkify.EMAIL_ADDRESSES, android.text.util.Linkify.PHONE_NUMBERS, android.text.util.Linkify.MAP_ADDRESSES, android.text.util.Linkify.ALL}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface LinkifyCompat.LinkifyMask {
+ }
+
+}
+
+package androidx.core.util {
+
+ public class AtomicFile {
+ ctor public AtomicFile(java.io.File);
+ method public void delete();
+ method public void failWrite(java.io.FileOutputStream?);
+ method public void finishWrite(java.io.FileOutputStream?);
+ method public java.io.File getBaseFile();
+ method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+ method public byte[] readFully() throws java.io.IOException;
+ method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+ }
+
+ public interface Consumer<T> {
+ method public void accept(T!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DebugUtils {
+ method public static void buildShortClassTag(Object!, StringBuilder!);
+ }
+
+ @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class LogWriter extends java.io.Writer {
+ ctor @Deprecated public LogWriter(String!);
+ method @Deprecated public void close();
+ method @Deprecated public void flush();
+ method @Deprecated public void write(char[]!, int, int);
+ }
+
+ public class ObjectsCompat {
+ method public static boolean equals(Object?, Object?);
+ method public static int hash(java.lang.Object!...);
+ method public static int hashCode(Object?);
+ method public static <T> T requireNonNull(T?);
+ method public static <T> T requireNonNull(T?, String);
+ method public static String? toString(Object?, String?);
+ }
+
+ public class Pair<F, S> {
+ ctor public Pair(F!, S!);
+ method public static <A, B> androidx.core.util.Pair<A!,B!> create(A!, B!);
+ field public final F! first;
+ field public final S! second;
+ }
+
+ public final class PatternsCompat {
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final java.util.regex.Pattern AUTOLINK_EMAIL_ADDRESS;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final java.util.regex.Pattern AUTOLINK_WEB_URL;
+ field public static final java.util.regex.Pattern DOMAIN_NAME;
+ field public static final java.util.regex.Pattern EMAIL_ADDRESS;
+ field public static final java.util.regex.Pattern IP_ADDRESS;
+ field public static final java.util.regex.Pattern WEB_URL;
+ }
+
+ public final class Pools {
+ }
+
+ public static interface Pools.Pool<T> {
+ method public T? acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
+ ctor public Pools.SimplePool(int);
+ method public T! acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
+ ctor public Pools.SynchronizedPool(int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Preconditions {
+ method public static void checkArgument(boolean);
+ method public static void checkArgument(boolean, Object);
+ method public static void checkArgument(boolean, String, java.lang.Object!...);
+ method public static float checkArgumentFinite(float, String);
+ method public static int checkArgumentInRange(int, int, int, String);
+ method public static long checkArgumentInRange(long, long, long, String);
+ method public static float checkArgumentInRange(float, float, float, String);
+ method public static double checkArgumentInRange(double, double, double, String);
+ method @IntRange(from=0) public static int checkArgumentNonnegative(int, String?);
+ method @IntRange(from=0) public static int checkArgumentNonnegative(int);
+ method public static int checkFlagsArgument(int, int);
+ method public static <T> T checkNotNull(T?);
+ method public static <T> T checkNotNull(T?, Object);
+ method public static void checkState(boolean, String?);
+ method public static void checkState(boolean);
+ method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?);
+ method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?, Object);
+ method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?, String, java.lang.Object!...);
+ }
+
+ public interface Predicate<T> {
+ method public default androidx.core.util.Predicate<T!>! and(androidx.core.util.Predicate<? super T>!);
+ method public static <T> androidx.core.util.Predicate<T!>! isEqual(Object!);
+ method public default androidx.core.util.Predicate<T!>! negate();
+ method public static <T> androidx.core.util.Predicate<T!>! not(androidx.core.util.Predicate<? super T>!);
+ method public default androidx.core.util.Predicate<T!>! or(androidx.core.util.Predicate<? super T>!);
+ method public boolean test(T!);
+ }
+
+ public final class SizeFCompat {
+ ctor public SizeFCompat(float, float);
+ method public float getHeight();
+ method public float getWidth();
+ method @RequiresApi(21) public android.util.SizeF toSizeF();
+ method @RequiresApi(21) public static androidx.core.util.SizeFCompat toSizeFCompat(android.util.SizeF);
+ }
+
+ public interface Supplier<T> {
+ method public T! get();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TimeUtils {
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, StringBuilder!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, long, java.io.PrintWriter!);
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int HUNDRED_DAY_FIELD_LEN = 19; // 0x13
+ }
+
+}
+
+package androidx.core.view {
+
+ public class AccessibilityDelegateCompat {
+ ctor public AccessibilityDelegateCompat();
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityDelegateCompat(android.view.View.AccessibilityDelegate);
+ method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
+ method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
+ method public void sendAccessibilityEvent(android.view.View, int);
+ method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
+ }
+
+ public abstract class ActionProvider {
+ ctor public ActionProvider(android.content.Context);
+ method public android.content.Context getContext();
+ method public boolean hasSubMenu();
+ method public boolean isVisible();
+ method public abstract android.view.View onCreateActionView();
+ method public android.view.View onCreateActionView(android.view.MenuItem);
+ method public boolean onPerformDefaultAction();
+ method public void onPrepareSubMenu(android.view.SubMenu);
+ method public boolean overridesItemVisibility();
+ method public void refreshVisibility();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void reset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSubUiVisibilityListener(androidx.core.view.ActionProvider.SubUiVisibilityListener?);
+ method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void subUiVisibilityChanged(boolean);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ActionProvider.SubUiVisibilityListener {
+ method public void onSubUiVisibilityChanged(boolean);
+ }
+
+ public static interface ActionProvider.VisibilityListener {
+ method public void onActionProviderVisibilityChanged(boolean);
+ }
+
+ public final class ContentInfoCompat {
+ method public android.content.ClipData getClip();
+ method public android.os.Bundle? getExtras();
+ method @androidx.core.view.ContentInfoCompat.Flags public int getFlags();
+ method public android.net.Uri? getLinkUri();
+ method @androidx.core.view.ContentInfoCompat.Source public int getSource();
+ method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
+ method @RequiresApi(31) public static android.util.Pair<android.view.ContentInfo!,android.view.ContentInfo!> partition(android.view.ContentInfo, java.util.function.Predicate<android.content.ClipData.Item!>);
+ method @RequiresApi(31) public android.view.ContentInfo toContentInfo();
+ method @RequiresApi(31) public static androidx.core.view.ContentInfoCompat toContentInfoCompat(android.view.ContentInfo);
+ field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
+ field public static final int SOURCE_APP = 0; // 0x0
+ field public static final int SOURCE_AUTOFILL = 4; // 0x4
+ field public static final int SOURCE_CLIPBOARD = 1; // 0x1
+ field public static final int SOURCE_DRAG_AND_DROP = 3; // 0x3
+ field public static final int SOURCE_INPUT_METHOD = 2; // 0x2
+ field public static final int SOURCE_PROCESS_TEXT = 5; // 0x5
+ }
+
+ public static final class ContentInfoCompat.Builder {
+ ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
+ ctor public ContentInfoCompat.Builder(android.content.ClipData, @androidx.core.view.ContentInfoCompat.Source int);
+ method public androidx.core.view.ContentInfoCompat build();
+ method public androidx.core.view.ContentInfoCompat.Builder setClip(android.content.ClipData);
+ method public androidx.core.view.ContentInfoCompat.Builder setExtras(android.os.Bundle?);
+ method public androidx.core.view.ContentInfoCompat.Builder setFlags(@androidx.core.view.ContentInfoCompat.Flags int);
+ method public androidx.core.view.ContentInfoCompat.Builder setLinkUri(android.net.Uri?);
+ method public androidx.core.view.ContentInfoCompat.Builder setSource(@androidx.core.view.ContentInfoCompat.Source int);
+ }
+
+ @IntDef(flag=true, value={androidx.core.view.ContentInfoCompat.FLAG_CONVERT_TO_PLAIN_TEXT}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ContentInfoCompat.Flags {
+ }
+
+ @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 final class DisplayCompat {
+ method public static androidx.core.view.DisplayCompat.ModeCompat getMode(android.content.Context, android.view.Display);
+ method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
+ }
+
+ public static final class DisplayCompat.ModeCompat {
+ method public int getPhysicalHeight();
+ method public int getPhysicalWidth();
+ method @Deprecated public boolean isNative();
+ method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
+ }
+
+ public final class DisplayCutoutCompat {
+ ctor public DisplayCutoutCompat(android.graphics.Rect?, java.util.List<android.graphics.Rect!>?);
+ ctor public DisplayCutoutCompat(androidx.core.graphics.Insets, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, androidx.core.graphics.Insets);
+ method public java.util.List<android.graphics.Rect!> getBoundingRects();
+ method public int getSafeInsetBottom();
+ method public int getSafeInsetLeft();
+ method public int getSafeInsetRight();
+ method public int getSafeInsetTop();
+ method public androidx.core.graphics.Insets getWaterfallInsets();
+ }
+
+ public final class DragAndDropPermissionsCompat {
+ method public void release();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.view.DragAndDropPermissionsCompat? request(android.app.Activity, android.view.DragEvent);
+ }
+
+ public class DragStartHelper {
+ ctor public DragStartHelper(android.view.View, androidx.core.view.DragStartHelper.OnDragStartListener);
+ method public void attach();
+ method public void detach();
+ method public void getTouchPosition(android.graphics.Point);
+ method public boolean onLongClick(android.view.View);
+ method public boolean onTouch(android.view.View, android.view.MotionEvent);
+ }
+
+ public static interface DragStartHelper.OnDragStartListener {
+ method public boolean onDragStart(android.view.View, androidx.core.view.DragStartHelper);
+ }
+
+ public final class GestureDetectorCompat {
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler?);
+ method public boolean isLongpressEnabled();
+ method public boolean onTouchEvent(android.view.MotionEvent);
+ method public void setIsLongpressEnabled(boolean);
+ method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener?);
+ }
+
+ public final class GravityCompat {
+ method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
+ method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static int getAbsoluteGravity(int, int);
+ field public static final int END = 8388613; // 0x800005
+ field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+ field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+ field public static final int START = 8388611; // 0x800003
+ }
+
+ public final class InputDeviceCompat {
+ field public static final int SOURCE_ANY = -256; // 0xffffff00
+ field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+ field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+ field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+ field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+ field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+ field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+ field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+ field public static final int SOURCE_DPAD = 513; // 0x201
+ field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+ field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+ field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+ field public static final int SOURCE_KEYBOARD = 257; // 0x101
+ field public static final int SOURCE_MOUSE = 8194; // 0x2002
+ field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
+ field public static final int SOURCE_STYLUS = 16386; // 0x4002
+ field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+ field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+ field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+ field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+ field public static final int SOURCE_UNKNOWN = 0; // 0x0
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class KeyEventDispatcher {
+ method public static boolean dispatchBeforeHierarchy(android.view.View, android.view.KeyEvent);
+ method public static boolean dispatchKeyEvent(androidx.core.view.KeyEventDispatcher.Component, android.view.View?, android.view.Window.Callback?, android.view.KeyEvent);
+ }
+
+ public static interface KeyEventDispatcher.Component {
+ method public boolean superDispatchKeyEvent(android.view.KeyEvent);
+ }
+
+ public final class LayoutInflaterCompat {
+ method @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
+ method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
+ method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
+ }
+
+ @Deprecated public interface LayoutInflaterFactory {
+ method @Deprecated public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
+ }
+
+ public final class MarginLayoutParamsCompat {
+ method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
+ method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
+ method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
+ }
+
+ public final class MenuCompat {
+ method public static void setGroupDividerEnabled(android.view.Menu, boolean);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ }
+
+ public interface MenuHost {
+ method public void addMenuProvider(androidx.core.view.MenuProvider);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+ method public void invalidateMenu();
+ method public void removeMenuProvider(androidx.core.view.MenuProvider);
+ }
+
+ public class MenuHostHelper {
+ ctor public MenuHostHelper(Runnable);
+ method public void addMenuProvider(androidx.core.view.MenuProvider);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+ method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+ method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
+ method public void onMenuClosed(android.view.Menu);
+ method public boolean onMenuItemSelected(android.view.MenuItem);
+ method public void onPrepareMenu(android.view.Menu);
+ method public void removeMenuProvider(androidx.core.view.MenuProvider);
+ }
+
+ public final class MenuItemCompat {
+ method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
+ method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
+ method public static androidx.core.view.ActionProvider? getActionProvider(android.view.MenuItem);
+ method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
+ method public static int getAlphabeticModifiers(android.view.MenuItem);
+ method public static CharSequence? getContentDescription(android.view.MenuItem);
+ method public static android.content.res.ColorStateList? getIconTintList(android.view.MenuItem);
+ method public static android.graphics.PorterDuff.Mode? getIconTintMode(android.view.MenuItem);
+ method public static int getNumericModifiers(android.view.MenuItem);
+ method public static CharSequence? getTooltipText(android.view.MenuItem);
+ method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
+ method public static android.view.MenuItem? setActionProvider(android.view.MenuItem, androidx.core.view.ActionProvider?);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, int);
+ method public static void setAlphabeticShortcut(android.view.MenuItem, char, int);
+ method public static void setContentDescription(android.view.MenuItem, CharSequence?);
+ method public static void setIconTintList(android.view.MenuItem, android.content.res.ColorStateList?);
+ method public static void setIconTintMode(android.view.MenuItem, android.graphics.PorterDuff.Mode?);
+ method public static void setNumericShortcut(android.view.MenuItem, char, int);
+ method @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
+ method public static void setShortcut(android.view.MenuItem, char, char, int, int);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ method public static void setTooltipText(android.view.MenuItem, CharSequence?);
+ field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
+ method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
+ method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
+ }
+
+ public interface MenuProvider {
+ method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
+ method public default void onMenuClosed(android.view.Menu);
+ method public boolean onMenuItemSelected(android.view.MenuItem);
+ method public default void onPrepareMenu(android.view.Menu);
+ }
+
+ public final class MotionEventCompat {
+ method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
+ method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
+ method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
+ method @Deprecated public static int getButtonState(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
+ method @Deprecated public static int getSource(android.view.MotionEvent!);
+ method @Deprecated public static float getX(android.view.MotionEvent!, int);
+ method @Deprecated public static float getY(android.view.MotionEvent!, int);
+ method public static boolean isFromSource(android.view.MotionEvent, int);
+ field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
+ field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
+ field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
+ field @Deprecated public static final int ACTION_MASK = 255; // 0xff
+ field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
+ field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+ field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+ field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
+ field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
+ field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
+ field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
+ field @Deprecated public static final int AXIS_GAS = 22; // 0x16
+ field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
+ field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
+ field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
+ field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
+ field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
+ field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
+ field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
+ field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
+ field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
+ field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
+ field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
+ field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
+ field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
+ field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
+ field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
+ field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
+ field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
+ field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
+ field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
+ field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
+ field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
+ field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
+ field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+ field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+ field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
+ field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
+ field @Deprecated public static final int AXIS_RX = 12; // 0xc
+ field @Deprecated public static final int AXIS_RY = 13; // 0xd
+ field @Deprecated public static final int AXIS_RZ = 14; // 0xe
+ field public static final int AXIS_SCROLL = 26; // 0x1a
+ field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
+ field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
+ field @Deprecated public static final int AXIS_TILT = 25; // 0x19
+ field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+ field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
+ field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+ field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+ field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
+ field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
+ field @Deprecated public static final int AXIS_X = 0; // 0x0
+ field @Deprecated public static final int AXIS_Y = 1; // 0x1
+ field @Deprecated public static final int AXIS_Z = 11; // 0xb
+ field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
+ }
+
+ public interface NestedScrollingChild {
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean isNestedScrollingEnabled();
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int);
+ method public void stopNestedScroll();
+ }
+
+ public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean hasNestedScrollingParent(@androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void stopNestedScroll(@androidx.core.view.ViewCompat.NestedScrollType int);
+ }
+
+ public interface NestedScrollingChild3 extends androidx.core.view.NestedScrollingChild2 {
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
+ }
+
+ public class NestedScrollingChildHelper {
+ ctor public NestedScrollingChildHelper(android.view.View);
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean hasNestedScrollingParent(@androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean isNestedScrollingEnabled();
+ method public void onDetachedFromWindow();
+ method public void onStopNestedScroll(android.view.View);
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int);
+ method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void stopNestedScroll();
+ method public void stopNestedScroll(@androidx.core.view.ViewCompat.NestedScrollType int);
+ }
+
+ public interface NestedScrollingParent {
+ method @androidx.core.view.ViewCompat.ScrollAxis public int getNestedScrollAxes();
+ method public boolean onNestedFling(android.view.View, float, float, boolean);
+ method public boolean onNestedPreFling(android.view.View, float, float);
+ method public void onNestedPreScroll(android.view.View, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
+ method public void onStopNestedScroll(android.view.View);
+ }
+
+ public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
+ method public void onNestedPreScroll(android.view.View, int, int, int[], @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void onStopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
+ }
+
+ public interface NestedScrollingParent3 extends androidx.core.view.NestedScrollingParent2 {
+ method public void onNestedScroll(android.view.View, int, int, int, int, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
+ }
+
+ public class NestedScrollingParentHelper {
+ ctor public NestedScrollingParentHelper(android.view.ViewGroup);
+ method @androidx.core.view.ViewCompat.ScrollAxis public int getNestedScrollAxes();
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void onStopNestedScroll(android.view.View);
+ method public void onStopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
+ }
+
+ public interface OnApplyWindowInsetsListener {
+ method public androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
+ }
+
+ public interface OnReceiveContentListener {
+ method public androidx.core.view.ContentInfoCompat? onReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
+ }
+
+ public interface OnReceiveContentViewBehavior {
+ method public androidx.core.view.ContentInfoCompat? onReceiveContent(androidx.core.view.ContentInfoCompat);
+ }
+
+ public final class OneShotPreDrawListener implements android.view.View.OnAttachStateChangeListener android.view.ViewTreeObserver.OnPreDrawListener {
+ method public static androidx.core.view.OneShotPreDrawListener add(android.view.View, Runnable);
+ method public boolean onPreDraw();
+ method public void onViewAttachedToWindow(android.view.View);
+ method public void onViewDetachedFromWindow(android.view.View);
+ method public void removeListener();
+ }
+
+ public final class PointerIconCompat {
+ method public static androidx.core.view.PointerIconCompat create(android.graphics.Bitmap, float, float);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public Object? getPointerIcon();
+ method public static androidx.core.view.PointerIconCompat getSystemIcon(android.content.Context, int);
+ method public static androidx.core.view.PointerIconCompat load(android.content.res.Resources, int);
+ field public static final int TYPE_ALIAS = 1010; // 0x3f2
+ field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+ field public static final int TYPE_ARROW = 1000; // 0x3e8
+ field public static final int TYPE_CELL = 1006; // 0x3ee
+ field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+ field public static final int TYPE_COPY = 1011; // 0x3f3
+ field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+ field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+ field public static final int TYPE_GRAB = 1020; // 0x3fc
+ field public static final int TYPE_GRABBING = 1021; // 0x3fd
+ field public static final int TYPE_HAND = 1002; // 0x3ea
+ field public static final int TYPE_HELP = 1003; // 0x3eb
+ field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+ field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+ field public static final int TYPE_NULL = 0; // 0x0
+ field public static final int TYPE_TEXT = 1008; // 0x3f0
+ field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+ field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+ field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+ field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+ field public static final int TYPE_WAIT = 1004; // 0x3ec
+ field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+ field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+ }
+
+ public final class ScaleGestureDetectorCompat {
+ method @Deprecated public static boolean isQuickScaleEnabled(Object!);
+ method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
+ method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
+ method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
+ }
+
+ public interface ScrollingView {
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ }
+
+ public interface TintableBackgroundView {
+ method public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @Deprecated public final class VelocityTrackerCompat {
+ method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
+ method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
+ }
+
+ public class ViewCompat {
+ ctor @Deprecated protected ViewCompat();
+ method public static int addAccessibilityAction(android.view.View, CharSequence, androidx.core.view.accessibility.AccessibilityViewCommand);
+ method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View!>, int);
+ method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
+ method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
+ method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
+ method public static void cancelDragAndDrop(android.view.View);
+ method @Deprecated public static int combineMeasuredStates(int, int);
+ method public static androidx.core.view.WindowInsetsCompat computeSystemWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat, android.graphics.Rect);
+ method public static androidx.core.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
+ method public static void dispatchFinishTemporaryDetach(android.view.View);
+ method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
+ method public static boolean dispatchNestedPreFling(android.view.View, float, float);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
+ method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public static void dispatchStartTemporaryDetach(android.view.View);
+ method public static void enableAccessibleClickableSpanSupport(android.view.View);
+ method public static int generateViewId();
+ method public static androidx.core.view.AccessibilityDelegateCompat? getAccessibilityDelegate(android.view.View);
+ method public static int getAccessibilityLiveRegion(android.view.View);
+ method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
+ method @UiThread public static CharSequence? getAccessibilityPaneTitle(android.view.View);
+ method @Deprecated public static float getAlpha(android.view.View!);
+ method public static android.content.res.ColorStateList? getBackgroundTintList(android.view.View);
+ method public static android.graphics.PorterDuff.Mode? getBackgroundTintMode(android.view.View);
+ method public static android.graphics.Rect? getClipBounds(android.view.View);
+ method public static android.view.Display? getDisplay(android.view.View);
+ method public static float getElevation(android.view.View);
+ method public static boolean getFitsSystemWindows(android.view.View);
+ method public static int getImportantForAccessibility(android.view.View);
+ method public static int getImportantForAutofill(android.view.View);
+ method public static int getLabelFor(android.view.View);
+ method @Deprecated public static int getLayerType(android.view.View!);
+ method public static int getLayoutDirection(android.view.View);
+ method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
+ method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
+ method @Deprecated public static int getMeasuredState(android.view.View!);
+ method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
+ method public static int getMinimumHeight(android.view.View);
+ method public static int getMinimumWidth(android.view.View);
+ method public static int getNextClusterForwardId(android.view.View);
+ method public static String![]? getOnReceiveContentMimeTypes(android.view.View);
+ method @Deprecated public static int getOverScrollMode(android.view.View!);
+ method @Px public static int getPaddingEnd(android.view.View);
+ method @Px public static int getPaddingStart(android.view.View);
+ method public static android.view.ViewParent? getParentForAccessibility(android.view.View);
+ method @Deprecated public static float getPivotX(android.view.View!);
+ method @Deprecated public static float getPivotY(android.view.View!);
+ method public static androidx.core.view.WindowInsetsCompat? getRootWindowInsets(android.view.View);
+ method @Deprecated public static float getRotation(android.view.View!);
+ method @Deprecated public static float getRotationX(android.view.View!);
+ method @Deprecated public static float getRotationY(android.view.View!);
+ method @Deprecated public static float getScaleX(android.view.View!);
+ method @Deprecated public static float getScaleY(android.view.View!);
+ method public static int getScrollIndicators(android.view.View);
+ method @UiThread public static CharSequence? getStateDescription(android.view.View);
+ method public static java.util.List<android.graphics.Rect!> getSystemGestureExclusionRects(android.view.View);
+ method public static String? getTransitionName(android.view.View);
+ method @Deprecated public static float getTranslationX(android.view.View!);
+ method @Deprecated public static float getTranslationY(android.view.View!);
+ method public static float getTranslationZ(android.view.View);
+ method @Deprecated public static androidx.core.view.WindowInsetsControllerCompat? getWindowInsetsController(android.view.View);
+ method @Deprecated public static int getWindowSystemUiVisibility(android.view.View);
+ method @Deprecated public static float getX(android.view.View!);
+ method @Deprecated public static float getY(android.view.View!);
+ method public static float getZ(android.view.View);
+ method public static boolean hasAccessibilityDelegate(android.view.View);
+ method public static boolean hasExplicitFocusable(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public static boolean hasOnClickListeners(android.view.View);
+ method public static boolean hasOverlappingRendering(android.view.View);
+ method public static boolean hasTransientState(android.view.View);
+ method @UiThread public static boolean isAccessibilityHeading(android.view.View);
+ method public static boolean isAttachedToWindow(android.view.View);
+ method public static boolean isFocusedByDefault(android.view.View);
+ method public static boolean isImportantForAccessibility(android.view.View);
+ method public static boolean isImportantForAutofill(android.view.View);
+ method public static boolean isInLayout(android.view.View);
+ method public static boolean isKeyboardNavigationCluster(android.view.View);
+ method public static boolean isLaidOut(android.view.View);
+ method public static boolean isLayoutDirectionResolved(android.view.View);
+ method public static boolean isNestedScrollingEnabled(android.view.View);
+ method @Deprecated public static boolean isOpaque(android.view.View!);
+ method public static boolean isPaddingRelative(android.view.View);
+ method @UiThread public static boolean isScreenReaderFocusable(android.view.View);
+ method @Deprecated public static void jumpDrawablesToCurrentState(android.view.View!);
+ method public static android.view.View? keyboardNavigationClusterSearch(android.view.View, android.view.View?, @androidx.core.view.ViewCompat.FocusDirection int);
+ method public static void offsetLeftAndRight(android.view.View, int);
+ method public static void offsetTopAndBottom(android.view.View, int);
+ method public static androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
+ method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
+ method public static androidx.core.view.ContentInfoCompat? performReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
+ method public static void postInvalidateOnAnimation(android.view.View);
+ method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
+ method public static void postOnAnimation(android.view.View, Runnable);
+ method public static void postOnAnimationDelayed(android.view.View, Runnable, long);
+ method public static void removeAccessibilityAction(android.view.View, int);
+ method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static void replaceAccessibilityAction(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat, CharSequence?, androidx.core.view.accessibility.AccessibilityViewCommand?);
+ method public static void requestApplyInsets(android.view.View);
+ method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
+ method @Deprecated public static int resolveSizeAndState(int, int, int);
+ method public static boolean restoreDefaultFocus(android.view.View);
+ method public static void saveAttributeDataForStyleable(android.view.View, android.content.Context, int[], android.util.AttributeSet?, android.content.res.TypedArray, int, int);
+ method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat?);
+ method @UiThread public static void setAccessibilityHeading(android.view.View, boolean);
+ method public static void setAccessibilityLiveRegion(android.view.View, int);
+ method @UiThread public static void setAccessibilityPaneTitle(android.view.View, CharSequence?);
+ method @Deprecated public static void setActivated(android.view.View!, boolean);
+ method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) float);
+ method public static void setAutofillHints(android.view.View, java.lang.String!...);
+ method public static void setBackground(android.view.View, android.graphics.drawable.Drawable?);
+ method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList?);
+ method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode?);
+ method @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
+ method public static void setClipBounds(android.view.View, android.graphics.Rect?);
+ method public static void setElevation(android.view.View, float);
+ method @Deprecated public static void setFitsSystemWindows(android.view.View!, boolean);
+ method public static void setFocusedByDefault(android.view.View, boolean);
+ method public static void setHasTransientState(android.view.View, boolean);
+ method @UiThread public static void setImportantForAccessibility(android.view.View, int);
+ method public static void setImportantForAutofill(android.view.View, int);
+ method public static void setKeyboardNavigationCluster(android.view.View, boolean);
+ method public static void setLabelFor(android.view.View, @IdRes int);
+ method public static void setLayerPaint(android.view.View, android.graphics.Paint?);
+ method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
+ method public static void setLayoutDirection(android.view.View, int);
+ method public static void setNestedScrollingEnabled(android.view.View, boolean);
+ method public static void setNextClusterForwardId(android.view.View, int);
+ method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener?);
+ method public static void setOnReceiveContentListener(android.view.View, String![]?, androidx.core.view.OnReceiveContentListener?);
+ method @Deprecated public static void setOverScrollMode(android.view.View!, int);
+ method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
+ method @Deprecated public static void setPivotX(android.view.View!, float);
+ method @Deprecated public static void setPivotY(android.view.View!, float);
+ method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat?);
+ method @Deprecated public static void setRotation(android.view.View!, float);
+ method @Deprecated public static void setRotationX(android.view.View!, float);
+ method @Deprecated public static void setRotationY(android.view.View!, float);
+ method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
+ method @Deprecated public static void setScaleX(android.view.View!, float);
+ method @Deprecated public static void setScaleY(android.view.View!, float);
+ method @UiThread public static void setScreenReaderFocusable(android.view.View, boolean);
+ method public static void setScrollIndicators(android.view.View, @androidx.core.view.ViewCompat.ScrollIndicators int);
+ method public static void setScrollIndicators(android.view.View, @androidx.core.view.ViewCompat.ScrollIndicators int, @androidx.core.view.ViewCompat.ScrollIndicators int);
+ method @UiThread public static void setStateDescription(android.view.View, CharSequence?);
+ method public static void setSystemGestureExclusionRects(android.view.View, java.util.List<android.graphics.Rect!>);
+ method public static void setTooltipText(android.view.View, CharSequence?);
+ method public static void setTransitionName(android.view.View, String?);
+ method @Deprecated public static void setTranslationX(android.view.View!, float);
+ method @Deprecated public static void setTranslationY(android.view.View!, float);
+ method public static void setTranslationZ(android.view.View, float);
+ method public static void setWindowInsetsAnimationCallback(android.view.View, androidx.core.view.WindowInsetsAnimationCompat.Callback?);
+ method @Deprecated public static void setX(android.view.View!, float);
+ method @Deprecated public static void setY(android.view.View!, float);
+ method public static void setZ(android.view.View, float);
+ method public static boolean startDragAndDrop(android.view.View, android.content.ClipData?, android.view.View.DragShadowBuilder, Object?, int);
+ method public static boolean startNestedScroll(android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
+ method public static boolean startNestedScroll(android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public static void stopNestedScroll(android.view.View);
+ method public static void stopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
+ field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+ field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+ field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+ field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+ field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
+ field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+ field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+ field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+ field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+ field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+ field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+ field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+ field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+ field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+ field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+ field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+ field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
+ field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+ field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+ field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+ field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+ field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+ field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+ field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+ field public static final int TYPE_NON_TOUCH = 1; // 0x1
+ field public static final int TYPE_TOUCH = 0; // 0x0
+ }
+
+ @IntDef({android.view.View.FOCUS_LEFT, android.view.View.FOCUS_UP, android.view.View.FOCUS_RIGHT, android.view.View.FOCUS_DOWN, android.view.View.FOCUS_FORWARD, android.view.View.FOCUS_BACKWARD}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusDirection {
+ }
+
+ @IntDef({android.view.View.FOCUS_LEFT, android.view.View.FOCUS_UP, android.view.View.FOCUS_RIGHT, android.view.View.FOCUS_DOWN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusRealDirection {
+ }
+
+ @IntDef({android.view.View.FOCUS_FORWARD, android.view.View.FOCUS_BACKWARD}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusRelativeDirection {
+ }
+
+ @IntDef({androidx.core.view.ViewCompat.TYPE_TOUCH, androidx.core.view.ViewCompat.TYPE_NON_TOUCH}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.NestedScrollType {
+ }
+
+ public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
+ method public boolean onUnhandledKeyEvent(android.view.View, android.view.KeyEvent);
+ }
+
+ @IntDef(value={androidx.core.view.ViewCompat.SCROLL_AXIS_NONE, androidx.core.view.ViewCompat.SCROLL_AXIS_HORIZONTAL, androidx.core.view.ViewCompat.SCROLL_AXIS_VERTICAL}, flag=true) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.ScrollAxis {
+ }
+
+ @IntDef(flag=true, value={androidx.core.view.ViewCompat.SCROLL_INDICATOR_TOP, androidx.core.view.ViewCompat.SCROLL_INDICATOR_BOTTOM, androidx.core.view.ViewCompat.SCROLL_INDICATOR_LEFT, androidx.core.view.ViewCompat.SCROLL_INDICATOR_RIGHT, androidx.core.view.ViewCompat.SCROLL_INDICATOR_START, androidx.core.view.ViewCompat.SCROLL_INDICATOR_END}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.ScrollIndicators {
+ }
+
+ public final class ViewConfigurationCompat {
+ method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method public static int getScaledHoverSlop(android.view.ViewConfiguration);
+ method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
+ method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
+ method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration, android.content.Context);
+ }
+
+ public final class ViewGroupCompat {
+ method public static int getLayoutMode(android.view.ViewGroup);
+ method @androidx.core.view.ViewCompat.ScrollAxis public static int getNestedScrollAxes(android.view.ViewGroup);
+ method public static boolean isTransitionGroup(android.view.ViewGroup);
+ method @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void setLayoutMode(android.view.ViewGroup, int);
+ method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
+ method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+ field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+ field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+ }
+
+ public final class ViewParentCompat {
+ method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
+ method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
+ method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
+ method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[], int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int, int[]);
+ method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int, int);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View, int);
+ method @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ }
+
+ public final class ViewPropertyAnimatorCompat {
+ method public androidx.core.view.ViewPropertyAnimatorCompat alpha(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat alphaBy(float);
+ method public void cancel();
+ method public long getDuration();
+ method public android.view.animation.Interpolator? getInterpolator();
+ method public long getStartDelay();
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotation(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat rotationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat scaleYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setDuration(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator?);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setListener(androidx.core.view.ViewPropertyAnimatorListener?);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setStartDelay(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener?);
+ method public void start();
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationZ(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat translationZBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat withEndAction(Runnable);
+ method public androidx.core.view.ViewPropertyAnimatorCompat withLayer();
+ method public androidx.core.view.ViewPropertyAnimatorCompat withStartAction(Runnable);
+ method public androidx.core.view.ViewPropertyAnimatorCompat x(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat xBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat y(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat yBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat z(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat zBy(float);
+ }
+
+ public interface ViewPropertyAnimatorListener {
+ method public void onAnimationCancel(android.view.View);
+ method public void onAnimationEnd(android.view.View);
+ method public void onAnimationStart(android.view.View);
+ }
+
+ public class ViewPropertyAnimatorListenerAdapter implements androidx.core.view.ViewPropertyAnimatorListener {
+ ctor public ViewPropertyAnimatorListenerAdapter();
+ method public void onAnimationCancel(android.view.View);
+ method public void onAnimationEnd(android.view.View);
+ method public void onAnimationStart(android.view.View);
+ }
+
+ public interface ViewPropertyAnimatorUpdateListener {
+ method public void onAnimationUpdate(android.view.View);
+ }
+
+ public final class WindowCompat {
+ method public static androidx.core.view.WindowInsetsControllerCompat getInsetsController(android.view.Window, android.view.View);
+ method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes int);
+ method public static void setDecorFitsSystemWindows(android.view.Window, boolean);
+ field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+ field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ }
+
+ public final class WindowInsetsAnimationCompat {
+ ctor public WindowInsetsAnimationCompat(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, android.view.animation.Interpolator?, long);
+ method @FloatRange(from=0.0f, to=1.0f) public float getAlpha();
+ method public long getDurationMillis();
+ method @FloatRange(from=0.0f, to=1.0f) public float getFraction();
+ method public float getInterpolatedFraction();
+ method public android.view.animation.Interpolator? getInterpolator();
+ method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public int getTypeMask();
+ method public void setAlpha(@FloatRange(from=0.0f, to=1.0f) float);
+ method public void setFraction(@FloatRange(from=0.0f, to=1.0f) float);
+ }
+
+ public static final class WindowInsetsAnimationCompat.BoundsCompat {
+ ctor public WindowInsetsAnimationCompat.BoundsCompat(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
+ method public androidx.core.graphics.Insets getLowerBound();
+ method public androidx.core.graphics.Insets getUpperBound();
+ method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat inset(androidx.core.graphics.Insets);
+ method @RequiresApi(30) public android.view.WindowInsetsAnimation.Bounds toBounds();
+ method @RequiresApi(30) public static androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat toBoundsCompat(android.view.WindowInsetsAnimation.Bounds);
+ }
+
+ public abstract static class WindowInsetsAnimationCompat.Callback {
+ ctor public WindowInsetsAnimationCompat.Callback(@androidx.core.view.WindowInsetsAnimationCompat.Callback.DispatchMode int);
+ method @androidx.core.view.WindowInsetsAnimationCompat.Callback.DispatchMode public final int getDispatchMode();
+ method public void onEnd(androidx.core.view.WindowInsetsAnimationCompat);
+ method public void onPrepare(androidx.core.view.WindowInsetsAnimationCompat);
+ method public abstract androidx.core.view.WindowInsetsCompat onProgress(androidx.core.view.WindowInsetsCompat, java.util.List<androidx.core.view.WindowInsetsAnimationCompat!>);
+ method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat onStart(androidx.core.view.WindowInsetsAnimationCompat, androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat);
+ field public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1; // 0x1
+ field public static final int DISPATCH_MODE_STOP = 0; // 0x0
+ }
+
+ @IntDef({androidx.core.view.WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_STOP, androidx.core.view.WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_CONTINUE_ON_SUBTREE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface WindowInsetsAnimationCompat.Callback.DispatchMode {
+ }
+
+ public interface WindowInsetsAnimationControlListenerCompat {
+ method public void onCancelled(androidx.core.view.WindowInsetsAnimationControllerCompat?);
+ method public void onFinished(androidx.core.view.WindowInsetsAnimationControllerCompat);
+ method public void onReady(androidx.core.view.WindowInsetsAnimationControllerCompat, @androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
+ }
+
+ public final class WindowInsetsAnimationControllerCompat {
+ method public void finish(boolean);
+ method public float getCurrentAlpha();
+ method @FloatRange(from=0.0f, to=1.0f) public float getCurrentFraction();
+ method public androidx.core.graphics.Insets getCurrentInsets();
+ method public androidx.core.graphics.Insets getHiddenStateInsets();
+ method public androidx.core.graphics.Insets getShownStateInsets();
+ method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public int getTypes();
+ method public boolean isCancelled();
+ method public boolean isFinished();
+ method public boolean isReady();
+ method public void setInsetsAndAlpha(androidx.core.graphics.Insets?, @FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float);
+ }
+
+ public class WindowInsetsCompat {
+ ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat?);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat consumeDisplayCutout();
+ method @Deprecated public androidx.core.view.WindowInsetsCompat consumeStableInsets();
+ method @Deprecated public androidx.core.view.WindowInsetsCompat consumeSystemWindowInsets();
+ method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
+ method public androidx.core.graphics.Insets getInsets(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
+ method public androidx.core.graphics.Insets getInsetsIgnoringVisibility(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
+ method @Deprecated public androidx.core.graphics.Insets getMandatorySystemGestureInsets();
+ method @Deprecated public int getStableInsetBottom();
+ method @Deprecated public int getStableInsetLeft();
+ method @Deprecated public int getStableInsetRight();
+ method @Deprecated public int getStableInsetTop();
+ method @Deprecated public androidx.core.graphics.Insets getStableInsets();
+ method @Deprecated public androidx.core.graphics.Insets getSystemGestureInsets();
+ method @Deprecated public int getSystemWindowInsetBottom();
+ method @Deprecated public int getSystemWindowInsetLeft();
+ method @Deprecated public int getSystemWindowInsetRight();
+ method @Deprecated public int getSystemWindowInsetTop();
+ method @Deprecated public androidx.core.graphics.Insets getSystemWindowInsets();
+ method @Deprecated public androidx.core.graphics.Insets getTappableElementInsets();
+ method public boolean hasInsets();
+ method @Deprecated public boolean hasStableInsets();
+ method @Deprecated public boolean hasSystemWindowInsets();
+ method public androidx.core.view.WindowInsetsCompat inset(androidx.core.graphics.Insets);
+ method public androidx.core.view.WindowInsetsCompat inset(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+ method public boolean isConsumed();
+ method public boolean isRound();
+ method public boolean isVisible(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
+ method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
+ method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
+ method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets, android.view.View?);
+ field public static final androidx.core.view.WindowInsetsCompat CONSUMED;
+ }
+
+ public static final class WindowInsetsCompat.Builder {
+ ctor public WindowInsetsCompat.Builder();
+ ctor public WindowInsetsCompat.Builder(androidx.core.view.WindowInsetsCompat);
+ method public androidx.core.view.WindowInsetsCompat build();
+ method public androidx.core.view.WindowInsetsCompat.Builder setDisplayCutout(androidx.core.view.DisplayCutoutCompat?);
+ method public androidx.core.view.WindowInsetsCompat.Builder setInsets(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, androidx.core.graphics.Insets);
+ method public androidx.core.view.WindowInsetsCompat.Builder setInsetsIgnoringVisibility(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setMandatorySystemGestureInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setStableInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemGestureInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemWindowInsets(androidx.core.graphics.Insets);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setTappableElementInsets(androidx.core.graphics.Insets);
+ method public androidx.core.view.WindowInsetsCompat.Builder setVisible(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, boolean);
+ }
+
+ public static final class WindowInsetsCompat.Type {
+ method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int captionBar();
+ method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int displayCutout();
+ method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int ime();
+ method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int mandatorySystemGestures();
+ method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int navigationBars();
+ method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int statusBars();
+ method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int systemBars();
+ method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int systemGestures();
+ method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int tappableElement();
+ }
+
+ @IntDef(flag=true, value={0x1, 0x2, 0x4, 0x8, 0x100, 0x10, 0x20, 0x40, 0x80}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface WindowInsetsCompat.Type.InsetsType {
+ }
+
+ public final class WindowInsetsControllerCompat {
+ ctor public WindowInsetsControllerCompat(android.view.Window, android.view.View);
+ method public void addOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
+ method public void controlWindowInsetsAnimation(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, long, android.view.animation.Interpolator?, android.os.CancellationSignal?, androidx.core.view.WindowInsetsAnimationControlListenerCompat);
+ method public int getSystemBarsBehavior();
+ method public void hide(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
+ method public boolean isAppearanceLightNavigationBars();
+ method public boolean isAppearanceLightStatusBars();
+ method public void removeOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
+ method public void setAppearanceLightNavigationBars(boolean);
+ method public void setAppearanceLightStatusBars(boolean);
+ method public void setSystemBarsBehavior(int);
+ method public void show(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
+ method @Deprecated @RequiresApi(30) public static androidx.core.view.WindowInsetsControllerCompat toWindowInsetsControllerCompat(android.view.WindowInsetsController);
+ field public static final int BEHAVIOR_DEFAULT = 1; // 0x1
+ field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1; // 0x1
+ field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0; // 0x0
+ field public static final int BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE = 2; // 0x2
+ }
+
+ public static interface WindowInsetsControllerCompat.OnControllableInsetsChangedListener {
+ method public void onControllableInsetsChanged(androidx.core.view.WindowInsetsControllerCompat, @androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
+ }
+
+}
+
+package androidx.core.view.accessibility {
+
+ public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityClickableSpanCompat(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat, int);
+ method public void onClick(android.view.View);
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String SPAN_ID = "ACCESSIBILITY_CLICKABLE_SPAN_ID";
+ }
+
+ public final class AccessibilityEventCompat {
+ method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! asRecord(android.view.accessibility.AccessibilityEvent!);
+ method public static int getAction(android.view.accessibility.AccessibilityEvent);
+ method @androidx.core.view.accessibility.AccessibilityEventCompat.ContentChangeType public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
+ method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
+ method @Deprecated public static int getRecordCount(android.view.accessibility.AccessibilityEvent!);
+ method public static void setAction(android.view.accessibility.AccessibilityEvent, int);
+ method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, @androidx.core.view.accessibility.AccessibilityEventCompat.ContentChangeType int);
+ method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
+ field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
+ field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
+ field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
+ field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
+ field public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 64; // 0x40
+ field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+ field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+ field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+ field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+ field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+ field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+ field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+ field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+ field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+ field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+ field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+ field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+ field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+ field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+ field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+ field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+ field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+ }
+
+ @IntDef(flag=true, value={androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_SUBTREE, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_TEXT, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_UNDEFINED, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_DRAG_STARTED, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_DRAG_DROPPED, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_DRAG_CANCELLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface AccessibilityEventCompat.ContentChangeType {
+ }
+
+ public final class AccessibilityManagerCompat {
+ method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ }
+
+ @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ method @Deprecated public void onAccessibilityStateChanged(boolean);
+ }
+
+ @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+ }
+
+ public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+ method public void onTouchExplorationStateChanged(boolean);
+ }
+
+ public class AccessibilityNodeInfoCompat {
+ ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
+ method public void addAction(int);
+ method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public void addChild(android.view.View!);
+ method public void addChild(android.view.View!, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addSpansToExtras(CharSequence!, android.view.View!);
+ method public boolean canOpenPopup();
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByText(String!);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByViewId(String!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
+ method @Deprecated public int getActions();
+ method public java.util.List<java.lang.String!> getAvailableExtraData();
+ method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
+ method public void getBoundsInScreen(android.graphics.Rect!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
+ method public int getChildCount();
+ method public CharSequence! getClassName();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.text.style.ClickableSpan![]! getClickableSpans(CharSequence!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
+ method public CharSequence! getContentDescription();
+ method public int getDrawingOrder();
+ method public CharSequence! getError();
+ method public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo? getExtraRenderingInfo();
+ method public android.os.Bundle! getExtras();
+ method public CharSequence? getHintText();
+ method @Deprecated public Object! getInfo();
+ method public int getInputType();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
+ method public int getLiveRegion();
+ method public int getMaxTextLength();
+ method public int getMinMillisBetweenContentChanges();
+ method public int getMovementGranularities();
+ method public CharSequence! getPackageName();
+ method public CharSequence? getPaneTitle();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
+ method public CharSequence? getRoleDescription();
+ method public CharSequence? getStateDescription();
+ method public CharSequence! getText();
+ method public int getTextSelectionEnd();
+ method public int getTextSelectionStart();
+ method public CharSequence? getTooltipText();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+ method public String? getUniqueId();
+ method public String! getViewIdResourceName();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
+ method public int getWindowId();
+ method public boolean hasRequestInitialAccessibilityFocus();
+ method public boolean isAccessibilityFocused();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isClickable();
+ method public boolean isContentInvalid();
+ method public boolean isContextClickable();
+ method public boolean isDismissable();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public boolean isFocused();
+ method public boolean isHeading();
+ method public boolean isImportantForAccessibility();
+ method public boolean isLongClickable();
+ method public boolean isMultiLine();
+ method public boolean isPassword();
+ method public boolean isScreenReaderFocusable();
+ method public boolean isScrollable();
+ method public boolean isSelected();
+ method public boolean isShowingHintText();
+ method public boolean isTextEntryKey();
+ method public boolean isTextSelectable();
+ method public boolean isVisibleToUser();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method public boolean performAction(int);
+ method public boolean performAction(int, android.os.Bundle!);
+ method @Deprecated public void recycle();
+ method public boolean refresh();
+ method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public boolean removeChild(android.view.View!);
+ method public boolean removeChild(android.view.View!, int);
+ method public void setAccessibilityFocused(boolean);
+ method public void setAvailableExtraData(java.util.List<java.lang.String!>);
+ method @Deprecated public void setBoundsInParent(android.graphics.Rect!);
+ method public void setBoundsInScreen(android.graphics.Rect!);
+ method public void setCanOpenPopup(boolean);
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setClassName(CharSequence!);
+ method public void setClickable(boolean);
+ method public void setCollectionInfo(Object!);
+ method public void setCollectionItemInfo(Object!);
+ method public void setContentDescription(CharSequence!);
+ method public void setContentInvalid(boolean);
+ method public void setContextClickable(boolean);
+ method public void setDismissable(boolean);
+ method public void setDrawingOrder(int);
+ method public void setEditable(boolean);
+ method public void setEnabled(boolean);
+ method public void setError(CharSequence!);
+ method public void setFocusable(boolean);
+ method public void setFocused(boolean);
+ method public void setHeading(boolean);
+ method public void setHintText(CharSequence?);
+ method public void setImportantForAccessibility(boolean);
+ method public void setInputType(int);
+ method public void setLabelFor(android.view.View!);
+ method public void setLabelFor(android.view.View!, int);
+ method public void setLabeledBy(android.view.View!);
+ method public void setLabeledBy(android.view.View!, int);
+ method public void setLiveRegion(int);
+ method public void setLongClickable(boolean);
+ method public void setMaxTextLength(int);
+ method public void setMinMillisBetweenContentChanges(int);
+ method public void setMovementGranularities(int);
+ method public void setMultiLine(boolean);
+ method public void setPackageName(CharSequence!);
+ method public void setPaneTitle(CharSequence?);
+ method public void setParent(android.view.View!);
+ method public void setParent(android.view.View!, int);
+ method public void setPassword(boolean);
+ method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
+ method public void setRequestInitialAccessibilityFocus(boolean);
+ method public void setRoleDescription(CharSequence?);
+ method public void setScreenReaderFocusable(boolean);
+ method public void setScrollable(boolean);
+ method public void setSelected(boolean);
+ method public void setShowingHintText(boolean);
+ method public void setSource(android.view.View!);
+ method public void setSource(android.view.View!, int);
+ method public void setStateDescription(CharSequence?);
+ method public void setText(CharSequence!);
+ method public void setTextEntryKey(boolean);
+ method public void setTextSelectable(boolean);
+ method public void setTextSelection(int, int);
+ method public void setTooltipText(CharSequence?);
+ method public void setTouchDelegateInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat);
+ method public void setTraversalAfter(android.view.View!);
+ method public void setTraversalAfter(android.view.View!, int);
+ method public void setTraversalBefore(android.view.View!);
+ method public void setTraversalBefore(android.view.View!, int);
+ method public void setUniqueId(String?);
+ method public void setViewIdResourceName(String!);
+ method public void setVisibleToUser(boolean);
+ method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
+ field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+ field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+ field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+ field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+ field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
+ field public static final String ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT = "android.view.accessibility.action.ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT";
+ field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+ field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+ field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+ field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+ field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+ field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+ field public static final int ACTION_CLICK = 16; // 0x10
+ field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+ field public static final int ACTION_COPY = 16384; // 0x4000
+ field public static final int ACTION_CUT = 65536; // 0x10000
+ field public static final int ACTION_DISMISS = 1048576; // 0x100000
+ field public static final int ACTION_EXPAND = 262144; // 0x40000
+ field public static final int ACTION_FOCUS = 1; // 0x1
+ field public static final int ACTION_LONG_CLICK = 32; // 0x20
+ field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+ field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+ field public static final int ACTION_PASTE = 32768; // 0x8000
+ field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+ field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+ field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+ field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+ field public static final int ACTION_SELECT = 4; // 0x4
+ field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+ field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+ field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH = "android.core.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH";
+ field public static final int EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH = 20000; // 0x4e20
+ field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX = "android.core.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX";
+ field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY = "android.core.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_KEY";
+ field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+ field public static final int FOCUS_INPUT = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+ field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+ field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+ field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int mParentVirtualDescendantId;
+ }
+
+ public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
+ ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!, androidx.core.view.accessibility.AccessibilityViewCommand!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! createReplacementAction(CharSequence!, androidx.core.view.accessibility.AccessibilityViewCommand!);
+ method public int getId();
+ method public CharSequence! getLabel();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean perform(android.view.View!, android.os.Bundle!);
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_CANCEL;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_DROP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_START;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_IME_ENTER;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PRESS_AND_HOLD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SHOW_TEXT_SUGGESTIONS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected final androidx.core.view.accessibility.AccessibilityViewCommand! mCommand;
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+ method public int getColumnCount();
+ method public int getRowCount();
+ method public int getSelectionMode();
+ method public boolean isHierarchical();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
+ field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+ field public static final int SELECTION_MODE_NONE = 0; // 0x0
+ field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ method @Deprecated public boolean isHeading();
+ method public boolean isSelected();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
+ }
+
+ public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+ method public float getCurrent();
+ method public float getMax();
+ method public float getMin();
+ method public int getType();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! obtain(int, float, float, float);
+ field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+ field public static final int RANGE_TYPE_INT = 0; // 0x0
+ field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+ }
+
+ public static final class AccessibilityNodeInfoCompat.TouchDelegateInfoCompat {
+ ctor public AccessibilityNodeInfoCompat.TouchDelegateInfoCompat(java.util.Map<android.graphics.Region!,android.view.View!>);
+ method public android.graphics.Region? getRegionAt(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getRegionCount();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getTargetForRegion(android.graphics.Region);
+ }
+
+ public class AccessibilityNodeProviderCompat {
+ ctor public AccessibilityNodeProviderCompat();
+ ctor public AccessibilityNodeProviderCompat(Object?);
+ method public void addExtraDataToAccessibilityNodeInfo(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat, String, android.os.Bundle?);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>? findAccessibilityNodeInfosByText(String, int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
+ method public Object? getProvider();
+ method public boolean performAction(int, int, android.os.Bundle?);
+ field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+ }
+
+ public class AccessibilityRecordCompat {
+ ctor @Deprecated public AccessibilityRecordCompat(Object!);
+ method @Deprecated public boolean equals(Object?);
+ method @Deprecated public int getAddedCount();
+ method @Deprecated public CharSequence! getBeforeText();
+ method @Deprecated public CharSequence! getClassName();
+ method @Deprecated public CharSequence! getContentDescription();
+ method @Deprecated public int getCurrentItemIndex();
+ method @Deprecated public int getFromIndex();
+ method @Deprecated public Object! getImpl();
+ method @Deprecated public int getItemCount();
+ method @Deprecated public int getMaxScrollX();
+ method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord);
+ method @Deprecated public int getMaxScrollY();
+ method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord);
+ method @Deprecated public android.os.Parcelable! getParcelableData();
+ method @Deprecated public int getRemovedCount();
+ method @Deprecated public int getScrollX();
+ method @Deprecated public int getScrollY();
+ method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
+ method @Deprecated public java.util.List<java.lang.CharSequence!>! getText();
+ method @Deprecated public int getToIndex();
+ method @Deprecated public int getWindowId();
+ method @Deprecated public int hashCode();
+ method @Deprecated public boolean isChecked();
+ method @Deprecated public boolean isEnabled();
+ method @Deprecated public boolean isFullScreen();
+ method @Deprecated public boolean isPassword();
+ method @Deprecated public boolean isScrollable();
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
+ method @Deprecated public void recycle();
+ method @Deprecated public void setAddedCount(int);
+ method @Deprecated public void setBeforeText(CharSequence!);
+ method @Deprecated public void setChecked(boolean);
+ method @Deprecated public void setClassName(CharSequence!);
+ method @Deprecated public void setContentDescription(CharSequence!);
+ method @Deprecated public void setCurrentItemIndex(int);
+ method @Deprecated public void setEnabled(boolean);
+ method @Deprecated public void setFromIndex(int);
+ method @Deprecated public void setFullScreen(boolean);
+ method @Deprecated public void setItemCount(int);
+ method @Deprecated public void setMaxScrollX(int);
+ method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
+ method @Deprecated public void setMaxScrollY(int);
+ method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
+ method @Deprecated public void setParcelableData(android.os.Parcelable!);
+ method @Deprecated public void setPassword(boolean);
+ method @Deprecated public void setRemovedCount(int);
+ method @Deprecated public void setScrollX(int);
+ method @Deprecated public void setScrollY(int);
+ method @Deprecated public void setScrollable(boolean);
+ method @Deprecated public void setSource(android.view.View!);
+ method @Deprecated public void setSource(android.view.View!, int);
+ method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
+ method @Deprecated public void setToIndex(int);
+ }
+
+ public interface AccessibilityViewCommand {
+ method public boolean perform(android.view.View, androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments?);
+ }
+
+ public abstract static class AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.CommandArguments();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setBundle(android.os.Bundle?);
+ }
+
+ public static final class AccessibilityViewCommand.MoveAtGranularityArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveAtGranularityArguments();
+ method public boolean getExtendSelection();
+ method public int getGranularity();
+ }
+
+ public static final class AccessibilityViewCommand.MoveHtmlArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveHtmlArguments();
+ method public String? getHTMLElement();
+ }
+
+ public static final class AccessibilityViewCommand.MoveWindowArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveWindowArguments();
+ method public int getX();
+ method public int getY();
+ }
+
+ public static final class AccessibilityViewCommand.ScrollToPositionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.ScrollToPositionArguments();
+ method public int getColumn();
+ method public int getRow();
+ }
+
+ public static final class AccessibilityViewCommand.SetProgressArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetProgressArguments();
+ method public float getProgress();
+ }
+
+ public static final class AccessibilityViewCommand.SetSelectionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetSelectionArguments();
+ method public int getEnd();
+ method public int getStart();
+ }
+
+ public static final class AccessibilityViewCommand.SetTextArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetTextArguments();
+ method public CharSequence? getText();
+ }
+
+ public class AccessibilityWindowInfoCompat {
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getAnchor();
+ method public void getBoundsInScreen(android.graphics.Rect);
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
+ method public int getChildCount();
+ method public int getDisplayId();
+ method public int getId();
+ method public int getLayer();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
+ method public void getRegionInScreen(android.graphics.Region);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
+ method public CharSequence? getTitle();
+ method public int getType();
+ method public boolean isAccessibilityFocused();
+ method public boolean isActive();
+ method public boolean isFocused();
+ method public boolean isInPictureInPictureMode();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
+ method @Deprecated public void recycle();
+ method public android.view.accessibility.AccessibilityWindowInfo? unwrap();
+ field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+ field public static final int TYPE_APPLICATION = 1; // 0x1
+ field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+ field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+ field public static final int TYPE_SYSTEM = 3; // 0x3
+ }
+
+}
+
+package androidx.core.view.animation {
+
+ public final class PathInterpolatorCompat {
+ method public static android.view.animation.Interpolator create(android.graphics.Path);
+ method public static android.view.animation.Interpolator create(float, float);
+ method public static android.view.animation.Interpolator create(float, float, float, float);
+ }
+
+}
+
+package androidx.core.view.inputmethod {
+
+ public final class EditorInfoCompat {
+ ctor @Deprecated public EditorInfoCompat();
+ method public static String![] getContentMimeTypes(android.view.inputmethod.EditorInfo);
+ method public static CharSequence? getInitialSelectedText(android.view.inputmethod.EditorInfo, int);
+ method public static CharSequence? getInitialTextAfterCursor(android.view.inputmethod.EditorInfo, int, int);
+ method public static CharSequence? getInitialTextBeforeCursor(android.view.inputmethod.EditorInfo, int, int);
+ method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, String![]?);
+ method public static void setInitialSurroundingSubText(android.view.inputmethod.EditorInfo, CharSequence, int);
+ method public static void setInitialSurroundingText(android.view.inputmethod.EditorInfo, CharSequence);
+ field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
+ field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
+ }
+
+ public final class InputConnectionCompat {
+ ctor @Deprecated public InputConnectionCompat();
+ method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
+ method @Deprecated public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
+ method public static android.view.inputmethod.InputConnection createWrapper(android.view.View, android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+ field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
+ }
+
+ public static interface InputConnectionCompat.OnCommitContentListener {
+ method public boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
+ }
+
+ public final class InputContentInfoCompat {
+ ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri?);
+ method public android.net.Uri getContentUri();
+ method public android.content.ClipDescription getDescription();
+ method public android.net.Uri? getLinkUri();
+ method public void releasePermission();
+ method public void requestPermission();
+ method public Object? unwrap();
+ method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
+ ctor public AutoScrollHelper(android.view.View);
+ method public abstract boolean canTargetScrollHorizontally(int);
+ method public abstract boolean canTargetScrollVertically(int);
+ method public boolean isEnabled();
+ method public boolean isExclusive();
+ method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
+ method public abstract void scrollTargetBy(int, int);
+ method public androidx.core.widget.AutoScrollHelper setActivationDelay(int);
+ method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
+ method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
+ method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
+ method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRampDownDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRampUpDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRelativeEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRelativeVelocity(float, float);
+ field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
+ field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
+ field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
+ field public static final float NO_MAX = 3.4028235E38f;
+ field public static final float NO_MIN = 0.0f;
+ field public static final float RELATIVE_UNSPECIFIED = 0.0f;
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface AutoSizeableTextView {
+ method public int getAutoSizeMaxTextSize();
+ method public int getAutoSizeMinTextSize();
+ method public int getAutoSizeStepGranularity();
+ method public int[]! getAutoSizeTextAvailableSizes();
+ method @androidx.core.widget.TextViewCompat.AutoSizeTextType public int getAutoSizeTextType();
+ method public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+ method public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+ method public void setAutoSizeTextTypeWithDefaults(@androidx.core.widget.TextViewCompat.AutoSizeTextType int);
+ field @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final boolean PLATFORM_SUPPORTS_AUTOSIZE;
+ }
+
+ public final class CheckedTextViewCompat {
+ method public static android.graphics.drawable.Drawable? getCheckMarkDrawable(android.widget.CheckedTextView);
+ method public static android.content.res.ColorStateList? getCheckMarkTintList(android.widget.CheckedTextView);
+ method public static android.graphics.PorterDuff.Mode? getCheckMarkTintMode(android.widget.CheckedTextView);
+ method public static void setCheckMarkTintList(android.widget.CheckedTextView, android.content.res.ColorStateList?);
+ method public static void setCheckMarkTintMode(android.widget.CheckedTextView, android.graphics.PorterDuff.Mode?);
+ }
+
+ public final class CompoundButtonCompat {
+ method public static android.graphics.drawable.Drawable? getButtonDrawable(android.widget.CompoundButton);
+ method public static android.content.res.ColorStateList? getButtonTintList(android.widget.CompoundButton);
+ method public static android.graphics.PorterDuff.Mode? getButtonTintMode(android.widget.CompoundButton);
+ method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList?);
+ method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode?);
+ }
+
+ public class ContentLoadingProgressBar extends android.widget.ProgressBar {
+ ctor public ContentLoadingProgressBar(android.content.Context);
+ ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
+ method public void hide();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void show();
+ }
+
+ public final class EdgeEffectCompat {
+ ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
+ method public static android.widget.EdgeEffect create(android.content.Context, android.util.AttributeSet?);
+ method @Deprecated public boolean draw(android.graphics.Canvas!);
+ method @Deprecated public void finish();
+ method public static float getDistance(android.widget.EdgeEffect);
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean onAbsorb(int);
+ method @Deprecated public boolean onPull(float);
+ method @Deprecated public boolean onPull(float, float);
+ method public static void onPull(android.widget.EdgeEffect, float, float);
+ method public static float onPullDistance(android.widget.EdgeEffect, float, float);
+ method @Deprecated public boolean onRelease();
+ method @Deprecated public void setSize(int, int);
+ }
+
+ public class ImageViewCompat {
+ method public static android.content.res.ColorStateList? getImageTintList(android.widget.ImageView);
+ method public static android.graphics.PorterDuff.Mode? getImageTintMode(android.widget.ImageView);
+ method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList?);
+ method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode?);
+ }
+
+ public final class ListPopupWindowCompat {
+ method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
+ method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+ }
+
+ public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
+ ctor public ListViewAutoScrollHelper(android.widget.ListView);
+ method public boolean canTargetScrollHorizontally(int);
+ method public boolean canTargetScrollVertically(int);
+ method public void scrollTargetBy(int, int);
+ }
+
+ public final class ListViewCompat {
+ method public static boolean canScrollList(android.widget.ListView, int);
+ method public static void scrollListBy(android.widget.ListView, int);
+ }
+
+ public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
+ ctor public NestedScrollView(android.content.Context);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?, int);
+ method public boolean arrowScroll(int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
+ method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fling(int);
+ method public boolean fullScroll(int);
+ method public int getMaxScrollAmount();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isFillViewport();
+ method public boolean isSmoothScrollingEnabled();
+ method public void onAttachedToWindow();
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ method public boolean pageScroll(int);
+ method public void setFillViewport(boolean);
+ method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener?);
+ method public void setSmoothScrollingEnabled(boolean);
+ method public final void smoothScrollBy(int, int);
+ method public final void smoothScrollBy(int, int, int);
+ method public final void smoothScrollTo(int, int);
+ method public final void smoothScrollTo(int, int, int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public static interface NestedScrollView.OnScrollChangeListener {
+ method public void onScrollChange(androidx.core.widget.NestedScrollView, int, int, int, int);
+ }
+
+ public final class PopupMenuCompat {
+ method public static android.view.View.OnTouchListener? getDragToOpenListener(Object);
+ }
+
+ public final class PopupWindowCompat {
+ method public static boolean getOverlapAnchor(android.widget.PopupWindow);
+ method public static int getWindowLayoutType(android.widget.PopupWindow);
+ method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
+ method public static void setWindowLayoutType(android.widget.PopupWindow, int);
+ method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
+ }
+
+ @Deprecated public final class ScrollerCompat {
+ method @Deprecated public void abortAnimation();
+ method @Deprecated public boolean computeScrollOffset();
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
+ method @Deprecated public float getCurrVelocity();
+ method @Deprecated public int getCurrX();
+ method @Deprecated public int getCurrY();
+ method @Deprecated public int getFinalX();
+ method @Deprecated public int getFinalY();
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean isOverScrolled();
+ method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
+ method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
+ method @Deprecated public boolean springBack(int, int, int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int, int);
+ }
+
+ public final class TextViewCompat {
+ method public static int getAutoSizeMaxTextSize(android.widget.TextView);
+ method public static int getAutoSizeMinTextSize(android.widget.TextView);
+ method public static int getAutoSizeStepGranularity(android.widget.TextView);
+ method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
+ method public static int getAutoSizeTextType(android.widget.TextView);
+ method public static android.content.res.ColorStateList? getCompoundDrawableTintList(android.widget.TextView);
+ method public static android.graphics.PorterDuff.Mode? getCompoundDrawableTintMode(android.widget.TextView);
+ method public static android.graphics.drawable.Drawable![] getCompoundDrawablesRelative(android.widget.TextView);
+ method public static int getFirstBaselineToTopHeight(android.widget.TextView);
+ method public static int getLastBaselineToBottomHeight(android.widget.TextView);
+ method public static int getMaxLines(android.widget.TextView);
+ method public static int getMinLines(android.widget.TextView);
+ method public static androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParams(android.widget.TextView);
+ method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
+ method public static void setCompoundDrawableTintList(android.widget.TextView, android.content.res.ColorStateList?);
+ method public static void setCompoundDrawableTintMode(android.widget.TextView, android.graphics.PorterDuff.Mode?);
+ method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+ method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
+ method public static void setFirstBaselineToTopHeight(android.widget.TextView, @IntRange(from=0) @Px int);
+ method public static void setLastBaselineToBottomHeight(android.widget.TextView, @IntRange(from=0) @Px int);
+ method public static void setLineHeight(android.widget.TextView, @IntRange(from=0) @Px int);
+ method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
+ method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
+ method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.view.ActionMode.Callback? unwrapCustomSelectionActionModeCallback(android.view.ActionMode.Callback?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.view.ActionMode.Callback? wrapCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback?);
+ field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+ field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
+ }
+
+ @IntDef({androidx.core.widget.TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE, androidx.core.widget.TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface TextViewCompat.AutoSizeTextType {
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TextViewOnReceiveContentListener implements androidx.core.view.OnReceiveContentListener {
+ ctor public TextViewOnReceiveContentListener();
+ method public androidx.core.view.ContentInfoCompat? onReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintableCheckedTextView {
+ method public android.content.res.ColorStateList? getSupportCheckMarkTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportCheckMarkTintMode();
+ method public void setSupportCheckMarkTintList(android.content.res.ColorStateList?);
+ method public void setSupportCheckMarkTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface TintableCompoundButton {
+ method public android.content.res.ColorStateList? getSupportButtonTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface TintableCompoundDrawablesView {
+ method public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintableImageSourceView {
+ method public android.content.res.ColorStateList? getSupportImageTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportImageTintMode();
+ method public void setSupportImageTintList(android.content.res.ColorStateList?);
+ method public void setSupportImageTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+}
+
diff --git a/core/core/build.gradle b/core/core/build.gradle
index 3f464c5..2f93e91 100644
--- a/core/core/build.gradle
+++ b/core/core/build.gradle
@@ -12,7 +12,7 @@
implementation(project(":core:core-ktx"))
}
- api(projectOrArtifact(":annotation:annotation"))
+ api("androidx.annotation:annotation:1.6.0")
api("androidx.annotation:annotation-experimental:1.3.0")
api("androidx.lifecycle:lifecycle-runtime:2.3.1")
api("androidx.versionedparcelable:versionedparcelable:1.1.1")
@@ -20,9 +20,6 @@
implementation("androidx.concurrent:concurrent-futures:1.0.0")
implementation("androidx.interpolator:interpolator:1.0.0")
- // Required for -Werror due to annotation-experimental use of Kotlin
- compileOnly(libs.kotlinStdlib)
-
// We don't ship this as a public artifact, so it must remain a project-type dependency.
annotationProcessor(projectOrArtifact(":versionedparcelable:versionedparcelable-compiler"))
diff --git a/credentials/credentials/src/main/java/androidx/credentials/CreatePublicKeyCredentialRequest.kt b/credentials/credentials/src/main/java/androidx/credentials/CreatePublicKeyCredentialRequest.kt
index 1e80938..2b703e9 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/CreatePublicKeyCredentialRequest.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/CreatePublicKeyCredentialRequest.kt
@@ -25,7 +25,7 @@
/**
* A request to register a passkey from the user's public key credential provider.
*
- * @property requestJson the privileged request in JSON format in the [standard webauthn web json](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson).
+ * @property requestJson the request in JSON format in the [standard webauthn web json](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson).
* @property preferImmediatelyAvailableCredentials true if you prefer the operation to return
* immediately when there is no available passkey registration offering instead of falling back to
* discovering remote options, and false (default) otherwise
@@ -145,4 +145,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/credentials/credentials/src/main/java/androidx/credentials/CreatePublicKeyCredentialRequestPrivileged.kt b/credentials/credentials/src/main/java/androidx/credentials/CreatePublicKeyCredentialRequestPrivileged.kt
index 9c888b5..7dca9b9 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/CreatePublicKeyCredentialRequestPrivileged.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/CreatePublicKeyCredentialRequestPrivileged.kt
@@ -25,7 +25,7 @@
* the caller can modify the rp. Only callers with privileged permission, e.g. user’s default
* browser, caBLE, can use this. These permissions will be introduced in an upcoming release.
*
- * @property requestJson the privileged request in JSON format in the [standard webauthn web json](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson).
+ * @property requestJson the request in JSON format in the [standard webauthn web json](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson).
* @property preferImmediatelyAvailableCredentials true if you prefer the operation to return
* immediately when there is no available passkey registration offering instead of falling back to
* discovering remote options, and false (default) otherwise
diff --git a/credentials/credentials/src/main/java/androidx/credentials/GetPublicKeyCredentialOption.kt b/credentials/credentials/src/main/java/androidx/credentials/GetPublicKeyCredentialOption.kt
index c8ae8f0..a9e0507 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/GetPublicKeyCredentialOption.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/GetPublicKeyCredentialOption.kt
@@ -22,7 +22,7 @@
/**
* A request to get passkeys from the user's public key credential provider.
*
- * @property requestJson the privileged request in JSON format in the standard webauthn web json
+ * @property requestJson the request in JSON format in the standard webauthn web json
* shown [here](https://w3c.github.io/webauthn/#dictdef-publickeycredentialrequestoptionsjson).
* @property preferImmediatelyAvailableCredentials true if you prefer the operation to return
* immediately when there is no available credential instead of falling back to discovering remote
@@ -83,4 +83,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/credentials/credentials/src/main/java/androidx/credentials/GetPublicKeyCredentialOptionPrivileged.kt b/credentials/credentials/src/main/java/androidx/credentials/GetPublicKeyCredentialOptionPrivileged.kt
index 4c30a64..cdaae8c 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/GetPublicKeyCredentialOptionPrivileged.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/GetPublicKeyCredentialOptionPrivileged.kt
@@ -25,7 +25,7 @@
* can use this. These permissions will be introduced in an upcoming release.
* TODO("Add specific permission info/annotation")
*
- * @property requestJson the privileged request in JSON format in the standard webauthn web json
+ * @property requestJson the request in JSON format in the standard webauthn web json
* shown [here](https://w3c.github.io/webauthn/#dictdef-publickeycredentialrequestoptionsjson).
* @property preferImmediatelyAvailableCredentials true if you prefer the operation to return
* immediately when there is no available credential instead of falling back to discovering remote
@@ -180,4 +180,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/credentials/credentials/src/main/java/androidx/credentials/exceptions/ClearCredentialUnknownException.kt b/credentials/credentials/src/main/java/androidx/credentials/exceptions/ClearCredentialUnknownException.kt
index 5ea3bf9..e241f6c 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/exceptions/ClearCredentialUnknownException.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/exceptions/ClearCredentialUnknownException.kt
@@ -28,6 +28,6 @@
/** @hide */
companion object {
internal const val TYPE_CLEAR_CREDENTIAL_UNKNOWN_EXCEPTION =
- "androidx.credentials.TYPE_CLEAR_CREDENTIAL_UNKNOWN_EXCEPTION"
+ "android.credentials.ClearCredentialStateException.TYPE_UNKNOWN"
}
}
\ No newline at end of file
diff --git a/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialCancellationException.kt b/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialCancellationException.kt
index e287206..4cd52f6 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialCancellationException.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialCancellationException.kt
@@ -30,6 +30,6 @@
/** @hide */
companion object {
internal const val TYPE_CREATE_CREDENTIAL_CANCELLATION_EXCEPTION =
- "androidx.credentials.TYPE_CREATE_CREDENTIAL_CANCELLATION_EXCEPTION"
+ "android.credentials.CreateCredentialException.TYPE_USER_CANCELED"
}
}
\ No newline at end of file
diff --git a/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialInterruptedException.kt b/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialInterruptedException.kt
index ae93ab9..cd78998 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialInterruptedException.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialInterruptedException.kt
@@ -29,7 +29,7 @@
/** @hide */
companion object {
- internal val TYPE_CREATE_CREDENTIAL_INTERRUPTED_EXCEPTION =
- "androidx.credentials.TYPE_CREATE_CREDENTIAL_INTERRUPTED_EXCEPTION"
+ internal const val TYPE_CREATE_CREDENTIAL_INTERRUPTED_EXCEPTION =
+ "android.credentials.CreateCredentialException.TYPE_INTERRUPTED"
}
}
\ No newline at end of file
diff --git a/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialUnknownException.kt b/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialUnknownException.kt
index 91eef4a..40b2476 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialUnknownException.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/exceptions/CreateCredentialUnknownException.kt
@@ -28,6 +28,6 @@
/** @hide */
companion object {
internal const val TYPE_CREATE_CREDENTIAL_UNKNOWN_EXCEPTION =
- "androidx.credentials.TYPE_CREATE_CREDENTIAL_UNKNOWN_EXCEPTION"
+ "android.credentials.CreateCredentialException.TYPE_UNKNOWN"
}
}
\ No newline at end of file
diff --git a/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialCancellationException.kt b/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialCancellationException.kt
index 38dcc06..044dec8 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialCancellationException.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialCancellationException.kt
@@ -30,6 +30,6 @@
/** @hide */
companion object {
internal const val TYPE_GET_CREDENTIAL_CANCELLATION_EXCEPTION =
- "androidx.credentials.TYPE_GET_CREDENTIAL_CANCELLATION_EXCEPTION"
+ "android.credentials.GetCredentialException.TYPE_USER_CANCELED"
}
}
\ No newline at end of file
diff --git a/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialInterruptedException.kt b/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialInterruptedException.kt
index fc11a1a..816ca8d 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialInterruptedException.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialInterruptedException.kt
@@ -30,6 +30,6 @@
/** @hide */
companion object {
internal const val TYPE_GET_CREDENTIAL_INTERRUPTED_EXCEPTION =
- "androidx.credentials.TYPE_GET_CREDENTIAL_INTERRUPTED_EXCEPTION"
+ "android.credentials.GetCredentialException.TYPE_INTERRUPTED"
}
}
\ No newline at end of file
diff --git a/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialUnknownException.kt b/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialUnknownException.kt
index 162446f..b75ad50 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialUnknownException.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/exceptions/GetCredentialUnknownException.kt
@@ -28,6 +28,6 @@
/** @hide */
companion object {
internal const val TYPE_GET_CREDENTIAL_UNKNOWN_EXCEPTION =
- "androidx.credentials.TYPE_GET_CREDENTIAL_UNKNOWN_EXCEPTION"
+ "android.credentials.GetCredentialException.TYPE_UNKNOWN"
}
}
\ No newline at end of file
diff --git a/development/auto-version-updater/update_versions_for_release.py b/development/auto-version-updater/update_versions_for_release.py
index 0cd1cd8..008f4846b 100755
--- a/development/auto-version-updater/update_versions_for_release.py
+++ b/development/auto-version-updater/update_versions_for_release.py
@@ -315,7 +315,10 @@
# Open file for writing and write toml back
with open(LIBRARY_VERSIONS_FP, 'w') as f:
- toml.dump(library_versions, f, encoder=toml.TomlPreserveInlineDictEncoder())
+ versions_toml_file_string = toml.dumps(library_versions, encoder=toml.TomlPreserveInlineDictEncoder())
+ versions_toml_file_string_new = re.sub(",]", " ]", versions_toml_file_string)
+ f.write(versions_toml_file_string_new)
+
return updated_version
@@ -471,7 +474,7 @@
msg = "Update versions for release id %s\n\nThis commit was generated from the command:\n%s\n\n%s" % (
release_date, " ".join(sys.argv), "Test: ./gradlew checkApi")
subprocess.check_call(["git", "commit", "-m", msg], cwd=dir, stderr=subprocess.STDOUT)
- subprocess.check_call(["repo", "upload", ".", "--cbr", "-t", "-y", "--label", "Presubmit-Ready+1"], cwd=dir,
+ subprocess.check_call(["repo", "upload", ".", "--cbr", "-t", "-y", "-o", "banned-words~skip", "--label", "Presubmit-Ready+1"], cwd=dir,
stderr=subprocess.STDOUT)
def main(args):
diff --git a/development/project-creator/create_project.py b/development/project-creator/create_project.py
index bc1db8e..8a121f8 100755
--- a/development/project-creator/create_project.py
+++ b/development/project-creator/create_project.py
@@ -25,6 +25,7 @@
from shutil import copyfile
from distutils.dir_util import copy_tree
from distutils.dir_util import DistutilsFileError
+import re
try:
# non-default python3 module, be helpful if it is missing
@@ -590,7 +591,9 @@
# Open file for writing and update toml
with open(LIBRARY_VERSIONS_FP, 'w') as f:
- toml.dump(library_versions, f, encoder=toml.TomlPreserveInlineDictEncoder())
+ versions_toml_file_string = toml.dumps(library_versions, encoder=toml.TomlPreserveInlineDictEncoder())
+ versions_toml_file_string_new = re.sub(",]", " ]", versions_toml_file_string)
+ f.write(versions_toml_file_string_new)
def is_group_id_atomic(group_id):
diff --git a/development/update_tracing_perfetto.py b/development/update_tracing_perfetto.py
index 333ca7b..2cca0fd 100755
--- a/development/update_tracing_perfetto.py
+++ b/development/update_tracing_perfetto.py
@@ -96,6 +96,7 @@
# build new binaries
subprocess.check_call(["./gradlew",
":tracing:tracing-perfetto-binary:createProjectZip",
+ "-Pandroidx.constraints=true",
"-DTRACING_PERFETTO_REUSE_PREBUILTS_AAR=false"],
cwd=core_path)
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index 1ace70c..36bbd84 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -8,16 +8,16 @@
}
dependencies {
- docs("androidx.activity:activity:1.7.0-beta01")
- docs("androidx.activity:activity-compose:1.7.0-beta01")
- samples("androidx.activity:activity-compose-samples:1.7.0-beta01")
- docs("androidx.activity:activity-ktx:1.7.0-beta01")
+ docs("androidx.activity:activity:1.8.0-alpha01")
+ docs("androidx.activity:activity-compose:1.8.0-alpha01")
+ samples("androidx.activity:activity-compose-samples:1.8.0-alpha01")
+ docs("androidx.activity:activity-ktx:1.8.0-alpha01")
docs("androidx.ads:ads-identifier:1.0.0-alpha04")
docs("androidx.ads:ads-identifier-provider:1.0.0-alpha04")
- docs("androidx.annotation:annotation:1.6.0-alpha02")
+ docs("androidx.annotation:annotation:1.6.0-rc01")
docs("androidx.annotation:annotation-experimental:1.3.0")
- docs("androidx.appcompat:appcompat:1.7.0-alpha01")
- docs("androidx.appcompat:appcompat-resources:1.7.0-alpha01")
+ docs("androidx.appcompat:appcompat:1.7.0-alpha02")
+ docs("androidx.appcompat:appcompat-resources:1.7.0-alpha02")
docs("androidx.appsearch:appsearch:1.1.0-alpha02")
docs("androidx.appsearch:appsearch-builtin-types:1.1.0-alpha02")
docs("androidx.appsearch:appsearch-ktx:1.1.0-alpha02")
@@ -36,7 +36,7 @@
docs("androidx.biometric:biometric:1.2.0-alpha05")
docs("androidx.biometric:biometric-ktx:1.2.0-alpha05")
samples("androidx.biometric:biometric-ktx-samples:1.2.0-alpha05")
- docs("androidx.browser:browser:1.5.0-rc01")
+ docs("androidx.browser:browser:1.5.0")
docs("androidx.camera:camera-camera2:1.3.0-alpha03")
docs("androidx.camera:camera-core:1.3.0-alpha03")
docs("androidx.camera:camera-extensions:1.3.0-alpha03")
@@ -54,60 +54,60 @@
docs("androidx.cardview:cardview:1.0.0")
docs("androidx.collection:collection:1.3.0-alpha02")
docs("androidx.collection:collection-ktx:1.3.0-alpha02")
- docs("androidx.compose.animation:animation:1.4.0-alpha05")
- docs("androidx.compose.animation:animation-core:1.4.0-alpha05")
- docs("androidx.compose.animation:animation-graphics:1.4.0-alpha05")
- samples("androidx.compose.animation:animation-samples:1.4.0-alpha05")
- samples("androidx.compose.animation:animation-core-samples:1.4.0-alpha05")
- samples("androidx.compose.animation:animation-graphics-samples:1.4.0-alpha05")
- docs("androidx.compose.foundation:foundation:1.4.0-alpha05")
- docs("androidx.compose.foundation:foundation-layout:1.4.0-alpha05")
- samples("androidx.compose.foundation:foundation-layout-samples:1.4.0-alpha05")
- samples("androidx.compose.foundation:foundation-samples:1.4.0-alpha05")
- docs("androidx.compose.material3:material3:1.1.0-alpha05")
- samples("androidx.compose.material3:material3-samples:1.1.0-alpha05")
- docs("androidx.compose.material3:material3-window-size-class:1.1.0-alpha05")
- samples("androidx.compose.material3:material3-window-size-class-samples:1.1.0-alpha05")
- docs("androidx.compose.material:material:1.4.0-alpha05")
- docs("androidx.compose.material:material-icons-core:1.4.0-alpha05")
- samples("androidx.compose.material:material-icons-core-samples:1.4.0-alpha05")
- docs("androidx.compose.material:material-ripple:1.4.0-alpha05")
- samples("androidx.compose.material:material-samples:1.4.0-alpha05")
- docs("androidx.compose.runtime:runtime:1.4.0-alpha05")
- docs("androidx.compose.runtime:runtime-livedata:1.4.0-alpha05")
- samples("androidx.compose.runtime:runtime-livedata-samples:1.4.0-alpha05")
- docs("androidx.compose.runtime:runtime-rxjava2:1.4.0-alpha05")
- samples("androidx.compose.runtime:runtime-rxjava2-samples:1.4.0-alpha05")
- docs("androidx.compose.runtime:runtime-rxjava3:1.4.0-alpha05")
- samples("androidx.compose.runtime:runtime-rxjava3-samples:1.4.0-alpha05")
- docs("androidx.compose.runtime:runtime-saveable:1.4.0-alpha05")
- samples("androidx.compose.runtime:runtime-saveable-samples:1.4.0-alpha05")
- samples("androidx.compose.runtime:runtime-samples:1.4.0-alpha05")
+ docs("androidx.compose.animation:animation:1.4.0-beta01")
+ docs("androidx.compose.animation:animation-core:1.4.0-beta01")
+ docs("androidx.compose.animation:animation-graphics:1.4.0-beta01")
+ samples("androidx.compose.animation:animation-samples:1.4.0-beta01")
+ samples("androidx.compose.animation:animation-core-samples:1.4.0-beta01")
+ samples("androidx.compose.animation:animation-graphics-samples:1.4.0-beta01")
+ docs("androidx.compose.foundation:foundation:1.4.0-beta01")
+ docs("androidx.compose.foundation:foundation-layout:1.4.0-beta01")
+ samples("androidx.compose.foundation:foundation-layout-samples:1.4.0-beta01")
+ samples("androidx.compose.foundation:foundation-samples:1.4.0-beta01")
+ docs("androidx.compose.material3:material3:1.1.0-alpha06")
+ samples("androidx.compose.material3:material3-samples:1.1.0-alpha06")
+ docs("androidx.compose.material3:material3-window-size-class:1.1.0-alpha06")
+ samples("androidx.compose.material3:material3-window-size-class-samples:1.1.0-alpha06")
+ docs("androidx.compose.material:material:1.4.0-beta01")
+ docs("androidx.compose.material:material-icons-core:1.4.0-beta01")
+ samples("androidx.compose.material:material-icons-core-samples:1.4.0-beta01")
+ docs("androidx.compose.material:material-ripple:1.4.0-beta01")
+ samples("androidx.compose.material:material-samples:1.4.0-beta01")
+ docs("androidx.compose.runtime:runtime:1.4.0-beta01")
+ docs("androidx.compose.runtime:runtime-livedata:1.4.0-beta01")
+ samples("androidx.compose.runtime:runtime-livedata-samples:1.4.0-beta01")
+ docs("androidx.compose.runtime:runtime-rxjava2:1.4.0-beta01")
+ samples("androidx.compose.runtime:runtime-rxjava2-samples:1.4.0-beta01")
+ docs("androidx.compose.runtime:runtime-rxjava3:1.4.0-beta01")
+ samples("androidx.compose.runtime:runtime-rxjava3-samples:1.4.0-beta01")
+ docs("androidx.compose.runtime:runtime-saveable:1.4.0-beta01")
+ samples("androidx.compose.runtime:runtime-saveable-samples:1.4.0-beta01")
+ samples("androidx.compose.runtime:runtime-samples:1.4.0-beta01")
docs("androidx.compose.runtime:runtime-tracing:1.0.0-alpha02")
- docs("androidx.compose.ui:ui:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-geometry:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-graphics:1.4.0-alpha05")
- samples("androidx.compose.ui:ui-graphics-samples:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-test:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-test-junit4:1.4.0-alpha05")
- samples("androidx.compose.ui:ui-test-samples:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-text:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-text-google-fonts:1.4.0-alpha05")
- samples("androidx.compose.ui:ui-text-samples:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-tooling:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-tooling-data:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-tooling-preview:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-unit:1.4.0-alpha05")
- samples("androidx.compose.ui:ui-unit-samples:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-util:1.4.0-alpha05")
- docs("androidx.compose.ui:ui-viewbinding:1.4.0-alpha05")
- samples("androidx.compose.ui:ui-viewbinding-samples:1.4.0-alpha05")
- samples("androidx.compose.ui:ui-samples:1.4.0-alpha05")
+ docs("androidx.compose.ui:ui:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-geometry:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-graphics:1.4.0-beta01")
+ samples("androidx.compose.ui:ui-graphics-samples:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-test:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-test-junit4:1.4.0-beta01")
+ samples("androidx.compose.ui:ui-test-samples:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-text:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-text-google-fonts:1.4.0-beta01")
+ samples("androidx.compose.ui:ui-text-samples:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-tooling:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-tooling-data:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-tooling-preview:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-unit:1.4.0-beta01")
+ samples("androidx.compose.ui:ui-unit-samples:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-util:1.4.0-beta01")
+ docs("androidx.compose.ui:ui-viewbinding:1.4.0-beta01")
+ samples("androidx.compose.ui:ui-viewbinding-samples:1.4.0-beta01")
+ samples("androidx.compose.ui:ui-samples:1.4.0-beta01")
docs("androidx.concurrent:concurrent-futures:1.1.0")
docs("androidx.concurrent:concurrent-futures-ktx:1.1.0")
- docs("androidx.constraintlayout:constraintlayout:2.2.0-alpha06")
- docs("androidx.constraintlayout:constraintlayout-compose:1.1.0-alpha06")
- docs("androidx.constraintlayout:constraintlayout-core:1.1.0-alpha06")
+ docs("androidx.constraintlayout:constraintlayout:2.2.0-alpha07")
+ docs("androidx.constraintlayout:constraintlayout-compose:1.1.0-alpha07")
+ docs("androidx.constraintlayout:constraintlayout-core:1.1.0-alpha07")
docs("androidx.contentpager:contentpager:1.0.0")
docs("androidx.coordinatorlayout:coordinatorlayout:1.2.0")
docs("androidx.core.uwb:uwb:1.0.0-alpha04")
@@ -122,8 +122,9 @@
docs("androidx.core:core:1.10.0-alpha02")
docs("androidx.core:core-ktx:1.10.0-alpha02")
docs("androidx.core:core-splashscreen:1.1.0-alpha01")
- docs("androidx.credentials:credentials:1.0.0-alpha01")
- docs("androidx.credentials:credentials-play-services-auth:1.0.0-alpha01")
+ docs("androidx.credentials:credentials:1.0.0-alpha02")
+ docs("androidx.credentials:credentials-play-services-auth:1.0.0-alpha02")
+ docs("androidx.credentials:credentials-provider:1.0.0-alpha02")
docs("androidx.cursoradapter:cursoradapter:1.0.0")
docs("androidx.customview:customview:1.2.0-alpha02")
docs("androidx.customview:customview-poolingcontainer:1.0.0-rc01")
@@ -138,23 +139,23 @@
docs("androidx.datastore:datastore-rxjava3:1.1.0-alpha01")
docs("androidx.documentfile:documentfile:1.1.0-alpha01")
docs("androidx.draganddrop:draganddrop:1.0.0")
- docs("androidx.drawerlayout:drawerlayout:1.2.0-alpha01")
+ docs("androidx.drawerlayout:drawerlayout:1.2.0-beta01")
docs("androidx.dynamicanimation:dynamicanimation:1.1.0-alpha02")
docs("androidx.dynamicanimation:dynamicanimation-ktx:1.0.0-alpha03")
- docs("androidx.emoji2:emoji2:1.3.0-beta01")
- docs("androidx.emoji2:emoji2-bundled:1.3.0-beta01")
- docs("androidx.emoji2:emoji2-emojipicker:1.0.0-alpha01")
- docs("androidx.emoji2:emoji2-views:1.3.0-beta01")
- docs("androidx.emoji2:emoji2-views-helper:1.3.0-beta01")
+ docs("androidx.emoji2:emoji2:1.3.0-beta02")
+ docs("androidx.emoji2:emoji2-bundled:1.3.0-beta02")
+ docs("androidx.emoji2:emoji2-emojipicker:1.0.0-alpha02")
+ docs("androidx.emoji2:emoji2-views:1.3.0-beta02")
+ docs("androidx.emoji2:emoji2-views-helper:1.3.0-beta02")
docs("androidx.emoji:emoji:1.2.0-alpha03")
docs("androidx.emoji:emoji-appcompat:1.2.0-alpha03")
docs("androidx.emoji:emoji-bundled:1.2.0-alpha03")
docs("androidx.enterprise:enterprise-feedback:1.1.0")
docs("androidx.enterprise:enterprise-feedback-testing:1.1.0")
- docs("androidx.exifinterface:exifinterface:1.3.5")
- docs("androidx.fragment:fragment:1.6.0-alpha04")
- docs("androidx.fragment:fragment-ktx:1.6.0-alpha04")
- docs("androidx.fragment:fragment-testing:1.6.0-alpha04")
+ docs("androidx.exifinterface:exifinterface:1.3.6")
+ docs("androidx.fragment:fragment:1.6.0-alpha05")
+ docs("androidx.fragment:fragment-ktx:1.6.0-alpha05")
+ docs("androidx.fragment:fragment-testing:1.6.0-alpha05")
docs("androidx.glance:glance:1.0.0-alpha05")
docs("androidx.glance:glance-appwidget:1.0.0-alpha05")
docs("androidx.glance:glance-appwidget-preview:1.0.0-alpha05")
@@ -210,8 +211,8 @@
docs("androidx.media2:media2-session:1.2.1")
docs("androidx.media2:media2-widget:1.2.1")
docs("androidx.media:media:1.6.0")
- docs("androidx.mediarouter:mediarouter:1.4.0-beta01")
- docs("androidx.mediarouter:mediarouter-testing:1.4.0-beta01")
+ docs("androidx.mediarouter:mediarouter:1.6.0-alpha01")
+ docs("androidx.mediarouter:mediarouter-testing:1.6.0-alpha01")
docs("androidx.metrics:metrics-performance:1.0.0-alpha03")
docs("androidx.navigation:navigation-common:2.6.0-alpha05")
docs("androidx.navigation:navigation-common-ktx:2.6.0-alpha05")
@@ -226,18 +227,18 @@
docs("androidx.navigation:navigation-testing:2.6.0-alpha05")
docs("androidx.navigation:navigation-ui:2.6.0-alpha05")
docs("androidx.navigation:navigation-ui-ktx:2.6.0-alpha05")
- docs("androidx.paging:paging-common:3.2.0-alpha03")
- docs("androidx.paging:paging-common-ktx:3.2.0-alpha03")
- docs("androidx.paging:paging-compose:1.0.0-alpha17")
+ docs("androidx.paging:paging-common:3.2.0-alpha04")
+ docs("androidx.paging:paging-common-ktx:3.2.0-alpha04")
+ docs("androidx.paging:paging-compose:1.0.0-alpha18")
samples("androidx.paging:paging-compose-samples:3.0.0-alpha08")
- docs("androidx.paging:paging-guava:3.2.0-alpha03")
- docs("androidx.paging:paging-runtime:3.2.0-alpha03")
- docs("androidx.paging:paging-runtime-ktx:3.2.0-alpha03")
- docs("androidx.paging:paging-rxjava2:3.2.0-alpha03")
- docs("androidx.paging:paging-rxjava2-ktx:3.2.0-alpha03")
- docs("androidx.paging:paging-rxjava3:3.2.0-alpha03")
- samples("androidx.paging:paging-samples:3.2.0-alpha03")
- docs("androidx.paging:paging-testing:3.2.0-alpha03")
+ docs("androidx.paging:paging-guava:3.2.0-alpha04")
+ docs("androidx.paging:paging-runtime:3.2.0-alpha04")
+ docs("androidx.paging:paging-runtime-ktx:3.2.0-alpha04")
+ docs("androidx.paging:paging-rxjava2:3.2.0-alpha04")
+ docs("androidx.paging:paging-rxjava2-ktx:3.2.0-alpha04")
+ docs("androidx.paging:paging-rxjava3:3.2.0-alpha04")
+ samples("androidx.paging:paging-samples:3.2.0-alpha04")
+ docs("androidx.paging:paging-testing:3.2.0-alpha04")
docs("androidx.palette:palette:1.0.0")
docs("androidx.palette:palette-ktx:1.0.0")
docs("androidx.percentlayout:percentlayout:1.0.1")
@@ -248,7 +249,7 @@
docs("androidx.privacysandbox.tools:tools-apigenerator:1.0.0-alpha02")
docs("androidx.privacysandbox.tools:tools-apipackager:1.0.0-alpha02")
docs("androidx.privacysandbox.tools:tools-core:1.0.0-alpha02")
- docs("androidx.profileinstaller:profileinstaller:1.3.0-alpha03")
+ docs("androidx.profileinstaller:profileinstaller:1.3.0-beta01")
docs("androidx.recommendation:recommendation:1.0.0")
docs("androidx.recyclerview:recyclerview:1.3.0-rc01")
docs("androidx.recyclerview:recyclerview-selection:2.0.0-alpha01")
@@ -308,12 +309,13 @@
docs("androidx.textclassifier:textclassifier:1.0.0-alpha04")
docs("androidx.tracing:tracing:1.2.0-alpha02")
docs("androidx.tracing:tracing-ktx:1.2.0-alpha02")
- docs("androidx.tracing:tracing-perfetto:1.0.0-alpha09")
- docs("androidx.tracing:tracing-perfetto-common:1.0.0-alpha09")
+ docs("androidx.tracing:tracing-perfetto:1.0.0-alpha10")
+ docs("androidx.tracing:tracing-perfetto-common:1.0.0-alpha10")
docs("androidx.transition:transition:1.4.1")
docs("androidx.transition:transition-ktx:1.4.1")
- docs("androidx.tv:tv-foundation:1.0.0-alpha03")
- docs("androidx.tv:tv-material:1.0.0-alpha03")
+ docs("androidx.tv:tv-foundation:1.0.0-alpha04")
+ docs("androidx.tv:tv-material:1.0.0-alpha04")
+ samples("androidx.tv:tv-samples:1.0.0-alpha04")
docs("androidx.tvprovider:tvprovider:1.1.0-alpha01")
docs("androidx.vectordrawable:vectordrawable:1.2.0-beta01")
docs("androidx.vectordrawable:vectordrawable-animated:1.2.0-alpha01")
@@ -321,19 +323,19 @@
docs("androidx.versionedparcelable:versionedparcelable:1.1.1")
docs("androidx.viewpager2:viewpager2:1.1.0-beta01")
docs("androidx.viewpager:viewpager:1.1.0-alpha01")
- docs("androidx.wear.compose:compose-foundation:1.2.0-alpha03")
- samples("androidx.wear.compose:compose-foundation-samples:1.2.0-alpha03")
- docs("androidx.wear.compose:compose-material:1.2.0-alpha03")
- docs("androidx.wear.compose:compose-material-core:1.2.0-alpha03")
- samples("androidx.wear.compose:compose-material-samples:1.2.0-alpha03")
+ docs("androidx.wear.compose:compose-foundation:1.2.0-alpha04")
+ samples("androidx.wear.compose:compose-foundation-samples:1.2.0-alpha04")
+ docs("androidx.wear.compose:compose-material:1.2.0-alpha04")
+ docs("androidx.wear.compose:compose-material-core:1.2.0-alpha04")
+ samples("androidx.wear.compose:compose-material-samples:1.2.0-alpha04")
docs("androidx.wear.compose:compose-material3:1.0.0-alpha01")
- samples("androidx.wear.compose:compose-material3-samples:1.2.0-alpha03")
- docs("androidx.wear.compose:compose-navigation:1.2.0-alpha03")
- samples("androidx.wear.compose:compose-navigation-samples:1.2.0-alpha03")
- docs("androidx.wear.protolayout:protolayout:1.0.0-alpha02")
- docs("androidx.wear.protolayout:protolayout-expression:1.0.0-alpha02")
- docs("androidx.wear.protolayout:protolayout-proto:1.0.0-alpha02")
- docs("androidx.wear.protolayout:protolayout-renderer:1.0.0-alpha02")
+ samples("androidx.wear.compose:compose-material3-samples:1.2.0-alpha04")
+ docs("androidx.wear.compose:compose-navigation:1.2.0-alpha04")
+ samples("androidx.wear.compose:compose-navigation-samples:1.2.0-alpha04")
+ docs("androidx.wear.protolayout:protolayout:1.0.0-alpha03")
+ docs("androidx.wear.protolayout:protolayout-expression:1.0.0-alpha03")
+ docs("androidx.wear.protolayout:protolayout-proto:1.0.0-alpha03")
+ docs("androidx.wear.protolayout:protolayout-renderer:1.0.0-alpha03")
docs("androidx.wear.tiles:tiles:1.1.0")
docs("androidx.wear.tiles:tiles-material:1.1.0")
docs("androidx.wear.tiles:tiles-proto:1.1.0")
@@ -363,7 +365,7 @@
docs("androidx.wear:wear-input:1.2.0-alpha02")
samples("androidx.wear:wear-input-samples:1.2.0-alpha01")
docs("androidx.wear:wear-input-testing:1.2.0-alpha02")
- docs("androidx.webkit:webkit:1.7.0-alpha01")
+ docs("androidx.webkit:webkit:1.7.0-alpha02")
docs("androidx.window:window:1.1.0-alpha04")
stubs(fileTree(dir: "../window/stubs/", include: ["window-sidecar-release-0.1.0-alpha01.aar"]))
docs("androidx.window:window-core:1.1.0-alpha04")
@@ -372,11 +374,11 @@
docs("androidx.window:window-rxjava2:1.1.0-alpha04")
docs("androidx.window:window-rxjava3:1.1.0-alpha04")
docs("androidx.window:window-testing:1.1.0-alpha04")
- docs("androidx.work:work-gcm:2.8.0-rc01")
- docs("androidx.work:work-multiprocess:2.8.0-rc01")
- docs("androidx.work:work-runtime:2.8.0-rc01")
- docs("androidx.work:work-runtime-ktx:2.8.0-rc01")
- docs("androidx.work:work-rxjava2:2.8.0-rc01")
- docs("androidx.work:work-rxjava3:2.8.0-rc01")
- docs("androidx.work:work-testing:2.8.0-rc01")
+ docs("androidx.work:work-gcm:2.8.0")
+ docs("androidx.work:work-multiprocess:2.8.0")
+ docs("androidx.work:work-runtime:2.8.0")
+ docs("androidx.work:work-runtime-ktx:2.8.0")
+ docs("androidx.work:work-rxjava2:2.8.0")
+ docs("androidx.work:work-rxjava3:2.8.0")
+ docs("androidx.work:work-testing:2.8.0")
}
diff --git a/emoji2/emoji2-bundled/api/1.3.0-beta03.txt b/emoji2/emoji2-bundled/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..8749c28
--- /dev/null
+++ b/emoji2/emoji2-bundled/api/1.3.0-beta03.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.emoji2.bundled {
+
+ public class BundledEmojiCompatConfig extends androidx.emoji2.text.EmojiCompat.Config {
+ ctor public BundledEmojiCompatConfig(android.content.Context);
+ }
+
+}
+
diff --git a/emoji2/emoji2-bundled/api/public_plus_experimental_1.3.0-beta03.txt b/emoji2/emoji2-bundled/api/public_plus_experimental_1.3.0-beta03.txt
new file mode 100644
index 0000000..8749c28
--- /dev/null
+++ b/emoji2/emoji2-bundled/api/public_plus_experimental_1.3.0-beta03.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.emoji2.bundled {
+
+ public class BundledEmojiCompatConfig extends androidx.emoji2.text.EmojiCompat.Config {
+ ctor public BundledEmojiCompatConfig(android.content.Context);
+ }
+
+}
+
diff --git a/emoji2/emoji2-bundled/api/res-1.3.0-beta03.txt b/emoji2/emoji2-bundled/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/emoji2/emoji2-bundled/api/res-1.3.0-beta03.txt
diff --git a/emoji2/emoji2-bundled/api/restricted_1.3.0-beta03.txt b/emoji2/emoji2-bundled/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..8749c28
--- /dev/null
+++ b/emoji2/emoji2-bundled/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,9 @@
+// Signature format: 4.0
+package androidx.emoji2.bundled {
+
+ public class BundledEmojiCompatConfig extends androidx.emoji2.text.EmojiCompat.Config {
+ ctor public BundledEmojiCompatConfig(android.content.Context);
+ }
+
+}
+
diff --git a/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerBodyAdapter.kt b/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerBodyAdapter.kt
index 4f688fd..66f3bef 100644
--- a/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerBodyAdapter.kt
+++ b/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerBodyAdapter.kt
@@ -81,8 +81,6 @@
}
})
}
-
- ItemType.PLACEHOLDER_EMOJI -> object : ViewHolder(View(context)) {}
}
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
@@ -99,8 +97,6 @@
ItemType.EMOJI -> {
(viewHolder as EmojiViewHolder).bindEmoji((item as EmojiViewData).emoji)
}
-
- ItemType.PLACEHOLDER_EMOJI -> {}
}
}
diff --git a/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerItems.kt b/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerItems.kt
index 33ea012..7ac2aa6 100644
--- a/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerItems.kt
+++ b/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerItems.kt
@@ -24,8 +24,7 @@
* [titleItem] comes first.
* [contentItems] comes after [titleItem].
* [emptyPlaceholderItem] will be served after [titleItem] only if [contentItems] is empty.
- * [forceContentSize], if provided, will truncate [contentItems] to certain size or pad with
- * [PlaceholderEmoji]s.
+ * [maxContentItemCount], if provided, will truncate [contentItems] to certain size.
*
* [categoryIconId] is the corresponding category icon in emoji picker header.
*/
@@ -33,23 +32,24 @@
@DrawableRes internal val categoryIconId: Int,
internal val titleItem: CategoryTitle,
private val contentItems: List<EmojiViewData>,
- private val forceContentSize: Int? = null,
+ private val maxContentItemCount: Int? = null,
private val emptyPlaceholderItem: PlaceholderText? = null
) {
val size: Int
- get() = 1 /* title */ +
- (forceContentSize ?: maxOf(
- contentItems.size,
- if (emptyPlaceholderItem != null) 1 else 0
- ))
+ get() = 1 /* title */ + when {
+ contentItems.isEmpty() -> if (emptyPlaceholderItem != null) 1 else 0
+ maxContentItemCount != null && contentItems.size > maxContentItemCount ->
+ maxContentItemCount
+ else -> contentItems.size
+ }
operator fun get(index: Int): ItemViewData {
if (index == 0) return titleItem
val contentIndex = index - 1
if (contentIndex < contentItems.size) return contentItems[contentIndex]
if (contentIndex == 0 && emptyPlaceholderItem != null) return emptyPlaceholderItem
- return PlaceholderEmoji
+ throw IndexOutOfBoundsException()
}
fun getAll(): List<ItemViewData> = IntRange(0, size - 1).map { get(it) }
diff --git a/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerView.kt b/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerView.kt
index 999cb72..918a7d6 100644
--- a/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerView.kt
+++ b/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/EmojiPickerView.kt
@@ -88,6 +88,7 @@
private val scope = CoroutineScope(EmptyCoroutineContext)
private var recentEmojiProvider: RecentEmojiProvider = DefaultRecentEmojiProvider(context)
+ private var recentNeedsRefreshing: Boolean = true
private val recentItems: MutableList<EmojiViewData> = mutableListOf()
private lateinit var recentItemGroup: ItemGroup
@@ -150,10 +151,8 @@
emojiPickerItemsProvider = { emojiPickerItems },
onEmojiPickedListener = { emojiViewItem ->
onEmojiPickedListener?.accept(emojiViewItem)
-
- scope.launch {
- recentEmojiProvider.recordSelection(emojiViewItem.emoji)
- }
+ recentEmojiProvider.recordSelection(emojiViewItem.emoji)
+ recentNeedsRefreshing = true
}
)
}
@@ -163,19 +162,19 @@
R.drawable.quantum_gm_ic_access_time_filled_vd_theme_24,
CategoryTitle(context.getString(R.string.emoji_category_recent)),
recentItems,
- forceContentSize = DEFAULT_MAX_RECENT_ITEM_ROWS * emojiGridColumns,
+ maxContentItemCount = DEFAULT_MAX_RECENT_ITEM_ROWS * emojiGridColumns,
emptyPlaceholderItem = PlaceholderText(
context.getString(R.string.emoji_empty_recent_category)
)
).also { recentItemGroup = it })
- for ((headerIconId, name, emojis) in BundledEmojiListLoader.getCategorizedEmojiData()) {
+ for ((i, category) in BundledEmojiListLoader.getCategorizedEmojiData().withIndex()) {
add(
ItemGroup(
- headerIconId,
- CategoryTitle(name),
- emojis.map {
- EmojiViewData(stickyVariantProvider[it.emoji])
+ category.headerIconId,
+ CategoryTitle(category.categoryName),
+ category.emojiDataList.mapIndexed { j, emojiData ->
+ EmojiViewData(stickyVariantProvider[emojiData.emoji], dataIndex = i + j)
},
)
)
@@ -194,7 +193,6 @@
spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
return when (emojiPickerItems.getBodyItem(position).itemType) {
- ItemType.PLACEHOLDER_EMOJI -> 0
ItemType.CATEGORY_TITLE, ItemType.PLACEHOLDER_TEXT -> emojiGridColumns
else -> 1
}
@@ -243,11 +241,14 @@
addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
- val position =
- bodyLayoutManager.findFirstCompletelyVisibleItemPosition()
headerAdapter.selectedGroupIndex =
- emojiPickerItems.groupIndexByItemPosition(position)
- if (position !in emojiPickerItems.groupRange(recentItemGroup)) {
+ emojiPickerItems.groupIndexByItemPosition(
+ bodyLayoutManager.findFirstCompletelyVisibleItemPosition()
+ )
+ if (recentNeedsRefreshing &&
+ bodyLayoutManager.findFirstVisibleItemPosition() !in
+ emojiPickerItems.groupRange(recentItemGroup)
+ ) {
scope.launch {
refreshRecent()
}
@@ -268,18 +269,37 @@
}
internal suspend fun refreshRecent() {
+ if (!recentNeedsRefreshing) {
+ return
+ }
+ val oldGroupSize = if (::recentItemGroup.isInitialized) recentItemGroup.size else 0
val recent = recentEmojiProvider.getRecentEmojiList()
- recentItems.clear()
- recentItems.addAll(recent.map {
- EmojiViewData(
- it,
- updateToSticky = false,
- )
- })
- if (isLaidOut) {
- val range = emojiPickerItems.groupRange(recentItemGroup)
- withContext(Dispatchers.Main) {
- bodyAdapter.notifyItemRangeChanged(range.first, range.last + 1)
+ withContext(Dispatchers.Main) {
+ recentItems.clear()
+ recentItems.addAll(recent.map {
+ EmojiViewData(
+ it,
+ updateToSticky = false,
+ )
+ })
+ if (::emojiPickerItems.isInitialized) {
+ val range = emojiPickerItems.groupRange(recentItemGroup)
+ if (recentItemGroup.size > oldGroupSize) {
+ bodyAdapter.notifyItemRangeInserted(
+ range.first + oldGroupSize,
+ recentItemGroup.size - oldGroupSize
+ )
+ } else if (recentItemGroup.size < oldGroupSize) {
+ bodyAdapter.notifyItemRangeRemoved(
+ range.first + recentItemGroup.size,
+ oldGroupSize - recentItemGroup.size
+ )
+ }
+ bodyAdapter.notifyItemRangeChanged(
+ range.first,
+ minOf(oldGroupSize, recentItemGroup.size)
+ )
+ recentNeedsRefreshing = false
}
}
}
@@ -295,6 +315,7 @@
fun setRecentEmojiProvider(recentEmojiProvider: RecentEmojiProvider) {
this.recentEmojiProvider = recentEmojiProvider
scope.launch {
+ recentNeedsRefreshing = true
refreshRecent()
}
}
@@ -406,4 +427,4 @@
override fun removeViewsInLayout(start: Int, count: Int) {
throw UnsupportedOperationException(EmojiPickerConstants.REMOVE_VIEW_EXCEPTION_MESSAGE)
}
-}
+}
\ No newline at end of file
diff --git a/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/ItemViewData.kt b/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/ItemViewData.kt
index 33cfcfb..73a1549 100644
--- a/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/ItemViewData.kt
+++ b/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/ItemViewData.kt
@@ -20,7 +20,6 @@
CATEGORY_TITLE,
PLACEHOLDER_TEXT,
EMOJI,
- PLACEHOLDER_EMOJI,
}
/**
@@ -45,11 +44,11 @@
*/
internal data class EmojiViewData(
var emoji: String,
- val updateToSticky: Boolean = true
+ val updateToSticky: Boolean = true,
+ // Needed to ensure uniqueness since we enabled stable Id.
+ val dataIndex: Int = 0
) : ItemViewData(ItemType.EMOJI)
-internal object PlaceholderEmoji : ItemViewData(ItemType.PLACEHOLDER_EMOJI)
-
internal object Extensions {
internal fun Int.toItemType() = ItemType.values()[this]
}
diff --git a/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/utils/UnicodeRenderableManager.kt b/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/utils/UnicodeRenderableManager.kt
index 3e5f5a8..9762e78 100644
--- a/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/utils/UnicodeRenderableManager.kt
+++ b/emoji2/emoji2-emojipicker/src/main/java/androidx/emoji2/emojipicker/utils/UnicodeRenderableManager.kt
@@ -61,7 +61,7 @@
*/
internal fun isEmojiRenderable(emoji: String) =
if (EmojiPickerView.emojiCompatLoaded)
- EmojiCompat.get().getEmojiMatch(emoji, Int.MAX_VALUE) > 0
+ EmojiCompat.get().getEmojiMatch(emoji, Int.MAX_VALUE) == EmojiCompat.EMOJI_SUPPORTED
else getClosestRenderable(emoji) != null
// Yawning face is added in emoji 12 which is the first version starts to support gender
diff --git a/emoji2/emoji2-emojipicker/src/main/res/drawable/ripple_emoji_view.xml b/emoji2/emoji2-emojipicker/src/main/res/drawable/ripple_emoji_view.xml
index 3bae1dd..3b05870 100644
--- a/emoji2/emoji2-emojipicker/src/main/res/drawable/ripple_emoji_view.xml
+++ b/emoji2/emoji2-emojipicker/src/main/res/drawable/ripple_emoji_view.xml
@@ -15,7 +15,7 @@
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="?android:colorControlHighlight">
+ android:color="?attr/colorAccent">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<corners android:radius="12dp" />
diff --git a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_activity.csv b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_activity.csv
index 2df9810..ff009b3 100644
--- a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_activity.csv
+++ b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_activity.csv
@@ -34,8 +34,8 @@
🏐
🏈
🏉
-🎾
🥅
+🎾
🏸
🥍
🏏
@@ -94,6 +94,8 @@
🎻
🪘
🥁
+🪇
+🪈
🪗
🎤
🎧
diff --git a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_animals_nature.csv b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_animals_nature.csv
index d66c14b..c88986d 100644
--- a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_animals_nature.csv
+++ b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_animals_nature.csv
@@ -7,6 +7,7 @@
🌸
💮
🏵️
+🪻
🌻
🌼
🍂
@@ -23,53 +24,61 @@
🌴
🌳
🌲
+🪵
🪹
🪺
-🪵
🪨
⛰️
🏔️
❄️
☃️
⛄
-🌊
-🫧
-🌬️
-🌀
-🌪️
-🌁
🌫️
🌡️
🔥
🌋
🏜️
🏞️
+🏝️
🏖️
-⛱️
🌅
🌄
-☀️
-🌤️
-⛅
-🌥️
-🌦️
-☁️
-🌨️
-⛈️
-🌩️
-🌧️
-💧
-☔
-⚡
🌈
+🫧
+🌊
+🌬️
+🌀
+🌪️
+⚡
+☔
+💧
+🌧️
+🌩️
+⛈️
+🌨️
+☁️
+🌦️
+🌥️
+⛅
+🌤️
+☀️
+🌞
+🌝
+🌚
+🌜
+🌛
⭐
🌟
-💫
✨
+💫
🌙
☄️
+🕳️
🌠
🌌
+🌍
+🌎
+🌏
🪐
🌑
🌒
@@ -79,9 +88,6 @@
🌖
🌗
🌘
-🌍
-🌎
-🌏
🙈
🙉
🙊
@@ -107,7 +113,7 @@
🦓
🦄
🐴
-🐸
+🫎
🐲
🦎
🐉
@@ -116,19 +122,19 @@
🐢
🐊
🐍
+🐸
+🐇
🐁
🐀
-🐇
🐈
🐈⬛
🐩
🐕
🦮
🐕🦺
-🐅
-🐆
-🐎
🐖
+🐎
+🫏
🐄
🐂
🐃
@@ -145,6 +151,8 @@
🦏
🦛
🦒
+🐆
+🐅
🐒
🦍
🦧
@@ -157,23 +165,26 @@
🦔
🦦
🦇
+🪽
🪶
-🦅
-🦉
+🐦
+🐦⬛
🐓
🐔
🐣
🐤
🐥
-🐦
+🦅
+🦉
🦜
🕊️
🦤
🦢
+🦆
+🪿
🦩
🦚
🦃
-🦆
🐧
🦭
🦈
@@ -188,6 +199,7 @@
🦀
🦑
🐙
+🪼
🦪
🪸
🦂
diff --git a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_emotions.csv b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_emotions.csv
index 0a1fcd4..0a5d0d4 100644
--- a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_emotions.csv
+++ b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_emotions.csv
@@ -16,24 +16,33 @@
😍
🤩
🥳
+🫠
🙃
🙂
🥲
🥹
+😊
+☺️
+😌
+😏
+😴
+😪
+🤤
😋
😛
😝
😜
🤪
-😇
-😊
-☺️
-😏
-😌
+🥴
😔
+🥺
+😬
+🫥
😑
😐
😶
+😶🌫️
+🤐
🫡
🤔
🤫
@@ -52,7 +61,8 @@
😠
😡
🤬
-🥺
+😞
+😓
😟
😥
😢
@@ -60,7 +70,6 @@
🙁
🫤
😕
-🤐
😰
😨
😧
@@ -70,66 +79,57 @@
😲
😳
🤯
-😬
-😓
-😞
😖
😣
😩
😫
😵
😵💫
-🫥
-😴
-😪
-🤤
-🌛
-🌜
-🌚
-🌝
-🌞
-🫠
-😶🌫️
-🥴
-🥵
+🫨
🥶
+🥵
🤢
🤮
🤧
🤒
🤕
😷
+🤥
+😇
🤠
🤑
-😎
🤓
+😎
🥸
-🤥
🤡
-👻
-💩
-👽
-🤖
-🎃
😈
👿
+👻
+🎃
+💩
+🤖
+👽
+👾
+🌛
+🌜
+🌚
+🌝
+🌞
+☠️
👹
👺
🔥
+💯
💫
⭐
🌟
✨
💥
-💯
-💢
💨
💦
-🫧
💤
🕳️
🎉
-🎊
🙈
🙉
🙊
@@ -146,12 +146,14 @@
🧡
💛
💚
+🩵
💙
💜
🤎
🖤
+🩶
🤍
-♥️
+🩷
💘
💝
💖
@@ -161,6 +163,7 @@
💕
💌
💟
+♥️
❣️
❤️🩹
💔
@@ -178,7 +181,6 @@
🦠
🦷
🦴
-☠️
💀
👀
👁️
@@ -193,9 +195,9 @@
🦿
🦾
💪,💪,💪🏻,💪🏼,💪🏽,💪🏾,💪🏿
+👏,👏,👏🏻,👏🏼,👏🏽,👏🏾,👏🏿
👍,👍,👍🏻,👍🏼,👍🏽,👍🏾,👍🏿
👎,👎,👎🏻,👎🏼,👎🏽,👎🏾,👎🏿
-👏,👏,👏🏻,👏🏼,👏🏽,👏🏾,👏🏿
🫶,🫶,🫶🏻,🫶🏼,🫶🏽,🫶🏾,🫶🏿
🙌,🙌,🙌🏻,🙌🏼,🙌🏽,🙌🏾,🙌🏿
👐,👐,👐🏻,👐🏼,👐🏽,👐🏾,👐🏿
@@ -209,8 +211,10 @@
🫴,🫴,🫴🏻,🫴🏼,🫴🏽,🫴🏾,🫴🏿
🫱,🫱,🫱🏻,🫱🏼,🫱🏽,🫱🏾,🫱🏿
🫲,🫲,🫲🏻,🫲🏼,🫲🏽,🫲🏾,🫲🏿
-🤚,🤚,🤚🏻,🤚🏼,🤚🏽,🤚🏾,🤚🏿
+🫸,🫸,🫸🏻,🫸🏼,🫸🏽,🫸🏾,🫸🏿
+🫷,🫷,🫷🏻,🫷🏼,🫷🏽,🫷🏾,🫷🏿
👋,👋,👋🏻,👋🏼,👋🏽,👋🏾,👋🏿
+🤚,🤚,🤚🏻,🤚🏼,🤚🏽,🤚🏾,🤚🏿
🖐️,🖐️,🖐🏻,🖐🏼,🖐🏽,🖐🏾,🖐🏿
✋,✋,✋🏻,✋🏼,✋🏽,✋🏾,✋🏿
🖖,🖖,🖖🏻,🖖🏼,🖖🏽,🖖🏾,🖖🏿
@@ -223,13 +227,13 @@
🤌,🤌,🤌🏻,🤌🏼,🤌🏽,🤌🏾,🤌🏿
🤏,🤏,🤏🏻,🤏🏼,🤏🏽,🤏🏾,🤏🏿
👌,👌,👌🏻,👌🏼,👌🏽,👌🏾,👌🏿
-🖕,🖕,🖕🏻,🖕🏼,🖕🏽,🖕🏾,🖕🏿
+🫵,🫵,🫵🏻,🫵🏼,🫵🏽,🫵🏾,🫵🏿
+👉,👉,👉🏻,👉🏼,👉🏽,👉🏾,👉🏿
+👈,👈,👈🏻,👈🏼,👈🏽,👈🏾,👈🏿
☝️,☝️,☝🏻,☝🏼,☝🏽,☝🏾,☝🏿
👆,👆,👆🏻,👆🏼,👆🏽,👆🏾,👆🏿
👇,👇,👇🏻,👇🏼,👇🏽,👇🏾,👇🏿
-👉,👉,👉🏻,👉🏼,👉🏽,👉🏾,👉🏿
-👈,👈,👈🏻,👈🏼,👈🏽,👈🏾,👈🏿
-🫵,🫵,🫵🏻,🫵🏼,🫵🏽,🫵🏾,🫵🏿
+🖕,🖕,🖕🏻,🖕🏼,🖕🏽,🖕🏾,🖕🏿
✍️,✍️,✍🏻,✍🏼,✍🏽,✍🏾,✍🏿
🤳,🤳,🤳🏻,🤳🏼,🤳🏽,🤳🏾,🤳🏿
🙏,🙏,🙏🏻,🙏🏼,🙏🏽,🙏🏾,🙏🏿
diff --git a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_food_drink.csv b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_food_drink.csv
index 0afc9c8..59e6561 100644
--- a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_food_drink.csv
+++ b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_food_drink.csv
@@ -18,6 +18,7 @@
🥥
🍅
🌶️
+🫚
🥕
🍠
🧅
@@ -25,6 +26,7 @@
🥦
🥒
🥬
+🫛
🫑
🥑
🍆
diff --git a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_objects.csv b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_objects.csv
index 80437da..fd77bf0 100644
--- a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_objects.csv
+++ b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_objects.csv
@@ -55,6 +55,7 @@
🧼
🪥
🪒
+🪮
🧺
🧦
🧤
@@ -81,6 +82,7 @@
👒
🧢
👑
+🪭
🎒
👝
👛
@@ -100,20 +102,20 @@
👡
👢
🥾
-👓
-🕶️
🦯
+🕶️
+👓
🥽
⚗️
🧫
🧪
🌡️
-🧬
💉
💊
🩹
🩺
🩻
+🧬
🔭
🔬
📡
@@ -141,10 +143,6 @@
🖇️
📏
📐
-✂️
-📌
-📍
-🗑️
🖌️
🖍️
🖊️
@@ -152,6 +150,8 @@
✒️
✏️
📝
+📖
+📚
📒
📔
📕
@@ -159,27 +159,28 @@
📗
📘
📙
-📚
-📖
🔖
🗒️
📄
📃
📋
-📇
📑
-🗃️
-🗄️
-🗂️
📂
📁
-📰
-🗞️
+🗂️
+🗃️
+🗄️
📊
📈
📉
-🪧
+📇
🪪
+📌
+📍
+✂️
+🗑️
+📰
+🗞️
🏷️
📦
📫
@@ -195,7 +196,6 @@
📤
📥
🗳️
-⏱️
🕛
🕧
🕐
@@ -220,15 +220,17 @@
🕥
🕚
🕦
+⏱️
+⌚
+🕰️
⌛
⏳
-🕰️
-⌚
⏲️
⏰
-🗓️
📅
📆
+🗓️
+🪧
🛎️
🔔
📯
diff --git a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_symbols.csv b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_symbols.csv
index 26d7459..34789a03 100644
--- a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_symbols.csv
+++ b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_symbols.csv
@@ -1,12 +1,3 @@
-❤️
-🧡
-💛
-💚
-💙
-💜
-🤎
-🖤
-🤍
🔴
🟠
🟡
@@ -25,6 +16,22 @@
🟫
⬛
⬜
+❤️
+🧡
+💛
+💚
+💙
+💜
+🤎
+🖤
+🤍
+🩷
+🩵
+🩶
+♥️
+♦️
+♣️
+♠️
♈
♉
♊
@@ -41,8 +48,10 @@
♀️
♂️
⚧️
-🔻
-🔺
+💭
+🗯️
+💬
+🗨️
❕
❗
❔
@@ -71,6 +80,9 @@
⛔
📛
♨️
+💢
+🔻
+🔺
🉐
㊙️
㊗️
@@ -84,11 +96,11 @@
🈸
🈺
🈷️
+✴️
🔶
🔸
🔆
🔅
-✴️
🆚
🎦
📶
@@ -111,6 +123,7 @@
⏺️
⏏️
📴
+🛜
📳
📲
🔈
@@ -215,6 +228,7 @@
☮️
☯️
☪️
+🪯
✝️
☦️
✡️
@@ -234,10 +248,6 @@
©️
®️
™️
-♥️
-♦️
-♣️
-♠️
🔘
🔳
◼️
@@ -247,8 +257,4 @@
◻️
◽
▫️
-💭
-🗯️
-💬
-🗨️
👁️🗨️
diff --git a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_travel_places.csv b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_travel_places.csv
index 5e95477..8704e95 100644
--- a/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_travel_places.csv
+++ b/emoji2/emoji2-emojipicker/src/main/res/raw/emoji_category_travel_places.csv
@@ -106,6 +106,7 @@
🛖
⛺
🏕️
+⛱️
🏙️
🌆
🌇
@@ -114,7 +115,6 @@
🌁
🛤️
🛣️
-🏝️
🗾
🗺️
🌐
diff --git a/emoji2/emoji2-views-helper/api/1.3.0-beta03.txt b/emoji2/emoji2-views-helper/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..30a6feb
--- /dev/null
+++ b/emoji2/emoji2-views-helper/api/1.3.0-beta03.txt
@@ -0,0 +1,27 @@
+// Signature format: 4.0
+package androidx.emoji2.viewsintegration {
+
+ public final class EmojiEditTextHelper {
+ ctor public EmojiEditTextHelper(android.widget.EditText);
+ ctor public EmojiEditTextHelper(android.widget.EditText, boolean);
+ method public android.text.method.KeyListener? getKeyListener(android.text.method.KeyListener?);
+ method public int getMaxEmojiCount();
+ method public boolean isEnabled();
+ method public android.view.inputmethod.InputConnection? onCreateInputConnection(android.view.inputmethod.InputConnection?, android.view.inputmethod.EditorInfo);
+ method public void setEnabled(boolean);
+ method public void setMaxEmojiCount(@IntRange(from=0) int);
+ }
+
+ public final class EmojiTextViewHelper {
+ ctor public EmojiTextViewHelper(android.widget.TextView);
+ ctor public EmojiTextViewHelper(android.widget.TextView, boolean);
+ method public android.text.InputFilter![] getFilters(android.text.InputFilter![]);
+ method public boolean isEnabled();
+ method public void setAllCaps(boolean);
+ method public void setEnabled(boolean);
+ method public void updateTransformationMethod();
+ method public android.text.method.TransformationMethod? wrapTransformationMethod(android.text.method.TransformationMethod?);
+ }
+
+}
+
diff --git a/emoji2/emoji2-views-helper/api/public_plus_experimental_1.3.0-beta03.txt b/emoji2/emoji2-views-helper/api/public_plus_experimental_1.3.0-beta03.txt
new file mode 100644
index 0000000..30a6feb
--- /dev/null
+++ b/emoji2/emoji2-views-helper/api/public_plus_experimental_1.3.0-beta03.txt
@@ -0,0 +1,27 @@
+// Signature format: 4.0
+package androidx.emoji2.viewsintegration {
+
+ public final class EmojiEditTextHelper {
+ ctor public EmojiEditTextHelper(android.widget.EditText);
+ ctor public EmojiEditTextHelper(android.widget.EditText, boolean);
+ method public android.text.method.KeyListener? getKeyListener(android.text.method.KeyListener?);
+ method public int getMaxEmojiCount();
+ method public boolean isEnabled();
+ method public android.view.inputmethod.InputConnection? onCreateInputConnection(android.view.inputmethod.InputConnection?, android.view.inputmethod.EditorInfo);
+ method public void setEnabled(boolean);
+ method public void setMaxEmojiCount(@IntRange(from=0) int);
+ }
+
+ public final class EmojiTextViewHelper {
+ ctor public EmojiTextViewHelper(android.widget.TextView);
+ ctor public EmojiTextViewHelper(android.widget.TextView, boolean);
+ method public android.text.InputFilter![] getFilters(android.text.InputFilter![]);
+ method public boolean isEnabled();
+ method public void setAllCaps(boolean);
+ method public void setEnabled(boolean);
+ method public void updateTransformationMethod();
+ method public android.text.method.TransformationMethod? wrapTransformationMethod(android.text.method.TransformationMethod?);
+ }
+
+}
+
diff --git a/emoji2/emoji2-views-helper/api/res-1.3.0-beta03.txt b/emoji2/emoji2-views-helper/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/emoji2/emoji2-views-helper/api/res-1.3.0-beta03.txt
diff --git a/emoji2/emoji2-views-helper/api/restricted_1.3.0-beta03.txt b/emoji2/emoji2-views-helper/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..30a6feb
--- /dev/null
+++ b/emoji2/emoji2-views-helper/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,27 @@
+// Signature format: 4.0
+package androidx.emoji2.viewsintegration {
+
+ public final class EmojiEditTextHelper {
+ ctor public EmojiEditTextHelper(android.widget.EditText);
+ ctor public EmojiEditTextHelper(android.widget.EditText, boolean);
+ method public android.text.method.KeyListener? getKeyListener(android.text.method.KeyListener?);
+ method public int getMaxEmojiCount();
+ method public boolean isEnabled();
+ method public android.view.inputmethod.InputConnection? onCreateInputConnection(android.view.inputmethod.InputConnection?, android.view.inputmethod.EditorInfo);
+ method public void setEnabled(boolean);
+ method public void setMaxEmojiCount(@IntRange(from=0) int);
+ }
+
+ public final class EmojiTextViewHelper {
+ ctor public EmojiTextViewHelper(android.widget.TextView);
+ ctor public EmojiTextViewHelper(android.widget.TextView, boolean);
+ method public android.text.InputFilter![] getFilters(android.text.InputFilter![]);
+ method public boolean isEnabled();
+ method public void setAllCaps(boolean);
+ method public void setEnabled(boolean);
+ method public void updateTransformationMethod();
+ method public android.text.method.TransformationMethod? wrapTransformationMethod(android.text.method.TransformationMethod?);
+ }
+
+}
+
diff --git a/emoji2/emoji2-views/api/1.3.0-beta03.txt b/emoji2/emoji2-views/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..879b30e
--- /dev/null
+++ b/emoji2/emoji2-views/api/1.3.0-beta03.txt
@@ -0,0 +1,34 @@
+// Signature format: 4.0
+package androidx.emoji2.widget {
+
+ public class EmojiButton extends android.widget.Button {
+ ctor public EmojiButton(android.content.Context);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+ public class EmojiEditText extends android.widget.EditText {
+ ctor public EmojiEditText(android.content.Context);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet?, int);
+ method public int getMaxEmojiCount();
+ method public void setMaxEmojiCount(@IntRange(from=0) int);
+ }
+
+ public class EmojiExtractTextLayout extends android.widget.LinearLayout {
+ ctor public EmojiExtractTextLayout(android.content.Context);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet?, int);
+ method public int getEmojiReplaceStrategy();
+ method public void onUpdateExtractingViews(android.inputmethodservice.InputMethodService, android.view.inputmethod.EditorInfo);
+ method public void setEmojiReplaceStrategy(int);
+ }
+
+ public class EmojiTextView extends android.widget.TextView {
+ ctor public EmojiTextView(android.content.Context);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+}
+
diff --git a/emoji2/emoji2-views/api/public_plus_experimental_1.3.0-beta03.txt b/emoji2/emoji2-views/api/public_plus_experimental_1.3.0-beta03.txt
new file mode 100644
index 0000000..879b30e
--- /dev/null
+++ b/emoji2/emoji2-views/api/public_plus_experimental_1.3.0-beta03.txt
@@ -0,0 +1,34 @@
+// Signature format: 4.0
+package androidx.emoji2.widget {
+
+ public class EmojiButton extends android.widget.Button {
+ ctor public EmojiButton(android.content.Context);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+ public class EmojiEditText extends android.widget.EditText {
+ ctor public EmojiEditText(android.content.Context);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet?, int);
+ method public int getMaxEmojiCount();
+ method public void setMaxEmojiCount(@IntRange(from=0) int);
+ }
+
+ public class EmojiExtractTextLayout extends android.widget.LinearLayout {
+ ctor public EmojiExtractTextLayout(android.content.Context);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet?, int);
+ method public int getEmojiReplaceStrategy();
+ method public void onUpdateExtractingViews(android.inputmethodservice.InputMethodService, android.view.inputmethod.EditorInfo);
+ method public void setEmojiReplaceStrategy(int);
+ }
+
+ public class EmojiTextView extends android.widget.TextView {
+ ctor public EmojiTextView(android.content.Context);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+}
+
diff --git a/emoji2/emoji2-views/api/res-1.3.0-beta03.txt b/emoji2/emoji2-views/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..8bc8423
--- /dev/null
+++ b/emoji2/emoji2-views/api/res-1.3.0-beta03.txt
@@ -0,0 +1,2 @@
+attr emojiReplaceStrategy
+attr maxEmojiCount
diff --git a/emoji2/emoji2-views/api/restricted_1.3.0-beta03.txt b/emoji2/emoji2-views/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..879b30e
--- /dev/null
+++ b/emoji2/emoji2-views/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,34 @@
+// Signature format: 4.0
+package androidx.emoji2.widget {
+
+ public class EmojiButton extends android.widget.Button {
+ ctor public EmojiButton(android.content.Context);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+ public class EmojiEditText extends android.widget.EditText {
+ ctor public EmojiEditText(android.content.Context);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet?, int);
+ method public int getMaxEmojiCount();
+ method public void setMaxEmojiCount(@IntRange(from=0) int);
+ }
+
+ public class EmojiExtractTextLayout extends android.widget.LinearLayout {
+ ctor public EmojiExtractTextLayout(android.content.Context);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet?, int);
+ method public int getEmojiReplaceStrategy();
+ method public void onUpdateExtractingViews(android.inputmethodservice.InputMethodService, android.view.inputmethod.EditorInfo);
+ method public void setEmojiReplaceStrategy(int);
+ }
+
+ public class EmojiTextView extends android.widget.TextView {
+ ctor public EmojiTextView(android.content.Context);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+}
+
diff --git a/emoji2/emoji2/api/1.3.0-beta03.txt b/emoji2/emoji2/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..11d9335
--- /dev/null
+++ b/emoji2/emoji2/api/1.3.0-beta03.txt
@@ -0,0 +1,131 @@
+// Signature format: 4.0
+package androidx.emoji2.text {
+
+ public final class DefaultEmojiCompatConfig {
+ method public static androidx.emoji2.text.FontRequestEmojiCompatConfig? create(android.content.Context);
+ }
+
+ @AnyThread public class EmojiCompat {
+ method public static androidx.emoji2.text.EmojiCompat get();
+ method public String getAssetSignature();
+ method public int getEmojiEnd(CharSequence, @IntRange(from=0) int);
+ method public int getEmojiMatch(CharSequence, @IntRange(from=0) int);
+ method public int getEmojiStart(CharSequence, @IntRange(from=0) int);
+ method public int getLoadState();
+ method public static boolean handleDeleteSurroundingText(android.view.inputmethod.InputConnection, android.text.Editable, @IntRange(from=0) int, @IntRange(from=0) int, boolean);
+ method public static boolean handleOnKeyDown(android.text.Editable, int, android.view.KeyEvent);
+ method @Deprecated public boolean hasEmojiGlyph(CharSequence);
+ method @Deprecated public boolean hasEmojiGlyph(CharSequence, @IntRange(from=0) int);
+ method public static androidx.emoji2.text.EmojiCompat? init(android.content.Context);
+ method public static androidx.emoji2.text.EmojiCompat init(androidx.emoji2.text.EmojiCompat.Config);
+ method public static boolean isConfigured();
+ method public void load();
+ method @CheckResult public CharSequence? process(CharSequence?);
+ method @CheckResult public CharSequence? process(CharSequence?, @IntRange(from=0) int, @IntRange(from=0) int);
+ method @CheckResult public CharSequence? process(CharSequence?, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+ method @CheckResult public CharSequence? process(CharSequence?, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, int);
+ method public void registerInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ method public void unregisterInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ method public void updateEditorInfo(android.view.inputmethod.EditorInfo);
+ field public static final String EDITOR_INFO_METAVERSION_KEY = "android.support.text.emoji.emojiCompat_metadataVersion";
+ field public static final String EDITOR_INFO_REPLACE_ALL_KEY = "android.support.text.emoji.emojiCompat_replaceAll";
+ field public static final int EMOJI_FALLBACK = 2; // 0x2
+ field public static final int EMOJI_SUPPORTED = 1; // 0x1
+ field public static final int EMOJI_UNSUPPORTED = 0; // 0x0
+ field public static final int LOAD_STATE_DEFAULT = 3; // 0x3
+ field public static final int LOAD_STATE_FAILED = 2; // 0x2
+ field public static final int LOAD_STATE_LOADING = 0; // 0x0
+ field public static final int LOAD_STATE_SUCCEEDED = 1; // 0x1
+ field public static final int LOAD_STRATEGY_DEFAULT = 0; // 0x0
+ field public static final int LOAD_STRATEGY_MANUAL = 1; // 0x1
+ field public static final int REPLACE_STRATEGY_ALL = 1; // 0x1
+ field public static final int REPLACE_STRATEGY_DEFAULT = 0; // 0x0
+ field public static final int REPLACE_STRATEGY_NON_EXISTENT = 2; // 0x2
+ }
+
+ public abstract static class EmojiCompat.Config {
+ ctor protected EmojiCompat.Config(androidx.emoji2.text.EmojiCompat.MetadataRepoLoader);
+ method protected final androidx.emoji2.text.EmojiCompat.MetadataRepoLoader getMetadataRepoLoader();
+ method public androidx.emoji2.text.EmojiCompat.Config registerInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ method public androidx.emoji2.text.EmojiCompat.Config setEmojiSpanIndicatorColor(@ColorInt int);
+ method public androidx.emoji2.text.EmojiCompat.Config setEmojiSpanIndicatorEnabled(boolean);
+ method public androidx.emoji2.text.EmojiCompat.Config setGlyphChecker(androidx.emoji2.text.EmojiCompat.GlyphChecker);
+ method public androidx.emoji2.text.EmojiCompat.Config setMetadataLoadStrategy(int);
+ method public androidx.emoji2.text.EmojiCompat.Config setReplaceAll(boolean);
+ method public androidx.emoji2.text.EmojiCompat.Config setSpanFactory(androidx.emoji2.text.EmojiCompat.SpanFactory);
+ method public androidx.emoji2.text.EmojiCompat.Config setUseEmojiAsDefaultStyle(boolean);
+ method public androidx.emoji2.text.EmojiCompat.Config setUseEmojiAsDefaultStyle(boolean, java.util.List<java.lang.Integer!>?);
+ method public androidx.emoji2.text.EmojiCompat.Config unregisterInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ }
+
+ public static interface EmojiCompat.GlyphChecker {
+ method public boolean hasGlyph(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+ }
+
+ public abstract static class EmojiCompat.InitCallback {
+ ctor public EmojiCompat.InitCallback();
+ method public void onFailed(Throwable?);
+ method public void onInitialized();
+ }
+
+ public static interface EmojiCompat.MetadataRepoLoader {
+ method public void load(androidx.emoji2.text.EmojiCompat.MetadataRepoLoaderCallback);
+ }
+
+ public abstract static class EmojiCompat.MetadataRepoLoaderCallback {
+ ctor public EmojiCompat.MetadataRepoLoaderCallback();
+ method public abstract void onFailed(Throwable?);
+ method public abstract void onLoaded(androidx.emoji2.text.MetadataRepo);
+ }
+
+ public static interface EmojiCompat.SpanFactory {
+ method @RequiresApi(19) public androidx.emoji2.text.EmojiSpan createSpan(androidx.emoji2.text.TypefaceEmojiRasterizer);
+ }
+
+ public class EmojiCompatInitializer implements androidx.startup.Initializer<java.lang.Boolean> {
+ ctor public EmojiCompatInitializer();
+ method public Boolean create(android.content.Context);
+ method public java.util.List<java.lang.Class<? extends androidx.startup.Initializer<?>>!> dependencies();
+ }
+
+ @RequiresApi(19) public abstract class EmojiSpan extends android.text.style.ReplacementSpan {
+ method public int getSize(android.graphics.Paint, CharSequence!, int, int, android.graphics.Paint.FontMetricsInt?);
+ method public final androidx.emoji2.text.TypefaceEmojiRasterizer getTypefaceRasterizer();
+ }
+
+ public class FontRequestEmojiCompatConfig extends androidx.emoji2.text.EmojiCompat.Config {
+ ctor public FontRequestEmojiCompatConfig(android.content.Context, androidx.core.provider.FontRequest);
+ method @Deprecated public androidx.emoji2.text.FontRequestEmojiCompatConfig setHandler(android.os.Handler?);
+ method public androidx.emoji2.text.FontRequestEmojiCompatConfig setLoadingExecutor(java.util.concurrent.Executor);
+ method public androidx.emoji2.text.FontRequestEmojiCompatConfig setRetryPolicy(androidx.emoji2.text.FontRequestEmojiCompatConfig.RetryPolicy?);
+ }
+
+ public static class FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy extends androidx.emoji2.text.FontRequestEmojiCompatConfig.RetryPolicy {
+ ctor public FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy(long);
+ method public long getRetryDelay();
+ }
+
+ public abstract static class FontRequestEmojiCompatConfig.RetryPolicy {
+ ctor public FontRequestEmojiCompatConfig.RetryPolicy();
+ method public abstract long getRetryDelay();
+ }
+
+ @AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
+ method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
+ method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
+ }
+
+ @AnyThread @RequiresApi(19) public class TypefaceEmojiRasterizer {
+ method public void draw(android.graphics.Canvas, float, float, android.graphics.Paint);
+ method public int getCodepointAt(int);
+ method public int getCodepointsLength();
+ method public int getHeight();
+ method public android.graphics.Typeface getTypeface();
+ method public int getWidth();
+ method public boolean isDefaultEmoji();
+ method public boolean isPreferredSystemRender();
+ }
+
+}
+
diff --git a/emoji2/emoji2/api/public_plus_experimental_1.3.0-beta03.txt b/emoji2/emoji2/api/public_plus_experimental_1.3.0-beta03.txt
new file mode 100644
index 0000000..11d9335
--- /dev/null
+++ b/emoji2/emoji2/api/public_plus_experimental_1.3.0-beta03.txt
@@ -0,0 +1,131 @@
+// Signature format: 4.0
+package androidx.emoji2.text {
+
+ public final class DefaultEmojiCompatConfig {
+ method public static androidx.emoji2.text.FontRequestEmojiCompatConfig? create(android.content.Context);
+ }
+
+ @AnyThread public class EmojiCompat {
+ method public static androidx.emoji2.text.EmojiCompat get();
+ method public String getAssetSignature();
+ method public int getEmojiEnd(CharSequence, @IntRange(from=0) int);
+ method public int getEmojiMatch(CharSequence, @IntRange(from=0) int);
+ method public int getEmojiStart(CharSequence, @IntRange(from=0) int);
+ method public int getLoadState();
+ method public static boolean handleDeleteSurroundingText(android.view.inputmethod.InputConnection, android.text.Editable, @IntRange(from=0) int, @IntRange(from=0) int, boolean);
+ method public static boolean handleOnKeyDown(android.text.Editable, int, android.view.KeyEvent);
+ method @Deprecated public boolean hasEmojiGlyph(CharSequence);
+ method @Deprecated public boolean hasEmojiGlyph(CharSequence, @IntRange(from=0) int);
+ method public static androidx.emoji2.text.EmojiCompat? init(android.content.Context);
+ method public static androidx.emoji2.text.EmojiCompat init(androidx.emoji2.text.EmojiCompat.Config);
+ method public static boolean isConfigured();
+ method public void load();
+ method @CheckResult public CharSequence? process(CharSequence?);
+ method @CheckResult public CharSequence? process(CharSequence?, @IntRange(from=0) int, @IntRange(from=0) int);
+ method @CheckResult public CharSequence? process(CharSequence?, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+ method @CheckResult public CharSequence? process(CharSequence?, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, int);
+ method public void registerInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ method public void unregisterInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ method public void updateEditorInfo(android.view.inputmethod.EditorInfo);
+ field public static final String EDITOR_INFO_METAVERSION_KEY = "android.support.text.emoji.emojiCompat_metadataVersion";
+ field public static final String EDITOR_INFO_REPLACE_ALL_KEY = "android.support.text.emoji.emojiCompat_replaceAll";
+ field public static final int EMOJI_FALLBACK = 2; // 0x2
+ field public static final int EMOJI_SUPPORTED = 1; // 0x1
+ field public static final int EMOJI_UNSUPPORTED = 0; // 0x0
+ field public static final int LOAD_STATE_DEFAULT = 3; // 0x3
+ field public static final int LOAD_STATE_FAILED = 2; // 0x2
+ field public static final int LOAD_STATE_LOADING = 0; // 0x0
+ field public static final int LOAD_STATE_SUCCEEDED = 1; // 0x1
+ field public static final int LOAD_STRATEGY_DEFAULT = 0; // 0x0
+ field public static final int LOAD_STRATEGY_MANUAL = 1; // 0x1
+ field public static final int REPLACE_STRATEGY_ALL = 1; // 0x1
+ field public static final int REPLACE_STRATEGY_DEFAULT = 0; // 0x0
+ field public static final int REPLACE_STRATEGY_NON_EXISTENT = 2; // 0x2
+ }
+
+ public abstract static class EmojiCompat.Config {
+ ctor protected EmojiCompat.Config(androidx.emoji2.text.EmojiCompat.MetadataRepoLoader);
+ method protected final androidx.emoji2.text.EmojiCompat.MetadataRepoLoader getMetadataRepoLoader();
+ method public androidx.emoji2.text.EmojiCompat.Config registerInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ method public androidx.emoji2.text.EmojiCompat.Config setEmojiSpanIndicatorColor(@ColorInt int);
+ method public androidx.emoji2.text.EmojiCompat.Config setEmojiSpanIndicatorEnabled(boolean);
+ method public androidx.emoji2.text.EmojiCompat.Config setGlyphChecker(androidx.emoji2.text.EmojiCompat.GlyphChecker);
+ method public androidx.emoji2.text.EmojiCompat.Config setMetadataLoadStrategy(int);
+ method public androidx.emoji2.text.EmojiCompat.Config setReplaceAll(boolean);
+ method public androidx.emoji2.text.EmojiCompat.Config setSpanFactory(androidx.emoji2.text.EmojiCompat.SpanFactory);
+ method public androidx.emoji2.text.EmojiCompat.Config setUseEmojiAsDefaultStyle(boolean);
+ method public androidx.emoji2.text.EmojiCompat.Config setUseEmojiAsDefaultStyle(boolean, java.util.List<java.lang.Integer!>?);
+ method public androidx.emoji2.text.EmojiCompat.Config unregisterInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ }
+
+ public static interface EmojiCompat.GlyphChecker {
+ method public boolean hasGlyph(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+ }
+
+ public abstract static class EmojiCompat.InitCallback {
+ ctor public EmojiCompat.InitCallback();
+ method public void onFailed(Throwable?);
+ method public void onInitialized();
+ }
+
+ public static interface EmojiCompat.MetadataRepoLoader {
+ method public void load(androidx.emoji2.text.EmojiCompat.MetadataRepoLoaderCallback);
+ }
+
+ public abstract static class EmojiCompat.MetadataRepoLoaderCallback {
+ ctor public EmojiCompat.MetadataRepoLoaderCallback();
+ method public abstract void onFailed(Throwable?);
+ method public abstract void onLoaded(androidx.emoji2.text.MetadataRepo);
+ }
+
+ public static interface EmojiCompat.SpanFactory {
+ method @RequiresApi(19) public androidx.emoji2.text.EmojiSpan createSpan(androidx.emoji2.text.TypefaceEmojiRasterizer);
+ }
+
+ public class EmojiCompatInitializer implements androidx.startup.Initializer<java.lang.Boolean> {
+ ctor public EmojiCompatInitializer();
+ method public Boolean create(android.content.Context);
+ method public java.util.List<java.lang.Class<? extends androidx.startup.Initializer<?>>!> dependencies();
+ }
+
+ @RequiresApi(19) public abstract class EmojiSpan extends android.text.style.ReplacementSpan {
+ method public int getSize(android.graphics.Paint, CharSequence!, int, int, android.graphics.Paint.FontMetricsInt?);
+ method public final androidx.emoji2.text.TypefaceEmojiRasterizer getTypefaceRasterizer();
+ }
+
+ public class FontRequestEmojiCompatConfig extends androidx.emoji2.text.EmojiCompat.Config {
+ ctor public FontRequestEmojiCompatConfig(android.content.Context, androidx.core.provider.FontRequest);
+ method @Deprecated public androidx.emoji2.text.FontRequestEmojiCompatConfig setHandler(android.os.Handler?);
+ method public androidx.emoji2.text.FontRequestEmojiCompatConfig setLoadingExecutor(java.util.concurrent.Executor);
+ method public androidx.emoji2.text.FontRequestEmojiCompatConfig setRetryPolicy(androidx.emoji2.text.FontRequestEmojiCompatConfig.RetryPolicy?);
+ }
+
+ public static class FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy extends androidx.emoji2.text.FontRequestEmojiCompatConfig.RetryPolicy {
+ ctor public FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy(long);
+ method public long getRetryDelay();
+ }
+
+ public abstract static class FontRequestEmojiCompatConfig.RetryPolicy {
+ ctor public FontRequestEmojiCompatConfig.RetryPolicy();
+ method public abstract long getRetryDelay();
+ }
+
+ @AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
+ method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
+ method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
+ }
+
+ @AnyThread @RequiresApi(19) public class TypefaceEmojiRasterizer {
+ method public void draw(android.graphics.Canvas, float, float, android.graphics.Paint);
+ method public int getCodepointAt(int);
+ method public int getCodepointsLength();
+ method public int getHeight();
+ method public android.graphics.Typeface getTypeface();
+ method public int getWidth();
+ method public boolean isDefaultEmoji();
+ method public boolean isPreferredSystemRender();
+ }
+
+}
+
diff --git a/emoji2/emoji2/api/res-1.3.0-beta03.txt b/emoji2/emoji2/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/emoji2/emoji2/api/res-1.3.0-beta03.txt
diff --git a/emoji2/emoji2/api/restricted_1.3.0-beta03.txt b/emoji2/emoji2/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..11d9335
--- /dev/null
+++ b/emoji2/emoji2/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,131 @@
+// Signature format: 4.0
+package androidx.emoji2.text {
+
+ public final class DefaultEmojiCompatConfig {
+ method public static androidx.emoji2.text.FontRequestEmojiCompatConfig? create(android.content.Context);
+ }
+
+ @AnyThread public class EmojiCompat {
+ method public static androidx.emoji2.text.EmojiCompat get();
+ method public String getAssetSignature();
+ method public int getEmojiEnd(CharSequence, @IntRange(from=0) int);
+ method public int getEmojiMatch(CharSequence, @IntRange(from=0) int);
+ method public int getEmojiStart(CharSequence, @IntRange(from=0) int);
+ method public int getLoadState();
+ method public static boolean handleDeleteSurroundingText(android.view.inputmethod.InputConnection, android.text.Editable, @IntRange(from=0) int, @IntRange(from=0) int, boolean);
+ method public static boolean handleOnKeyDown(android.text.Editable, int, android.view.KeyEvent);
+ method @Deprecated public boolean hasEmojiGlyph(CharSequence);
+ method @Deprecated public boolean hasEmojiGlyph(CharSequence, @IntRange(from=0) int);
+ method public static androidx.emoji2.text.EmojiCompat? init(android.content.Context);
+ method public static androidx.emoji2.text.EmojiCompat init(androidx.emoji2.text.EmojiCompat.Config);
+ method public static boolean isConfigured();
+ method public void load();
+ method @CheckResult public CharSequence? process(CharSequence?);
+ method @CheckResult public CharSequence? process(CharSequence?, @IntRange(from=0) int, @IntRange(from=0) int);
+ method @CheckResult public CharSequence? process(CharSequence?, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+ method @CheckResult public CharSequence? process(CharSequence?, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, int);
+ method public void registerInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ method public void unregisterInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ method public void updateEditorInfo(android.view.inputmethod.EditorInfo);
+ field public static final String EDITOR_INFO_METAVERSION_KEY = "android.support.text.emoji.emojiCompat_metadataVersion";
+ field public static final String EDITOR_INFO_REPLACE_ALL_KEY = "android.support.text.emoji.emojiCompat_replaceAll";
+ field public static final int EMOJI_FALLBACK = 2; // 0x2
+ field public static final int EMOJI_SUPPORTED = 1; // 0x1
+ field public static final int EMOJI_UNSUPPORTED = 0; // 0x0
+ field public static final int LOAD_STATE_DEFAULT = 3; // 0x3
+ field public static final int LOAD_STATE_FAILED = 2; // 0x2
+ field public static final int LOAD_STATE_LOADING = 0; // 0x0
+ field public static final int LOAD_STATE_SUCCEEDED = 1; // 0x1
+ field public static final int LOAD_STRATEGY_DEFAULT = 0; // 0x0
+ field public static final int LOAD_STRATEGY_MANUAL = 1; // 0x1
+ field public static final int REPLACE_STRATEGY_ALL = 1; // 0x1
+ field public static final int REPLACE_STRATEGY_DEFAULT = 0; // 0x0
+ field public static final int REPLACE_STRATEGY_NON_EXISTENT = 2; // 0x2
+ }
+
+ public abstract static class EmojiCompat.Config {
+ ctor protected EmojiCompat.Config(androidx.emoji2.text.EmojiCompat.MetadataRepoLoader);
+ method protected final androidx.emoji2.text.EmojiCompat.MetadataRepoLoader getMetadataRepoLoader();
+ method public androidx.emoji2.text.EmojiCompat.Config registerInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ method public androidx.emoji2.text.EmojiCompat.Config setEmojiSpanIndicatorColor(@ColorInt int);
+ method public androidx.emoji2.text.EmojiCompat.Config setEmojiSpanIndicatorEnabled(boolean);
+ method public androidx.emoji2.text.EmojiCompat.Config setGlyphChecker(androidx.emoji2.text.EmojiCompat.GlyphChecker);
+ method public androidx.emoji2.text.EmojiCompat.Config setMetadataLoadStrategy(int);
+ method public androidx.emoji2.text.EmojiCompat.Config setReplaceAll(boolean);
+ method public androidx.emoji2.text.EmojiCompat.Config setSpanFactory(androidx.emoji2.text.EmojiCompat.SpanFactory);
+ method public androidx.emoji2.text.EmojiCompat.Config setUseEmojiAsDefaultStyle(boolean);
+ method public androidx.emoji2.text.EmojiCompat.Config setUseEmojiAsDefaultStyle(boolean, java.util.List<java.lang.Integer!>?);
+ method public androidx.emoji2.text.EmojiCompat.Config unregisterInitCallback(androidx.emoji2.text.EmojiCompat.InitCallback);
+ }
+
+ public static interface EmojiCompat.GlyphChecker {
+ method public boolean hasGlyph(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+ }
+
+ public abstract static class EmojiCompat.InitCallback {
+ ctor public EmojiCompat.InitCallback();
+ method public void onFailed(Throwable?);
+ method public void onInitialized();
+ }
+
+ public static interface EmojiCompat.MetadataRepoLoader {
+ method public void load(androidx.emoji2.text.EmojiCompat.MetadataRepoLoaderCallback);
+ }
+
+ public abstract static class EmojiCompat.MetadataRepoLoaderCallback {
+ ctor public EmojiCompat.MetadataRepoLoaderCallback();
+ method public abstract void onFailed(Throwable?);
+ method public abstract void onLoaded(androidx.emoji2.text.MetadataRepo);
+ }
+
+ public static interface EmojiCompat.SpanFactory {
+ method @RequiresApi(19) public androidx.emoji2.text.EmojiSpan createSpan(androidx.emoji2.text.TypefaceEmojiRasterizer);
+ }
+
+ public class EmojiCompatInitializer implements androidx.startup.Initializer<java.lang.Boolean> {
+ ctor public EmojiCompatInitializer();
+ method public Boolean create(android.content.Context);
+ method public java.util.List<java.lang.Class<? extends androidx.startup.Initializer<?>>!> dependencies();
+ }
+
+ @RequiresApi(19) public abstract class EmojiSpan extends android.text.style.ReplacementSpan {
+ method public int getSize(android.graphics.Paint, CharSequence!, int, int, android.graphics.Paint.FontMetricsInt?);
+ method public final androidx.emoji2.text.TypefaceEmojiRasterizer getTypefaceRasterizer();
+ }
+
+ public class FontRequestEmojiCompatConfig extends androidx.emoji2.text.EmojiCompat.Config {
+ ctor public FontRequestEmojiCompatConfig(android.content.Context, androidx.core.provider.FontRequest);
+ method @Deprecated public androidx.emoji2.text.FontRequestEmojiCompatConfig setHandler(android.os.Handler?);
+ method public androidx.emoji2.text.FontRequestEmojiCompatConfig setLoadingExecutor(java.util.concurrent.Executor);
+ method public androidx.emoji2.text.FontRequestEmojiCompatConfig setRetryPolicy(androidx.emoji2.text.FontRequestEmojiCompatConfig.RetryPolicy?);
+ }
+
+ public static class FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy extends androidx.emoji2.text.FontRequestEmojiCompatConfig.RetryPolicy {
+ ctor public FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy(long);
+ method public long getRetryDelay();
+ }
+
+ public abstract static class FontRequestEmojiCompatConfig.RetryPolicy {
+ ctor public FontRequestEmojiCompatConfig.RetryPolicy();
+ method public abstract long getRetryDelay();
+ }
+
+ @AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
+ method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
+ method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
+ }
+
+ @AnyThread @RequiresApi(19) public class TypefaceEmojiRasterizer {
+ method public void draw(android.graphics.Canvas, float, float, android.graphics.Paint);
+ method public int getCodepointAt(int);
+ method public int getCodepointsLength();
+ method public int getHeight();
+ method public android.graphics.Typeface getTypeface();
+ method public int getWidth();
+ method public boolean isDefaultEmoji();
+ method public boolean isPreferredSystemRender();
+ }
+
+}
+
diff --git a/fragment/fragment/build.gradle b/fragment/fragment/build.gradle
index b751358..63b13fb 100644
--- a/fragment/fragment/build.gradle
+++ b/fragment/fragment/build.gradle
@@ -34,6 +34,7 @@
api("androidx.lifecycle:lifecycle-livedata-core:2.5.1")
api(projectOrArtifact(":lifecycle:lifecycle-viewmodel"))
api("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1")
+ implementation("androidx.profileinstaller:profileinstaller:1.2.1")
api("androidx.savedstate:savedstate:1.2.0")
api("androidx.annotation:annotation-experimental:1.0.0")
api(libs.kotlinStdlib)
diff --git a/glance/glance-appwidget/api/current.txt b/glance/glance-appwidget/api/current.txt
index 0bfd96b..fbdf3cf 100644
--- a/glance/glance-appwidget/api/current.txt
+++ b/glance/glance-appwidget/api/current.txt
@@ -19,6 +19,7 @@
public final class CheckBoxKt {
method @androidx.compose.runtime.Composable public static void CheckBox(boolean checked, androidx.glance.action.Action? onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.CheckBoxColors colors, optional int maxLines);
+ method @androidx.compose.runtime.Composable public static void CheckBox(boolean checked, kotlin.jvm.functions.Function0<kotlin.Unit> onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.CheckBoxColors colors, optional int maxLines);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.CheckBoxColors checkBoxColors(long checkedColor, long uncheckedColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.CheckBoxColors checkBoxColors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.CheckBoxColors checkBoxColors();
@@ -40,14 +41,12 @@
public abstract class GlanceAppWidget {
ctor public GlanceAppWidget(optional @LayoutRes int errorUiLayout);
- method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void Content();
- method public androidx.glance.session.SessionManager? getSessionManager();
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public void Content();
method public androidx.glance.appwidget.SizeMode getSizeMode();
method public androidx.glance.state.GlanceStateDefinition<?>? getStateDefinition();
method public suspend Object? onDelete(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? provideGlance(android.content.Context context, androidx.glance.GlanceId id, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public final suspend Object? update(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- property public androidx.glance.session.SessionManager? sessionManager;
+ method public final suspend Object? update(android.content.Context context, androidx.glance.GlanceId id, kotlin.coroutines.Continuation<? super kotlin.Unit>);
property public androidx.glance.appwidget.SizeMode sizeMode;
property public androidx.glance.state.GlanceStateDefinition<?>? stateDefinition;
}
@@ -65,7 +64,7 @@
method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public androidx.glance.GlanceId? getGlanceIdBy(android.content.Intent configurationIntent);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidget> Object? getGlanceIds(Class<T> provider, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.glance.GlanceId>>);
- method public <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> boolean requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback);
+ method public suspend <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> Object? requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback, optional kotlin.coroutines.Continuation<? super java.lang.Boolean>);
}
public abstract class GlanceAppWidgetReceiver extends android.appwidget.AppWidgetProvider {
@@ -101,6 +100,7 @@
public final class RadioButtonKt {
method @androidx.compose.runtime.Composable public static void RadioButton(boolean checked, androidx.glance.action.Action? onClick, optional androidx.glance.GlanceModifier modifier, optional boolean enabled, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.RadioButtonColors colors, optional int maxLines);
+ method @androidx.compose.runtime.Composable public static void RadioButton(boolean checked, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.glance.GlanceModifier modifier, optional boolean enabled, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.RadioButtonColors colors, optional int maxLines);
method public static androidx.glance.appwidget.RadioButtonColors radioButtonColors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method public static androidx.glance.appwidget.RadioButtonColors radioButtonColors(long checkedColor, long uncheckedColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.RadioButtonColors radioButtonColors();
@@ -129,6 +129,7 @@
public final class SwitchKt {
method @androidx.compose.runtime.Composable public static void Switch(boolean checked, androidx.glance.action.Action? onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.SwitchColors colors, optional int maxLines);
+ method @androidx.compose.runtime.Composable public static void Switch(boolean checked, kotlin.jvm.functions.Function0<kotlin.Unit> onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.SwitchColors colors, optional int maxLines);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.SwitchColors switchColors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.SwitchColors switchColors();
}
@@ -258,8 +259,8 @@
public abstract class GlanceTemplateAppWidget extends androidx.glance.appwidget.GlanceAppWidget {
ctor public GlanceTemplateAppWidget();
- method @androidx.compose.runtime.Composable public final void Content();
method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void TemplateContent();
+ method public final suspend Object? provideGlance(android.content.Context context, androidx.glance.GlanceId id, kotlin.coroutines.Continuation<?>);
property public androidx.glance.appwidget.SizeMode sizeMode;
property public androidx.glance.state.GlanceStateDefinition<?>? stateDefinition;
field public static final androidx.glance.appwidget.template.GlanceTemplateAppWidget.Companion Companion;
diff --git a/glance/glance-appwidget/api/public_plus_experimental_current.txt b/glance/glance-appwidget/api/public_plus_experimental_current.txt
index be1ed4e..041c8e4 100644
--- a/glance/glance-appwidget/api/public_plus_experimental_current.txt
+++ b/glance/glance-appwidget/api/public_plus_experimental_current.txt
@@ -19,6 +19,7 @@
public final class CheckBoxKt {
method @androidx.compose.runtime.Composable public static void CheckBox(boolean checked, androidx.glance.action.Action? onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.CheckBoxColors colors, optional int maxLines);
+ method @androidx.compose.runtime.Composable public static void CheckBox(boolean checked, kotlin.jvm.functions.Function0<kotlin.Unit> onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.CheckBoxColors colors, optional int maxLines);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.CheckBoxColors checkBoxColors(long checkedColor, long uncheckedColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.CheckBoxColors checkBoxColors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.CheckBoxColors checkBoxColors();
@@ -43,14 +44,12 @@
public abstract class GlanceAppWidget {
ctor public GlanceAppWidget(optional @LayoutRes int errorUiLayout);
- method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void Content();
- method public androidx.glance.session.SessionManager? getSessionManager();
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public void Content();
method public androidx.glance.appwidget.SizeMode getSizeMode();
method public androidx.glance.state.GlanceStateDefinition<?>? getStateDefinition();
method public suspend Object? onDelete(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? provideGlance(android.content.Context context, androidx.glance.GlanceId id, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public final suspend Object? update(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- property public androidx.glance.session.SessionManager? sessionManager;
+ method public final suspend Object? update(android.content.Context context, androidx.glance.GlanceId id, kotlin.coroutines.Continuation<? super kotlin.Unit>);
property public androidx.glance.appwidget.SizeMode sizeMode;
property public androidx.glance.state.GlanceStateDefinition<?>? stateDefinition;
}
@@ -68,7 +67,7 @@
method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public androidx.glance.GlanceId? getGlanceIdBy(android.content.Intent configurationIntent);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidget> Object? getGlanceIds(Class<T> provider, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.glance.GlanceId>>);
- method public <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> boolean requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback);
+ method public suspend <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> Object? requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback, optional kotlin.coroutines.Continuation<? super java.lang.Boolean>);
}
public abstract class GlanceAppWidgetReceiver extends android.appwidget.AppWidgetProvider {
@@ -109,6 +108,7 @@
public final class RadioButtonKt {
method @androidx.compose.runtime.Composable public static void RadioButton(boolean checked, androidx.glance.action.Action? onClick, optional androidx.glance.GlanceModifier modifier, optional boolean enabled, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.RadioButtonColors colors, optional int maxLines);
+ method @androidx.compose.runtime.Composable public static void RadioButton(boolean checked, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.glance.GlanceModifier modifier, optional boolean enabled, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.RadioButtonColors colors, optional int maxLines);
method public static androidx.glance.appwidget.RadioButtonColors radioButtonColors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method public static androidx.glance.appwidget.RadioButtonColors radioButtonColors(long checkedColor, long uncheckedColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.RadioButtonColors radioButtonColors();
@@ -143,6 +143,7 @@
public final class SwitchKt {
method @androidx.compose.runtime.Composable public static void Switch(boolean checked, androidx.glance.action.Action? onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.SwitchColors colors, optional int maxLines);
+ method @androidx.compose.runtime.Composable public static void Switch(boolean checked, kotlin.jvm.functions.Function0<kotlin.Unit> onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.SwitchColors colors, optional int maxLines);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.SwitchColors switchColors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.SwitchColors switchColors();
}
@@ -272,8 +273,8 @@
public abstract class GlanceTemplateAppWidget extends androidx.glance.appwidget.GlanceAppWidget {
ctor public GlanceTemplateAppWidget();
- method @androidx.compose.runtime.Composable public final void Content();
method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void TemplateContent();
+ method public final suspend Object? provideGlance(android.content.Context context, androidx.glance.GlanceId id, kotlin.coroutines.Continuation<?>);
property public androidx.glance.appwidget.SizeMode sizeMode;
property public androidx.glance.state.GlanceStateDefinition<?>? stateDefinition;
field public static final androidx.glance.appwidget.template.GlanceTemplateAppWidget.Companion Companion;
diff --git a/glance/glance-appwidget/api/restricted_current.txt b/glance/glance-appwidget/api/restricted_current.txt
index 0bfd96b..fbdf3cf 100644
--- a/glance/glance-appwidget/api/restricted_current.txt
+++ b/glance/glance-appwidget/api/restricted_current.txt
@@ -19,6 +19,7 @@
public final class CheckBoxKt {
method @androidx.compose.runtime.Composable public static void CheckBox(boolean checked, androidx.glance.action.Action? onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.CheckBoxColors colors, optional int maxLines);
+ method @androidx.compose.runtime.Composable public static void CheckBox(boolean checked, kotlin.jvm.functions.Function0<kotlin.Unit> onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.CheckBoxColors colors, optional int maxLines);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.CheckBoxColors checkBoxColors(long checkedColor, long uncheckedColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.CheckBoxColors checkBoxColors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.CheckBoxColors checkBoxColors();
@@ -40,14 +41,12 @@
public abstract class GlanceAppWidget {
ctor public GlanceAppWidget(optional @LayoutRes int errorUiLayout);
- method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void Content();
- method public androidx.glance.session.SessionManager? getSessionManager();
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public void Content();
method public androidx.glance.appwidget.SizeMode getSizeMode();
method public androidx.glance.state.GlanceStateDefinition<?>? getStateDefinition();
method public suspend Object? onDelete(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? provideGlance(android.content.Context context, androidx.glance.GlanceId id, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public final suspend Object? update(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- property public androidx.glance.session.SessionManager? sessionManager;
+ method public final suspend Object? update(android.content.Context context, androidx.glance.GlanceId id, kotlin.coroutines.Continuation<? super kotlin.Unit>);
property public androidx.glance.appwidget.SizeMode sizeMode;
property public androidx.glance.state.GlanceStateDefinition<?>? stateDefinition;
}
@@ -65,7 +64,7 @@
method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public androidx.glance.GlanceId? getGlanceIdBy(android.content.Intent configurationIntent);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidget> Object? getGlanceIds(Class<T> provider, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.glance.GlanceId>>);
- method public <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> boolean requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback);
+ method public suspend <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> Object? requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback, optional kotlin.coroutines.Continuation<? super java.lang.Boolean>);
}
public abstract class GlanceAppWidgetReceiver extends android.appwidget.AppWidgetProvider {
@@ -101,6 +100,7 @@
public final class RadioButtonKt {
method @androidx.compose.runtime.Composable public static void RadioButton(boolean checked, androidx.glance.action.Action? onClick, optional androidx.glance.GlanceModifier modifier, optional boolean enabled, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.RadioButtonColors colors, optional int maxLines);
+ method @androidx.compose.runtime.Composable public static void RadioButton(boolean checked, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.glance.GlanceModifier modifier, optional boolean enabled, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.RadioButtonColors colors, optional int maxLines);
method public static androidx.glance.appwidget.RadioButtonColors radioButtonColors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method public static androidx.glance.appwidget.RadioButtonColors radioButtonColors(long checkedColor, long uncheckedColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.RadioButtonColors radioButtonColors();
@@ -129,6 +129,7 @@
public final class SwitchKt {
method @androidx.compose.runtime.Composable public static void Switch(boolean checked, androidx.glance.action.Action? onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.SwitchColors colors, optional int maxLines);
+ method @androidx.compose.runtime.Composable public static void Switch(boolean checked, kotlin.jvm.functions.Function0<kotlin.Unit> onCheckedChange, optional androidx.glance.GlanceModifier modifier, optional String text, optional androidx.glance.text.TextStyle? style, optional androidx.glance.appwidget.SwitchColors colors, optional int maxLines);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.SwitchColors switchColors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
method @androidx.compose.runtime.Composable public static androidx.glance.appwidget.SwitchColors switchColors();
}
@@ -258,8 +259,8 @@
public abstract class GlanceTemplateAppWidget extends androidx.glance.appwidget.GlanceAppWidget {
ctor public GlanceTemplateAppWidget();
- method @androidx.compose.runtime.Composable public final void Content();
method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void TemplateContent();
+ method public final suspend Object? provideGlance(android.content.Context context, androidx.glance.GlanceId id, kotlin.coroutines.Continuation<?>);
property public androidx.glance.appwidget.SizeMode sizeMode;
property public androidx.glance.state.GlanceStateDefinition<?>? stateDefinition;
field public static final androidx.glance.appwidget.template.GlanceTemplateAppWidget.Companion Companion;
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ActionAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ActionAppWidget.kt
index 8cfbfc5..13498e5 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ActionAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ActionAppWidget.kt
@@ -28,11 +28,14 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import androidx.datastore.preferences.core.intPreferencesKey
import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.LocalContext
@@ -41,19 +44,15 @@
import androidx.glance.action.actionParametersOf
import androidx.glance.action.actionStartActivity
import androidx.glance.action.clickable
-import androidx.glance.action.toParametersKey
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
-import androidx.glance.appwidget.action.ActionCallback
-import androidx.glance.appwidget.action.actionRunCallback
import androidx.glance.appwidget.action.actionSendBroadcast
import androidx.glance.appwidget.action.actionStartActivity
import androidx.glance.appwidget.action.actionStartService
import androidx.glance.appwidget.appWidgetBackground
import androidx.glance.appwidget.cornerRadius
-import androidx.glance.appwidget.state.updateAppWidgetState
+import androidx.glance.appwidget.provideContent
import androidx.glance.color.ColorProvider
-import androidx.glance.currentState
import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
import androidx.glance.layout.ColumnScope
@@ -70,36 +69,46 @@
class ActionAppWidget : GlanceAppWidget() {
- @Composable
- override fun Content() {
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId,
+ ) = provideContent {
Column(
modifier = GlanceModifier.padding(R.dimen.external_padding).fillMaxSize()
.appWidgetBackground().cornerRadius(R.dimen.corner_radius),
verticalAlignment = Alignment.Vertical.CenterVertically,
horizontalAlignment = Alignment.Horizontal.CenterHorizontally
) {
- Row(GlanceModifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
- SelectableActionItem(label = "Activities", index = 0)
- SelectableActionItem(label = "Services", index = 1)
- SelectableActionItem(label = "Broadcasts", index = 2)
+ val pages = listOf("Activities", "Services", "Broadcasts")
+ var currentPage by remember { mutableStateOf(pages.first()) }
+ Row(
+ modifier = GlanceModifier.fillMaxWidth(),
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ for (page in pages) {
+ SelectableActionItem(
+ label = page,
+ active = page == currentPage,
+ onClick = { currentPage = page },
+ )
+ }
}
- when (currentState(SelectedItemKey) ?: 0) {
- 0 -> StartActivityActions()
- 1 -> StartServiceActions()
- 2 -> SendBroadcastActions()
- else -> throw IllegalArgumentException("Wrong index selected")
+ when (currentPage) {
+ "Activities" -> StartActivityActions()
+ "Services" -> StartServiceActions()
+ "Broadcasts" -> SendBroadcastActions()
+ else -> throw IllegalArgumentException("Unknown page")
}
}
}
}
-private val SelectedItemKey = intPreferencesKey("selectedItemKey")
private val StartMessageKey = ActionParameters.Key<String>("launchMessageKey")
@Composable
-private fun SelectableActionItem(label: String, index: Int) {
- val style = if (index == (currentState(SelectedItemKey) ?: 0)) {
+private fun SelectableActionItem(label: String, active: Boolean, onClick: () -> Unit) {
+ val style = if (active) {
TextStyle(
fontSize = 16.sp,
fontWeight = FontWeight.Bold,
@@ -119,15 +128,7 @@
Text(
text = label,
style = style,
- modifier = GlanceModifier
- .padding(8.dp)
- .clickable(
- actionRunCallback<UpdateAction>(
- actionParametersOf(
- SelectedItemKey.toParametersKey() to index
- )
- )
- )
+ modifier = GlanceModifier.padding(8.dp).clickable(onClick)
)
}
@@ -234,22 +235,6 @@
}
/**
- * Action to update the [SelectedItemKey] value whenever users clicks on text
- */
-class UpdateAction : ActionCallback {
- override suspend fun onAction(
- context: Context,
- glanceId: GlanceId,
- parameters: ActionParameters
- ) {
- updateAppWidgetState(context, glanceId) { state ->
- state[SelectedItemKey] = parameters[SelectedItemKey.toParametersKey()] ?: 0
- }
- ActionAppWidget().update(context, glanceId)
- }
-}
-
-/**
* Placeholder activity to launch via [actionStartActivity]
*/
class ActionDemoActivity : ComponentActivity() {
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/CompoundButtonAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/CompoundButtonAppWidget.kt
index c469cba..e6fbcbf 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/CompoundButtonAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/CompoundButtonAppWidget.kt
@@ -17,42 +17,37 @@
package androidx.glance.appwidget.demos
import android.content.Context
-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.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import androidx.datastore.preferences.core.Preferences
-import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
-import androidx.glance.action.ActionParameters
-import androidx.glance.action.actionParametersOf
import androidx.glance.appwidget.CheckBox
-import androidx.glance.appwidget.checkBoxColors
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.RadioButton
-import androidx.glance.appwidget.radioButtonColors
import androidx.glance.appwidget.SizeMode
import androidx.glance.appwidget.Switch
-import androidx.glance.appwidget.switchColors
-import androidx.glance.appwidget.selectableGroup
-import androidx.glance.appwidget.action.ActionCallback
-import androidx.glance.appwidget.action.ToggleableStateKey
-import androidx.glance.appwidget.action.actionRunCallback
import androidx.glance.appwidget.appWidgetBackground
+import androidx.glance.appwidget.checkBoxColors
import androidx.glance.appwidget.cornerRadius
-import androidx.glance.appwidget.state.updateAppWidgetState
+import androidx.glance.appwidget.radioButtonColors
+import androidx.glance.appwidget.selectableGroup
+import androidx.glance.appwidget.provideContent
+import androidx.glance.appwidget.switchColors
import androidx.glance.background
import androidx.glance.color.ColorProvider
-import androidx.glance.currentState
import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
import androidx.glance.layout.Row
import androidx.glance.layout.fillMaxSize
import androidx.glance.layout.fillMaxWidth
-import androidx.glance.layout.padding
import androidx.glance.layout.height
+import androidx.glance.layout.padding
import androidx.glance.text.FontStyle
import androidx.glance.text.FontWeight
import androidx.glance.text.TextStyle
@@ -61,18 +56,10 @@
override val sizeMode: SizeMode = SizeMode.Exact
- enum class Buttons {
- CHECK_1, CHECK_2, CHECK_3, SWITCH_1, SWITCH_2, RADIO_1, RADIO_2, RADIO_3;
- val prefsKey = booleanPreferencesKey(name)
- }
-
- enum class Radios {
- RADIO_1, RADIO_2, RADIO_3;
- val prefsKey = booleanPreferencesKey(name)
- }
-
- @Composable
- override fun Content() {
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId,
+ ) = provideContent {
Column(
modifier = GlanceModifier.fillMaxSize().background(Color.LightGray)
.padding(R.dimen.external_padding).cornerRadius(R.dimen.corner_radius)
@@ -88,29 +75,22 @@
)
val fillModifier = GlanceModifier.fillMaxWidth()
- val prefs = currentState<Preferences>()
- val checkbox1Checked = prefs[Buttons.CHECK_1.prefsKey] ?: false
- val checkbox2Checked = prefs[Buttons.CHECK_2.prefsKey] ?: false
- val checkbox3Checked = prefs[Buttons.CHECK_3.prefsKey] ?: false
- val switch1Checked = prefs[Buttons.SWITCH_1.prefsKey] ?: false
- val switch2Checked = prefs[Buttons.SWITCH_2.prefsKey] ?: false
- val radio1Checked = prefs[Buttons.RADIO_1.prefsKey] ?: false
- val radio2Checked = prefs[Buttons.RADIO_2.prefsKey] ?: false
- val radio3Checked = prefs[Buttons.RADIO_3.prefsKey] ?: false
+ var checkbox1Checked by remember { mutableStateOf(false) }
+ var checkbox2Checked by remember { mutableStateOf(false) }
+ var checkbox3Checked by remember { mutableStateOf(false) }
+ var switch1Checked by remember { mutableStateOf(false) }
+ var switch2Checked by remember { mutableStateOf(false) }
+ var radioChecked by remember { mutableStateOf(0) }
CheckBox(
checked = checkbox1Checked,
- onCheckedChange = actionRunCallback<ToggleAction>(
- actionParametersOf(EventTargetKey to Buttons.CHECK_1.name)
- ),
+ onCheckedChange = { checkbox1Checked = !checkbox1Checked },
text = "Checkbox 1",
modifier = GlanceModifier.height(56.dp).padding(bottom = 24.dp),
)
CheckBox(
checked = checkbox2Checked,
- onCheckedChange = actionRunCallback<ToggleAction>(
- actionParametersOf(EventTargetKey to Buttons.CHECK_2.name)
- ),
+ onCheckedChange = { checkbox2Checked = !checkbox2Checked },
text = "Checkbox 2",
style = textStyle,
modifier = fillModifier,
@@ -121,16 +101,12 @@
)
CheckBox(
checked = checkbox3Checked,
- onCheckedChange = actionRunCallback<ToggleAction>(
- actionParametersOf(EventTargetKey to Buttons.CHECK_3.name)
- ),
+ onCheckedChange = { checkbox3Checked = !checkbox2Checked },
text = "Checkbox 3",
)
Switch(
checked = switch1Checked,
- onCheckedChange = actionRunCallback<ToggleAction>(
- actionParametersOf(EventTargetKey to Buttons.SWITCH_1.name)
- ),
+ onCheckedChange = { switch1Checked = !switch1Checked },
text = "Switch 1",
colors = switchColors(
checkedThumbColor = ColorProvider(day = Color.Red, night = Color.Cyan),
@@ -141,19 +117,15 @@
)
Switch(
checked = switch2Checked,
- onCheckedChange = actionRunCallback<ToggleAction>(
- actionParametersOf(EventTargetKey to Buttons.SWITCH_2.name)
- ),
+ onCheckedChange = { switch2Checked = !switch2Checked },
text = "Switch 2",
style = textStyle,
modifier = fillModifier
)
Column(modifier = fillModifier.selectableGroup()) {
RadioButton(
- checked = radio1Checked,
- onClick = actionRunCallback<RadioAction>(
- actionParametersOf(EventTargetKey to Radios.RADIO_1.name)
- ),
+ checked = radioChecked == 0,
+ onClick = { radioChecked = 0 },
text = "Radio 1",
colors = radioButtonColors(
checkedColor = ColorProvider(day = Color.Red, night = Color.Cyan),
@@ -161,10 +133,8 @@
),
)
RadioButton(
- checked = radio2Checked,
- onClick = actionRunCallback<RadioAction>(
- actionParametersOf(EventTargetKey to Radios.RADIO_2.name)
- ),
+ checked = radioChecked == 1,
+ onClick = { radioChecked = 1 },
text = "Radio 2",
colors = radioButtonColors(
checkedColor = ColorProvider(day = Color.Cyan, night = Color.Yellow),
@@ -172,26 +142,24 @@
),
)
RadioButton(
- checked = radio3Checked,
- onClick = actionRunCallback<RadioAction>(
- actionParametersOf(EventTargetKey to Radios.RADIO_3.name)
- ),
+ checked = radioChecked == 2,
+ onClick = { radioChecked = 2 },
text = "Radio 3",
)
}
Row(modifier = fillModifier.selectableGroup()) {
RadioButton(
- checked = radio1Checked,
+ checked = radioChecked == 0,
onClick = null,
text = "Radio 1",
)
RadioButton(
- checked = radio2Checked,
+ checked = radioChecked == 1,
onClick = null,
text = "Radio 2",
)
RadioButton(
- checked = radio3Checked,
+ checked = radioChecked == 2,
onClick = null,
text = "Radio 3",
)
@@ -200,45 +168,6 @@
}
}
-class ToggleAction : ActionCallback {
- override suspend fun onAction(
- context: Context,
- glanceId: GlanceId,
- parameters: ActionParameters,
- ) {
- val target = requireNotNull(parameters[EventTargetKey]) {
- "Add event target to parameters in order to update the view state."
- }.let { CompoundButtonAppWidget.Buttons.valueOf(it) }
- val checked = requireNotNull(parameters[ToggleableStateKey]) {
- "This action should only be called in response to toggleable events"
- }
-
- updateAppWidgetState(context, glanceId) { state ->
- state[target.prefsKey] = checked
- }
- CompoundButtonAppWidget().update(context, glanceId)
- }
-}
-
-private val EventTargetKey = ActionParameters.Key<String>("EventTarget")
-
-class RadioAction : ActionCallback {
- override suspend fun onAction(
- context: Context,
- glanceId: GlanceId,
- parameters: ActionParameters,
- ) {
- val target = requireNotNull(parameters[EventTargetKey]) {
- "Add event target to parameters in order to update the view state."
- }.let { CompoundButtonAppWidget.Radios.valueOf(it) }
-
- updateAppWidgetState(context, glanceId) { state ->
- CompoundButtonAppWidget.Radios.values().forEach { state[it.prefsKey] = it == target }
- }
- CompoundButtonAppWidget().update(context, glanceId)
- }
-}
-
class CompoundButtonAppWidgetReceiver : GlanceAppWidgetReceiver() {
override val glanceAppWidget = CompoundButtonAppWidget()
}
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/DefaultColorsAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/DefaultColorsAppWidget.kt
index 56bb8f4..4a49342 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/DefaultColorsAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/DefaultColorsAppWidget.kt
@@ -22,20 +22,22 @@
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
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.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.glance.Button
import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.GlanceTheme
-import androidx.glance.action.ActionParameters
import androidx.glance.appwidget.CheckBox
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.RadioButton
import androidx.glance.appwidget.Switch
-import androidx.glance.appwidget.action.ActionCallback
-import androidx.glance.appwidget.action.actionRunCallback
+import androidx.glance.appwidget.provideContent
import androidx.glance.background
import androidx.glance.layout.Column
import androidx.glance.layout.Row
@@ -50,18 +52,21 @@
* A demo showing how to construct a widget with [GlanceTheme]. It will use Material 3 colors and
* when supported, it will use the dynamic color theme.
*/
-class DefaultColorsAppWidget(private val theme: DemoColorScheme.Scheme) : GlanceAppWidget() {
-
- @Composable
- override fun Content() {
- val colors = when (theme) {
- DemoColorScheme.Scheme.SystemM3 -> GlanceTheme.colors
- DemoColorScheme.Scheme.CustomM3 -> ColorProviders(
+class DefaultColorsAppWidget : GlanceAppWidget() {
+ enum class Scheme { SystemM3, CustomM3, CustomM2 }
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId
+ ) = provideContent {
+ var currentScheme by remember { mutableStateOf(Scheme.SystemM3) }
+ val colors = when (currentScheme) {
+ Scheme.SystemM3 -> GlanceTheme.colors
+ Scheme.CustomM3 -> ColorProviders(
light = DemoColorScheme.LightColors,
dark = DemoColorScheme.DarkColors
)
- DemoColorScheme.Scheme.CustomM2 -> ColorProviders(
+ Scheme.CustomM2 -> ColorProviders(
light = DemoColorScheme.SampleM2ColorsLight,
dark = DemoColorScheme.SampleM2ColorsDark
)
@@ -75,12 +80,26 @@
) {
Button(
text = "Theme: $currentScheme",
- onClick = actionRunCallback<ChangeThemeCallback>(),
+ onClick = {
+ currentScheme = when (currentScheme) {
+ Scheme.SystemM3 -> Scheme.CustomM3
+ Scheme.CustomM3 -> Scheme.CustomM2
+ Scheme.CustomM2 -> Scheme.SystemM3
+ }
+ },
modifier = GlanceModifier.padding(2.dp)
)
Row(GlanceModifier.padding(top = 8.dp)) {
- CheckBox(checked = false, onCheckedChange = doNothingAction, text = "Unchecked")
- CheckBox(checked = true, onCheckedChange = doNothingAction, text = "Checked")
+ CheckBox(
+ checked = false,
+ onCheckedChange = doNothingAction,
+ text = "Unchecked"
+ )
+ CheckBox(
+ checked = true,
+ onCheckedChange = doNothingAction,
+ text = "Checked"
+ )
}
Row(modifier = GlanceModifier.padding(bottom = 8.dp)) {
@@ -108,9 +127,9 @@
)
Column {
with(GlanceTheme.colors) {
- // Using nested column because Glance uses statically generated layouts. Our Rows/Columns
- // can only support a fixed number of children, so nesting is a workaround. The usual perf
- // caveats for nested views still apply.
+ // Using nested column because Glance uses statically generated layouts. Our
+ // Rows/Columns can only support a fixed number of children, so nesting is a workaround.
+ // The usual perf caveats for nested views still apply.
Column(modifier = GlanceModifier.background(Color.Transparent)) {
Text(text = "Primary / OnPrimary", fg = onPrimary, bg = primary)
Text(
@@ -152,30 +171,14 @@
private val doNothingAction = null
-class ChangeThemeCallback : ActionCallback {
- override suspend fun onAction(
- context: Context,
- glanceId: GlanceId,
- parameters: ActionParameters
- ) {
- colorSchemeIndex = (colorSchemeIndex + 1) % DemoColorScheme.Scheme.values().size
- DefaultColorsAppWidget(currentScheme).update(context, glanceId)
- }
-}
-
-private var colorSchemeIndex = 0
-private val currentScheme: DemoColorScheme.Scheme
- get() = DemoColorScheme.Scheme.values()[colorSchemeIndex]
-
class DefaultColorsAppWidgetReceiver : GlanceAppWidgetReceiver() {
- override val glanceAppWidget = DefaultColorsAppWidget(currentScheme)
+ override val glanceAppWidget = DefaultColorsAppWidget()
}
/**
* Color scheme generated using https://m3.material.io/theme-builder#/custom
*/
object DemoColorScheme {
- enum class Scheme { SystemM3, CustomM3, CustomM2 }
val md_theme_light_primary = Color(0xFF026E00)
val md_theme_light_onPrimary = Color(0xFFFFFFFF)
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/DefaultStateAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/DefaultStateAppWidget.kt
index 360c3de..fe9dbc3 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/DefaultStateAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/DefaultStateAppWidget.kt
@@ -36,6 +36,7 @@
class DefaultStateAppWidget : GlanceAppWidget() {
@Composable
+ @Deprecated("")
override fun Content() {
// Get the current stored value for the given Key.
val count = currentState(CountClicksKey) ?: 0
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ErrorUiAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ErrorUiAppWidget.kt
index 68ec3b5..bb69260 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ErrorUiAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ErrorUiAppWidget.kt
@@ -16,16 +16,18 @@
package androidx.glance.appwidget.demos
-import androidx.compose.runtime.Composable
+import android.content.Context
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.LocalSize
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.SizeMode
import androidx.glance.appwidget.background
+import androidx.glance.appwidget.provideContent
import androidx.glance.layout.Alignment
import androidx.glance.layout.Box
import androidx.glance.layout.Column
@@ -42,8 +44,10 @@
class ErrorUiAppWidget : GlanceAppWidget() {
override val sizeMode: SizeMode = SizeMode.Exact
- @Composable
- override fun Content() {
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId
+ ) = provideContent {
val size = LocalSize.current
Column(
modifier = GlanceModifier.fillMaxSize()
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ExactAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ExactAppWidget.kt
index d257a49..9f4b92c 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ExactAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ExactAppWidget.kt
@@ -16,16 +16,17 @@
package androidx.glance.appwidget.demos
-import androidx.compose.runtime.Composable
+import android.content.Context
import androidx.compose.ui.graphics.Color
+import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
-import androidx.glance.LocalContext
import androidx.glance.LocalSize
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.SizeMode
import androidx.glance.appwidget.background
import androidx.glance.appwidget.cornerRadius
+import androidx.glance.appwidget.provideContent
import androidx.glance.color.ColorProvider
import androidx.glance.layout.Column
import androidx.glance.layout.fillMaxSize
@@ -39,9 +40,10 @@
class ExactAppWidget : GlanceAppWidget() {
override val sizeMode: SizeMode = SizeMode.Exact
- @Composable
- override fun Content() {
- val context = LocalContext.current
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId
+ ) = provideContent {
Column(
modifier = GlanceModifier
.fillMaxSize()
@@ -62,6 +64,9 @@
val width = dec.format(size.width.value)
val height = dec.format(size.height.value)
Text("Current layout: ${width}dp x ${height}dp")
+ for (i in 0 until 20) {
+ Text("Text $i")
+ }
}
}
}
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt
index 1d16188..fddee1b 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ImageAppWidget.kt
@@ -16,6 +16,7 @@
package androidx.glance.appwidget.demos
+import android.content.Context
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@@ -25,6 +26,7 @@
import androidx.compose.ui.unit.dp
import androidx.glance.Button
import androidx.glance.ColorFilter
+import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.Image
import androidx.glance.ImageProvider
@@ -32,6 +34,7 @@
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.SizeMode
+import androidx.glance.appwidget.provideContent
import androidx.glance.background
import androidx.glance.color.ColorProvider
import androidx.glance.layout.Alignment
@@ -43,19 +46,18 @@
import androidx.glance.layout.fillMaxWidth
import androidx.glance.layout.padding
import androidx.glance.layout.size
-import androidx.glance.session.GlanceSessionManager
import androidx.glance.text.Text
/**
* Sample AppWidget that showcase the [ContentScale] options for [Image]
*/
class ImageAppWidget : GlanceAppWidget() {
-
override val sizeMode: SizeMode = SizeMode.Exact
- override val sessionManager = GlanceSessionManager
- @Composable
- override fun Content() {
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId
+ ) = provideContent {
var type by remember { mutableStateOf(ContentScale.Fit) }
Column(modifier = GlanceModifier.fillMaxSize().padding(8.dp)) {
Header()
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ProgressIndicatorAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ProgressIndicatorAppWidget.kt
index 2613fb0..3f5283a 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ProgressIndicatorAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ProgressIndicatorAppWidget.kt
@@ -16,14 +16,16 @@
package androidx.glance.appwidget.demos
-import androidx.compose.runtime.Composable
+import android.content.Context
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
+import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.appwidget.CircularProgressIndicator
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.LinearProgressIndicator
+import androidx.glance.appwidget.provideContent
import androidx.glance.background
import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
@@ -34,11 +36,13 @@
import androidx.glance.unit.ColorProvider
class ProgressIndicatorAppWidget : GlanceAppWidget() {
-
- @Composable
- override fun Content() {
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId
+ ) = provideContent {
Column(
- modifier = GlanceModifier.fillMaxSize().background(R.color.default_widget_background),
+ modifier = GlanceModifier.fillMaxSize()
+ .background(R.color.default_widget_background),
verticalAlignment = Alignment.CenterVertically,
horizontalAlignment = Alignment.CenterHorizontally
) {
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ResizingAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ResizingAppWidget.kt
index 9be215f..b801043 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ResizingAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ResizingAppWidget.kt
@@ -16,13 +16,18 @@
package androidx.glance.appwidget.demos
-import androidx.compose.runtime.Composable
+import android.content.Context
+import android.util.Log
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
+import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
+import androidx.glance.ImageProvider
+import androidx.glance.action.clickable
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.SizeMode
+import androidx.glance.appwidget.provideContent
import androidx.glance.background
import androidx.glance.layout.Column
import androidx.glance.layout.Row
@@ -36,28 +41,24 @@
import androidx.glance.text.TextDecoration
import androidx.glance.text.TextStyle
-import androidx.glance.action.clickable
-import androidx.glance.ImageProvider
-import android.content.Context
-import androidx.glance.appwidget.action.actionRunCallback
-import androidx.glance.GlanceId
-import androidx.glance.action.ActionParameters
-import androidx.glance.appwidget.action.ActionCallback
-
class ResizingAppWidget : GlanceAppWidget() {
override val sizeMode: SizeMode = SizeMode.Single
- @Composable
- override fun Content() {
- Column(modifier = GlanceModifier.fillMaxSize().padding(16.dp).background(Color.LightGray)) {
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId
+ ) = provideContent {
+ Column(
+ modifier = GlanceModifier.fillMaxSize().padding(16.dp).background(Color.LightGray)
+ ) {
Row(modifier = GlanceModifier.fillMaxWidth()) {
Text(
"first",
modifier = GlanceModifier
.width(50.dp)
.background(Color(0xFFBBBBBB))
- .clickable(actionRunCallback<NoopAction>()),
+ .clickable { Log.i("GlanceAppWidget", "first clicked") },
style = TextStyle(textAlign = TextAlign.Start)
)
Text(
@@ -67,14 +68,15 @@
textAlign = TextAlign.Center,
),
modifier = GlanceModifier.defaultWeight().height(50.dp)
+ .clickable { Log.i("GlanceAppWidget", "second clicked") },
)
Text(
"third",
modifier = GlanceModifier
.width(50.dp)
.background(Color(0xFFBBBBBB))
- .clickable(actionRunCallback<NoopAction>()),
- style = TextStyle(textAlign = TextAlign.End)
+ .clickable { Log.i("GlanceAppWidget", "third clicked") },
+ style = TextStyle(textAlign = TextAlign.End)
)
}
Text(
@@ -82,7 +84,7 @@
modifier = GlanceModifier
.defaultWeight()
.fillMaxWidth()
- .clickable(actionRunCallback<NoopAction>())
+ .clickable { Log.i("GlanceAppWidget", "middle clicked") }
.background(ImageProvider(R.drawable.compose)),
style = TextStyle(textAlign = TextAlign.Center)
)
@@ -119,14 +121,4 @@
class ResizingAppWidgetReceiver : GlanceAppWidgetReceiver() {
override val glanceAppWidget: GlanceAppWidget = ResizingAppWidget()
-}
-
-class NoopAction : ActionCallback {
- override suspend fun onAction(
- context: Context,
- glanceId: GlanceId,
- parameters: ActionParameters
- ) {
- android.util.Log.e("GlanceAppWidget", "Action called")
- }
}
\ No newline at end of file
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ResponsiveAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ResponsiveAppWidget.kt
index a801ca0..cdea0ef 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ResponsiveAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ResponsiveAppWidget.kt
@@ -27,14 +27,13 @@
import androidx.glance.ButtonColors
import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
+import androidx.glance.LocalContext
import androidx.glance.LocalSize
import androidx.glance.action.ActionParameters
-import androidx.glance.action.actionParametersOf
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.SizeMode
-import androidx.glance.appwidget.action.ActionCallback
-import androidx.glance.appwidget.action.actionRunCallback
+import androidx.glance.appwidget.provideContent
import androidx.glance.background
import androidx.glance.layout.Alignment
import androidx.glance.layout.Box
@@ -68,8 +67,10 @@
setOf(SMALL_BOX, BIG_BOX, ROW, LARGE_ROW, COLUMN, LARGE_COLUMN)
)
- @Composable
- override fun Content() {
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId
+ ) = provideContent {
// Content will be called for each of the provided sizes
when (LocalSize.current) {
COLUMN -> ResponsiveColumn(numItems = 3)
@@ -79,7 +80,8 @@
SMALL_BOX -> ResponsiveBox(numItems = 1)
BIG_BOX -> ResponsiveBox(numItems = 3)
VERY_BIG_BOX -> ResponsiveBox(numItems = 5)
- else -> throw IllegalArgumentException("Invalid size not matching the provided ones")
+ else ->
+ throw IllegalArgumentException("Invalid size not matching the provided ones")
}
}
}
@@ -151,6 +153,7 @@
textStyle: TextStyle? = null
) {
Box(modifier = modifier) {
+ val context = LocalContext.current
Button(
text = text,
modifier = GlanceModifier.fillMaxSize().padding(8.dp).background(color),
@@ -159,31 +162,19 @@
contentColor = ColorProvider(Color.White)
),
style = textStyle ?: TextStyle(textAlign = TextAlign.Center),
- onClick = actionRunCallback<ResponsiveAction>(
- actionParametersOf(
- ItemClickedKey to text
- )
- )
+ onClick = {
+ Handler(context.mainLooper).post {
+ Toast.makeText(
+ context,
+ "Item clicked: $text",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
)
}
}
-class ResponsiveAction : ActionCallback {
- override suspend fun onAction(
- context: Context,
- glanceId: GlanceId,
- parameters: ActionParameters
- ) {
- Handler(context.mainLooper).post {
- Toast.makeText(
- context,
- "Item clicked: ${parameters[ItemClickedKey]}",
- Toast.LENGTH_SHORT
- ).show()
- }
- }
-}
-
class ResponsiveAppWidgetReceiver : GlanceAppWidgetReceiver() {
override val glanceAppWidget: GlanceAppWidget = ResponsiveAppWidget()
}
\ No newline at end of file
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ScrollableAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ScrollableAppWidget.kt
index 71b2300..57c941fa 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ScrollableAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ScrollableAppWidget.kt
@@ -25,34 +25,30 @@
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
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.graphics.Color
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.glance.Button
import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.LocalContext
import androidx.glance.LocalSize
-import androidx.glance.action.ActionParameters
-import androidx.glance.action.actionParametersOf
import androidx.glance.action.clickable
import androidx.glance.appwidget.CheckBox
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.SizeMode
-import androidx.glance.appwidget.action.ActionCallback
-import androidx.glance.appwidget.action.ToggleableStateKey
-import androidx.glance.appwidget.action.actionRunCallback
import androidx.glance.appwidget.action.actionStartActivity
-import androidx.glance.appwidget.demos.ScrollableAppWidget.Companion.CheckboxKey
import androidx.glance.appwidget.lazy.GridCells
import androidx.glance.appwidget.lazy.LazyColumn
import androidx.glance.appwidget.lazy.itemsIndexed
-import androidx.glance.appwidget.state.updateAppWidgetState
+import androidx.glance.appwidget.provideContent
import androidx.glance.background
-import androidx.glance.currentState
import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
import androidx.glance.layout.Row
@@ -75,18 +71,19 @@
private val singleColumn = DpSize(100.dp, 48.dp)
private val doubleColumn = DpSize(200.dp, 48.dp)
private val tripleColumn = DpSize(300.dp, 48.dp)
-
- val CheckboxKey = booleanPreferencesKey("checkbox")
}
override val sizeMode: SizeMode = SizeMode.Responsive(
setOf(singleColumn, doubleColumn, tripleColumn)
)
- @Composable
- override fun Content() {
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId
+ ) = provideContent {
Column(
- modifier = GlanceModifier.fillMaxSize().background(R.color.default_widget_background)
+ modifier = GlanceModifier.fillMaxSize()
+ .background(R.color.default_widget_background)
) {
Text(
text = "Fix header",
@@ -111,6 +108,7 @@
@Composable
private fun ScrollColumn(modifier: GlanceModifier) {
+ val context = LocalContext.current
LazyColumn(modifier) {
item {
SectionHeading(
@@ -160,11 +158,15 @@
modifier = GlanceModifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 8.dp)
- .clickable(
- actionRunCallback<LogItemClickAction>(
- actionParametersOf(ClickedItemKey to index)
- )
- )
+ .clickable {
+ Handler(context.mainLooper).post {
+ Toast.makeText(
+ context,
+ "Click from list item $index",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
)
}
item {
@@ -174,9 +176,10 @@
)
}
item {
+ var checked by remember { mutableStateOf(false) }
CheckBox(
- checked = currentState(CheckboxKey) ?: false,
- onCheckedChange = actionRunCallback<ListToggleAction>(),
+ checked = checked,
+ onCheckedChange = { checked = !checked },
text = "Checkbox"
)
}
@@ -214,38 +217,6 @@
}
}
-/** Work executed when [ScrollableAppWidget] list's item is clicked. */
-class LogItemClickAction : ActionCallback {
- override suspend fun onAction(
- context: Context,
- glanceId: GlanceId,
- parameters: ActionParameters
- ) {
- Handler(context.mainLooper).post {
- Toast.makeText(
- context,
- "Click from list item ${parameters[ClickedItemKey]}",
- Toast.LENGTH_SHORT
- ).show()
- }
- }
-}
-
-class ListToggleAction : ActionCallback {
- override suspend fun onAction(
- context: Context,
- glanceId: GlanceId,
- parameters: ActionParameters
- ) {
- updateAppWidgetState(context, glanceId) { state ->
- state[CheckboxKey] = parameters[ToggleableStateKey] ?: false
- }
- ScrollableAppWidget().update(context, glanceId)
- }
-}
-
-private val ClickedItemKey = ActionParameters.Key<Int>("ClickedItemKey")
-
class ScrollableAppWidgetReceiver : GlanceAppWidgetReceiver() {
override val glanceAppWidget: GlanceAppWidget = ScrollableAppWidget()
}
\ No newline at end of file
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/VerticalGridAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/VerticalGridAppWidget.kt
index c4f2a90..9c4f452 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/VerticalGridAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/VerticalGridAppWidget.kt
@@ -16,11 +16,13 @@
package androidx.glance.appwidget.demos
+import android.content.Context
import android.os.Build
import android.content.Intent
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
import androidx.glance.Button
+import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.LocalContext
import androidx.glance.appwidget.GlanceAppWidget
@@ -31,6 +33,7 @@
import androidx.glance.appwidget.lazy.GridCells
import androidx.glance.appwidget.lazy.LazyVerticalGrid
import androidx.glance.appwidget.lazy.itemsIndexed
+import androidx.glance.appwidget.provideContent
import androidx.glance.background
import androidx.glance.layout.Alignment
import androidx.glance.layout.Row
@@ -41,9 +44,11 @@
class VerticalGridAppWidget : GlanceAppWidget() {
- @Composable
- override fun Content() {
- var gridCells = if (Build.VERSION.SDK_INT >= 31) {
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId
+ ) = provideContent {
+ val gridCells = if (Build.VERSION.SDK_INT >= 31) {
GridCells.Adaptive(100.dp)
} else {
GridCells.Fixed(3)
diff --git a/glance/glance-appwidget/integration-tests/macrobenchmark-target/src/main/java/androidx/glance/appwidget/macrobenchmark/target/BasicAppWidget.kt b/glance/glance-appwidget/integration-tests/macrobenchmark-target/src/main/java/androidx/glance/appwidget/macrobenchmark/target/BasicAppWidget.kt
index b12aaca..e3d1d31 100644
--- a/glance/glance-appwidget/integration-tests/macrobenchmark-target/src/main/java/androidx/glance/appwidget/macrobenchmark/target/BasicAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/macrobenchmark-target/src/main/java/androidx/glance/appwidget/macrobenchmark/target/BasicAppWidget.kt
@@ -16,18 +16,17 @@
package androidx.glance.appwidget.macrobenchmark.target
-import androidx.compose.runtime.Composable
-import androidx.datastore.preferences.core.Preferences
+import android.content.Context
+import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.LocalSize
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.SizeMode
import androidx.glance.appwidget.Tracing
-import androidx.glance.currentState
+import androidx.glance.appwidget.provideContent
import androidx.glance.layout.Column
import androidx.glance.layout.fillMaxSize
-import androidx.glance.session.GlanceSessionManager
import androidx.glance.text.Text
import kotlin.math.roundToInt
@@ -38,26 +37,23 @@
}
override val sizeMode: SizeMode = SizeMode.Single
- @Composable
- override fun Content() {
- val size = LocalSize.current
- // Even though this widget does not use it, accessing state will ensure that this
- // is recomposed every time state updates, which is useful for testing.
- currentState<Preferences>()
- Column(
- modifier = GlanceModifier.fillMaxSize(),
- ) {
- Text(
- " Current size: ${size.width.value.roundToInt()} dp x " +
- "${size.height.value.roundToInt()} dp"
- )
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId,
+ ) {
+ provideContent {
+ Column(GlanceModifier.fillMaxSize()) {
+ val size = LocalSize.current
+ Text(
+ " Current size: ${size.width.value.roundToInt()} dp x " +
+ "${size.height.value.roundToInt()} dp"
+ )
+ }
}
}
}
-class BasicAppWidgetWithSession : BasicAppWidget() {
- override val sessionManager = GlanceSessionManager
-}
+class BasicAppWidgetWithSession : BasicAppWidget()
class BasicAppWidgetReceiver : GlanceAppWidgetReceiver() {
override val glanceAppWidget: GlanceAppWidget = BasicAppWidget()
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
index de35f2f..277f268 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
+++ b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
@@ -29,7 +29,6 @@
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.core.view.children
-import androidx.glance.session.GlanceSessionManager
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.rules.ActivityScenarioRule
@@ -54,7 +53,6 @@
class AppWidgetHostRule(
private var mPortraitSize: DpSize = DpSize(200.dp, 300.dp),
private var mLandscapeSize: DpSize = DpSize(300.dp, 200.dp),
- private var useSessionManager: Boolean = false,
) : TestRule {
val portraitSize: DpSize
@@ -102,8 +100,6 @@
override fun evaluate() {
WorkManagerTestInitHelper.initializeTestWorkManager(mContext)
- TestGlanceAppWidget.sessionManager =
- if (useSessionManager) GlanceSessionManager else null
mInnerRules.apply(base, description).evaluate()
stopHost()
}
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetManagerTest.kt b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetManagerTest.kt
index 3f33bc5..ddfd0bfa 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetManagerTest.kt
+++ b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetManagerTest.kt
@@ -23,12 +23,15 @@
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import androidx.test.uiautomator.UiSelector
import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.test.runTest
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
+@OptIn(ExperimentalCoroutinesApi::class)
@SdkSuppress(minSdkVersion = 29)
@MediumTest
class GlanceAppWidgetManagerTest {
@@ -85,34 +88,28 @@
}
@Test
- fun pinAppWidget() {
+ fun pinAppWidget() = runTest {
val text = "Something"
TestGlanceAppWidget.uiDefinition = {
Text(text)
}
- mHostRule.onHostActivity { activity ->
- val manager = GlanceAppWidgetManager(activity)
-
- val result = manager.requestPinGlanceAppWidget(
- TestGlanceAppWidgetReceiver::class.java,
- preview = TestGlanceAppWidget
- )
- assertThat(result).isTrue()
+ val result = GlanceAppWidgetManager(context).requestPinGlanceAppWidget(
+ TestGlanceAppWidgetReceiver::class.java,
+ preview = TestGlanceAppWidget
+ )
+ assertThat(result).isTrue()
+ mHostRule.onHostActivity {
assertThat(mHostRule.device.findObject(UiSelector().text(text)).exists())
}
}
@Test
- fun pinInvalidAppWidget() {
- mHostRule.onHostActivity { activity ->
- val manager = GlanceAppWidgetManager(activity)
-
- val result = manager.requestPinGlanceAppWidget(
- DummyGlanceAppWidgetReceiver::class.java
- )
- assertThat(result).isFalse()
- }
+ fun pinInvalidAppWidget() = runTest {
+ val result = GlanceAppWidgetManager(context).requestPinGlanceAppWidget(
+ DummyGlanceAppWidgetReceiver::class.java,
+ )
+ assertThat(result).isFalse()
}
@Test
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverTest.kt b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverTest.kt
index 1358257d..0dca420 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverTest.kt
+++ b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverTest.kt
@@ -37,8 +37,10 @@
import android.widget.TextView
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
+import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.DpSize
@@ -104,18 +106,18 @@
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.collectIndexed
+import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runTest
+import org.junit.After
import org.junit.Assert.assertThrows
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TestWatcher
import org.junit.runner.Description
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
/** Enable verbose logging for test failure investigation. Enable for b/267494219 */
const val VERBOSE_LOG = true
@@ -125,28 +127,26 @@
@OptIn(ExperimentalCoroutinesApi::class)
@SdkSuppress(minSdkVersion = 29)
@MediumTest
-@RunWith(Parameterized::class)
-class GlanceAppWidgetReceiverTest(val useSessionManager: Boolean) {
+class GlanceAppWidgetReceiverTest {
@get:Rule
- val mHostRule = AppWidgetHostRule(useSessionManager = useSessionManager)
+ val mHostRule = AppWidgetHostRule()
@get:Rule
val mViewDumpRule = ViewHierarchyFailureWatcher()
val context = InstrumentationRegistry.getInstrumentation().targetContext!!
- companion object {
- @Parameterized.Parameters(name = "useGlanceSession={0}")
- @JvmStatic
- fun data() = mutableListOf(true, false)
- }
-
@Before
fun setUp() {
// Reset the size mode to the default
TestGlanceAppWidget.sizeMode = SizeMode.Single
}
+ @After
+ fun cleanUp() {
+ TestGlanceAppWidget.resetOnDeleteBlock()
+ }
+
@Test
fun createSimpleAppWidget() {
TestGlanceAppWidget.uiDefinition = {
@@ -779,42 +779,37 @@
}
@Test
- fun compoundButtonAction() {
+ fun compoundButtonAction() = runTest {
val checkbox = "checkbox"
val switch = "switch"
+ val checkBoxClicked = MutableStateFlow(false)
+ val switchClicked = MutableStateFlow(false)
TestGlanceAppWidget.uiDefinition = {
Column {
CheckBox(
checked = false,
- onCheckedChange = actionRunCallback<CompoundButtonActionTest>(
- actionParametersOf(CompoundButtonActionTest.key to checkbox)
- ),
+ onCheckedChange = { assert(checkBoxClicked.tryEmit(true)) },
text = checkbox
)
Switch(
checked = true,
- onCheckedChange = actionRunCallback<CompoundButtonActionTest>(
- actionParametersOf(CompoundButtonActionTest.key to switch)
- ), text = switch
+ onCheckedChange = { assert(switchClicked.tryEmit(true)) },
+ text = switch
)
}
}
mHostRule.startHost()
- CompoundButtonActionTest.received.set(emptyList())
- CompoundButtonActionTest.latch = CountDownLatch(2)
mHostRule.onUnboxedHostView<ViewGroup> { root ->
checkNotNull(root.findChild<TextView> { it.text.toString() == checkbox })
.performCompoundButtonClick()
checkNotNull(root.findChild<TextView> { it.text.toString() == switch })
.performCompoundButtonClick()
}
- CompoundButtonActionTest.latch.await(5, TimeUnit.SECONDS)
- assertThat(CompoundButtonActionTest.received.get()).containsExactly(
- checkbox to true, switch to false
- )
+ checkBoxClicked.first { it }
+ switchClicked.first { it }
}
@Test
@@ -883,7 +878,6 @@
@Test
fun lambdaActionCallback() = runTest {
- if (!useSessionManager) return@runTest
TestGlanceAppWidget.uiDefinition = {
val text = remember { mutableStateOf("initial") }
Button(
@@ -909,20 +903,13 @@
}
}
- @FlakyTest(bugId = 259938473)
@Test
fun unsetActionCallback() = runTest {
+ var enabled by mutableStateOf(true)
TestGlanceAppWidget.uiDefinition = {
- val enabled = currentState<Preferences>()[testBoolKey] ?: true
Text(
"text1",
- modifier = if (enabled) {
- GlanceModifier.clickable(
- actionRunCallback<CallbackTest>(
- actionParametersOf(CallbackTest.key to 1)
- )
- )
- } else GlanceModifier
+ modifier = if (enabled) GlanceModifier.clickable {} else GlanceModifier
)
}
@@ -935,11 +922,8 @@
assertThat(view.hasOnClickListeners()).isTrue()
}
- updateAppWidgetState(context, AppWidgetId(mHostRule.appWidgetId)) {
- it[testBoolKey] = false
- }
mHostRule.runAndWaitForUpdate {
- TestGlanceAppWidget.update(context, AppWidgetId(mHostRule.appWidgetId))
+ enabled = false
}
mHostRule.onUnboxedHostView<TextView> { root ->
@@ -1077,8 +1061,7 @@
}
@Test
- fun cancellingContentCoroutineCausesContentToLeaveComposition() = runBlocking {
- if (!useSessionManager) return@runBlocking
+ fun cancellingContentCoroutineCausesContentToLeaveComposition() = runBlocking {
val currentEffectState = MutableStateFlow(EffectState.Initial)
var contentJob: Job? = null
TestGlanceAppWidget.onProvideGlance = {
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/LazyColumnTest.kt b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/LazyColumnTest.kt
index 5f1ff3d..a57500f 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/LazyColumnTest.kt
+++ b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/LazyColumnTest.kt
@@ -31,15 +31,23 @@
import androidx.glance.action.clickable
import androidx.glance.appwidget.lazy.LazyColumn
import androidx.glance.appwidget.lazy.ReservedItemIdRangeEnd
+import androidx.glance.appwidget.lazy.items
import androidx.glance.layout.Alignment
import androidx.glance.layout.padding
import androidx.glance.text.Text
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
+import kotlin.time.Duration.Companion.milliseconds
+import kotlinx.coroutines.FlowPreview
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.debounce
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
import org.junit.Rule
import org.junit.Test
-import kotlin.test.assertIs
@SdkSuppress(minSdkVersion = 29)
@MediumTest
@@ -341,6 +349,41 @@
}
}
+ @OptIn(FlowPreview::class)
+ @Test
+ fun clickTriggersOnlyOneLambda() = runBlocking {
+ val received = MutableStateFlow(-1)
+ TestGlanceAppWidget.uiDefinition = {
+ LazyColumn {
+ items((0..4).toList()) {
+ Button(
+ "$it",
+ onClick = {
+ launch { received.emit(it) }
+ }
+ )
+ }
+ }
+ }
+
+ mHostRule.startHost()
+
+ val buttons = arrayOfNulls<FrameLayout>(5)
+ waitForListViewChildren { list ->
+ for (it in 0..4) {
+ val button = list.getUnboxedListItem<FrameLayout>(it)
+ buttons[it] = assertIs<FrameLayout>(button)
+ }
+ }
+ (0..4).shuffled().forEach { index ->
+ mHostRule.onHostActivity {
+ buttons[index]!!.performClick()
+ }
+ val lastClicked = received.debounce(500.milliseconds).first()
+ assertThat(lastClicked).isEqualTo(index)
+ }
+ }
+
private fun waitForListViewChildren(action: (list: ListView) -> Unit = {}) {
mHostRule.onHostView { }
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/TestGlanceAppWidgetReceiver.kt b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/TestGlanceAppWidgetReceiver.kt
index 8600754..e0865a3 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/TestGlanceAppWidgetReceiver.kt
+++ b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/TestGlanceAppWidgetReceiver.kt
@@ -21,7 +21,6 @@
import android.util.Log
import androidx.compose.runtime.Composable
import androidx.glance.GlanceId
-import androidx.glance.session.SessionManager
class TestGlanceAppWidgetReceiver : GlanceAppWidgetReceiver() {
override val glanceAppWidget: GlanceAppWidget = TestGlanceAppWidget
@@ -43,15 +42,9 @@
}
object TestGlanceAppWidget : GlanceAppWidget(errorUiLayout = 0) {
- override var sessionManager: SessionManager? = null
override var sizeMode: SizeMode = SizeMode.Single
- @Composable
- override fun Content() {
- uiDefinition()
- }
-
override suspend fun provideGlance(
context: Context,
id: GlanceId
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetComposer.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetComposer.kt
new file mode 100644
index 0000000..597ef63
--- /dev/null
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetComposer.kt
@@ -0,0 +1,123 @@
+/*
+ * 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.glance.appwidget
+
+import android.content.Context
+import android.os.Bundle
+import android.widget.RemoteViews
+import androidx.compose.runtime.BroadcastFrameClock
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.Recomposer
+import androidx.compose.ui.unit.DpSize
+import androidx.glance.Applier
+import androidx.glance.GlanceComposable
+import androidx.glance.GlanceId
+import androidx.glance.LocalContext
+import androidx.glance.LocalGlanceId
+import androidx.glance.LocalState
+import androidx.glance.state.ConfigManager
+import androidx.glance.state.GlanceState
+import androidx.glance.state.PreferencesGlanceStateDefinition
+import kotlin.coroutines.coroutineContext
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+/**
+ * Run the given [content] composition and translate it to [RemoteViews].
+ */
+internal suspend fun compose(
+ context: Context,
+ id: GlanceId = AppWidgetId(-1),
+ sizeMode: SizeMode = SizeMode.Single,
+ size: DpSize? = null,
+ options: Bundle? = null,
+ state: Any? = null,
+ configManager: ConfigManager = GlanceState,
+ content: @Composable @GlanceComposable () -> Unit,
+): RemoteViews {
+ val appWidgetId = (id as AppWidgetId).appWidgetId
+ val layoutConfig = LayoutConfiguration.load(context, appWidgetId)
+ val glanceState = state ?: configManager.getValue(
+ context,
+ PreferencesGlanceStateDefinition,
+ createUniqueRemoteUiName(appWidgetId)
+ )
+ val manager = context.appWidgetManager
+ val finalOptions = options ?: manager.getAppWidgetOptions(appWidgetId) ?: Bundle()
+ val minSize = appWidgetMinSize(
+ context.resources.displayMetrics,
+ manager,
+ appWidgetId
+ )
+ try {
+ val root = RemoteViewsRoot(MaxComposeTreeDepth)
+ val applier = Applier(root)
+ val recomposer = Recomposer(coroutineContext)
+ val composition = Composition(applier, recomposer)
+ composition.setContent {
+ CompositionLocalProvider(
+ LocalContext provides context,
+ LocalGlanceId provides id,
+ LocalAppWidgetOptions provides finalOptions,
+ LocalState provides glanceState,
+ ) {
+ ForEachSize(sizeMode, size ?: minSize, content)
+ }
+ }
+ withContext(BroadcastFrameClock()) {
+ launch { recomposer.runRecomposeAndApplyChanges() }
+ recomposer.close()
+ recomposer.join()
+ }
+ normalizeCompositionTree(root)
+ return translateComposition(
+ context,
+ appWidgetId,
+ root,
+ layoutConfig,
+ layoutConfig.addLayout(root),
+ DpSize.Unspecified,
+ )
+ } finally {
+ layoutConfig.save()
+ }
+}
+
+/**
+ * Creates a snapshot of the [GlanceAppWidget] content without running recomposition.
+ *
+ * This runs the composition one time and translates it to [RemoteViews].
+ */
+internal suspend fun GlanceAppWidget.compose(
+ @Suppress("ContextFirst") context: Context,
+ id: GlanceId,
+ options: Bundle? = null,
+ size: DpSize? = null,
+ state: Any? = null,
+): RemoteViews =
+ compose(
+ context = context,
+ id = id,
+ sizeMode = if (size != null) SizeMode.Single else sizeMode,
+ size = size,
+ state = state,
+ options = options,
+ content = runGlance(context, id).first { it != null }!!,
+ )
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetSession.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetSession.kt
index 7490c7f..92f688c 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetSession.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetSession.kt
@@ -16,7 +16,6 @@
package androidx.glance.appwidget
-import android.appwidget.AppWidgetManager
import android.content.Context
import android.os.Bundle
import android.util.Log
@@ -35,7 +34,6 @@
import androidx.compose.ui.unit.DpSize
import androidx.glance.EmittableWithChildren
import androidx.glance.GlanceComposable
-import androidx.glance.GlanceId
import androidx.glance.LocalContext
import androidx.glance.LocalGlanceId
import androidx.glance.LocalState
@@ -43,14 +41,7 @@
import androidx.glance.session.Session
import androidx.glance.state.ConfigManager
import androidx.glance.state.GlanceState
-import java.util.concurrent.atomic.AtomicReference
-import kotlin.coroutines.CoroutineContext
-import kotlinx.coroutines.CancellableContinuation
import kotlinx.coroutines.CancellationException
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.channelFlow
-import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlinx.coroutines.withContext
/**
* A session that composes UI for a single app widget.
@@ -220,53 +211,4 @@
internal class UpdateAppWidgetOptions(val newOptions: Bundle)
@VisibleForTesting
internal class RunLambda(val key: String)
-
- private val Context.appWidgetManager: AppWidgetManager
- get() = this.getSystemService(Context.APPWIDGET_SERVICE) as AppWidgetManager
}
-
-internal fun interface ContentReceiver : CoroutineContext.Element {
- /**
- * Provide [content] to the Glance session, suspending until the session is
- * shut down.
- *
- * If this function is called concurrently with itself, the previous call will throw
- * [CancellationException] and the new content will replace it.
- */
- suspend fun provideContent(
- content: @Composable @GlanceComposable () -> Unit
- ): Nothing
-
- override val key: CoroutineContext.Key<*> get() = Key
-
- companion object Key : CoroutineContext.Key<ContentReceiver>
-}
-
-internal fun GlanceAppWidget.runGlance(
- context: Context,
- id: GlanceId,
-): Flow<(@GlanceComposable @Composable () -> Unit)?> = channelFlow {
- val contentCoroutine: AtomicReference<CancellableContinuation<Nothing>?> =
- AtomicReference(null)
- val receiver = ContentReceiver { content ->
- suspendCancellableCoroutine {
- it.invokeOnCancellation { trySend(null) }
- contentCoroutine.getAndSet(it)?.cancel()
- trySend(content)
- }
- }
- withContext(receiver) { provideGlance(context, id) }
-}
-
-internal val Context.appWidgetManager: AppWidgetManager
- get() = this.getSystemService(Context.APPWIDGET_SERVICE) as AppWidgetManager
-
-internal fun createUniqueRemoteUiName(appWidgetId: Int) = "appWidget-$appWidgetId"
-
-internal fun AppWidgetId.toSessionKey() = createUniqueRemoteUiName(appWidgetId)
-
-/**
- * Maximum depth for a composition. Although there is no hard limit, this should avoid deep
- * recursions, which would create [RemoteViews] too large to be sent.
- */
-private const val MaxComposeTreeDepth = 50
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetUtils.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetUtils.kt
index 1ae6a21..853e676 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetUtils.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetUtils.kt
@@ -18,20 +18,39 @@
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProviderInfo
+import android.content.Context
import android.os.Build
import android.os.Bundle
import android.os.Trace
import android.util.DisplayMetrics
import android.util.Log
import android.util.SizeF
+import android.widget.RemoteViews
import androidx.annotation.DoNotInline
import androidx.annotation.RequiresApi
import androidx.annotation.RestrictTo
+import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
+import androidx.glance.GlanceComposable
+import androidx.glance.GlanceId
import java.util.concurrent.atomic.AtomicBoolean
+import java.util.concurrent.atomic.AtomicReference
+import kotlin.coroutines.CoroutineContext
import kotlin.math.ceil
import kotlin.math.min
+import kotlinx.coroutines.CancellableContinuation
+import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.channelFlow
+import kotlinx.coroutines.suspendCancellableCoroutine
+import kotlinx.coroutines.withContext
+
+/**
+ * Maximum depth for a composition. Although there is no hard limit, this should avoid deep
+ * recursions, which would create [RemoteViews] too large to be sent.
+ */
+internal const val MaxComposeTreeDepth = 50
// Retrieves the minimum size of an App Widget, as configured by the App Widget provider.
internal fun appWidgetMinSize(
@@ -191,4 +210,44 @@
methodName: String,
cookie: Int,
) = Trace.endAsyncSection(methodName, cookie)
-}
\ No newline at end of file
+}
+
+internal val Context.appWidgetManager: AppWidgetManager
+ get() = this.getSystemService(Context.APPWIDGET_SERVICE) as AppWidgetManager
+
+internal fun createUniqueRemoteUiName(appWidgetId: Int) = "appWidget-$appWidgetId"
+
+internal fun AppWidgetId.toSessionKey() = createUniqueRemoteUiName(appWidgetId)
+
+internal fun interface ContentReceiver : CoroutineContext.Element {
+ /**
+ * Provide [content] to the Glance session, suspending until the session is
+ * shut down.
+ *
+ * If this function is called concurrently with itself, the previous call will throw
+ * [CancellationException] and the new content will replace it.
+ */
+ suspend fun provideContent(
+ content: @Composable @GlanceComposable () -> Unit
+ ): Nothing
+
+ override val key: CoroutineContext.Key<*> get() = Key
+
+ companion object Key : CoroutineContext.Key<ContentReceiver>
+}
+
+internal fun GlanceAppWidget.runGlance(
+ context: Context,
+ id: GlanceId,
+): Flow<(@GlanceComposable @Composable () -> Unit)?> = channelFlow {
+ val contentCoroutine: AtomicReference<CancellableContinuation<Nothing>?> =
+ AtomicReference(null)
+ val receiver = ContentReceiver { content ->
+ suspendCancellableCoroutine {
+ it.invokeOnCancellation { trySend(null) }
+ contentCoroutine.getAndSet(it)?.cancel()
+ trySend(content)
+ }
+ }
+ withContext(receiver) { provideGlance(context, id) }
+}
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CheckBox.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CheckBox.kt
index d27cadf..bc88b30 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CheckBox.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CheckBox.kt
@@ -24,6 +24,7 @@
import androidx.glance.GlanceTheme
import androidx.glance.action.Action
import androidx.glance.action.ActionModifier
+import androidx.glance.action.action
import androidx.glance.appwidget.action.CompoundButtonAction
import androidx.glance.appwidget.unit.CheckableColorProvider
import androidx.glance.appwidget.unit.CheckedUncheckedColorProvider.Companion.createCheckableColorProvider
@@ -83,7 +84,7 @@
val colorProvider = if (GlanceTheme.colors == DynamicThemeColorProviders) {
// If using the m3 dynamic color theme, we need to create a color provider from xml
// because resource backed ColorStateLists cannot be created programmatically
- ResourceCheckableColorProvider(R.color.glance_default_check_box)
+ ResourceCheckableColorProvider(R.color.glance_default_check_box)
} else {
createCheckableColorProvider(
source = "CheckBoxColors",
@@ -119,6 +120,48 @@
style: TextStyle? = null,
colors: CheckBoxColors = checkBoxColors(),
maxLines: Int = Int.MAX_VALUE,
+) = CheckBoxElement(checked, onCheckedChange, modifier, text, style, colors, maxLines)
+
+/**
+ * Adds a check box view to the glance view.
+ *
+ * @param checked whether the check box is checked
+ * @param onCheckedChange the action to be run when the checkbox is clicked
+ * @param modifier the modifier to apply to the check box
+ * @param text the text to display to the end of the check box
+ * @param style the style to apply to [text]
+ * @param colors the color tint to apply to the check box
+ * @param maxLines An optional maximum number of lines for the text to span, wrapping if
+ * necessary. If the text exceeds the given number of lines, it will be truncated.
+ */
+@Composable
+fun CheckBox(
+ checked: Boolean,
+ onCheckedChange: () -> Unit,
+ modifier: GlanceModifier = GlanceModifier,
+ text: String = "",
+ style: TextStyle? = null,
+ colors: CheckBoxColors = checkBoxColors(),
+ maxLines: Int = Int.MAX_VALUE,
+) = CheckBoxElement(
+ checked,
+ action(block = onCheckedChange),
+ modifier,
+ text,
+ style,
+ colors,
+ maxLines
+)
+
+@Composable
+private fun CheckBoxElement(
+ checked: Boolean,
+ onCheckedChange: Action?,
+ modifier: GlanceModifier = GlanceModifier,
+ text: String = "",
+ style: TextStyle? = null,
+ colors: CheckBoxColors = checkBoxColors(),
+ maxLines: Int = Int.MAX_VALUE,
) {
val finalModifier = if (onCheckedChange != null) {
modifier.then(ActionModifier(CompoundButtonAction(onCheckedChange, checked)))
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidget.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidget.kt
index 0dd2fd7..8fafe34 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidget.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidget.kt
@@ -22,45 +22,25 @@
import android.os.Bundle
import android.util.Log
import android.widget.RemoteViews
-import androidx.annotation.DoNotInline
import androidx.annotation.LayoutRes
-import androidx.annotation.RequiresApi
-import androidx.annotation.VisibleForTesting
-import androidx.compose.runtime.BroadcastFrameClock
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Composition
-import androidx.compose.runtime.CompositionLocalProvider
-import androidx.compose.runtime.Recomposer
-import androidx.compose.ui.unit.DpSize
-import androidx.glance.Applier
import androidx.glance.GlanceComposable
import androidx.glance.GlanceId
-import androidx.glance.LocalContext
-import androidx.glance.LocalGlanceId
-import androidx.glance.LocalSize
-import androidx.glance.LocalState
import androidx.glance.appwidget.state.getAppWidgetState
+import androidx.glance.session.GlanceSessionManager
import androidx.glance.session.SessionManager
import androidx.glance.state.GlanceState
import androidx.glance.state.GlanceStateDefinition
import androidx.glance.state.PreferencesGlanceStateDefinition
import kotlin.coroutines.coroutineContext
import kotlinx.coroutines.CancellationException
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.async
-import kotlinx.coroutines.awaitAll
-import kotlinx.coroutines.coroutineScope
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
/**
* Object handling the composition and the communication with [AppWidgetManager].
*
- * The UI is defined by the [Content] composable function. Calling [update] will start
- * the composition and translate [Content] into a [RemoteViews] which is then sent to the
- * [AppWidgetManager].
+ * The UI is defined by calling [provideContent] from within [provideGlance].
+ * When the widget is requested, the composition is run and translated into a [RemoteViews] which is
+ * then sent to the [AppWidgetManager].
*
* @param errorUiLayout If different from 0 and an error occurs within this GlanceAppWidget,
* the App Widget is updated with an error UI using this layout resource ID.
@@ -69,25 +49,36 @@
@LayoutRes
internal val errorUiLayout: Int = R.layout.glance_error_layout,
) {
+ private val sessionManager: SessionManager = GlanceSessionManager
/**
* Override this function to provide the Glance Composable.
*
* This is a good place to load any data needed to render the Composable. Use
* [provideContent] to provide the Composable once it is ready.
- *
- * TODO(b/239747024) make abstract once Content() is removed.
*/
- open suspend fun provideGlance(context: Context, id: GlanceId) {
- provideContent { Content() }
+ open suspend fun provideGlance(
+ context: Context,
+ id: GlanceId,
+ ) {
+ provideContent { @Suppress("DEPRECATION") Content() }
}
/**
- * Definition of the UI.
- * TODO(b/239747024) remove and update any usage to the new provideGlance API.
+ * Provide the Glance Composable.
*/
@Composable
@GlanceComposable
- abstract fun Content()
+ @Deprecated(
+ message = "Override provideGlance to provide the Composable.",
+ replaceWith = ReplaceWith(
+ "override suspend fun provideGlance(context: Context, id: GlanceId) {" +
+ " provideContent { /** Composable content **/ }" +
+ "}",
+ "androidx.glance.appwidget.provideContent",
+ ),
+ level = DeprecationLevel.WARNING,
+ )
+ open fun Content() {}
/**
* Defines the handling of sizes.
@@ -106,20 +97,15 @@
*/
open suspend fun onDelete(context: Context, glanceId: GlanceId) {}
- // TODO(b/239747024) remove once SessionManager is the default
- open val sessionManager: SessionManager? = null
-
/**
- * Triggers the composition of [Content] and sends the result to the [AppWidgetManager].
+ * Run the composition in [provideGlance] and send the result to [AppWidgetManager].
*/
suspend fun update(
context: Context,
- glanceId: GlanceId
+ id: GlanceId
) {
- require(glanceId is AppWidgetId) {
- "The glanceId '$glanceId' is not a valid App Widget glance id"
- }
- update(context, AppWidgetManager.getInstance(context), glanceId.appWidgetId)
+ require(id is AppWidgetId)
+ update(context, id.appWidgetId)
}
/**
@@ -129,7 +115,7 @@
*/
internal suspend fun deleted(context: Context, appWidgetId: Int) {
val glanceId = AppWidgetId(appWidgetId)
- sessionManager?.closeSession(glanceId.toSessionKey())
+ sessionManager.closeSession(glanceId.toSessionKey())
try {
onDelete(context, glanceId)
} catch (cancelled: CancellationException) {
@@ -148,36 +134,22 @@
*/
internal suspend fun update(
context: Context,
- appWidgetManager: AppWidgetManager,
appWidgetId: Int,
options: Bundle? = null,
) {
Tracing.beginGlanceAppWidgetUpdate()
- sessionManager?.let {
- val glanceId = AppWidgetId(appWidgetId)
- if (!it.isSessionRunning(context, glanceId.toSessionKey())) {
- it.startSession(context, AppWidgetSession(this, glanceId, options))
- } else {
- val session = it.getSession(glanceId.toSessionKey()) as AppWidgetSession
- session.updateGlance()
- }
- return
- }
- safeRun(context, appWidgetManager, appWidgetId) {
- val opts = options ?: appWidgetManager.getAppWidgetOptions(appWidgetId)!!
- val state = stateDefinition?.let {
- GlanceState.getValue(context, it, createUniqueRemoteUiName(appWidgetId))
- }
- appWidgetManager.updateAppWidget(
- appWidgetId,
- compose(context, appWidgetManager, appWidgetId, state, opts)
- )
+ val glanceId = AppWidgetId(appWidgetId)
+ if (!sessionManager.isSessionRunning(context, glanceId.toSessionKey())) {
+ sessionManager.startSession(context, AppWidgetSession(this, glanceId, options))
+ } else {
+ val session = sessionManager.getSession(glanceId.toSessionKey()) as AppWidgetSession
+ session.updateGlance()
}
}
/**
- * Trigger an action to be run in the AppWidgetSession for this widget, starting the session if
- * necessary.
+ * Trigger an action to be run in the [AppWidgetSession] for this widget, starting the session
+ * if necessary.
*/
internal suspend fun triggerAction(
context: Context,
@@ -185,19 +157,15 @@
actionKey: String,
options: Bundle? = null,
) {
- sessionManager?.let { manager ->
- val glanceId = AppWidgetId(appWidgetId)
- val session = if (!manager.isSessionRunning(context, glanceId.toSessionKey())) {
- AppWidgetSession(this, glanceId, options).also { session ->
- manager.startSession(context, session)
- }
- } else {
- manager.getSession(glanceId.toSessionKey()) as AppWidgetSession
+ val glanceId = AppWidgetId(appWidgetId)
+ val session = if (!sessionManager.isSessionRunning(context, glanceId.toSessionKey())) {
+ AppWidgetSession(this, glanceId, options).also { session ->
+ sessionManager.startSession(context, session)
}
- session.runLambda(actionKey)
- } ?: error(
- "GlanceAppWidget.triggerAction may only be used when a SessionManager is provided"
- )
+ } else {
+ sessionManager.getSession(glanceId.toSessionKey()) as AppWidgetSession
+ }
+ session.runLambda(actionKey)
}
/**
@@ -205,340 +173,24 @@
*/
internal suspend fun resize(
context: Context,
- appWidgetManager: AppWidgetManager,
appWidgetId: Int,
options: Bundle
) {
- sessionManager?.let { manager ->
- val glanceId = AppWidgetId(appWidgetId)
- if (!manager.isSessionRunning(context, glanceId.toSessionKey())) {
- manager.startSession(context, AppWidgetSession(this, glanceId, options))
- } else {
- val session = manager.getSession(glanceId.toSessionKey()) as AppWidgetSession
- session.updateAppWidgetOptions(options)
- }
- return
- }
// Note, on Android S, if the mode is `Responsive`, then all the sizes are specified from
// the start and we don't need to update the AppWidget when the size changes.
- if (sizeMode is SizeMode.Exact ||
- (Build.VERSION.SDK_INT < Build.VERSION_CODES.S && sizeMode is SizeMode.Responsive)
+ if (sizeMode is SizeMode.Single ||
+ (Build.VERSION.SDK_INT > Build.VERSION_CODES.S && sizeMode is SizeMode.Responsive)
) {
- update(context, appWidgetManager, appWidgetId, options)
+ return
}
- }
-
- // Trigger the composition of the View to create the RemoteViews.
- @VisibleForTesting
- internal suspend fun compose(
- context: Context,
- appWidgetManager: AppWidgetManager,
- appWidgetId: Int,
- state: Any?,
- options: Bundle
- ): RemoteViews {
- val layoutConfig = LayoutConfiguration.load(context, appWidgetId)
- return try {
- compose(context, appWidgetManager, appWidgetId, state, options, layoutConfig)
- } finally {
- layoutConfig.save()
- }
- }
-
- @VisibleForTesting
- internal suspend fun compose(
- context: Context,
- appWidgetManager: AppWidgetManager,
- appWidgetId: Int,
- state: Any?,
- options: Bundle,
- layoutConfig: LayoutConfiguration,
- ): RemoteViews =
- when (val localSizeMode = this.sizeMode) {
- is SizeMode.Single -> {
- composeForSize(
- context,
- appWidgetId,
- state,
- options,
- appWidgetMinSize(
- context.resources.displayMetrics,
- appWidgetManager,
- appWidgetId
- ),
- layoutConfig,
- )
- }
-
- is SizeMode.Exact -> {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
- Api31Impl.composeAllSizes(
- this,
- context,
- appWidgetId,
- state,
- options,
- options.extractAllSizes {
- appWidgetMinSize(
- context.resources.displayMetrics,
- appWidgetManager,
- appWidgetId
- )
- },
- layoutConfig,
- )
- } else {
- composeExactMode(
- context,
- appWidgetManager,
- appWidgetId,
- state,
- options,
- layoutConfig,
- )
- }
- }
-
- is SizeMode.Responsive -> {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
- Api31Impl.composeAllSizes(
- this,
- context,
- appWidgetId,
- state,
- options,
- localSizeMode.sizes,
- layoutConfig,
- )
- } else {
- composeResponsiveMode(
- context,
- appWidgetId,
- state,
- options,
- localSizeMode.sizes,
- layoutConfig,
- )
- }
- }
- }
-
- private suspend fun composeExactMode(
- context: Context,
- appWidgetManager: AppWidgetManager,
- appWidgetId: Int,
- state: Any?,
- options: Bundle,
- layoutConfig: LayoutConfiguration,
- ) = coroutineScope {
- val views =
- options.extractOrientationSizes()
- .map { size ->
- async {
- composeForSize(
- context,
- appWidgetId,
- state,
- options,
- size,
- layoutConfig,
- )
- }
- }.awaitAll()
- combineLandscapeAndPortrait(views) ?: composeForSize(
- context,
- appWidgetId,
- state,
- options,
- appWidgetMinSize(context.resources.displayMetrics, appWidgetManager, appWidgetId),
- layoutConfig,
- )
- }
-
- // Combine the views, which should be landscape and portrait, in that order, if they are
- // available.
- private fun combineLandscapeAndPortrait(views: List<RemoteViews>): RemoteViews? =
- when (views.size) {
- 2 -> RemoteViews(views[0], views[1])
- 1 -> views[0]
- 0 -> null
- else -> throw IllegalArgumentException("There must be between 0 and 2 views.")
- }
-
- private suspend fun composeResponsiveMode(
- context: Context,
- appWidgetId: Int,
- state: Any?,
- options: Bundle,
- sizes: Set<DpSize>,
- layoutConfig: LayoutConfiguration,
- ) = coroutineScope {
- // Find the best view, emulating what Android S+ would do.
- val orderedSizes = sizes.sortedBySize()
- val smallestSize = orderedSizes[0]
- val views =
- options.extractOrientationSizes()
- .map { size ->
- findBestSize(size, sizes) ?: smallestSize
- }
- .map { size ->
- async {
- composeForSize(
- context,
- appWidgetId,
- state,
- options,
- size,
- layoutConfig,
- )
- }
- }.awaitAll()
- combineLandscapeAndPortrait(views) ?: composeForSize(
- context,
- appWidgetId,
- state,
- options,
- smallestSize,
- layoutConfig,
- )
- }
-
- @VisibleForTesting
- internal suspend fun composeForSize(
- context: Context,
- appWidgetId: Int,
- state: Any?,
- options: Bundle,
- size: DpSize,
- layoutConfig: LayoutConfiguration,
- ): RemoteViews = withContext(BroadcastFrameClock()) {
- // The maximum depth must be reduced if the compositions are combined
- val root = RemoteViewsRoot(maxDepth = MaxComposeTreeDepth)
- val applier = Applier(root)
- val recomposer = Recomposer(coroutineContext)
- val composition = Composition(applier, recomposer)
val glanceId = AppWidgetId(appWidgetId)
- composition.setContent(context, glanceId, options, state, size)
-
- launch { recomposer.runRecomposeAndApplyChanges() }
- recomposer.close()
- recomposer.join()
-
- normalizeCompositionTree(root)
-
- translateComposition(
- context,
- appWidgetId,
- root,
- layoutConfig,
- layoutConfig.addLayout(root),
- size
- )
- }
-
- private fun Composition.setContent(
- context: Context,
- glanceId: AppWidgetId,
- options: Bundle,
- state: Any?,
- size: DpSize
- ) {
- setContent {
- CompositionLocalProvider(
- LocalContext provides context,
- LocalGlanceId provides glanceId,
- LocalAppWidgetOptions provides options,
- LocalState provides state,
- LocalSize provides size,
- ) { Content() }
+ if (!sessionManager.isSessionRunning(context, glanceId.toSessionKey())) {
+ sessionManager.startSession(context, AppWidgetSession(this, glanceId, options))
+ } else {
+ val session = sessionManager.getSession(glanceId.toSessionKey()) as AppWidgetSession
+ session.updateAppWidgetOptions(options)
}
}
-
- private companion object {
- /**
- * Maximum depth for a composition. Although there is no hard limit, this should avoid deep
- * recursions, which would create [RemoteViews] too large to be sent.
- */
- private const val MaxComposeTreeDepth = 50
- }
-
- @RequiresApi(Build.VERSION_CODES.S)
- private object Api31Impl {
- @DoNotInline
- suspend fun composeAllSizes(
- glance: GlanceAppWidget,
- context: Context,
- appWidgetId: Int,
- state: Any?,
- options: Bundle,
- allSizes: Collection<DpSize>,
- layoutConfig: LayoutConfiguration
- ): RemoteViews = coroutineScope {
- val allViews =
- allSizes.map { size ->
- async {
- size.toSizeF() to glance.composeForSize(
- context,
- appWidgetId,
- state,
- options,
- size,
- layoutConfig,
- )
- }
- }.awaitAll()
- allViews.singleOrNull()?.second ?: RemoteViews(allViews.toMap())
- }
- }
-
- private suspend fun safeRun(
- context: Context,
- appWidgetManager: AppWidgetManager,
- appWidgetId: Int,
- block: suspend () -> Unit,
- ) {
- try {
- block()
- } catch (ex: CancellationException) {
- // Nothing to do
- } catch (throwable: Throwable) {
- if (errorUiLayout == 0) {
- throw throwable
- }
- logException(throwable)
- val rv = RemoteViews(context.packageName, errorUiLayout)
- appWidgetManager.updateAppWidget(appWidgetId, rv)
- } finally {
- Tracing.endGlanceAppWidgetUpdate()
- }
- }
-
- /**
- * Creates a snapshot of the GlanceAppWidget content without running recomposition.
- * Useful to only generate once the composed RemoteViews instance.
- *
- * @see GlanceAppWidget.composeForSize
- * @see GlanceAppWidgetManager.requestPinGlanceAppWidget
- */
- internal fun snapshot(
- context: Context,
- appWidgetId: Int,
- state: Any?,
- options: Bundle,
- size: DpSize,
- ): RemoteViews {
- // The maximum depth must be reduced if the compositions are combined
- val root = RemoteViewsRoot(maxDepth = MaxComposeTreeDepth)
- val applier = Applier(root)
- val scope = CoroutineScope(Job() + Dispatchers.Main)
- val recomposer = Recomposer(scope.coroutineContext)
- val composition = Composition(applier, recomposer)
- val glanceId = AppWidgetId(appWidgetId)
-
- composition.setContent(context, glanceId, options, state, size)
- normalizeCompositionTree(root)
- return translateComposition(context, appWidgetId, root, null, 0, size)
- }
}
internal data class AppWidgetId(val appWidgetId: Int) : GlanceId
@@ -582,4 +234,4 @@
coroutineContext[ContentReceiver]?.provideContent(content)
?: error("provideContent requires a ContentReceiver and should only be called from " +
"GlanceAppWidget.provideGlance")
-}
\ No newline at end of file
+}
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetManager.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetManager.kt
index 09442fa..6c4aedb 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetManager.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetManager.kt
@@ -183,7 +183,7 @@
*
* @see AppWidgetManager.requestPinAppWidget for more information and limitations
*/
- fun <T : GlanceAppWidgetReceiver> requestPinGlanceAppWidget(
+ suspend fun <T : GlanceAppWidgetReceiver> requestPinGlanceAppWidget(
receiver: Class<T>,
preview: GlanceAppWidget? = null,
previewState: Any? = null,
@@ -199,9 +199,9 @@
val info = appWidgetManager.installedProviders.first {
it.provider == target
}
- val snapshot = preview.snapshot(
+ val snapshot = preview.compose(
context = context,
- appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID,
+ id = AppWidgetId(AppWidgetManager.INVALID_APPWIDGET_ID),
state = previewState,
options = Bundle.EMPTY,
size = info.getMinSize(context.resources.displayMetrics),
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiver.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiver.kt
index 93d8962..9031d03d 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiver.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiver.kt
@@ -88,7 +88,7 @@
}
goAsync {
updateManager(context)
- appWidgetIds.map { async { glanceAppWidget.update(context, appWidgetManager, it) } }
+ appWidgetIds.map { async { glanceAppWidget.update(context, it) } }
.awaitAll()
}
}
@@ -102,7 +102,7 @@
) {
goAsync {
updateManager(context)
- glanceAppWidget.resize(context, appWidgetManager, appWidgetId, newOptions)
+ glanceAppWidget.resize(context, appWidgetId, newOptions)
}
}
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/RadioButton.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/RadioButton.kt
index e4d818e..48bafbc 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/RadioButton.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/RadioButton.kt
@@ -23,6 +23,7 @@
import androidx.glance.GlanceNode
import androidx.glance.GlanceTheme
import androidx.glance.action.Action
+import androidx.glance.action.action
import androidx.glance.action.clickable
import androidx.glance.appwidget.unit.CheckableColorProvider
import androidx.glance.appwidget.unit.CheckedUncheckedColorProvider.Companion.createCheckableColorProvider
@@ -142,6 +143,56 @@
style: TextStyle? = null,
colors: RadioButtonColors = radioButtonColors(),
maxLines: Int = Int.MAX_VALUE,
+) = RadioButtonElement(checked, onClick, modifier, enabled, text, style, colors, maxLines)
+
+/**
+ * Adds a radio button to the glance view.
+ *
+ * When showing a [Row] or [Column] that has [RadioButton] children, use
+ * [GlanceModifier.selectableGroup] to enable the radio group effect (unselecting the previously
+ * selected radio button when another is selected).
+ *
+ * @param checked whether the radio button is checked
+ * @param onClick the action to be run when the radio button is clicked
+ * @param modifier the modifier to apply to the radio button
+ * @param enabled if false, the radio button will not be clickable
+ * @param text the text to display to the end of the radio button
+ * @param style the style to apply to [text]
+ * @param colors the color tint to apply to the radio button
+ * @param maxLines An optional maximum number of lines for the text to span, wrapping if
+ * necessary. If the text exceeds the given number of lines, it will be truncated.
+ */
+@Composable
+fun RadioButton(
+ checked: Boolean,
+ onClick: () -> Unit,
+ modifier: GlanceModifier = GlanceModifier,
+ enabled: Boolean = true,
+ text: String = "",
+ style: TextStyle? = null,
+ colors: RadioButtonColors = radioButtonColors(),
+ maxLines: Int = Int.MAX_VALUE,
+) = RadioButtonElement(
+ checked,
+ action(block = onClick),
+ modifier,
+ enabled,
+ text,
+ style,
+ colors,
+ maxLines
+)
+
+@Composable
+private fun RadioButtonElement(
+ checked: Boolean,
+ onClick: Action?,
+ modifier: GlanceModifier = GlanceModifier,
+ enabled: Boolean = true,
+ text: String = "",
+ style: TextStyle? = null,
+ colors: RadioButtonColors = radioButtonColors(),
+ maxLines: Int = Int.MAX_VALUE,
) {
val finalModifier = if (enabled && onClick != null) modifier.clickable(onClick) else modifier
GlanceNode(factory = { EmittableRadioButton(colors) }, update = {
@@ -154,7 +205,6 @@
this.set(maxLines) { this.maxLines = it }
})
}
-
/**
* Use this modifier to group a list of RadioButtons together for accessibility purposes.
*
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/SizeBox.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/SizeBox.kt
index 8425999..f4dd6cd 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/SizeBox.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/SizeBox.kt
@@ -106,7 +106,7 @@
} else {
val smallestSize = sizeMode.sizes.sortedBySize()[0]
LocalAppWidgetOptions.current.extractOrientationSizes()
- .mapNotNull { findBestSize(it, sizeMode.sizes) }
+ .map { findBestSize(it, sizeMode.sizes) ?: smallestSize }
.ifEmpty { listOf(smallestSize, smallestSize) }
}
}
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/Switch.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/Switch.kt
index cdc36f6..4097244 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/Switch.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/Switch.kt
@@ -23,6 +23,7 @@
import androidx.glance.GlanceTheme
import androidx.glance.action.Action
import androidx.glance.action.ActionModifier
+import androidx.glance.action.action
import androidx.glance.appwidget.action.CompoundButtonAction
import androidx.glance.appwidget.unit.CheckableColorProvider
import androidx.glance.appwidget.unit.CheckedUncheckedColorProvider.Companion.createCheckableColorProvider
@@ -117,6 +118,48 @@
style: TextStyle? = null,
colors: SwitchColors = switchColors(),
maxLines: Int = Int.MAX_VALUE,
+) = SwitchElement(checked, onCheckedChange, modifier, text, style, colors, maxLines)
+
+/**
+ * Adds a switch view to the glance view.
+ *
+ * @param checked whether the switch is checked
+ * @param onCheckedChange the action to be run when the switch is clicked
+ * @param modifier the modifier to apply to the switch
+ * @param text the text to display to the end of the switch
+ * @param style the style to apply to [text]
+ * @param colors the tint colors for the thumb and track of the switch
+ * @param maxLines An optional maximum number of lines for the text to span, wrapping if
+ * necessary. If the text exceeds the given number of lines, it will be truncated.
+ */
+@Composable
+fun Switch(
+ checked: Boolean,
+ onCheckedChange: () -> Unit,
+ modifier: GlanceModifier = GlanceModifier,
+ text: String = "",
+ style: TextStyle? = null,
+ colors: SwitchColors = switchColors(),
+ maxLines: Int = Int.MAX_VALUE,
+) = SwitchElement(
+ checked,
+ action(block = onCheckedChange),
+ modifier,
+ text,
+ style,
+ colors,
+ maxLines
+)
+
+@Composable
+private fun SwitchElement(
+ checked: Boolean,
+ onCheckedChange: Action?,
+ modifier: GlanceModifier = GlanceModifier,
+ text: String = "",
+ style: TextStyle? = null,
+ colors: SwitchColors = switchColors(),
+ maxLines: Int = Int.MAX_VALUE,
) {
val finalModifier = if (onCheckedChange != null) {
modifier.then(ActionModifier(CompoundButtonAction(onCheckedChange, checked)))
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyList.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyList.kt
index a9286e32..5e4d046 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyList.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyList.kt
@@ -17,6 +17,7 @@
package androidx.glance.appwidget.lazy
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.key
import androidx.glance.Emittable
import androidx.glance.EmittableWithChildren
import androidx.glance.GlanceModifier
@@ -99,14 +100,18 @@
alignment: Alignment,
content: @Composable () -> Unit
) {
- GlanceNode(
- factory = ::EmittableLazyListItem,
- update = {
- this.set(itemId) { this.itemId = it }
- this.set(alignment) { this.alignment = it }
- },
- content = content
- )
+ // We wrap LazyListItem in the key composable to ensure that lambda actions declared within each
+ // item's scope will get a unique ID based on the currentCompositeKeyHash.
+ key(itemId) {
+ GlanceNode(
+ factory = ::EmittableLazyListItem,
+ update = {
+ this.set(itemId) { this.itemId = it }
+ this.set(alignment) { this.alignment = it }
+ },
+ content = content
+ )
+ }
}
/**
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyVerticalGrid.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyVerticalGrid.kt
index 79ace6f..c0d1f50 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyVerticalGrid.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyVerticalGrid.kt
@@ -23,6 +23,7 @@
import androidx.glance.layout.fillMaxWidth
import androidx.glance.layout.wrapContentHeight
import androidx.annotation.RequiresApi
+import androidx.compose.runtime.key
import androidx.compose.ui.unit.Dp
import androidx.glance.Emittable
@@ -105,14 +106,18 @@
alignment: Alignment,
content: @Composable () -> Unit
) {
- GlanceNode(
- factory = ::EmittableLazyVerticalGridListItem,
- update = {
- this.set(itemId) { this.itemId = it }
- this.set(alignment) { this.alignment = it }
- },
- content = content
- )
+ // We wrap LazyVerticalGridItem in the key composable to ensure that lambda actions declared
+ // within each item's scope will get a unique ID based on the currentCompositeKeyHash.
+ key(itemId) {
+ GlanceNode(
+ factory = ::EmittableLazyVerticalGridListItem,
+ update = {
+ this.set(itemId) { this.itemId = it }
+ this.set(alignment) { this.alignment = it }
+ },
+ content = content
+ )
+ }
}
@JvmDefaultWithCompatibility
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceTemplateAppWidget.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceTemplateAppWidget.kt
index a090b3f..7774bcb 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceTemplateAppWidget.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceTemplateAppWidget.kt
@@ -16,15 +16,18 @@
package androidx.glance.appwidget.template
+import android.content.Context
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.glance.GlanceComposable
+import androidx.glance.GlanceId
import androidx.glance.LocalSize
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.SizeMode
+import androidx.glance.appwidget.provideContent
import androidx.glance.state.GlanceStateDefinition
import androidx.glance.state.PreferencesGlanceStateDefinition
import androidx.glance.template.LocalTemplateMode
@@ -68,16 +71,14 @@
/** Default widget state definition is [PreferencesGlanceStateDefinition] */
override val stateDefinition: GlanceStateDefinition<*>? = PreferencesGlanceStateDefinition
- @Composable
- final override fun Content() {
- // TODO: Add other local values
- val mode = mode()
- CompositionLocalProvider(
- LocalTemplateMode provides mode,
- ) {
- TemplateContent()
+ final override suspend fun provideGlance(context: Context, id: GlanceId) =
+ provideContent {
+ CompositionLocalProvider(
+ LocalTemplateMode provides mode(),
+ ) {
+ TemplateContent()
+ }
}
- }
@Composable
@GlanceComposable
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_auto_fit.xml b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_auto_fit.xml
index 090f44c0..d71b95f 100644
--- a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_auto_fit.xml
+++ b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_auto_fit.xml
@@ -21,4 +21,5 @@
android:layout_height="wrap_content"
android:divider="@null"
android:numColumns="auto_fit"
+ android:theme="@style/Glance.AppWidget.Theme.GridChildren"
style="@style/Glance.AppWidget.VerticalGrid"/>
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_five_columns.xml b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_five_columns.xml
index 55d7461..2cb9b3d 100644
--- a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_five_columns.xml
+++ b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_five_columns.xml
@@ -21,4 +21,5 @@
android:layout_height="wrap_content"
android:divider="@null"
android:numColumns="5"
+ android:theme="@style/Glance.AppWidget.Theme.GridChildren"
style="@style/Glance.AppWidget.VerticalGrid"/>
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_four_columns.xml b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_four_columns.xml
index 662fdd4..6a2d0a4 100644
--- a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_four_columns.xml
+++ b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_four_columns.xml
@@ -21,4 +21,5 @@
android:layout_height="wrap_content"
android:divider="@null"
android:numColumns="4"
+ android:theme="@style/Glance.AppWidget.Theme.GridChildren"
style="@style/Glance.AppWidget.VerticalGrid"/>
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_one_column.xml b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_one_column.xml
index 9d2b48f0..a207b2db 100644
--- a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_one_column.xml
+++ b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_one_column.xml
@@ -21,4 +21,5 @@
android:layout_height="wrap_content"
android:divider="@null"
android:numColumns="1"
+ android:theme="@style/Glance.AppWidget.Theme.GridChildren"
style="@style/Glance.AppWidget.VerticalGrid"/>
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_three_columns.xml b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_three_columns.xml
index a8ef7e9..f52b24e 100644
--- a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_three_columns.xml
+++ b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_three_columns.xml
@@ -21,4 +21,5 @@
android:layout_height="wrap_content"
android:divider="@null"
android:numColumns="3"
+ android:theme="@style/Glance.AppWidget.Theme.GridChildren"
style="@style/Glance.AppWidget.VerticalGrid"/>
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_two_columns.xml b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_two_columns.xml
index 73b745d..b6c7b9d6 100644
--- a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_two_columns.xml
+++ b/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_two_columns.xml
@@ -21,4 +21,5 @@
android:layout_height="wrap_content"
android:divider="@null"
android:numColumns="2"
+ android:theme="@style/Glance.AppWidget.Theme.GridChildren"
style="@style/Glance.AppWidget.VerticalGrid"/>
diff --git a/glance/glance-appwidget/src/main/res/values-v29/themes.xml b/glance/glance-appwidget/src/main/res/values-v29/themes.xml
index 2c2cd04..38f23cc 100644
--- a/glance/glance-appwidget/src/main/res/values-v29/themes.xml
+++ b/glance/glance-appwidget/src/main/res/values-v29/themes.xml
@@ -25,4 +25,14 @@
-->
<item name="android:focusable">true</item>
</style>
+ <style name="Glance.AppWidget.Theme.GridChildren" parent="">
+ <!--
+ AbsListView (extended by GridView) sets a list item to be clickable if the focusable is
+ not explicitly set. This has effect of list items showing up as numbered when Voice
+ access is activated (even if they don't have any click listeners). See
+ ListItemAccessibilityDelegate. In order to prevent this, we explicitly set focusable as
+ true here.
+ -->
+ <item name="android:focusable">true</item>
+ </style>
</resources>
diff --git a/glance/glance-appwidget/src/main/res/values/themes.xml b/glance/glance-appwidget/src/main/res/values/themes.xml
index e2c0807..06219df 100644
--- a/glance/glance-appwidget/src/main/res/values/themes.xml
+++ b/glance/glance-appwidget/src/main/res/values/themes.xml
@@ -25,4 +25,14 @@
-->
<item name="android:focusable">true</item>
</style>
+ <style name="Glance.AppWidget.Theme.GridChildren" parent="">
+ <!--
+ AbsListView (extended by GridView) sets a list item to be clickable if the focusable is
+ not explicitly set. This has effect of list items showing up as numbered when Voice
+ access is activated (even if they don't have any click listeners). See
+ ListItemAccessibilityDelegate. In order to prevent this, we explicitly set focusable as
+ true here.
+ -->
+ <item name="android:focusable">true</item>
+ </style>
</resources>
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/AppWidgetSessionTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/AppWidgetSessionTest.kt
index 5104c54..6972d7c 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/AppWidgetSessionTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/AppWidgetSessionTest.kt
@@ -20,7 +20,6 @@
import android.appwidget.AppWidgetProviderInfo
import android.content.Context
import android.widget.TextView
-import androidx.compose.runtime.Composable
import androidx.compose.runtime.Recomposer
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
@@ -204,15 +203,6 @@
assertTrue(didRunSecond)
}
- private class SampleGlanceAppWidget(
- val ui: @Composable () -> Unit,
- ) : GlanceAppWidget() {
- @Composable
- override fun Content() {
- ui()
- }
- }
-
private class TestGlanceState : ConfigManager {
val getValueCalls = mutableListOf<String>()
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/GlanceAppWidgetTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/GlanceAppWidgetTest.kt
index d0984d0..b2b2bf9 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/GlanceAppWidgetTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/GlanceAppWidgetTest.kt
@@ -25,7 +25,6 @@
import android.util.SizeF
import android.widget.FrameLayout
import android.widget.TextView
-import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.max
@@ -34,7 +33,6 @@
import androidx.glance.GlanceId
import androidx.glance.LocalGlanceId
import androidx.glance.LocalSize
-import androidx.glance.session.GlanceSessionManager
import androidx.glance.text.Text
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
@@ -46,60 +44,39 @@
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
-import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.mock
import org.robolectric.RobolectricTestRunner
+import org.robolectric.Shadows
import org.robolectric.annotation.Config
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
class GlanceAppWidgetTest {
- private lateinit var fakeCoroutineScope: TestScope
private val context = ApplicationProvider.getApplicationContext<Context>()
private val displayMetrics = context.resources.displayMetrics
-
- @Before
- fun setUp() {
- fakeCoroutineScope = TestScope()
- }
+ private val glanceId = AppWidgetId(1)
@Test
- fun createEmptyUi() = fakeCoroutineScope.runTest {
- val composer = TestWidget { }
-
- val rv = composer.composeForSize(
- context,
- 1,
- composer.stateDefinition,
- Bundle(),
- DpSize(40.dp, 50.dp),
- LayoutConfiguration.create(context, 1),
- )
-
+ fun createEmptyUi() = runTest {
+ val rv = TestWidget { }.compose(context, glanceId)
val view = context.applyRemoteViews(rv)
assertIs<FrameLayout>(view)
assertThat(view.childCount).isEqualTo(0)
}
@Test
- fun createUiWithSize() = fakeCoroutineScope.runTest {
- val composer = TestWidget {
+ fun createUiWithSize() = runTest {
+ val rv = TestWidget {
val size = LocalSize.current
Text("${size.width} x ${size.height}")
- }
-
- val rv = composer.composeForSize(
+ }.compose(
context,
- 1,
- composer.stateDefinition,
- Bundle(),
- DpSize(40.dp, 50.dp),
- LayoutConfiguration.create(context, 1),
+ glanceId,
+ size = DpSize(40.dp, 50.dp),
)
val view = context.applyRemoteViews(rv)
@@ -108,22 +85,15 @@
}
@Test
- fun createUiFromOptionBundle() = fakeCoroutineScope.runTest {
- val composer = TestWidget {
+ fun createUiFromOptionBundle() = runTest {
+ val rv = TestWidget {
val options = LocalAppWidgetOptions.current
Text(options.getString("StringKey", "<NOT FOUND>"))
- }
-
- val bundle = Bundle()
- bundle.putString("StringKey", "FOUND")
- val rv = composer.composeForSize(
+ }.compose(
context,
- 1,
- composer.stateDefinition,
- bundle,
- DpSize(40.dp, 50.dp),
- LayoutConfiguration.create(context, 1),
+ glanceId,
+ bundleOf("StringKey" to "FOUND"),
)
val view = context.applyRemoteViews(rv)
@@ -132,22 +102,12 @@
}
@Test
- fun createUiFromGlanceId() = fakeCoroutineScope.runTest {
- val composer = TestWidget {
+ fun createUiFromGlanceId() = runTest {
+ val rv = TestWidget {
val glanceId = LocalGlanceId.current
Text(glanceId.toString())
- }
-
- val bundle = bundleOf("StringKey" to "FOUND")
- val rv = composer.composeForSize(
- context,
- 1,
- composer.stateDefinition,
- bundle,
- DpSize(40.dp, 50.dp),
- LayoutConfiguration.create(context, 1),
- )
+ }.compose(context, glanceId)
val view = context.applyRemoteViews(rv)
assertIs<TextView>(view)
@@ -155,31 +115,21 @@
}
@Test
- fun createUiWithUniqueMode() = fakeCoroutineScope.runTest {
- val composer = TestWidget {
+ fun createUiWithUniqueMode() = runTest {
+ val appWidgetManager = Shadows.shadowOf(
+ context.getSystemService(Context.APPWIDGET_SERVICE) as AppWidgetManager
+ )
+ appWidgetManager.addBoundWidget(glanceId.appWidgetId, appWidgetProviderInfo {
+ minWidth = 50
+ minHeight = 50
+ minResizeWidth = 40
+ minResizeHeight = 60
+ resizeMode = AppWidgetProviderInfo.RESIZE_BOTH
+ })
+ val rv = TestWidget {
val size = LocalSize.current
Text("${size.width} x ${size.height}")
- }
- val appWidgetManager = mock<AppWidgetManager> {
- on { getAppWidgetInfo(1) }.thenReturn(
- appWidgetProviderInfo {
- minWidth = 50
- minHeight = 50
- minResizeWidth = 40
- minResizeHeight = 60
- resizeMode = AppWidgetProviderInfo.RESIZE_BOTH
- }
- )
- }
-
- val rv = composer.compose(
- context,
- appWidgetManager,
- appWidgetId = 1,
- composer.stateDefinition,
- options = Bundle(),
- LayoutConfiguration.create(context, 2),
- )
+ }.compose(context, glanceId)
val view = context.applyRemoteViews(rv)
assertIs<TextView>(view)
@@ -188,23 +138,12 @@
@Config(sdk = [30])
@Test
- fun createUiWithExactModePreS() = fakeCoroutineScope.runTest {
- val composer = TestWidget(SizeMode.Exact) {
+ fun createUiWithExactModePreS() = runTest {
+ val options = optionsBundleOf(listOf(DpSize(100.dp, 50.dp), DpSize(50.dp, 100.dp)))
+ val rv = TestWidget(SizeMode.Exact) {
val size = LocalSize.current
Text("${size.width} x ${size.height}")
- }
- val options = optionsBundleOf(listOf(DpSize(100.dp, 50.dp), DpSize(50.dp, 100.dp)))
- val appWidgetManager = mock<AppWidgetManager> {
- on { getAppWidgetInfo(1) }.thenThrow(RuntimeException("This should not be called"))
- }
- val rv = composer.compose(
- context,
- appWidgetManager,
- appWidgetId = 1,
- composer.stateDefinition,
- options = options,
- LayoutConfiguration.create(context, 1),
- )
+ }.compose(context, glanceId, options)
val portraitView = createPortraitContext().applyRemoteViews(rv)
assertIs<TextView>(portraitView)
@@ -217,30 +156,19 @@
@Config(sdk = [30])
@Test
- fun createUiWithResponsiveModePreS() = fakeCoroutineScope.runTest {
+ fun createUiWithResponsiveModePreS() = runTest {
val sizes = setOf(
DpSize(60.dp, 80.dp),
DpSize(100.dp, 70.dp),
DpSize(120.dp, 100.dp),
)
- val composer = TestWidget(SizeMode.Responsive(sizes)) {
- val size = LocalSize.current
- Text("${size.width} x ${size.height}")
- }
// Note: Landscape fits the 60x80 and 100x70, portrait doesn't fit anything
val options =
optionsBundleOf(listOf(DpSize(125.dp, 90.dp), DpSize(40.0.dp, 120.dp)))
- val appWidgetManager = mock<AppWidgetManager> {
- on { getAppWidgetInfo(1) }.thenThrow(RuntimeException("This should not be called"))
- }
- val rv = composer.compose(
- context,
- appWidgetManager,
- appWidgetId = 1,
- composer.stateDefinition,
- options = options,
- LayoutConfiguration.create(context, 1),
- )
+ val rv = TestWidget(SizeMode.Responsive(sizes)) {
+ val size = LocalSize.current
+ Text("${size.width} x ${size.height}")
+ }.compose(context, glanceId, options)
val portraitView = createPortraitContext().applyRemoteViews(rv)
assertIs<TextView>(portraitView)
@@ -254,29 +182,20 @@
@Test
fun createUiWithExactMode_noSizeFallsBackToUnique() {
runBlocking {
- val composer = TestWidget(SizeMode.Exact) {
+ val appWidgetManager = Shadows.shadowOf(
+ context.getSystemService(Context.APPWIDGET_SERVICE) as AppWidgetManager
+ )
+ appWidgetManager.addBoundWidget(glanceId.appWidgetId, appWidgetProviderInfo {
+ minWidth = 50
+ minHeight = 50
+ minResizeWidth = 40
+ minResizeHeight = 60
+ resizeMode = AppWidgetProviderInfo.RESIZE_BOTH
+ })
+ val rv = TestWidget(SizeMode.Exact) {
val size = LocalSize.current
Text("${size.width} x ${size.height}")
- }
- val appWidgetManager = mock<AppWidgetManager> {
- on { getAppWidgetInfo(1) }.thenReturn(
- appWidgetProviderInfo {
- minWidth = 50
- minHeight = 50
- minResizeWidth = 40
- minResizeHeight = 60
- resizeMode = AppWidgetProviderInfo.RESIZE_BOTH
- }
- )
- }
- val rv = composer.compose(
- context,
- appWidgetManager,
- appWidgetId = 1,
- composer.stateDefinition,
- options = Bundle(),
- LayoutConfiguration.create(context, 1),
- )
+ }.compose(context, glanceId)
val portraitView = createPortraitContext().applyRemoteViews(rv)
assertIs<TextView>(portraitView)
@@ -290,27 +209,16 @@
@Config(sdk = [30])
@Test
- fun createUiWithResponsiveMode_noSizeUseMinSize() = fakeCoroutineScope.runTest {
+ fun createUiWithResponsiveMode_noSizeUseMinSize() = runTest {
val sizes = setOf(
DpSize(60.dp, 80.dp),
DpSize(100.dp, 70.dp),
DpSize(120.dp, 100.dp),
)
- val composer = TestWidget(SizeMode.Responsive(sizes)) {
+ val rv = TestWidget(SizeMode.Responsive(sizes)) {
val size = LocalSize.current
Text("${size.width} x ${size.height}")
- }
- val appWidgetManager = mock<AppWidgetManager> {
- on { getAppWidgetInfo(1) }.thenThrow(RuntimeException("This should not be called"))
- }
- val rv = composer.compose(
- context,
- appWidgetManager,
- appWidgetId = 1,
- composer.stateDefinition,
- options = Bundle(),
- LayoutConfiguration.create(context, 1),
- )
+ }.compose(context, glanceId)
val portraitView = createPortraitContext().applyRemoteViews(rv)
assertIs<TextView>(portraitView)
@@ -465,9 +373,6 @@
provideContentJob.cancel()
}
}
- override val sessionManager = GlanceSessionManager
- @Composable
- override fun Content() { }
}
widget.runGlance(context, AppWidgetId(0)).take(2).collectIndexed { index, content ->
when (index) {
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/TestUtils.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/TestUtils.kt
index 4927da4..766b3ba 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/TestUtils.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/TestUtils.kt
@@ -70,7 +70,6 @@
val applier = Applier(root)
val recomposer = Recomposer(currentCoroutineContext())
val composition = Composition(applier, recomposer)
-
composition.setContent { content() }
launch(TestFrameClock()) { recomposer.runRecomposeAndApplyChanges() }
@@ -176,15 +175,11 @@
) : GlanceAppWidget() {
val provideGlanceCalled = AtomicBoolean(false)
override suspend fun provideGlance(
- context: android.content.Context,
- id: androidx.glance.GlanceId
+ context: Context,
+ id: GlanceId
) {
provideGlanceCalled.set(true)
- provideContent { Content() }
- }
- @Composable
- override fun Content() {
- ui()
+ provideContent(ui)
}
}
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/state/GlanceAppWidgetStateTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/state/GlanceAppWidgetStateTest.kt
index 71531b7..137d09f 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/state/GlanceAppWidgetStateTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/state/GlanceAppWidgetStateTest.kt
@@ -17,28 +17,27 @@
package androidx.glance.appwidget.state
import android.content.Context
-import androidx.compose.runtime.Composable
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.emptyPreferences
import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.core.preferencesOf
+import androidx.glance.GlanceId
import androidx.glance.appwidget.AppWidgetId
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.createUniqueRemoteUiName
+import androidx.glance.appwidget.provideContent
import androidx.glance.state.GlanceState
import androidx.glance.state.GlanceStateDefinition
import androidx.glance.state.PreferencesGlanceStateDefinition
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
import kotlin.test.assertFailsWith
-import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.runBlocking
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
class GlanceAppWidgetStateTest {
@@ -91,14 +90,20 @@
class GlanceAppWidgetProviderWithoutState : GlanceAppWidget() {
override val stateDefinition: GlanceStateDefinition<*>? = null
- @Composable
- override fun Content() {
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId
+ ) {
+ provideContent {}
}
}
class GlanceAppWidgetProviderPreferencesState : GlanceAppWidget() {
- @Composable
- override fun Content() {
+ override suspend fun provideGlance(
+ context: Context,
+ id: GlanceId
+ ) {
+ provideContent {}
}
}
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/session/Session.kt b/glance/glance/src/androidMain/kotlin/androidx/glance/session/Session.kt
index 28c7ad1..3c4ecf4 100644
--- a/glance/glance/src/androidMain/kotlin/androidx/glance/session/Session.kt
+++ b/glance/glance/src/androidMain/kotlin/androidx/glance/session/Session.kt
@@ -24,8 +24,6 @@
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.ClosedReceiveChannelException
-typealias SetContentFn = suspend (@Composable @GlanceComposable () -> Unit) -> Unit
-
/**
* [Session] is implemented by Glance surfaces in order to provide content for the
* composition and process the results of recomposition.
@@ -47,8 +45,7 @@
abstract fun provideGlance(context: Context): @Composable @GlanceComposable () -> Unit
/**
- * Process the Emittable tree that results from the running the composable provided by
- * [provideGlance].
+ * Process the Emittable tree that results from the running [provideGlance].
*
* This will also be called for the results of future recompositions.
* @return true if the tree has been processed and the session is ready to handle events.
@@ -66,9 +63,10 @@
/**
* Enqueues an [event] to be processed by the session.
*
- * These requests may be processed by calling [receiveEvents].
+ * These requests may be processed by calling [receiveEvents]. Session implementations should
+ * wrap sendEvent with public methods to send the event types that their Session supports.
*/
- suspend fun sendEvent(event: Any) {
+ protected suspend fun sendEvent(event: Any) {
eventChannel.send(event)
}
@@ -87,10 +85,7 @@
}
}
- suspend fun close() {
+ fun close() {
eventChannel.close()
- onClose()
}
-
- open suspend fun onClose() {}
}
diff --git a/glance/glance/src/test/kotlin/androidx/glance/session/SessionManagerImplTest.kt b/glance/glance/src/test/kotlin/androidx/glance/session/SessionManagerImplTest.kt
index 09d5058..3fccf2d 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/session/SessionManagerImplTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/session/SessionManagerImplTest.kt
@@ -38,6 +38,7 @@
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
+@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
class SessionManagerImplTest {
private val key = "KEY"
diff --git a/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt b/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt
index 208c6f1..4916033 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/session/SessionWorkerTest.kt
@@ -32,7 +32,6 @@
import androidx.work.testing.TestListenableWorkerBuilder
import com.google.common.truth.Truth.assertThat
import kotlin.test.assertIs
-import kotlin.test.assertNotNull
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.first
@@ -140,7 +139,7 @@
val text = assertIs<EmittableText>(root.children.single())
assertThat(text.text).isEqualTo("Hello World")
}
- val session = assertNotNull(sessionManager.getSession(SESSION_KEY))
+ val session = assertIs<TestSession>(sessionManager.getSession(SESSION_KEY))
session.sendEvent {
state.value = "Hello Earth"
}
@@ -210,6 +209,8 @@
return true
}
+ suspend fun sendEvent(block: () -> Unit) = sendEvent(block as Any)
+
override suspend fun processEvent(context: Context, event: Any) {
require(event is Function0<*>)
event.invoke()
diff --git a/gradle.properties b/gradle.properties
index 5868acd..c10ff1a 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -6,6 +6,8 @@
org.gradle.welcome=never
# Disabled due to https://github.com/gradle/gradle/issues/18626
# org.gradle.vfs.watch=true
+# Reenabled in gradlew, but disabled in Studio until these errors become shown (b/268380971) or computed more quickly (https://github.com/gradle/gradle/issues/23272)
+org.gradle.dependency.verification=off
org.gradle.dependency.verification.console=verbose
org.gradle.unsafe.configuration-cache=true
org.gradle.unsafe.configuration-cache-problems=warn
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 7ed33f1..3a0ccb7 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -237,7 +237,7 @@
reactiveStreams = { module = "org.reactivestreams:reactive-streams", version = "1.0.0" }
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
retrofitConverterWire = { module = "com.squareup.retrofit2:converter-wire", version.ref = "retrofit" }
-robolectric = { module = "org.robolectric:robolectric", version = "4.9-alpha-1" }
+robolectric = { module = "org.robolectric:robolectric", version = "4.9.2" }
rxjava2 = { module = "io.reactivex.rxjava2:rxjava", version = "2.2.9" }
rxjava3 = { module = "io.reactivex.rxjava3:rxjava", version = "3.0.0" }
shadow = { module = "gradle.plugin.com.github.johnrengelman:shadow", version = "7.1.1" }
diff --git a/gradle/verification-keyring.keys b/gradle/verification-keyring.keys
index b0c2a94..996388e 100644
--- a/gradle/verification-keyring.keys
+++ b/gradle/verification-keyring.keys
@@ -13602,3 +13602,59 @@
Pt2uco8an9pO9/oqU6vlZUr38w==
=alQS
-----END PGP PUBLIC KEY BLOCK-----
+
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Comment: 10F3 C7A0 2ECA 55E5 02BA DCF3 991E FB94 DB91 127D
+Comment: Antoine Mottier <antoine.mottier@ow2.org>
+
+xsFNBF6WyHgBEADOrbvGGDYVckFcUofqKiYrBneClFJH1ANheF+KIekmnFV2SH1Z
+RS2rw12IbpCjwqjhFTMWH2UTLF6pAsSGIufTrSVUAF2WxHw84Y60KmwuYayJCVd3
+R91/FaonEcZkH770vNaij8BNnQUOXoyhTsmTw8tpMcVMyCjLn5qKtNVnGsafdi3C
+8VJBTP6x/LjYyv/m0/PgSIX8huzD6m8WzjKyEd9sww0K1sm6C3kF9S1/yQzTu8Hw
+Y22fc5HMNU6IzyUxLPht4BIbvtCIVn1HSfiKv3CUd4B/4z8voc9HJidFzrWxei+W
+uev1h8GSIGQdu7csfsuuFjbpIWuU1OpTRWNr8lFHtGtgQfE4AemSnvXycA/gSlWC
+M5BhTW5w5JuGSo2LBq+YEthjhrBrjkWsOGHiD6TiMvsFPw9UGvhEvzlqeA83sXiX
+KWHvroGUduKyq4/G0c2qCxncCB9IXA+Bbc2je+uSXxY+Phgz3b5XocqOKphTJ6Y5
+dvq8oYWrx4T0Ow/pYWT3n2gJP7BN7raRr2WafQ45fPKNYcE5qTDtLJ/HPPFKdHpP
+jZj8cFKzUw6VPbZwRQi+itJOUQeJ1l4xWvEA2RKgDxDcunO9270RGdSsj/rxNWRS
+mS5He7HuEYdzB8MsO+HrhQgTSTh4gpwgKr6lRhWJTyKH1qk2Q4pT3N4fIQARAQAB
+zSlBbnRvaW5lIE1vdHRpZXIgPGFudG9pbmUubW90dGllckBvdzIub3JnPsLBjgQT
+AQoAOBYhBBDzx6AuylXlArrc85ke+5TbkRJ9BQJelsh4AhsDBQsJCAcCBhUKCQgL
+AgQWAgMBAh4BAheAAAoJEJke+5TbkRJ9R14P/136DcEesh+kVXbIR3CDnN8oQDJl
+1ciqZMS93VNIQ7zY6hPtwVB/JBmWNjBrVCu+1MW8G0W39fGthWW1NtORZHnmna8q
+3yFdaPYDqikJr0DXs5gGM/Bo0K0aVtH4UNA1g9BKhIX/U6wbTkmFhZ/PBAKO6Gtp
+93aFtkCkO5vMu8r0yhig5sbv59FwjMoHaOPIydcfSPiYfYW0bacxBiY4B61XinWI
+dh21K1B3ufkeoyR2Zi4I6DPl0dj0XJzu2Aly+wPdywhD9mbfs2HCDYpZ+eSt5y4m
+FJgV8dXUrBOg+Ghw4iTcf4IFPXhbYwQNqq6MG7v8KCJVbLQwmSMxx1PWKJoSEYqI
+mH0cs306Kspt1+hZyf77KlvuVcwReAuXBc/bHhoR6LXlp+PMzYw8Hb6niewQIAx/
+oBYPdVN51tI/gRDNwDzpd12iWAC7XGr9CwEEmMUCKRiRGHOkzEeWUI6jZB+XwaH1
+oXC6k1vzMEWdF8T06D4GXX/TbM9a1/dCHNAx3hKhlkbFpTnAfkdCOLl53V9jarva
+QygfpbM0NI58/dgvcxlnf4JSfIf2V7ll+/nW5Ekt/grmihfgETxbIykqW4UqjS+k
+JFhqpSS+ey6GyRK4TF2TavdMC2X5X/uCpw+YvfouNDnTnUn80mxhxlZu9lxDUNgD
+jClweeOYOaZitvVXzsFNBF6WyHgBEADX15qJoH8yYoVJHhzNi41oHophSQ371uaB
+KTtY6GxNUFeGJWmTkBMKz4WvAiA2BIcYHwb0ZGIzEkwqKOJ+d6ZM/kOM5h8m198E
+SFKLk6RXgL0yqcE6y89IRUEuBtsnbkkR2IIrC83Aa1jMHb5oRitckVCGkzZEY6S4
+icqrpEseYW7VZrDbgCYfbT6zmZrTlThBdkAAefbxSGSfrKZc6FAyvHGzTfwbNmnd
+jXt+IBokmQEFo4lMx5qIqSRT6umU5icE3zfZXTx7jpuzUjuN9pGugIJolOfk7jVo
+rkIbvm3KnZPPmyFBaRyeIRzNdcqXLW8a5cuTgKCJWkdUblcHuKUfcRUMERTyQqk/
+STdm3SGcjU+LtMzK8ii5ZouixnFc4JQlrYsvTeNYKB1V7xFUcogbjB+bGNQ/OVKz
+aVJh5fkfCf2JKqjssjlbplDw2HEvkPv9T4m20pdt8LgIcBk1hKdWEPaeHP1hVGeD
+7WxJuDTBdE0dvrN5nk5womgLT+om2VC7qoC3tOoJ5GIps+Jcqh+03rolZI89iK7M
+2KW3h+OdY9fTS4fCNdvS9H19sroZ4G3S4TM4FMB8CqaOEdigbM+qHIndwwWTWowj
+TqfvbEECUNiRyK8/yhd8wgrUP1X9S0T3SV5b4H4VysN/rroPssBmv0q/SBTM45L7
+NnB8laTzcwARAQABwsF2BBgBCgAgFiEEEPPHoC7KVeUCutzzmR77lNuREn0FAl6W
+yHgCGwwACgkQmR77lNuREn0TmQ/+NO2IdVVCWAza3ONRb05cQfgWHZLr62J4jrOo
+aKNOvgkln6wcqbBXTczCBzQzjOPenaPDcCBApBt12ji6SxcUgLzjncnFgaNCQswN
+O8Z1UbY/n26DPb7tTxY97aN7BrDPTBlsv78SmTOrr2B3XlZ43D5SFpiSjhRRYbq+
+7ozhhE+ETXBVRf7j/MfbakJOYlfPZr29YwOYqKmXsNhIKK0Kf8TeQApd57dBNj1k
+JjM9Yqp/KxlwWNVjKYGo/eNIYy9hojK6gWLSKahED0fAjc0AZjoQmuQeJEIUyQDk
+CkVM4TACtVNq6P0TWGg35YexaJyQ7ddR2kMuHn1pI9qpgjzYjLTFnUkDf4vfD37r
+rlQ6hYngplPx9PJQM3ZZOdr63axYByMcUc8fHx0KHI85bCGGHZBzGyAyqmOgbAYI
+QixlIXbeZwLdvq3QlCy4oRH/rEjItt50dLVOblNyYnLO2HixgqUwtkMcHmv/ZDtH
+HeiFnzii6+FJQyVqwDYyT02odqde4TtSoCUuTqJg0z91l0b7O3Rl+t55C18qSVWE
+wvzFWug3eOWzCtscY4U/M44XPJaSUXF/vBMrtKeB5solOOb5T4HjNyDBwxFRYZm9
+w18S9Qb4LCdWzXZVRRLbIjKV3a1qR958Ad+iiQ5vQdsEfto6IjHgPQaAaqZi2OZ7
+zXFYXic=
+=YKsx
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 9c21f38..22a9b26 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -65,6 +65,7 @@
<trusted-key id="0f07d1201bddab67cfb84eb479752db6c966f0b8" group="com.google.android"/>
<trusted-key id="10066a9707090cf9" group="org.javassist"/>
<trusted-key id="10ae8966a146e8be" group="com.google.crypto.tink"/>
+ <trusted-key id="10f3c7a02eca55e502badcf3991efb94db91127d" group="org.ow2"/>
<trusted-key id="1188b69f6d6259ca" group="com.google.accompanist"/>
<trusted-key id="11b581967f079a30a3e93140d57506cd188fd842" group="com.google.api.grpc"/>
<trusted-key id="120d6f34e627ed3a772ebbfe55c7e5e701832382">
diff --git a/gradlew b/gradlew
index 9b54b57..11139b9 100755
--- a/gradlew
+++ b/gradlew
@@ -396,7 +396,13 @@
RETURN_VALUE=0
PROJECT_CACHE_DIR_ARGUMENT="--project-cache-dir $OUT_DIR/gradle-project-cache"
- if $wrapper "$JAVACMD" "${JVM_OPTS[@]}" $TMPDIR_ARG -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain $HOME_SYSTEM_PROPERTY_ARGUMENT $TMPDIR_ARG $PROJECT_CACHE_DIR_ARGUMENT "$ORG_GRADLE_JVMARGS" "$@"; then
+ # Disabled in Studio until these errors become shown (b/268380971) or computed more quickly (https://github.com/gradle/gradle/issues/23272)
+ if [[ " ${@} " =~ " --dependency-verification=" ]]; then
+ VERIFICATION_ARGUMENT="" # already specified by caller
+ else
+ VERIFICATION_ARGUMENT=--dependency-verification=strict
+ fi
+ if $wrapper "$JAVACMD" "${JVM_OPTS[@]}" $TMPDIR_ARG -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain $HOME_SYSTEM_PROPERTY_ARGUMENT $TMPDIR_ARG $PROJECT_CACHE_DIR_ARGUMENT $VERIFICATION_ARGUMENT "$ORG_GRADLE_JVMARGS" "$@"; then
RETURN_VALUE=0
else
# Print AndroidX-specific help message if build fails
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/SyncStrategyTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/SyncStrategyTest.kt
index f47e622..38050ea 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/SyncStrategyTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/SyncStrategyTest.kt
@@ -42,58 +42,72 @@
@RequiresApi(Build.VERSION_CODES.O)
@Test
fun testSyncStrategy_Always() {
- val egl = createAndSetupEGLManager(EGLSpec.V14)
- if (egl.supportsNativeAndroidFence()) {
- val strategy = SyncStrategy.ALWAYS
- val fence = strategy.createSyncFence(egl.eglSpec)
- assertTrue(fence != null)
- fence?.close()
+ withEgl { egl ->
+ if (egl.supportsNativeAndroidFence()) {
+ val strategy = SyncStrategy.ALWAYS
+ val fence = strategy.createSyncFence(egl.eglSpec)
+ assertTrue(fence != null)
+ fence?.close()
+ }
}
}
@Test
fun testSyncStrategy_onFirstShow_FrontBufferUsageOff_Invisible() {
- val egl = createAndSetupEGLManager(EGLSpec.V14)
- if (egl.supportsNativeAndroidFence()) {
- val strategy = FrontBufferSyncStrategy(0L)
- val fence = strategy.createSyncFence(EGLSpec.V14)
- assertTrue(fence != null)
- fence?.close()
+ withEgl { egl ->
+ if (egl.supportsNativeAndroidFence()) {
+ val strategy = FrontBufferSyncStrategy(0L)
+ val fence = strategy.createSyncFence(EGLSpec.V14)
+ assertTrue(fence != null)
+ fence?.close()
+ }
}
}
@Test
fun testSyncStrategy_onFirstShow_FrontBufferUsageOff_Visible() {
- val egl = createAndSetupEGLManager(EGLSpec.V14)
- if (egl.supportsNativeAndroidFence()) {
- val strategy = FrontBufferSyncStrategy(0L)
- strategy.isVisible = true
- val fence = strategy.createSyncFence(EGLSpec.V14)
- assertTrue(fence == null)
- fence?.close()
+ withEgl { egl ->
+ if (egl.supportsNativeAndroidFence()) {
+ val strategy = FrontBufferSyncStrategy(0L)
+ strategy.isVisible = true
+ val fence = strategy.createSyncFence(EGLSpec.V14)
+ assertTrue(fence == null)
+ fence?.close()
+ }
}
}
@Test
fun testSyncStrategy_onFirstShow_FrontBufferUsageOn_Invisible() {
- val egl = createAndSetupEGLManager(EGLSpec.V14)
- if (egl.supportsNativeAndroidFence()) {
- val strategy = FrontBufferSyncStrategy(mUsageFlags)
- val fence = strategy.createSyncFence(egl.eglSpec)
- assertTrue(fence != null)
- fence?.close()
+ withEgl { egl ->
+ if (egl.supportsNativeAndroidFence()) {
+ val strategy = FrontBufferSyncStrategy(mUsageFlags)
+ val fence = strategy.createSyncFence(egl.eglSpec)
+ assertTrue(fence != null)
+ fence?.close()
+ }
}
}
@Test
fun testSyncStrategy_onFirstShow_FrontBufferUsageOn_Visible() {
+ withEgl { egl ->
+ if (egl.supportsNativeAndroidFence()) {
+ val strategy = FrontBufferSyncStrategy(mUsageFlags)
+ strategy.isVisible = true
+ val fence = strategy.createSyncFence(EGLSpec.V14)
+ assertTrue(fence == null)
+ fence?.close()
+ }
+ }
+ }
+
+ private fun withEgl(block: (egl: EGLManager) -> Unit) {
val egl = createAndSetupEGLManager(EGLSpec.V14)
- if (egl.supportsNativeAndroidFence()) {
- val strategy = FrontBufferSyncStrategy(mUsageFlags)
- strategy.isVisible = true
- val fence = strategy.createSyncFence(EGLSpec.V14)
- assertTrue(fence == null)
- fence?.close()
+ try {
+ block(egl)
+ } finally {
+ releaseEGLManager(egl)
}
}
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLManagerTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLManagerTest.kt
index f7e5a2b..d2a9139 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLManagerTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLManagerTest.kt
@@ -58,7 +58,6 @@
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Assert.fail
-import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
@@ -221,7 +220,6 @@
}
}
- @Ignore // b/266736718
@Test
fun testCreatePBufferSurface() {
testEGLManager {
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt
index b475f0b..b93c174 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt
@@ -45,7 +45,6 @@
import org.junit.Assert.assertTrue
import org.junit.Assert.fail
import org.junit.Before
-import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
@@ -569,8 +568,6 @@
}
@Test
- @Ignore("b/262903415")
- @SdkSuppress(minSdkVersion = 29, maxSdkVersion = 33) // b/262909049: Failing on SDK 34
fun testTransactionSetBuffer_singleReleaseCallback() {
if (Build.VERSION.SDK_INT == 33 && Build.VERSION.CODENAME != "REL") {
return // b/262909049: Do not run this test on pre-release Android U.
@@ -633,9 +630,7 @@
}
}
- @Ignore("b/262909049")
@Test
- @SdkSuppress(minSdkVersion = 29, maxSdkVersion = 33) // b/262909049: Failing on SDK 34
fun testTransactionSetBuffer_multipleReleaseCallbacksAndOverwriteWithSingleSC() {
if (Build.VERSION.SDK_INT == 33 && Build.VERSION.CODENAME != "REL") {
return // b/262909049: Do not run this test on pre-release Android U.
@@ -782,7 +777,6 @@
}
}
- @Ignore("b/262909049")
@Test
fun testTransactionSetBuffer_ReleaseCallbacksAndOverwriteWithMultipleSC() {
val releaseLatch = CountDownLatch(1)
diff --git a/health/connect/connect-client/api/api_lint.ignore b/health/connect/connect-client/api/api_lint.ignore
index 4ad84ae..e2d1805 100644
--- a/health/connect/connect-client/api/api_lint.ignore
+++ b/health/connect/connect-client/api/api_lint.ignore
@@ -1,5 +1,3 @@
// Baseline format: 1.0
-ActionValue: androidx.health.connect.client.HealthConnectClient#ACTION_HEALTH_CONNECT_SETTINGS:
- Inconsistent action value; expected `androidx.health.connect.client.action.HEALTH_CONNECT_SETTINGS`, was `androidx.health.ACTION_HEALTH_CONNECT_SETTINGS`
-ActionValue: androidx.health.connect.client.HealthConnectClient.Companion#ACTION_HEALTH_CONNECT_SETTINGS:
- Inconsistent action value; expected `androidx.health.connect.client.action.HEALTH_CONNECT_SETTINGS`, was `androidx.health.ACTION_HEALTH_CONNECT_SETTINGS`
+MissingJvmstatic: androidx.health.connect.client.HealthConnectClient#ACTION_HEALTH_CONNECT_SETTINGS:
+ Companion object constants like ACTION_HEALTH_CONNECT_SETTINGS should be using @JvmField, not @JvmStatic; see https://developer.android.com/kotlin/interop#companion_constants
diff --git a/health/connect/connect-client/api/current.txt b/health/connect/connect-client/api/current.txt
index e5fb7f2..1557dcd 100644
--- a/health/connect/connect-client/api/current.txt
+++ b/health/connect/connect-client/api/current.txt
@@ -9,6 +9,7 @@
method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
method public suspend Object? getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest request, kotlin.coroutines.Continuation<? super java.lang.String>);
+ method public default static String getHealthConnectSettingsAction();
method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
method public androidx.health.connect.client.PermissionController getPermissionController();
@@ -21,8 +22,8 @@
method public default static int sdkStatus(android.content.Context context, optional String providerPackageName);
method public default static int sdkStatus(android.content.Context context);
method public suspend Object? updateRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public default static String ACTION_HEALTH_CONNECT_SETTINGS;
property public abstract androidx.health.connect.client.PermissionController permissionController;
- field public static final String ACTION_HEALTH_CONNECT_SETTINGS = "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS";
field public static final androidx.health.connect.client.HealthConnectClient.Companion Companion;
field public static final int SDK_AVAILABLE = 3; // 0x3
field public static final int SDK_UNAVAILABLE = 1; // 0x1
@@ -30,6 +31,7 @@
}
public static final class HealthConnectClient.Companion {
+ method public String getHealthConnectSettingsAction();
method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
method @Deprecated public boolean isApiSupported();
@@ -37,7 +39,7 @@
method @Deprecated public boolean isProviderAvailable(android.content.Context context);
method public int sdkStatus(android.content.Context context, optional String providerPackageName);
method public int sdkStatus(android.content.Context context);
- field public static final String ACTION_HEALTH_CONNECT_SETTINGS = "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS";
+ property public final String ACTION_HEALTH_CONNECT_SETTINGS;
field public static final int SDK_AVAILABLE = 3; // 0x3
field public static final int SDK_UNAVAILABLE = 1; // 0x1
field public static final int SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED = 2; // 0x2
diff --git a/health/connect/connect-client/api/public_plus_experimental_current.txt b/health/connect/connect-client/api/public_plus_experimental_current.txt
index e5fb7f2..1557dcd 100644
--- a/health/connect/connect-client/api/public_plus_experimental_current.txt
+++ b/health/connect/connect-client/api/public_plus_experimental_current.txt
@@ -9,6 +9,7 @@
method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
method public suspend Object? getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest request, kotlin.coroutines.Continuation<? super java.lang.String>);
+ method public default static String getHealthConnectSettingsAction();
method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
method public androidx.health.connect.client.PermissionController getPermissionController();
@@ -21,8 +22,8 @@
method public default static int sdkStatus(android.content.Context context, optional String providerPackageName);
method public default static int sdkStatus(android.content.Context context);
method public suspend Object? updateRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public default static String ACTION_HEALTH_CONNECT_SETTINGS;
property public abstract androidx.health.connect.client.PermissionController permissionController;
- field public static final String ACTION_HEALTH_CONNECT_SETTINGS = "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS";
field public static final androidx.health.connect.client.HealthConnectClient.Companion Companion;
field public static final int SDK_AVAILABLE = 3; // 0x3
field public static final int SDK_UNAVAILABLE = 1; // 0x1
@@ -30,6 +31,7 @@
}
public static final class HealthConnectClient.Companion {
+ method public String getHealthConnectSettingsAction();
method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
method @Deprecated public boolean isApiSupported();
@@ -37,7 +39,7 @@
method @Deprecated public boolean isProviderAvailable(android.content.Context context);
method public int sdkStatus(android.content.Context context, optional String providerPackageName);
method public int sdkStatus(android.content.Context context);
- field public static final String ACTION_HEALTH_CONNECT_SETTINGS = "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS";
+ property public final String ACTION_HEALTH_CONNECT_SETTINGS;
field public static final int SDK_AVAILABLE = 3; // 0x3
field public static final int SDK_UNAVAILABLE = 1; // 0x1
field public static final int SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED = 2; // 0x2
diff --git a/health/connect/connect-client/api/restricted_current.txt b/health/connect/connect-client/api/restricted_current.txt
index e3916eb..8b5c16b 100644
--- a/health/connect/connect-client/api/restricted_current.txt
+++ b/health/connect/connect-client/api/restricted_current.txt
@@ -9,6 +9,7 @@
method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
method public suspend Object? getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest request, kotlin.coroutines.Continuation<? super java.lang.String>);
+ method public default static String getHealthConnectSettingsAction();
method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
method public androidx.health.connect.client.PermissionController getPermissionController();
@@ -21,8 +22,8 @@
method public default static int sdkStatus(android.content.Context context, optional String providerPackageName);
method public default static int sdkStatus(android.content.Context context);
method public suspend Object? updateRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public default static String ACTION_HEALTH_CONNECT_SETTINGS;
property public abstract androidx.health.connect.client.PermissionController permissionController;
- field public static final String ACTION_HEALTH_CONNECT_SETTINGS = "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS";
field public static final androidx.health.connect.client.HealthConnectClient.Companion Companion;
field public static final int SDK_AVAILABLE = 3; // 0x3
field public static final int SDK_UNAVAILABLE = 1; // 0x1
@@ -30,6 +31,7 @@
}
public static final class HealthConnectClient.Companion {
+ method public String getHealthConnectSettingsAction();
method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
method @Deprecated public boolean isApiSupported();
@@ -37,7 +39,7 @@
method @Deprecated public boolean isProviderAvailable(android.content.Context context);
method public int sdkStatus(android.content.Context context, optional String providerPackageName);
method public int sdkStatus(android.content.Context context);
- field public static final String ACTION_HEALTH_CONNECT_SETTINGS = "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS";
+ property public final String ACTION_HEALTH_CONNECT_SETTINGS;
field public static final int SDK_AVAILABLE = 3; // 0x3
field public static final int SDK_UNAVAILABLE = 1; // 0x1
field public static final int SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED = 2; // 0x2
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 8e942a9..8676442 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
@@ -58,13 +58,23 @@
* [androidx.health.connect.client.records.metadata.Metadata.id] generated. Insertion of
* multiple [records] is executed in a transaction - if one fails, none is inserted.
*
+ * @param records List of records to insert
+ * @return List of unique identifiers in the order of inserted records.
+ * @throws RemoteException For any IPC transportation failures.
+ * @throws SecurityException For requests with unpermitted access.
+ * @throws IOException For any disk I/O issues.
+ * @throws IllegalStateException If service is not available.
+ *
* For example, to insert basic data like step counts:
+ *
* @sample androidx.health.connect.client.samples.InsertSteps
*
* To insert more complex data like nutrition for a user who’s eaten a banana:
+ *
* @sample androidx.health.connect.client.samples.InsertNutrition
*
* To insert some heart rate data:
+ *
* @sample androidx.health.connect.client.samples.InsertHeartRateSeries
*
* [androidx.health.connect.client.records.metadata.Metadata.clientRecordId] can be used to
@@ -74,13 +84,6 @@
* with the higher
* [androidx.health.connect.client.records.metadata.Metadata.clientRecordVersion] takes
* precedence.
- *
- * @param records List of records to insert
- * @return List of unique identifiers in the order of inserted records.
- * @throws RemoteException For any IPC transportation failures.
- * @throws SecurityException For requests with unpermitted access.
- * @throws IOException For any disk I/O issues.
- * @throws IllegalStateException If service is not available.
*/
suspend fun insertRecords(records: List<Record>): InsertRecordsResponse
@@ -90,7 +93,7 @@
*
* @param records List of records to update
* @throws RemoteException For any IPC transportation failures. Update with invalid identifiers
- * will result in IPC failure.
+ * will result in IPC failure.
* @throws SecurityException For requests with unpermitted access.
* @throws IOException For any disk I/O issues.
* @throws IllegalStateException If service is not available.
@@ -101,19 +104,20 @@
* Deletes one or more [Record] by their identifiers. Deletion of multiple [Record] is executed
* in single transaction - if one fails, none is deleted.
*
- * Example usage to delete written steps data by its unique identifier:
- * @sample androidx.health.connect.client.samples.DeleteByUniqueIdentifier
- *
* @param recordType Which type of [Record] to delete, such as `Steps::class`
* @param recordIdsList List of [androidx.health.connect.client.records.metadata.Metadata.id] of
- * [Record] to delete
+ * [Record] to delete
* @param clientRecordIdsList List of client record IDs of [Record] to delete
* @throws RemoteException For any IPC transportation failures. Deleting by invalid identifiers
- * such as a non-existing identifier or deleting the same record multiple times will result in
- * IPC failure.
+ * such as a non-existing identifier or deleting the same record multiple times will result in
+ * IPC failure.
* @throws SecurityException For requests with unpermitted access.
* @throws IOException For any disk I/O issues.
* @throws IllegalStateException If service is not available.
+ *
+ * Example usage to delete written steps data by its unique identifier:
+ *
+ * @sample androidx.health.connect.client.samples.DeleteByUniqueIdentifier
*/
suspend fun deleteRecords(
recordType: KClass<out Record>,
@@ -126,15 +130,16 @@
* filtered to [Record] belonging to the calling application). Deletion of multiple [Record] is
* executed in a transaction - if one fails, none is deleted.
*
- * Example usage to delete written steps data in a time range:
- * @sample androidx.health.connect.client.samples.DeleteByTimeRange
- *
* @param recordType Which type of [Record] to delete, such as `Steps::class`
* @param timeRangeFilter The [TimeRangeFilter] to delete from
* @throws RemoteException For any IPC transportation failures.
* @throws SecurityException For requests with unpermitted access.
* @throws IOException For any disk I/O issues.
* @throws IllegalStateException If service is not available.
+ *
+ * Example usage to delete written steps data in a time range:
+ *
+ * @sample androidx.health.connect.client.samples.DeleteByTimeRange
*/
suspend fun deleteRecords(recordType: KClass<out Record>, timeRangeFilter: TimeRangeFilter)
@@ -143,10 +148,10 @@
*
* @param recordType Which type of [Record] to read, such as `Steps::class`
* @param recordId [androidx.health.connect.client.records.metadata.Metadata.id] of [Record] to
- * read
+ * read
* @return The [Record] data point.
* @throws RemoteException For any IPC transportation failures. Update with invalid identifiers
- * will result in IPC failure.
+ * will result in IPC failure.
* @throws SecurityException For requests with unpermitted access.
* @throws IOException For any disk I/O issues.
* @throws IllegalStateException If service is not available.
@@ -159,17 +164,17 @@
/**
* Retrieves a collection of [Record]s.
*
- * Example code to read basic data like step counts:
- * @sample androidx.health.connect.client.samples.ReadStepsRange
- *
* @param T the type of [Record]
* @param request [ReadRecordsRequest] object specifying time range and other filters
- *
* @return a response containing a collection of [Record]s.
* @throws RemoteException For any IPC transportation failures.
* @throws SecurityException For requests with unpermitted access.
* @throws IOException For any disk I/O issues.
* @throws IllegalStateException If service is not available.
+ *
+ * Example code to read basic data like step counts:
+ *
+ * @sample androidx.health.connect.client.samples.ReadStepsRange
*/
suspend fun <T : Record> readRecords(request: ReadRecordsRequest<T>): ReadRecordsResponse<T>
@@ -177,20 +182,21 @@
* Reads [AggregateMetric]s according to requested read criteria: [Record]s from
* [AggregateRequest.dataOriginFilter] and within [AggregateRequest.timeRangeFilter].
*
- * Example code to aggregate cumulative data like distance:
- * @sample androidx.health.connect.client.samples.AggregateDistance
- *
- * Example code to retrieve statistical aggregates like maximum or minimum heart rate:
- * @sample androidx.health.connect.client.samples.AggregateHeartRate
- *
* @param request [AggregateRequest] object specifying [AggregateMetric]s to aggregate and other
- * filters.
- *
+ * filters.
* @return the [AggregationResult] that contains aggregated values.
* @throws RemoteException For any IPC transportation failures.
* @throws SecurityException For requests with unpermitted access.
* @throws IOException For any disk I/O issues.
* @throws IllegalStateException If service is not available.
+ *
+ * Example code to aggregate cumulative data like distance:
+ *
+ * @sample androidx.health.connect.client.samples.AggregateDistance
+ *
+ * Example code to retrieve statistical aggregates like maximum or minimum heart rate:
+ *
+ * @sample androidx.health.connect.client.samples.AggregateHeartRate
*/
suspend fun aggregate(request: AggregateRequest): AggregationResult
@@ -205,18 +211,18 @@
* An [AggregationResultGroupedByDuration] is returned only if there are [Record] to aggregate
* within start and end time of the row.
*
- * Example code to retrieve cumulative step count for each minute within provided time range:
- * @sample androidx.health.connect.client.samples.AggregateIntoMinutes
- *
* @param request [AggregateGroupByDurationRequest] object specifying [AggregateMetric]s to
- * aggregate and other filters.
- *
+ * aggregate and other filters.
* @return a list of [AggregationResultGroupedByDuration]s, each contains aggregated values and
- * start/end time of the row. The list is sorted by time in ascending order.
+ * start/end time of the row. The list is sorted by time in ascending order.
* @throws RemoteException For any IPC transportation failures.
* @throws SecurityException For requests with unpermitted access.
* @throws IOException For any disk I/O issues.
* @throws IllegalStateException If service is not available.
+ *
+ * Example code to retrieve cumulative step count for each minute within provided time range:
+ *
+ * @sample androidx.health.connect.client.samples.AggregateIntoMinutes
*/
suspend fun aggregateGroupByDuration(
request: AggregateGroupByDurationRequest,
@@ -233,18 +239,18 @@
* An [AggregationResultGroupedByPeriod] is returned only if there are [Record] to aggregate
* within start and end time of the row.
*
- * Example code to retrieve cumulative step count for each month within provided time range:
- * @sample androidx.health.connect.client.samples.AggregateIntoMonths
- *
* @param request [AggregateGroupByPeriodRequest] object specifying [AggregateMetric]s to
- * aggregate and other filters.
- *
+ * aggregate and other filters.
* @return a list of [AggregationResultGroupedByPeriod]s, each contains aggregated values and
- * start/end time of the row. The list is sorted by time in ascending order.
+ * start/end time of the row. The list is sorted by time in ascending order.
* @throws RemoteException For any IPC transportation failures.
* @throws SecurityException For requests with unpermitted access.
* @throws IOException For any disk I/O issues.
* @throws IllegalStateException If service is not available.
+ *
+ * Example code to retrieve cumulative step count for each month within provided time range:
+ *
+ * @sample androidx.health.connect.client.samples.AggregateIntoMonths
*/
suspend fun aggregateGroupByPeriod(
request: AggregateGroupByPeriodRequest,
@@ -263,11 +269,9 @@
*
* @param request Includes interested types of record to observe changes and optional filters.
* @return a changes-token
- *
* @throws RemoteException For any IPC transportation failures.
* @throws SecurityException For requests with unpermitted access.
* @throws IllegalStateException If service is not available.
- *
* @see getChanges
*/
suspend fun getChangesToken(request: ChangesTokenRequest): String
@@ -292,12 +296,10 @@
*
* @param notificationIntentAction an action to be used for broadcast messages.
* @param recordTypes specifies [Record] types of interest.
- *
* @throws RemoteException For any IPC transportation failures.
* @throws SecurityException For requests with unpermitted access.
* @throws IOException For any disk I/O issues.
* @throws IllegalStateException If service is not available.
- *
* @see unregisterFromDataNotifications
* @see androidx.health.connect.client.datanotification.DataNotification
*/
@@ -311,13 +313,11 @@
* Unregisters the provided [notificationIntentAction] from data notifications.
*
* @param notificationIntentAction an action previously registered using
- * [registerForDataNotifications] method.
- *
+ * [registerForDataNotifications] method.
* @throws RemoteException For any IPC transportation failures.
* @throws SecurityException For requests with unpermitted access.
* @throws IOException For any disk I/O issues.
* @throws IllegalStateException If service is not available.
- *
* @see registerForDataNotifications
*/
@RestrictTo(RestrictTo.Scope.LIBRARY) // Not yet ready for public
@@ -345,13 +345,11 @@
* ```
*
* @param changesToken A Changes-Token that represents a specific point in time in Android
- * Health Platform.
+ * Health Platform.
* @return a [ChangesResponse] with changes since provided [changesToken].
- *
* @throws RemoteException For any IPC transportation failures.
* @throws SecurityException For requests with unpermitted access.
* @throws IllegalStateException If service is not available.
- *
* @see getChangesToken
*/
suspend fun getChanges(changesToken: String): ChangesResponse
@@ -367,8 +365,9 @@
* Intent action to open Health Connect settings on this phone. Developers should use this
* if they want to re-direct the user to Health Connect.
*/
- const val ACTION_HEALTH_CONNECT_SETTINGS =
- "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS"
+ @get:JvmName("getHealthConnectSettingsAction")
+ @JvmStatic
+ val ACTION_HEALTH_CONNECT_SETTINGS = "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS"
/**
* The Health Connect SDK is not unavailable on this device at the time. This can be due to
@@ -396,11 +395,11 @@
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef(
value =
- [
- SDK_UNAVAILABLE,
- SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED,
- SDK_AVAILABLE,
- ]
+ [
+ SDK_UNAVAILABLE,
+ SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED,
+ SDK_AVAILABLE,
+ ]
)
annotation class AvailabilityStatus
@@ -409,8 +408,8 @@
*
* @param context the context
* @param providerPackageName optional package provider to choose for backend implementation
- * @return One of [SDK_UNAVAILABLE], [SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED]
- * or [SDK_AVAILABLE]
+ * @return One of [SDK_UNAVAILABLE], [SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED] or
+ * [SDK_AVAILABLE]
* @sample androidx.health.connect.client.samples.AvailabilityCheckSamples
*/
@JvmOverloads
@@ -473,11 +472,10 @@
*
* @param context the context
* @param providerPackageName optional alternative package provider to choose for backend
- * implementation
+ * implementation
* @return instance of [HealthConnectClient] ready for issuing requests
* @throws UnsupportedOperationException if service not available due to SDK version too low
* @throws IllegalStateException if service not available due to not installed
- *
* @see isProviderAvailable
*/
@JvmOverloads
@@ -516,7 +514,7 @@
return packageInfo.applicationInfo.enabled &&
(packageName != DEFAULT_PROVIDER_PACKAGE_NAME ||
PackageInfoCompat.getLongVersionCode(packageInfo) >=
- DEFAULT_PROVIDER_MIN_VERSION_CODE) &&
+ DEFAULT_PROVIDER_MIN_VERSION_CODE) &&
hasBindableService(packageManager, packageName)
}
@@ -533,6 +531,7 @@
/**
* Tag used in SDK debug logs.
+ *
* @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
diff --git a/leanback/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java b/leanback/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java
index 77a5b38..0c619b1 100644
--- a/leanback/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java
+++ b/leanback/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java
@@ -2105,6 +2105,7 @@
assertFalse(scrolled[0]);
}
+ @Ignore // b/268680302
@Test
public void testItemMovedHorizontal() throws Throwable {
Intent intent = new Intent();
@@ -2251,6 +2252,7 @@
assertEquals(topPadding, mGridView.findViewHolderForAdapterPosition(0).itemView.getTop());
}
+ @Ignore // b/268680302
@Test
public void testItemMovedVertical() throws Throwable {
diff --git a/leanback/leanback/src/main/res/values-ca/strings.xml b/leanback/leanback/src/main/res/values-ca/strings.xml
index afd2cd7e..dd75548 100644
--- a/leanback/leanback/src/main/res/values-ca/strings.xml
+++ b/leanback/leanback/src/main/res/values-ca/strings.xml
@@ -47,7 +47,7 @@
<string name="lb_playback_controls_high_quality_disable" msgid="1209119371486219736">"Desactiva l\'alta qualitat"</string>
<string name="lb_playback_controls_closed_captioning_enable" msgid="2346334170216706076">"Activa els subtítols"</string>
<string name="lb_playback_controls_closed_captioning_disable" msgid="8691966842977635128">"Desactiva els subtítols"</string>
- <string name="lb_playback_controls_picture_in_picture" msgid="5770668162543767702">"Entra al mode de pantalla en pantalla"</string>
+ <string name="lb_playback_controls_picture_in_picture" msgid="5770668162543767702">"Entra al mode d\'imatge sobre imatge"</string>
<string name="lb_playback_time_separator" msgid="1471121602610716654">"/"</string>
<string name="lb_playback_controls_shown" msgid="8690223891515602822">"Es mostren els controls multimèdia"</string>
<string name="lb_playback_controls_hidden" msgid="5859666950961624736">"S\'han amagat els controls multimèdia; prem la creu direccional per mostrar-los"</string>
diff --git a/libraryversions.toml b/libraryversions.toml
index 45ddef4..2b9eac2 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -1,14 +1,14 @@
[versions]
ACTIVITY = "1.7.0-beta02"
ADS_IDENTIFIER = "1.0.0-alpha05"
-ANNOTATION = "1.6.0-rc01"
+ANNOTATION = "1.7.0-alpha01"
ANNOTATION_KMP = "1.6.0-dev01"
ANNOTATION_EXPERIMENTAL = "1.4.0-alpha01"
ANNOTATION_EXPERIMENTAL_KMP = "1.4.0-dev01"
APPACTIONS_INTERACTION = "1.0.0-alpha01"
-APPCOMPAT = "1.7.0-alpha02"
+APPCOMPAT = "1.7.0-alpha03"
APPSEARCH = "1.1.0-alpha03"
-ARCH_CORE = "2.2.0-rc01"
+ARCH_CORE = "2.3.0-alpha01"
ASYNCLAYOUTINFLATER = "1.1.0-alpha02"
AUTOFILL = "1.2.0-beta02"
BENCHMARK = "1.2.0-alpha10"
@@ -22,16 +22,16 @@
CAR_APP = "1.4.0-alpha01"
COLLECTION = "1.3.0-alpha03"
COLLECTION_KMP = "1.3.0-dev01"
-COMPOSE = "1.4.0-beta01"
+COMPOSE = "1.4.0-beta02"
COMPOSE_COMPILER = "1.4.2"
-COMPOSE_MATERIAL3 = "1.1.0-alpha06"
-COMPOSE_RUNTIME_TRACING = "1.0.0-alpha02"
-CONSTRAINTLAYOUT = "2.2.0-alpha07"
-CONSTRAINTLAYOUT_COMPOSE = "1.1.0-alpha07"
-CONSTRAINTLAYOUT_CORE = "1.1.0-alpha07"
+COMPOSE_MATERIAL3 = "1.1.0-alpha07"
+COMPOSE_RUNTIME_TRACING = "1.0.0-alpha03"
+CONSTRAINTLAYOUT = "2.2.0-alpha08"
+CONSTRAINTLAYOUT_COMPOSE = "1.1.0-alpha08"
+CONSTRAINTLAYOUT_CORE = "1.1.0-alpha08"
CONTENTPAGER = "1.1.0-alpha01"
COORDINATORLAYOUT = "1.3.0-alpha01"
-CORE = "1.10.0-alpha03"
+CORE = "1.10.0-beta01"
CORE_ANIMATION = "1.0.0-beta02"
CORE_ANIMATION_TESTING = "1.0.0-beta01"
CORE_APPDIGEST = "1.0.0-alpha01"
@@ -43,7 +43,7 @@
CORE_ROLE = "1.2.0-alpha01"
CORE_SPLASHSCREEN = "1.1.0-alpha01"
CORE_UWB = "1.0.0-alpha05"
-CREDENTIALS = "1.0.0-alpha02"
+CREDENTIALS = "1.0.0-alpha03"
CURSORADAPTER = "1.1.0-alpha01"
CUSTOMVIEW = "1.2.0-alpha03"
CUSTOMVIEW_POOLINGCONTAINER = "1.1.0-alpha01"
@@ -55,11 +55,11 @@
DYNAMICANIMATION = "1.1.0-alpha04"
DYNAMICANIMATION_KTX = "1.0.0-alpha04"
EMOJI = "1.2.0-alpha03"
-EMOJI2 = "1.3.0-beta02"
+EMOJI2 = "1.3.0-beta03"
EMOJI2_QUARANTINE = "1.0.0-alpha02"
ENTERPRISE = "1.1.0-rc01"
EXIFINTERFACE = "1.4.0-alpha01"
-FRAGMENT = "1.6.0-alpha05"
+FRAGMENT = "1.6.0-alpha06"
FUTURES = "1.2.0-alpha01"
GLANCE = "1.0.0-alpha06"
GLANCE_TEMPLATE = "1.0.0-alpha01"
@@ -82,16 +82,16 @@
LEANBACK_TAB = "1.1.0-beta01"
LEGACY = "1.1.0-alpha01"
LIBYUV = "0.1.0-dev01"
-LIFECYCLE = "2.6.0-beta01"
+LIFECYCLE = "2.6.0-rc01"
LIFECYCLE_EXTENSIONS = "2.2.0"
LOADER = "1.2.0-alpha01"
-MEDIA = "1.7.0-alpha01"
+MEDIA = "1.7.0-alpha02"
MEDIA2 = "1.3.0-alpha01"
MEDIAROUTER = "1.4.0-beta02"
METRICS = "1.0.0-alpha04"
-NAVIGATION = "2.6.0-alpha05"
-PAGING = "3.2.0-alpha04"
-PAGING_COMPOSE = "1.0.0-alpha18"
+NAVIGATION = "2.6.0-alpha06"
+PAGING = "3.2.0-alpha05"
+PAGING_COMPOSE = "1.0.0-alpha19"
PALETTE = "1.1.0-alpha01"
PERCENTLAYOUT = "1.1.0-alpha01"
PREFERENCE = "1.3.0-alpha01"
@@ -100,7 +100,7 @@
PRIVACYSANDBOX_SDKRUNTIME = "1.0.0-alpha01"
PRIVACYSANDBOX_TOOLS = "1.0.0-alpha03"
PRIVACYSANDBOX_UI = "1.0.0-alpha01"
-PROFILEINSTALLER = "1.3.0-beta01"
+PROFILEINSTALLER = "1.3.0-beta02"
RECOMMENDATION = "1.1.0-alpha01"
RECYCLERVIEW = "1.4.0-alpha01"
RECYCLERVIEW_SELECTION = "1.2.0-alpha02"
@@ -129,7 +129,7 @@
TEST_UIAUTOMATOR = "2.3.0-alpha03"
TEXT = "1.0.0-alpha01"
TRACING = "1.2.0-alpha02"
-TRACING_PERFETTO = "1.0.0-alpha10"
+TRACING_PERFETTO = "1.0.0-alpha11"
TRANSITION = "1.5.0-alpha01"
TV = "1.0.0-alpha04"
TVPROVIDER = "1.1.0-alpha02"
@@ -140,19 +140,19 @@
VIEWPAGER = "1.1.0-alpha02"
VIEWPAGER2 = "1.2.0-alpha01"
WEAR = "1.3.0-alpha05"
-WEAR_COMPOSE = "1.2.0-alpha04"
+WEAR_COMPOSE = "1.2.0-alpha05"
WEAR_COMPOSE_MATERIAL3 = "1.0.0-alpha01"
WEAR_INPUT = "1.2.0-alpha03"
WEAR_INPUT_TESTING = "1.2.0-alpha03"
WEAR_ONGOING = "1.1.0-alpha01"
WEAR_PHONE_INTERACTIONS = "1.1.0-alpha04"
-WEAR_PROTOLAYOUT = "1.0.0-alpha03"
+WEAR_PROTOLAYOUT = "1.0.0-alpha04"
WEAR_REMOTE_INTERACTIONS = "1.1.0-alpha01"
WEAR_TILES = "1.2.0-alpha01"
WEAR_WATCHFACE = "1.2.0-alpha07"
-WEBKIT = "1.7.0-alpha02"
-WINDOW = "1.1.0-alpha05"
-WINDOW_EXTENSIONS = "1.1.0-alpha02"
+WEBKIT = "1.7.0-alpha03"
+WINDOW = "1.1.0-alpha06"
+WINDOW_EXTENSIONS = "1.1.0-alpha03"
WINDOW_EXTENSIONS_CORE = "1.0.0-alpha01"
WINDOW_SIDECAR = "1.0.0-rc01"
WORK = "2.9.0-alpha01"
diff --git a/lifecycle/lifecycle-livedata/src/main/java/androidx/lifecycle/Transformations.kt b/lifecycle/lifecycle-livedata/src/main/java/androidx/lifecycle/Transformations.kt
index 26d7c36..c3b9ed6 100644
--- a/lifecycle/lifecycle-livedata/src/main/java/androidx/lifecycle/Transformations.kt
+++ b/lifecycle/lifecycle-livedata/src/main/java/androidx/lifecycle/Transformations.kt
@@ -177,19 +177,20 @@
@CheckResult
fun <X> LiveData<X>.distinctUntilChanged(): LiveData<X> {
val outputLiveData = MediatorLiveData<X>()
- outputLiveData.addSource(this, object : Observer<X> {
- var firstTime = true
-
- override fun onChanged(value: X) {
- val previousValue = outputLiveData.value
- if (firstTime ||
- previousValue == null && value != null ||
- previousValue != null && previousValue != value
- ) {
- firstTime = false
- outputLiveData.value = value
- }
+ var firstTime = true
+ if (isInitialized) {
+ outputLiveData.value = value
+ firstTime = false
+ }
+ outputLiveData.addSource(this) { value ->
+ val previousValue = outputLiveData.value
+ if (firstTime ||
+ previousValue == null && value != null ||
+ previousValue != null && previousValue != value
+ ) {
+ firstTime = false
+ outputLiveData.value = value
}
- })
+ }
return outputLiveData
}
\ No newline at end of file
diff --git a/lifecycle/lifecycle-livedata/src/test/java/androidx/lifecycle/TransformationsTest.java b/lifecycle/lifecycle-livedata/src/test/java/androidx/lifecycle/TransformationsTest.java
index 4b1a493..d7f3527 100644
--- a/lifecycle/lifecycle-livedata/src/test/java/androidx/lifecycle/TransformationsTest.java
+++ b/lifecycle/lifecycle-livedata/src/test/java/androidx/lifecycle/TransformationsTest.java
@@ -193,6 +193,19 @@
}
@Test
+ public void testDistinctUntilChanged_initialValueIsSet() {
+ MutableLiveData<String> originalLiveData = new MutableLiveData<>("value");
+
+ LiveData<String> dedupedLiveData = Transformations.distinctUntilChanged(originalLiveData);
+ assertThat(dedupedLiveData.getValue(), is("value"));
+
+ CountingObserver<String> observer = new CountingObserver<>();
+ dedupedLiveData.observe(mOwner, observer);
+ assertThat(observer.mTimesUpdated, is(1));
+ assertThat(dedupedLiveData.getValue(), is("value"));
+ }
+
+ @Test
public void testDistinctUntilChanged_triggersOnInitialNullValue() {
MutableLiveData<String> originalLiveData = new MutableLiveData<>();
originalLiveData.setValue(null);
diff --git a/lifecycle/lifecycle-runtime/build.gradle b/lifecycle/lifecycle-runtime/build.gradle
index 1f23cf2..ba33a165 100644
--- a/lifecycle/lifecycle-runtime/build.gradle
+++ b/lifecycle/lifecycle-runtime/build.gradle
@@ -21,6 +21,7 @@
// necessary for IJ to resolve dependencies.
api("androidx.annotation:annotation:1.1.0")
implementation("androidx.arch.core:core-runtime:2.2.0-rc01")
+ implementation("androidx.profileinstaller:profileinstaller:1.2.1")
testImplementation(libs.junit)
testImplementation(libs.mockitoCore4)
diff --git a/lint-checks/integration-tests/src/main/java/androidx/AutofixOnUnsafeCallWithImplicitVarArgsCast.java b/lint-checks/integration-tests/src/main/java/androidx/AutofixOnUnsafeCallWithImplicitVarArgsCast.java
new file mode 100644
index 0000000..2128027
--- /dev/null
+++ b/lint-checks/integration-tests/src/main/java/androidx/AutofixOnUnsafeCallWithImplicitVarArgsCast.java
@@ -0,0 +1,54 @@
+/*
+ * 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;
+
+import android.widget.BaseAdapter;
+
+import androidx.annotation.RequiresApi;
+
+import java.nio.CharBuffer;
+
+/**
+ * Contains unsafe calls to a method with a variable number of arguments which are implicitly cast.
+ */
+@SuppressWarnings("unused")
+public class AutofixOnUnsafeCallWithImplicitVarArgsCast {
+ /**
+ * Calls the vararg method with no args.
+ */
+ @RequiresApi(27)
+ public void callVarArgsMethodNoArgs(BaseAdapter adapter) {
+ adapter.setAutofillOptions();
+ }
+
+ /**
+ *Calls the vararg method with one args.
+ */
+ @RequiresApi(27)
+ public void callVarArgsMethodOneArg(BaseAdapter adapter, CharBuffer vararg) {
+ adapter.setAutofillOptions(vararg);
+ }
+
+ /**
+ * Calls the vararg method with multiple args.
+ */
+ @RequiresApi(27)
+ public void callVarArgsMethodManyArgs(BaseAdapter adapter, CharBuffer vararg1,
+ CharBuffer vararg2, CharBuffer vararg3) {
+ adapter.setAutofillOptions(vararg1, vararg2, vararg3);
+ }
+}
diff --git a/lint-checks/integration-tests/src/main/java/androidx/AutofixUnsafeCallWithImplicitParamCast.java b/lint-checks/integration-tests/src/main/java/androidx/AutofixUnsafeCallWithImplicitParamCast.java
new file mode 100644
index 0000000..cc20718
--- /dev/null
+++ b/lint-checks/integration-tests/src/main/java/androidx/AutofixUnsafeCallWithImplicitParamCast.java
@@ -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;
+
+import android.app.Notification;
+
+import androidx.annotation.RequiresApi;
+
+/**
+ * Tests to ensure the generated lint fix does not leave in implicit casts from a new argument type.
+ */
+@SuppressWarnings("unused")
+public class AutofixUnsafeCallWithImplicitParamCast {
+ /**
+ * This uses the Notification.MessagingStyle type, but setBuilder is defined on
+ * Notification.Style, and the two classes were introduced in different API levels.
+ */
+ @RequiresApi(24)
+ public void castReceiver(Notification.MessagingStyle style, Notification.Builder builder) {
+ style.setBuilder(builder);
+ }
+
+ /**
+ * This uses Notification.CarExtender, but extend is defined with Notification.Extender as a
+ * parameter, and the two classes were introduced at different API levels.
+ */
+ @RequiresApi(23)
+ public void castParameter(Notification.Builder builder, Notification.CarExtender extender) {
+ builder.extend(extender);
+ }
+}
diff --git a/lint-checks/integration-tests/src/main/java/androidx/AutofixUnsafeCallWithImplicitCast.java b/lint-checks/integration-tests/src/main/java/androidx/AutofixUnsafeCallWithImplicitReturnCast.java
similarity index 95%
rename from lint-checks/integration-tests/src/main/java/androidx/AutofixUnsafeCallWithImplicitCast.java
rename to lint-checks/integration-tests/src/main/java/androidx/AutofixUnsafeCallWithImplicitReturnCast.java
index 0e074a7..0eed5cb 100644
--- a/lint-checks/integration-tests/src/main/java/androidx/AutofixUnsafeCallWithImplicitCast.java
+++ b/lint-checks/integration-tests/src/main/java/androidx/AutofixUnsafeCallWithImplicitReturnCast.java
@@ -24,10 +24,10 @@
import androidx.annotation.RequiresApi;
/**
- * Tests to ensure the generated lint fix does not leave in implicit casts from a new type.
+ * Tests to ensure the generated lint fix does not leave in implicit casts from a new return type.
*/
@SuppressWarnings("unused")
-public abstract class AutofixUnsafeCallWithImplicitCast {
+public abstract class AutofixUnsafeCallWithImplicitReturnCast {
/**
* This method creates an AdaptiveIconDrawable and implicitly casts it to Drawable.
*/
diff --git a/lint-checks/src/main/java/androidx/build/lint/ClassVerificationFailureDetector.kt b/lint-checks/src/main/java/androidx/build/lint/ClassVerificationFailureDetector.kt
index 62d19a0..45c9c3e 100644
--- a/lint-checks/src/main/java/androidx/build/lint/ClassVerificationFailureDetector.kt
+++ b/lint-checks/src/main/java/androidx/build/lint/ClassVerificationFailureDetector.kt
@@ -46,6 +46,7 @@
import com.intellij.psi.PsiClassType
import com.intellij.psi.PsiCompiledElement
import com.intellij.psi.PsiElement
+import com.intellij.psi.PsiEllipsisType
import com.intellij.psi.PsiExpressionList
import com.intellij.psi.PsiMethod
import com.intellij.psi.PsiMethodCallExpression
@@ -67,6 +68,7 @@
import org.jetbrains.uast.UThisExpression
import org.jetbrains.uast.getContainingUClass
import org.jetbrains.uast.getContainingUMethod
+import org.jetbrains.uast.isNullLiteral
import org.jetbrains.uast.util.isConstructorCall
import org.jetbrains.uast.util.isMethodCall
@@ -202,8 +204,7 @@
?: return
// Change: Removed SimpleDateFormat and Animator checks
- @Suppress("DEPRECATION") // b/262915628
- var api = apiDatabase.getMethodVersion(owner, name, desc)
+ var api = apiDatabase.getMethodVersions(owner, name, desc).min()
if (api == -1) {
return
}
@@ -260,10 +261,9 @@
for (type in inheritanceChain) {
val expressionOwner = evaluator.getQualifiedName(type)
if (expressionOwner != null && expressionOwner != owner) {
- @Suppress("DEPRECATION") // b/262915628
- val specificApi = apiDatabase.getMethodVersion(
+ val specificApi = apiDatabase.getMethodVersions(
expressionOwner, name, desc
- )
+ ).min()
if (specificApi == -1) {
if (apiDatabase.isRelevantOwner(expressionOwner)) {
return
@@ -340,9 +340,8 @@
) {
break
}
- @Suppress("DEPRECATION") // b/262915628
val specificApi =
- apiDatabase.getMethodVersion(expressionOwner, name, desc)
+ apiDatabase.getMethodVersions(expressionOwner, name, desc).min()
if (specificApi == -1) {
if (apiDatabase.isRelevantOwner(expressionOwner)) {
break
@@ -387,10 +386,9 @@
if (provider != null) {
val methodOwner = evaluator.getQualifiedName(provider)
if (methodOwner != null) {
- @Suppress("DEPRECATION") // b/262915628
- val methodApi = apiDatabase.getMethodVersion(
+ val methodApi = apiDatabase.getMethodVersions(
methodOwner, name, desc
- )
+ ).min()
if (methodApi == -1 || methodApi <= minSdk) {
// Yes, we found another call that doesn't have an API requirement
return
@@ -532,7 +530,8 @@
call.receiver,
call.valueArguments,
wrapperClassName,
- wrapperMethodName
+ wrapperMethodName,
+ wrapperMethodParams
)
val fix = fix()
@@ -688,6 +687,7 @@
* @param callValueArguments Arguments of the call to the platform method
* @param wrapperClassName Name of the generated wrapper class
* @param wrapperMethodName Name of the generated wrapper method
+ * @param wrapperMethodParams Param types of the wrapper method
* @return Source code for a call to the static wrapper method
*/
private fun generateWrapperCall(
@@ -696,6 +696,7 @@
callValueArguments: List<UExpression>,
wrapperClassName: String,
wrapperMethodName: String,
+ wrapperMethodParams: List<PsiType>
): String {
val callReceiverStr = when {
// Static method
@@ -708,15 +709,34 @@
// it must be a call to an instance method using `this` implicitly.
callReceiver == null ->
"this"
- // Otherwise, use the original call receiver string (removing extra parens)
+ // Use the original call receiver string (removing extra parens), casting if needed
else ->
- unwrapExpression(callReceiver).asSourceString()
+ createArgumentString(unwrapExpression(callReceiver), wrapperMethodParams[0])
}
val callValues = if (callValueArguments.isNotEmpty()) {
- callValueArguments.joinToString(separator = ", ") { argument ->
- argument.asSourceString()
+ // The first element in the wrapperMethodParams is the receiver, so drop that.
+ // Also drop the last parameter, because it is special-cased later.
+ val paramTypesWithoutReceiverAndFinal = wrapperMethodParams.drop(1).dropLast(1)
+ // For varargs methods, what we care about for the last type is the type of each
+ // vararg, not the containing type.
+ val finalParamType = if (method.isVarArgs) {
+ (wrapperMethodParams.last() as PsiEllipsisType).componentType
+ } else {
+ wrapperMethodParams.last()
}
+
+ callValueArguments.mapIndexed { argIndex, arg ->
+ // The number of args might be greater than the number of param types due to
+ // varargs, repeat the final param type for all args after exhausting the
+ // paramTypesWithoutReceiverAndFinal list.
+ val expectedType = if (argIndex < paramTypesWithoutReceiverAndFinal.size) {
+ paramTypesWithoutReceiverAndFinal[argIndex]
+ } else {
+ finalParamType
+ }
+ createArgumentString(arg, expectedType)
+ }.joinToString(separator = ", ")
} else {
null
}
@@ -727,6 +747,24 @@
}
/**
+ * Creates the string representation of an argument in the wrapper call. If the type of the
+ * arg is not identical to the parameter type of the wrapper method, casts to that type.
+ */
+ private fun createArgumentString(arg: UExpression, expectedType: PsiType): String {
+ val argType = arg.getExpressionType()
+ val expectedTypeText = expectedType.canonicalText
+ // If the arg is the expected type, use as normal, otherwise, cast to expected type.
+ // Uses text-base equality instead of directly comparing types because certain types
+ // (eq. java.lang.Class<T>) are not necessarily equal to instances of the same type.
+ // There isn't really a point in casting if the arg is null.
+ return if (argType?.equalsToText(expectedTypeText) == true || arg.isNullLiteral()) {
+ arg.asSourceString()
+ } else {
+ "($expectedTypeText) ${arg.asSourceString()}"
+ }
+ }
+
+ /**
* Remove parentheses from the expression (unwrap the expression until it is no longer a
* UParenthesizedExpression).
*/
@@ -856,8 +894,7 @@
private fun classAvailableAtMinSdk(className: String): Boolean {
val apiDatabase = apiDatabase ?: return false
val minSdk = getMinSdk(context)
- @Suppress("DEPRECATION") // b/262915628
- val version = apiDatabase.getClassVersion(className)
+ val version = apiDatabase.getClassVersions(className).min()
return version <= minSdk
}
diff --git a/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt b/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt
index 55398d8..50af7de 100644
--- a/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt
+++ b/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt
@@ -82,7 +82,7 @@
Fix for src/androidx/sample/core/widget/ListViewCompat.java line 39: Extract to static inner class:
@@ -39 +39
- listView.scrollListBy(y);
-+ Api19Impl.scrollListBy(listView, y);
++ Api19Impl.scrollListBy((android.widget.AbsListView) listView, y);
@@ -91 +91
+ @androidx.annotation.RequiresApi(19)
+ static class Api19Impl {
@@ -95,12 +95,11 @@
+ absListView.scrollListBy(y);
+ }
+
-@@ -92 +103
+ }
Fix for src/androidx/sample/core/widget/ListViewCompat.java line 69: Extract to static inner class:
@@ -69 +69
- return listView.canScrollList(direction);
-+ return Api19Impl.canScrollList(listView, direction);
++ return Api19Impl.canScrollList((android.widget.AbsListView) listView, direction);
@@ -91 +91
+ @androidx.annotation.RequiresApi(19)
+ static class Api19Impl {
@@ -113,7 +112,6 @@
+ return absListView.canScrollList(direction);
+ }
+
-@@ -92 +103
+ }
""".trimIndent()
/* ktlint-enable max-line-length */
@@ -525,12 +523,11 @@
+ return viewGroup.getClipToPadding();
+ }
+
-@@ -61 +72
+ }
Fix for src/androidx/AutofixUnsafeCallToThis.java line 48: Extract to static inner class:
@@ -48 +48
- this.getClipToPadding();
-+ Api21Impl.getClipToPadding(this);
++ Api21Impl.getClipToPadding((ViewGroup) this);
@@ -60 +60
+ @androidx.annotation.RequiresApi(21)
+ static class Api21Impl {
@@ -543,7 +540,6 @@
+ return viewGroup.getClipToPadding();
+ }
+
-@@ -61 +72
+ }
Fix for src/androidx/AutofixUnsafeCallToThis.java line 57: Extract to static inner class:
@@ -57 +57
@@ -561,7 +557,6 @@
+ return viewGroup.getClipToPadding();
+ }
+
-@@ -61 +72
+ }
"""
/* ktlint-enable max-line-length */
@@ -609,34 +604,34 @@
}
@Test
- fun `Auto-fix with implicit class cast from new type (issue 214389795)`() {
+ fun `Auto-fix with implicit class cast from new return type (issue 214389795)`() {
val input = arrayOf(
- javaSample("androidx.AutofixUnsafeCallWithImplicitCast"),
+ javaSample("androidx.AutofixUnsafeCallWithImplicitReturnCast"),
RequiresApi
)
/* ktlint-disable max-line-length */
val expected = """
-src/androidx/AutofixUnsafeCallWithImplicitCast.java:36: Error: This call references a method added in API level 26; however, the containing class androidx.AutofixUnsafeCallWithImplicitCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
+src/androidx/AutofixUnsafeCallWithImplicitReturnCast.java:36: Error: This call references a method added in API level 26; however, the containing class androidx.AutofixUnsafeCallWithImplicitReturnCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
return new AdaptiveIconDrawable(null, null);
~~~~~~~~~~~~~~~~~~~~~~~~
-src/androidx/AutofixUnsafeCallWithImplicitCast.java:44: Error: This call references a method added in API level 26; however, the containing class androidx.AutofixUnsafeCallWithImplicitCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
+src/androidx/AutofixUnsafeCallWithImplicitReturnCast.java:44: Error: This call references a method added in API level 26; however, the containing class androidx.AutofixUnsafeCallWithImplicitReturnCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
return new AdaptiveIconDrawable(null, null);
~~~~~~~~~~~~~~~~~~~~~~~~
-src/androidx/AutofixUnsafeCallWithImplicitCast.java:52: Error: This call references a method added in API level 26; however, the containing class androidx.AutofixUnsafeCallWithImplicitCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
+src/androidx/AutofixUnsafeCallWithImplicitReturnCast.java:52: Error: This call references a method added in API level 26; however, the containing class androidx.AutofixUnsafeCallWithImplicitReturnCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
return Icon.createWithAdaptiveBitmap(null);
~~~~~~~~~~~~~~~~~~~~~~~~
-src/androidx/AutofixUnsafeCallWithImplicitCast.java:60: Error: This call references a method added in API level 26; however, the containing class androidx.AutofixUnsafeCallWithImplicitCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
+src/androidx/AutofixUnsafeCallWithImplicitReturnCast.java:60: Error: This call references a method added in API level 26; however, the containing class androidx.AutofixUnsafeCallWithImplicitReturnCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
return Icon.createWithAdaptiveBitmap(null);
~~~~~~~~~~~~~~~~~~~~~~~~
-src/androidx/AutofixUnsafeCallWithImplicitCast.java:68: Error: This call references a method added in API level 24; however, the containing class androidx.AutofixUnsafeCallWithImplicitCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
+src/androidx/AutofixUnsafeCallWithImplicitReturnCast.java:68: Error: This call references a method added in API level 24; however, the containing class androidx.AutofixUnsafeCallWithImplicitReturnCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
useStyle(new Notification.DecoratedCustomViewStyle());
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 errors, 0 warnings
"""
val expectedFix = """
-Fix for src/androidx/AutofixUnsafeCallWithImplicitCast.java line 36: Extract to static inner class:
+Fix for src/androidx/AutofixUnsafeCallWithImplicitReturnCast.java line 36: Extract to static inner class:
@@ -36 +36
- return new AdaptiveIconDrawable(null, null);
+ return Api26Impl.createAdaptiveIconDrawableReturnsDrawable(null, null);
@@ -654,7 +649,7 @@
+
@@ -78 +89
+ }
-Fix for src/androidx/AutofixUnsafeCallWithImplicitCast.java line 44: Extract to static inner class:
+Fix for src/androidx/AutofixUnsafeCallWithImplicitReturnCast.java line 44: Extract to static inner class:
@@ -44 +44
- return new AdaptiveIconDrawable(null, null);
+ return Api26Impl.createAdaptiveIconDrawable(null, null);
@@ -672,7 +667,7 @@
+
@@ -78 +89
+ }
-Fix for src/androidx/AutofixUnsafeCallWithImplicitCast.java line 52: Extract to static inner class:
+Fix for src/androidx/AutofixUnsafeCallWithImplicitReturnCast.java line 52: Extract to static inner class:
@@ -52 +52
- return Icon.createWithAdaptiveBitmap(null);
+ return Api26Impl.createWithAdaptiveBitmapReturnsObject(null);
@@ -690,7 +685,7 @@
+
@@ -78 +89
+ }
-Fix for src/androidx/AutofixUnsafeCallWithImplicitCast.java line 60: Extract to static inner class:
+Fix for src/androidx/AutofixUnsafeCallWithImplicitReturnCast.java line 60: Extract to static inner class:
@@ -60 +60
- return Icon.createWithAdaptiveBitmap(null);
+ return Api26Impl.createWithAdaptiveBitmap(null);
@@ -708,7 +703,7 @@
+
@@ -78 +89
+ }
-Fix for src/androidx/AutofixUnsafeCallWithImplicitCast.java line 68: Extract to static inner class:
+Fix for src/androidx/AutofixUnsafeCallWithImplicitReturnCast.java line 68: Extract to static inner class:
@@ -68 +68
- useStyle(new Notification.DecoratedCustomViewStyle());
+ useStyle(Api24Impl.createDecoratedCustomViewStyleReturnsStyle());
@@ -769,4 +764,140 @@
check(*input).expect(expected).expectFixDiffs(expectedFix)
}
+
+ @Test
+ fun `Auto-fix with implicit class cast from new parameter type (issue 266845827)`() {
+ val input = arrayOf(
+ javaSample("androidx.AutofixUnsafeCallWithImplicitParamCast"),
+ RequiresApi
+ )
+
+ /* ktlint-disable max-line-length */
+ val expected = """
+src/androidx/AutofixUnsafeCallWithImplicitParamCast.java:34: Error: This call references a method added in API level 16; however, the containing class androidx.AutofixUnsafeCallWithImplicitParamCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
+ style.setBuilder(builder);
+ ~~~~~~~~~~
+src/androidx/AutofixUnsafeCallWithImplicitParamCast.java:43: Error: This call references a method added in API level 20; however, the containing class androidx.AutofixUnsafeCallWithImplicitParamCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
+ builder.extend(extender);
+ ~~~~~~
+2 errors, 0 warnings
+ """
+
+ val expectedFix = """
+Fix for src/androidx/AutofixUnsafeCallWithImplicitParamCast.java line 34: Extract to static inner class:
+@@ -34 +34
+- style.setBuilder(builder);
++ Api16Impl.setBuilder((Notification.Style) style, builder);
+@@ -45 +45
++ @RequiresApi(16)
++ static class Api16Impl {
++ private Api16Impl() {
++ // This class is not instantiable.
++ }
++
++ @DoNotInline
++ static void setBuilder(Notification.Style style, Notification.Builder builder) {
++ style.setBuilder(builder);
++ }
++
++ }
+Fix for src/androidx/AutofixUnsafeCallWithImplicitParamCast.java line 43: Extract to static inner class:
+@@ -43 +43
+- builder.extend(extender);
++ Api20Impl.extend(builder, (Notification.Extender) extender);
++ @RequiresApi(20)
++ static class Api20Impl {
++ private Api20Impl() {
++ // This class is not instantiable.
++ }
++
++ @DoNotInline
++ static Notification.Builder extend(Notification.Builder builder, Notification.Extender extender) {
++ return builder.extend(extender);
++ }
++
++ }
+ """
+ /* ktlint-enable max-line-length */
+
+ check(*input).expect(expected).expectFixDiffs(expectedFix)
+ }
+
+ @Test
+ fun `Auto-fix for method with varargs that are implicitly cast (issue 266845827)`() {
+ val input = arrayOf(
+ javaSample("androidx.AutofixOnUnsafeCallWithImplicitVarArgsCast"),
+ RequiresApi
+ )
+
+ /* ktlint-disable max-line-length */
+ val expected = """
+src/androidx/AutofixOnUnsafeCallWithImplicitVarArgsCast.java:35: Error: This call references a method added in API level 27; however, the containing class androidx.AutofixOnUnsafeCallWithImplicitVarArgsCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
+ adapter.setAutofillOptions();
+ ~~~~~~~~~~~~~~~~~~
+src/androidx/AutofixOnUnsafeCallWithImplicitVarArgsCast.java:43: Error: This call references a method added in API level 27; however, the containing class androidx.AutofixOnUnsafeCallWithImplicitVarArgsCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
+ adapter.setAutofillOptions(vararg);
+ ~~~~~~~~~~~~~~~~~~
+src/androidx/AutofixOnUnsafeCallWithImplicitVarArgsCast.java:52: Error: This call references a method added in API level 27; however, the containing class androidx.AutofixOnUnsafeCallWithImplicitVarArgsCast is reachable from earlier API levels and will fail run-time class verification. [ClassVerificationFailure]
+ adapter.setAutofillOptions(vararg1, vararg2, vararg3);
+ ~~~~~~~~~~~~~~~~~~
+3 errors, 0 warnings
+ """
+
+ val expectedFix = """
+Fix for src/androidx/AutofixOnUnsafeCallWithImplicitVarArgsCast.java line 35: Extract to static inner class:
+@@ -35 +35
+- adapter.setAutofillOptions();
++ Api27Impl.setAutofillOptions(adapter);
+@@ -54 +54
++ @RequiresApi(27)
++ static class Api27Impl {
++ private Api27Impl() {
++ // This class is not instantiable.
++ }
++
++ @DoNotInline
++ static void setAutofillOptions(BaseAdapter baseAdapter, java.lang.CharSequence... options) {
++ baseAdapter.setAutofillOptions(options);
++ }
++
++ }
+Fix for src/androidx/AutofixOnUnsafeCallWithImplicitVarArgsCast.java line 43: Extract to static inner class:
+@@ -43 +43
+- adapter.setAutofillOptions(vararg);
++ Api27Impl.setAutofillOptions(adapter, (java.lang.CharSequence) vararg);
+@@ -54 +54
++ @RequiresApi(27)
++ static class Api27Impl {
++ private Api27Impl() {
++ // This class is not instantiable.
++ }
++
++ @DoNotInline
++ static void setAutofillOptions(BaseAdapter baseAdapter, java.lang.CharSequence... options) {
++ baseAdapter.setAutofillOptions(options);
++ }
++
++ }
+Fix for src/androidx/AutofixOnUnsafeCallWithImplicitVarArgsCast.java line 52: Extract to static inner class:
+@@ -52 +52
+- adapter.setAutofillOptions(vararg1, vararg2, vararg3);
++ Api27Impl.setAutofillOptions(adapter, (java.lang.CharSequence) vararg1, (java.lang.CharSequence) vararg2, (java.lang.CharSequence) vararg3);
++ @RequiresApi(27)
++ static class Api27Impl {
++ private Api27Impl() {
++ // This class is not instantiable.
++ }
++
++ @DoNotInline
++ static void setAutofillOptions(BaseAdapter baseAdapter, java.lang.CharSequence... options) {
++ baseAdapter.setAutofillOptions(options);
++ }
++
++ }
+ """
+ /* ktlint-enable max-line-length */
+
+ check(*input).expect(expected).expectFixDiffs(expectedFix)
+ }
}
diff --git a/lint-checks/src/test/java/androidx/build/lint/ExperimentalPropertyAnnotationDetectorTest.kt b/lint-checks/src/test/java/androidx/build/lint/ExperimentalPropertyAnnotationDetectorTest.kt
index 5733f15..7da62dc 100644
--- a/lint-checks/src/test/java/androidx/build/lint/ExperimentalPropertyAnnotationDetectorTest.kt
+++ b/lint-checks/src/test/java/androidx/build/lint/ExperimentalPropertyAnnotationDetectorTest.kt
@@ -16,7 +16,6 @@
package androidx.build.lint
-import com.android.tools.lint.checks.infrastructure.TestMode
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@@ -127,7 +126,6 @@
*stubs,
*input
)
- .skipTestModes(TestMode.SUPPRESSIBLE) // b/257294309
.run()
.expect(expected)
.expectFixDiffs(expectedFixDiffs)
@@ -211,7 +209,6 @@
*stubs,
*input
)
- .skipTestModes(TestMode.SUPPRESSIBLE) // b/257294309
.run()
.expect(expected)
.expectFixDiffs(expectedFixDiffs)
@@ -296,7 +293,6 @@
*stubs,
*input
)
- .skipTestModes(TestMode.SUPPRESSIBLE) // b/257294309
.run()
.expect(expected)
.expectFixDiffs(expectedFixDiffs)
@@ -395,7 +391,6 @@
*stubs,
*input
)
- .skipTestModes(TestMode.SUPPRESSIBLE) // b/257294309
.run()
.expect(expected)
.expectFixDiffs(expectedFixDiffs)
@@ -435,7 +430,6 @@
*stubs,
*input
)
- .skipTestModes(TestMode.SUPPRESSIBLE) // b/257294309
.run()
.expect(expected)
.expectFixDiffs(expectedFixDiffs)
@@ -479,7 +473,6 @@
*stubs,
*input
)
- .skipTestModes(TestMode.SUPPRESSIBLE) // b/257294309
.run()
.expect(expected)
.expectFixDiffs(expectedFixDiffs)
@@ -520,7 +513,6 @@
*stubs,
*input
)
- .skipTestModes(TestMode.SUPPRESSIBLE) // b/257294309
.run()
.expect(expected)
.expectFixDiffs(expectedFixDiffs)
diff --git a/navigation/navigation-common/build.gradle b/navigation/navigation-common/build.gradle
index 9f6e589..bf8a159 100644
--- a/navigation/navigation-common/build.gradle
+++ b/navigation/navigation-common/build.gradle
@@ -41,6 +41,7 @@
api(project(":lifecycle:lifecycle-viewmodel-savedstate"))
implementation("androidx.core:core-ktx:1.1.0")
implementation("androidx.collection:collection-ktx:1.1.0")
+ implementation("androidx.profileinstaller:profileinstaller:1.2.1")
api(libs.kotlinStdlib)
testImplementation(project(":navigation:navigation-testing"))
diff --git a/navigation/navigation-compose/samples/build.gradle b/navigation/navigation-compose/samples/build.gradle
index 8ee9740..4cc57c0 100644
--- a/navigation/navigation-compose/samples/build.gradle
+++ b/navigation/navigation-compose/samples/build.gradle
@@ -30,6 +30,7 @@
compileOnly(projectOrArtifact(":annotation:annotation-sampled"))
implementation("androidx.compose.foundation:foundation:1.0.1")
+ implementation projectOrArtifact(":compose:ui:ui-tooling")
implementation(projectOrArtifact(":navigation:navigation-compose"))
implementation("androidx.compose.material:material:1.0.1")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1")
diff --git a/navigation/navigation-compose/samples/src/main/java/androidx/navigation/compose/samples/NavigationSamples.kt b/navigation/navigation-compose/samples/src/main/java/androidx/navigation/compose/samples/NavigationSamples.kt
index d38c258..4cc5ef4 100644
--- a/navigation/navigation-compose/samples/src/main/java/androidx/navigation/compose/samples/NavigationSamples.kt
+++ b/navigation/navigation-compose/samples/src/main/java/androidx/navigation/compose/samples/NavigationSamples.kt
@@ -21,6 +21,7 @@
import androidx.annotation.Sampled
import androidx.annotation.StringRes
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
@@ -35,11 +36,15 @@
import androidx.compose.material.Scaffold
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Color.Companion.LightGray
+import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.platform.LocalLifecycleOwner
+import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
@@ -242,6 +247,27 @@
}
}
+@Preview
+@Composable
+fun NavHostPreview() {
+ CompositionLocalProvider(
+ LocalInspectionMode provides true,
+ ) {
+ Box(Modifier.fillMaxSize().background(Color.Red)) {
+ NavHost(
+ navController = rememberNavController(),
+ startDestination = "home"
+ ) {
+ composable("home") {
+ Box(Modifier.fillMaxSize().background(Color.Blue)) {
+ Text(text = "test", modifier = Modifier.testTag("text"))
+ }
+ }
+ }
+ }
+ }
+}
+
private val phrases = listOf(
"Easy As Pie",
"Wouldn't Harm a Fly",
diff --git a/navigation/navigation-runtime/api/current.txt b/navigation/navigation-runtime/api/current.txt
index 735c94d..39d9a7f 100644
--- a/navigation/navigation-runtime/api/current.txt
+++ b/navigation/navigation-runtime/api/current.txt
@@ -119,10 +119,10 @@
method @MainThread public void navigate(androidx.navigation.NavDirections directions);
method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.Navigator.Extras navigatorExtras);
- method public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
- method public final void navigate(String route);
+ method @MainThread public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
+ method @MainThread public final void navigate(String route);
method @MainThread public boolean navigateUp();
method @MainThread public boolean popBackStack();
method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive);
diff --git a/navigation/navigation-runtime/api/public_plus_experimental_current.txt b/navigation/navigation-runtime/api/public_plus_experimental_current.txt
index 217af43..6faf37c 100644
--- a/navigation/navigation-runtime/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-runtime/api/public_plus_experimental_current.txt
@@ -120,10 +120,10 @@
method @MainThread public void navigate(androidx.navigation.NavDirections directions);
method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.Navigator.Extras navigatorExtras);
- method public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
- method public final void navigate(String route);
+ method @MainThread public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
+ method @MainThread public final void navigate(String route);
method @MainThread public boolean navigateUp();
method @MainThread public boolean popBackStack();
method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive);
diff --git a/navigation/navigation-runtime/api/restricted_current.txt b/navigation/navigation-runtime/api/restricted_current.txt
index 735c94d..39d9a7f 100644
--- a/navigation/navigation-runtime/api/restricted_current.txt
+++ b/navigation/navigation-runtime/api/restricted_current.txt
@@ -119,10 +119,10 @@
method @MainThread public void navigate(androidx.navigation.NavDirections directions);
method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.Navigator.Extras navigatorExtras);
- method public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
- method public final void navigate(String route);
+ method @MainThread public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
+ method @MainThread public final void navigate(String route);
method @MainThread public boolean navigateUp();
method @MainThread public boolean popBackStack();
method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive);
diff --git a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
index 5256f92..5a1b31d 100644
--- a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
+++ b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
@@ -2148,6 +2148,7 @@
*
* @throws IllegalArgumentException if the given route is invalid
*/
+ @MainThread
public fun navigate(route: String, builder: NavOptionsBuilder.() -> Unit) {
navigate(route, navOptions(builder))
}
@@ -2162,6 +2163,7 @@
*
* @throws IllegalArgumentException if the given route is invalid
*/
+ @MainThread
@JvmOverloads
public fun navigate(
route: String,
diff --git a/privacysandbox/tools/tools-apicompiler/build.gradle b/privacysandbox/tools/tools-apicompiler/build.gradle
index 22995d8..4609de5 100644
--- a/privacysandbox/tools/tools-apicompiler/build.gradle
+++ b/privacysandbox/tools/tools-apicompiler/build.gradle
@@ -23,6 +23,8 @@
id("kotlin")
}
+androidx.configureAarAsJarForConfiguration("testImplementation")
+
dependencies {
api(libs.kotlinStdlib)
implementation(libs.kspApi)
@@ -32,6 +34,7 @@
testImplementation(project(":privacysandbox:tools:tools-testing"))
testImplementation(project(":room:room-compiler-processing-testing"))
+ testImplementationAarAsJar(project(":privacysandbox:ui:ui-core"))
testImplementation(libs.junit)
testImplementation(libs.truth)
testImplementation(libs.kotlinCoroutinesCore)
diff --git a/privacysandbox/tools/tools-apigenerator/build.gradle b/privacysandbox/tools/tools-apigenerator/build.gradle
index 5e82a89..029cc35 100644
--- a/privacysandbox/tools/tools-apigenerator/build.gradle
+++ b/privacysandbox/tools/tools-apigenerator/build.gradle
@@ -24,6 +24,8 @@
id("kotlin")
}
+androidx.configureAarAsJarForConfiguration("testImplementation")
+
dependencies {
api(libs.kotlinStdlib)
implementation(libs.asm)
@@ -37,6 +39,8 @@
testImplementation(project(":privacysandbox:tools:tools-apipackager"))
testImplementation(project(":privacysandbox:tools:tools-testing"))
testImplementation(project(":room:room-compiler-processing-testing"))
+ testImplementationAarAsJar(project(":privacysandbox:ui:ui-core"))
+ testImplementationAarAsJar(project(":privacysandbox:ui:ui-client"))
testImplementation(libs.kotlinCoroutinesCore)
testImplementation(libs.junit)
testImplementation(libs.truth)
diff --git a/privacysandbox/tools/tools-testing/src/main/java/androidx/privacysandbox/tools/testing/LibraryStubs.kt b/privacysandbox/tools/tools-testing/src/main/java/androidx/privacysandbox/tools/testing/LibraryStubs.kt
index b73cc1f..6082ce2 100644
--- a/privacysandbox/tools/tools-testing/src/main/java/androidx/privacysandbox/tools/testing/LibraryStubs.kt
+++ b/privacysandbox/tools/tools-testing/src/main/java/androidx/privacysandbox/tools/testing/LibraryStubs.kt
@@ -61,93 +61,4 @@
),
)
-val syntheticUiLibraryStubs = listOf(
- Source.kotlin(
- "androidx/privacysandbox/ui/core/SandboxedUiAdapter.kt", """
- |package androidx.privacysandbox.ui.core
- |
- |import android.content.Context
- |import android.view.View
- |import java.util.concurrent.Executor
- |
- |interface SandboxedUiAdapter {
- | fun openSession(
- | context: Context,
- | initialWidth: Int,
- | initialHeight: Int,
- | isZOrderOnTop: Boolean,
- | clientExecutor: Executor,
- | client: SessionClient
- | )
- |
- |
- | interface Session {
- | fun close()
- | val view: View
- | }
- |
- | interface SessionClient {
- | fun onSessionError(throwable: Throwable);
- | fun onSessionOpened(session: Session);
- | }
- |}
- |""".trimMargin()
- ),
- Source.kotlin(
- "androidx/privacysandbox/ui/core/SdkRuntimeUiLibVersions.kt", """
- |package androidx.privacysandbox.ui.core
- |
- |import androidx.annotation.RestrictTo
- |
- |object SdkRuntimeUiLibVersions {
- | var clientVersion: Int = -1
- | /**
- | * @hide
- | */
- | @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
- | set
- |
- | const val apiVersion: Int = 1
- |}
- |""".trimMargin()
- ),
- Source.kotlin(
- "androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt", """
- |package androidx.privacysandbox.ui.client
- |import android.content.Context
- |import android.hardware.display.DisplayManager
- |import android.os.Binder
- |import android.os.Build
- |import android.os.Bundle
- |import android.view.Display
- |import android.view.SurfaceControlViewHost
- |import android.view.SurfaceView
- |import android.view.View
- |import androidx.annotation.NonNull
- |import androidx.annotation.RequiresApi
- |import androidx.privacysandbox.ui.core.SandboxedUiAdapter
- |import java.util.concurrent.Executor
- |@RequiresApi(Build.VERSION_CODES.TIRAMISU)
- |object SandboxedUiAdapterFactory {
- | fun createFromCoreLibInfo(coreLibInfo: Bundle): SandboxedUiAdapter {
- | return RemoteAdapter(coreLibInfo)
- | }
- | private class RemoteAdapter(private val coreLibInfo: Bundle) :
- | SandboxedUiAdapter {
- | override fun openSession(
- | context: Context,
- | initialWidth: Int,
- | initialHeight: Int,
- | isZOrderOnTop: Boolean,
- | clientExecutor: Executor,
- | client: SandboxedUiAdapter.SessionClient
- | ) {
- | // This space intentionally left blank
- | }
- | }
- |}
- |""".trimMargin()
- ),
-)
-
-val allTestLibraryStubs = syntheticSdkRuntimeLibraryStubs + syntheticUiLibraryStubs
\ No newline at end of file
+val allTestLibraryStubs = syntheticSdkRuntimeLibraryStubs
\ No newline at end of file
diff --git a/profileinstaller/profileinstaller/api/1.3.0-beta02.txt b/profileinstaller/profileinstaller/api/1.3.0-beta02.txt
new file mode 100644
index 0000000..e7da088
--- /dev/null
+++ b/profileinstaller/profileinstaller/api/1.3.0-beta02.txt
@@ -0,0 +1,74 @@
+// Signature format: 4.0
+package androidx.profileinstaller {
+
+ public class ProfileInstallReceiver extends android.content.BroadcastReceiver {
+ ctor public ProfileInstallReceiver();
+ method public void onReceive(android.content.Context, android.content.Intent?);
+ field public static final String ACTION_BENCHMARK_OPERATION = "androidx.profileinstaller.action.BENCHMARK_OPERATION";
+ field public static final String ACTION_INSTALL_PROFILE = "androidx.profileinstaller.action.INSTALL_PROFILE";
+ field public static final String ACTION_SAVE_PROFILE = "androidx.profileinstaller.action.SAVE_PROFILE";
+ field public static final String ACTION_SKIP_FILE = "androidx.profileinstaller.action.SKIP_FILE";
+ }
+
+ public class ProfileInstaller {
+ method @WorkerThread public static void writeProfile(android.content.Context);
+ method @WorkerThread public static void writeProfile(android.content.Context, java.util.concurrent.Executor, androidx.profileinstaller.ProfileInstaller.DiagnosticsCallback);
+ field public static final int DIAGNOSTIC_CURRENT_PROFILE_DOES_NOT_EXIST = 2; // 0x2
+ field public static final int DIAGNOSTIC_CURRENT_PROFILE_EXISTS = 1; // 0x1
+ field public static final int DIAGNOSTIC_PROFILE_IS_COMPRESSED = 5; // 0x5
+ field public static final int DIAGNOSTIC_REF_PROFILE_DOES_NOT_EXIST = 4; // 0x4
+ field public static final int DIAGNOSTIC_REF_PROFILE_EXISTS = 3; // 0x3
+ field public static final int RESULT_ALREADY_INSTALLED = 2; // 0x2
+ field public static final int RESULT_BASELINE_PROFILE_NOT_FOUND = 6; // 0x6
+ field public static final int RESULT_BENCHMARK_OPERATION_FAILURE = 15; // 0xf
+ field public static final int RESULT_BENCHMARK_OPERATION_SUCCESS = 14; // 0xe
+ field public static final int RESULT_BENCHMARK_OPERATION_UNKNOWN = 16; // 0x10
+ field public static final int RESULT_DELETE_SKIP_FILE_SUCCESS = 11; // 0xb
+ field public static final int RESULT_DESIRED_FORMAT_UNSUPPORTED = 5; // 0x5
+ field public static final int RESULT_INSTALL_SKIP_FILE_SUCCESS = 10; // 0xa
+ field public static final int RESULT_INSTALL_SUCCESS = 1; // 0x1
+ field public static final int RESULT_IO_EXCEPTION = 7; // 0x7
+ field public static final int RESULT_META_FILE_REQUIRED_BUT_NOT_FOUND = 9; // 0x9
+ field public static final int RESULT_NOT_WRITABLE = 4; // 0x4
+ field public static final int RESULT_PARSE_EXCEPTION = 8; // 0x8
+ field public static final int RESULT_SAVE_PROFILE_SIGNALLED = 12; // 0xc
+ field public static final int RESULT_SAVE_PROFILE_SKIPPED = 13; // 0xd
+ field public static final int RESULT_UNSUPPORTED_ART_VERSION = 3; // 0x3
+ }
+
+ public static interface ProfileInstaller.DiagnosticsCallback {
+ method public void onDiagnosticReceived(int, Object?);
+ method public void onResultReceived(int, Object?);
+ }
+
+ public class ProfileInstallerInitializer implements androidx.startup.Initializer<androidx.profileinstaller.ProfileInstallerInitializer.Result> {
+ ctor public ProfileInstallerInitializer();
+ method public androidx.profileinstaller.ProfileInstallerInitializer.Result create(android.content.Context);
+ method public java.util.List<java.lang.Class<? extends androidx.startup.Initializer<?>>!> dependencies();
+ }
+
+ public static class ProfileInstallerInitializer.Result {
+ ctor public ProfileInstallerInitializer.Result();
+ }
+
+ public final class ProfileVerifier {
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.profileinstaller.ProfileVerifier.CompilationStatus!> getCompilationStatusAsync();
+ method @WorkerThread public static androidx.profileinstaller.ProfileVerifier.CompilationStatus writeProfileVerification(android.content.Context);
+ }
+
+ public static class ProfileVerifier.CompilationStatus {
+ method public int getProfileInstallResultCode();
+ method public boolean hasProfileEnqueuedForCompilation();
+ method public boolean isCompiledWithProfile();
+ field public static final int RESULT_CODE_COMPILED_WITH_PROFILE = 1; // 0x1
+ field public static final int RESULT_CODE_COMPILED_WITH_PROFILE_NON_MATCHING = 3; // 0x3
+ field public static final int RESULT_CODE_ERROR_CACHE_FILE_EXISTS_BUT_CANNOT_BE_READ = 131072; // 0x20000
+ field public static final int RESULT_CODE_ERROR_CANT_WRITE_PROFILE_VERIFICATION_RESULT_CACHE_FILE = 196608; // 0x30000
+ field public static final int RESULT_CODE_ERROR_PACKAGE_NAME_DOES_NOT_EXIST = 65536; // 0x10000
+ field public static final int RESULT_CODE_ERROR_UNSUPPORTED_API_VERSION = 262144; // 0x40000
+ field public static final int RESULT_CODE_NO_PROFILE = 0; // 0x0
+ field public static final int RESULT_CODE_PROFILE_ENQUEUED_FOR_COMPILATION = 2; // 0x2
+ }
+
+}
+
diff --git a/profileinstaller/profileinstaller/api/public_plus_experimental_1.3.0-beta02.txt b/profileinstaller/profileinstaller/api/public_plus_experimental_1.3.0-beta02.txt
new file mode 100644
index 0000000..e7da088
--- /dev/null
+++ b/profileinstaller/profileinstaller/api/public_plus_experimental_1.3.0-beta02.txt
@@ -0,0 +1,74 @@
+// Signature format: 4.0
+package androidx.profileinstaller {
+
+ public class ProfileInstallReceiver extends android.content.BroadcastReceiver {
+ ctor public ProfileInstallReceiver();
+ method public void onReceive(android.content.Context, android.content.Intent?);
+ field public static final String ACTION_BENCHMARK_OPERATION = "androidx.profileinstaller.action.BENCHMARK_OPERATION";
+ field public static final String ACTION_INSTALL_PROFILE = "androidx.profileinstaller.action.INSTALL_PROFILE";
+ field public static final String ACTION_SAVE_PROFILE = "androidx.profileinstaller.action.SAVE_PROFILE";
+ field public static final String ACTION_SKIP_FILE = "androidx.profileinstaller.action.SKIP_FILE";
+ }
+
+ public class ProfileInstaller {
+ method @WorkerThread public static void writeProfile(android.content.Context);
+ method @WorkerThread public static void writeProfile(android.content.Context, java.util.concurrent.Executor, androidx.profileinstaller.ProfileInstaller.DiagnosticsCallback);
+ field public static final int DIAGNOSTIC_CURRENT_PROFILE_DOES_NOT_EXIST = 2; // 0x2
+ field public static final int DIAGNOSTIC_CURRENT_PROFILE_EXISTS = 1; // 0x1
+ field public static final int DIAGNOSTIC_PROFILE_IS_COMPRESSED = 5; // 0x5
+ field public static final int DIAGNOSTIC_REF_PROFILE_DOES_NOT_EXIST = 4; // 0x4
+ field public static final int DIAGNOSTIC_REF_PROFILE_EXISTS = 3; // 0x3
+ field public static final int RESULT_ALREADY_INSTALLED = 2; // 0x2
+ field public static final int RESULT_BASELINE_PROFILE_NOT_FOUND = 6; // 0x6
+ field public static final int RESULT_BENCHMARK_OPERATION_FAILURE = 15; // 0xf
+ field public static final int RESULT_BENCHMARK_OPERATION_SUCCESS = 14; // 0xe
+ field public static final int RESULT_BENCHMARK_OPERATION_UNKNOWN = 16; // 0x10
+ field public static final int RESULT_DELETE_SKIP_FILE_SUCCESS = 11; // 0xb
+ field public static final int RESULT_DESIRED_FORMAT_UNSUPPORTED = 5; // 0x5
+ field public static final int RESULT_INSTALL_SKIP_FILE_SUCCESS = 10; // 0xa
+ field public static final int RESULT_INSTALL_SUCCESS = 1; // 0x1
+ field public static final int RESULT_IO_EXCEPTION = 7; // 0x7
+ field public static final int RESULT_META_FILE_REQUIRED_BUT_NOT_FOUND = 9; // 0x9
+ field public static final int RESULT_NOT_WRITABLE = 4; // 0x4
+ field public static final int RESULT_PARSE_EXCEPTION = 8; // 0x8
+ field public static final int RESULT_SAVE_PROFILE_SIGNALLED = 12; // 0xc
+ field public static final int RESULT_SAVE_PROFILE_SKIPPED = 13; // 0xd
+ field public static final int RESULT_UNSUPPORTED_ART_VERSION = 3; // 0x3
+ }
+
+ public static interface ProfileInstaller.DiagnosticsCallback {
+ method public void onDiagnosticReceived(int, Object?);
+ method public void onResultReceived(int, Object?);
+ }
+
+ public class ProfileInstallerInitializer implements androidx.startup.Initializer<androidx.profileinstaller.ProfileInstallerInitializer.Result> {
+ ctor public ProfileInstallerInitializer();
+ method public androidx.profileinstaller.ProfileInstallerInitializer.Result create(android.content.Context);
+ method public java.util.List<java.lang.Class<? extends androidx.startup.Initializer<?>>!> dependencies();
+ }
+
+ public static class ProfileInstallerInitializer.Result {
+ ctor public ProfileInstallerInitializer.Result();
+ }
+
+ public final class ProfileVerifier {
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.profileinstaller.ProfileVerifier.CompilationStatus!> getCompilationStatusAsync();
+ method @WorkerThread public static androidx.profileinstaller.ProfileVerifier.CompilationStatus writeProfileVerification(android.content.Context);
+ }
+
+ public static class ProfileVerifier.CompilationStatus {
+ method public int getProfileInstallResultCode();
+ method public boolean hasProfileEnqueuedForCompilation();
+ method public boolean isCompiledWithProfile();
+ field public static final int RESULT_CODE_COMPILED_WITH_PROFILE = 1; // 0x1
+ field public static final int RESULT_CODE_COMPILED_WITH_PROFILE_NON_MATCHING = 3; // 0x3
+ field public static final int RESULT_CODE_ERROR_CACHE_FILE_EXISTS_BUT_CANNOT_BE_READ = 131072; // 0x20000
+ field public static final int RESULT_CODE_ERROR_CANT_WRITE_PROFILE_VERIFICATION_RESULT_CACHE_FILE = 196608; // 0x30000
+ field public static final int RESULT_CODE_ERROR_PACKAGE_NAME_DOES_NOT_EXIST = 65536; // 0x10000
+ field public static final int RESULT_CODE_ERROR_UNSUPPORTED_API_VERSION = 262144; // 0x40000
+ field public static final int RESULT_CODE_NO_PROFILE = 0; // 0x0
+ field public static final int RESULT_CODE_PROFILE_ENQUEUED_FOR_COMPILATION = 2; // 0x2
+ }
+
+}
+
diff --git a/profileinstaller/profileinstaller/api/res-1.3.0-beta02.txt b/profileinstaller/profileinstaller/api/res-1.3.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/profileinstaller/profileinstaller/api/res-1.3.0-beta02.txt
diff --git a/profileinstaller/profileinstaller/api/restricted_1.3.0-beta02.txt b/profileinstaller/profileinstaller/api/restricted_1.3.0-beta02.txt
new file mode 100644
index 0000000..e7da088
--- /dev/null
+++ b/profileinstaller/profileinstaller/api/restricted_1.3.0-beta02.txt
@@ -0,0 +1,74 @@
+// Signature format: 4.0
+package androidx.profileinstaller {
+
+ public class ProfileInstallReceiver extends android.content.BroadcastReceiver {
+ ctor public ProfileInstallReceiver();
+ method public void onReceive(android.content.Context, android.content.Intent?);
+ field public static final String ACTION_BENCHMARK_OPERATION = "androidx.profileinstaller.action.BENCHMARK_OPERATION";
+ field public static final String ACTION_INSTALL_PROFILE = "androidx.profileinstaller.action.INSTALL_PROFILE";
+ field public static final String ACTION_SAVE_PROFILE = "androidx.profileinstaller.action.SAVE_PROFILE";
+ field public static final String ACTION_SKIP_FILE = "androidx.profileinstaller.action.SKIP_FILE";
+ }
+
+ public class ProfileInstaller {
+ method @WorkerThread public static void writeProfile(android.content.Context);
+ method @WorkerThread public static void writeProfile(android.content.Context, java.util.concurrent.Executor, androidx.profileinstaller.ProfileInstaller.DiagnosticsCallback);
+ field public static final int DIAGNOSTIC_CURRENT_PROFILE_DOES_NOT_EXIST = 2; // 0x2
+ field public static final int DIAGNOSTIC_CURRENT_PROFILE_EXISTS = 1; // 0x1
+ field public static final int DIAGNOSTIC_PROFILE_IS_COMPRESSED = 5; // 0x5
+ field public static final int DIAGNOSTIC_REF_PROFILE_DOES_NOT_EXIST = 4; // 0x4
+ field public static final int DIAGNOSTIC_REF_PROFILE_EXISTS = 3; // 0x3
+ field public static final int RESULT_ALREADY_INSTALLED = 2; // 0x2
+ field public static final int RESULT_BASELINE_PROFILE_NOT_FOUND = 6; // 0x6
+ field public static final int RESULT_BENCHMARK_OPERATION_FAILURE = 15; // 0xf
+ field public static final int RESULT_BENCHMARK_OPERATION_SUCCESS = 14; // 0xe
+ field public static final int RESULT_BENCHMARK_OPERATION_UNKNOWN = 16; // 0x10
+ field public static final int RESULT_DELETE_SKIP_FILE_SUCCESS = 11; // 0xb
+ field public static final int RESULT_DESIRED_FORMAT_UNSUPPORTED = 5; // 0x5
+ field public static final int RESULT_INSTALL_SKIP_FILE_SUCCESS = 10; // 0xa
+ field public static final int RESULT_INSTALL_SUCCESS = 1; // 0x1
+ field public static final int RESULT_IO_EXCEPTION = 7; // 0x7
+ field public static final int RESULT_META_FILE_REQUIRED_BUT_NOT_FOUND = 9; // 0x9
+ field public static final int RESULT_NOT_WRITABLE = 4; // 0x4
+ field public static final int RESULT_PARSE_EXCEPTION = 8; // 0x8
+ field public static final int RESULT_SAVE_PROFILE_SIGNALLED = 12; // 0xc
+ field public static final int RESULT_SAVE_PROFILE_SKIPPED = 13; // 0xd
+ field public static final int RESULT_UNSUPPORTED_ART_VERSION = 3; // 0x3
+ }
+
+ public static interface ProfileInstaller.DiagnosticsCallback {
+ method public void onDiagnosticReceived(int, Object?);
+ method public void onResultReceived(int, Object?);
+ }
+
+ public class ProfileInstallerInitializer implements androidx.startup.Initializer<androidx.profileinstaller.ProfileInstallerInitializer.Result> {
+ ctor public ProfileInstallerInitializer();
+ method public androidx.profileinstaller.ProfileInstallerInitializer.Result create(android.content.Context);
+ method public java.util.List<java.lang.Class<? extends androidx.startup.Initializer<?>>!> dependencies();
+ }
+
+ public static class ProfileInstallerInitializer.Result {
+ ctor public ProfileInstallerInitializer.Result();
+ }
+
+ public final class ProfileVerifier {
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.profileinstaller.ProfileVerifier.CompilationStatus!> getCompilationStatusAsync();
+ method @WorkerThread public static androidx.profileinstaller.ProfileVerifier.CompilationStatus writeProfileVerification(android.content.Context);
+ }
+
+ public static class ProfileVerifier.CompilationStatus {
+ method public int getProfileInstallResultCode();
+ method public boolean hasProfileEnqueuedForCompilation();
+ method public boolean isCompiledWithProfile();
+ field public static final int RESULT_CODE_COMPILED_WITH_PROFILE = 1; // 0x1
+ field public static final int RESULT_CODE_COMPILED_WITH_PROFILE_NON_MATCHING = 3; // 0x3
+ field public static final int RESULT_CODE_ERROR_CACHE_FILE_EXISTS_BUT_CANNOT_BE_READ = 131072; // 0x20000
+ field public static final int RESULT_CODE_ERROR_CANT_WRITE_PROFILE_VERIFICATION_RESULT_CACHE_FILE = 196608; // 0x30000
+ field public static final int RESULT_CODE_ERROR_PACKAGE_NAME_DOES_NOT_EXIST = 65536; // 0x10000
+ field public static final int RESULT_CODE_ERROR_UNSUPPORTED_API_VERSION = 262144; // 0x40000
+ field public static final int RESULT_CODE_NO_PROFILE = 0; // 0x0
+ field public static final int RESULT_CODE_PROFILE_ENQUEUED_FOR_COMPILATION = 2; // 0x2
+ }
+
+}
+
diff --git a/recyclerview/recyclerview/api/current.txt b/recyclerview/recyclerview/api/current.txt
index 3750c3c..ca945e9 100644
--- a/recyclerview/recyclerview/api/current.txt
+++ b/recyclerview/recyclerview/api/current.txt
@@ -470,6 +470,7 @@
method public void setAccessibilityDelegateCompat(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate?);
method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
method public void setChildDrawingOrderCallback(androidx.recyclerview.widget.RecyclerView.ChildDrawingOrderCallback?);
+ method public static void setDebugAssertionsEnabled(boolean);
method public void setEdgeEffectFactory(androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory);
method public void setHasFixedSize(boolean);
method public void setItemAnimator(androidx.recyclerview.widget.RecyclerView.ItemAnimator?);
@@ -483,6 +484,7 @@
method public void setRecycledViewPool(androidx.recyclerview.widget.RecyclerView.RecycledViewPool?);
method @Deprecated public void setRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener?);
method public void setScrollingTouchSlop(int);
+ method public static void setVerboseLoggingEnabled(boolean);
method public void setViewCacheExtension(androidx.recyclerview.widget.RecyclerView.ViewCacheExtension?);
method public void smoothScrollBy(@Px int, @Px int);
method public void smoothScrollBy(@Px int, @Px int, android.view.animation.Interpolator?);
diff --git a/recyclerview/recyclerview/api/public_plus_experimental_current.txt b/recyclerview/recyclerview/api/public_plus_experimental_current.txt
index 3750c3c..ca945e9 100644
--- a/recyclerview/recyclerview/api/public_plus_experimental_current.txt
+++ b/recyclerview/recyclerview/api/public_plus_experimental_current.txt
@@ -470,6 +470,7 @@
method public void setAccessibilityDelegateCompat(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate?);
method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
method public void setChildDrawingOrderCallback(androidx.recyclerview.widget.RecyclerView.ChildDrawingOrderCallback?);
+ method public static void setDebugAssertionsEnabled(boolean);
method public void setEdgeEffectFactory(androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory);
method public void setHasFixedSize(boolean);
method public void setItemAnimator(androidx.recyclerview.widget.RecyclerView.ItemAnimator?);
@@ -483,6 +484,7 @@
method public void setRecycledViewPool(androidx.recyclerview.widget.RecyclerView.RecycledViewPool?);
method @Deprecated public void setRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener?);
method public void setScrollingTouchSlop(int);
+ method public static void setVerboseLoggingEnabled(boolean);
method public void setViewCacheExtension(androidx.recyclerview.widget.RecyclerView.ViewCacheExtension?);
method public void smoothScrollBy(@Px int, @Px int);
method public void smoothScrollBy(@Px int, @Px int, android.view.animation.Interpolator?);
diff --git a/recyclerview/recyclerview/api/restricted_current.txt b/recyclerview/recyclerview/api/restricted_current.txt
index 31a4f238..2b2bdad 100644
--- a/recyclerview/recyclerview/api/restricted_current.txt
+++ b/recyclerview/recyclerview/api/restricted_current.txt
@@ -470,6 +470,7 @@
method public void setAccessibilityDelegateCompat(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate?);
method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
method public void setChildDrawingOrderCallback(androidx.recyclerview.widget.RecyclerView.ChildDrawingOrderCallback?);
+ method public static void setDebugAssertionsEnabled(boolean);
method public void setEdgeEffectFactory(androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory);
method public void setHasFixedSize(boolean);
method public void setItemAnimator(androidx.recyclerview.widget.RecyclerView.ItemAnimator?);
@@ -483,6 +484,7 @@
method public void setRecycledViewPool(androidx.recyclerview.widget.RecyclerView.RecycledViewPool?);
method @Deprecated public void setRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener?);
method public void setScrollingTouchSlop(int);
+ method public static void setVerboseLoggingEnabled(boolean);
method public void setViewCacheExtension(androidx.recyclerview.widget.RecyclerView.ViewCacheExtension?);
method public void smoothScrollBy(@Px int, @Px int);
method public void smoothScrollBy(@Px int, @Px int, android.view.animation.Interpolator?);
diff --git a/recyclerview/recyclerview/build.gradle b/recyclerview/recyclerview/build.gradle
index 758e3f6..caa887e 100644
--- a/recyclerview/recyclerview/build.gradle
+++ b/recyclerview/recyclerview/build.gradle
@@ -12,6 +12,7 @@
implementation("androidx.collection:collection:1.0.0")
api("androidx.customview:customview:1.0.0")
implementation("androidx.customview:customview-poolingcontainer:1.0.0")
+ implementation("androidx.profileinstaller:profileinstaller:1.2.1")
androidTestImplementation(libs.testExtJunit)
androidTestImplementation(libs.testCore)
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/GapWorker.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/GapWorker.java
index b2d9f2e..5bbdcf1 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/GapWorker.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/GapWorker.java
@@ -157,7 +157,7 @@
}
public void add(RecyclerView recyclerView) {
- if (RecyclerView.DEBUG && mRecyclerViews.contains(recyclerView)) {
+ if (RecyclerView.sDebugAssertionsEnabled && mRecyclerViews.contains(recyclerView)) {
throw new IllegalStateException("RecyclerView already present in worker list!");
}
mRecyclerViews.add(recyclerView);
@@ -165,7 +165,7 @@
public void remove(RecyclerView recyclerView) {
boolean removeSuccess = mRecyclerViews.remove(recyclerView);
- if (RecyclerView.DEBUG && !removeSuccess) {
+ if (RecyclerView.sDebugAssertionsEnabled && !removeSuccess) {
throw new IllegalStateException("RecyclerView removal failed!");
}
}
@@ -175,7 +175,7 @@
*/
void postFromTraversal(RecyclerView recyclerView, int prefetchDx, int prefetchDy) {
if (recyclerView.isAttachedToWindow()) {
- if (RecyclerView.DEBUG && !mRecyclerViews.contains(recyclerView)) {
+ if (RecyclerView.sDebugAssertionsEnabled && !mRecyclerViews.contains(recyclerView)) {
throw new IllegalStateException("attempting to post unregistered view!");
}
if (mPostTimeNs == 0) {
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 149cc67..22e7245 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
@@ -219,7 +219,8 @@
static final String TAG = "RecyclerView";
- static final boolean DEBUG = false;
+ static boolean sDebugAssertionsEnabled = false;
+ static boolean sVerboseLoggingEnabled = false;
static final boolean VERBOSE_TRACING = false;
@@ -386,6 +387,35 @@
private static final Class<?>[] LAYOUT_MANAGER_CONSTRUCTOR_SIGNATURE =
new Class<?>[]{Context.class, AttributeSet.class, int.class, int.class};
+ /**
+ * Enable internal assertions about RecyclerView's state and throw exceptions if the
+ * assertions are violated.
+ * <p>
+ * This is primarily intended to diagnose problems with RecyclerView, and
+ * <strong>should not be enabled in production</strong> unless you have a specific reason to
+ * do so.
+ * <p>
+ * Enabling this may negatively affect performance and/or stability.
+ *
+ * @param debugAssertionsEnabled true to enable assertions; false to disable them
+ */
+ public static void setDebugAssertionsEnabled(boolean debugAssertionsEnabled) {
+ RecyclerView.sDebugAssertionsEnabled = debugAssertionsEnabled;
+ }
+
+ /**
+ * Enable verbose logging within RecyclerView itself.
+ * <p>
+ * Enabling this may negatively affect performance and reduce the utility of logcat due to
+ * high-volume logging. This generally <strong>should not be enabled in production</strong>
+ * unless you have a specific reason for doing so.
+ *
+ * @param verboseLoggingEnabled true to enable logging; false to disable it
+ */
+ public static void setVerboseLoggingEnabled(boolean verboseLoggingEnabled) {
+ RecyclerView.sVerboseLoggingEnabled = verboseLoggingEnabled;
+ }
+
private final RecyclerViewDataObserver mObserver = new RecyclerViewDataObserver();
final Recycler mRecycler = new Recycler();
@@ -983,7 +1013,7 @@
throw new IllegalArgumentException("Called attach on a child which is not"
+ " detached: " + vh + exceptionLabel());
}
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "reAttach " + vh);
}
vh.clearTmpDetachFlag();
@@ -1001,7 +1031,7 @@
throw new IllegalArgumentException("called detach on an already"
+ " detached child " + vh + exceptionLabel());
}
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "tmpDetach " + vh);
}
vh.addFlags(ViewHolder.FLAG_TMP_DETACHED);
@@ -1039,7 +1069,7 @@
// ensure it is not hidden because for adapter helper, the only thing matter is that
// LM thinks view is a child.
if (mChildHelper.isHidden(vh.itemView)) {
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "assuming view holder cannot be find because it is hidden");
}
return null;
@@ -1554,7 +1584,7 @@
final ViewHolder viewHolder = getChildViewHolderInt(view);
mRecycler.unscrapView(viewHolder);
mRecycler.recycleViewHolderInternal(viewHolder);
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "after removing animated view: " + view + ", " + this);
}
}
@@ -1638,7 +1668,7 @@
if (state == mScrollState) {
return;
}
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "setting scroll state to " + state + " from " + mScrollState,
new Exception());
}
@@ -2407,7 +2437,7 @@
void stopInterceptRequestLayout(boolean performLayoutChildren) {
if (mInterceptRequestLayoutDepth < 1) {
//noinspection PointlessBooleanExpression
- if (DEBUG) {
+ if (sDebugAssertionsEnabled) {
throw new IllegalStateException("stopInterceptRequestLayout was called more "
+ "times than startInterceptRequestLayout."
+ exceptionLabel());
@@ -4105,7 +4135,7 @@
void onExitLayoutOrScroll(boolean enableChangeEvents) {
mLayoutOrScrollCounter--;
if (mLayoutOrScrollCounter < 1) {
- if (DEBUG && mLayoutOrScrollCounter < 0) {
+ if (sDebugAssertionsEnabled && mLayoutOrScrollCounter < 0) {
throw new IllegalStateException("layout or scroll counter cannot go below zero."
+ "Some calls are not matching" + exceptionLabel());
}
@@ -5015,7 +5045,7 @@
final int childCount = mChildHelper.getUnfilteredChildCount();
for (int i = 0; i < childCount; i++) {
final ViewHolder holder = getChildViewHolderInt(mChildHelper.getUnfilteredChildAt(i));
- if (DEBUG && holder.mPosition == -1 && !holder.isRemoved()) {
+ if (sDebugAssertionsEnabled && holder.mPosition == -1 && !holder.isRemoved()) {
throw new IllegalStateException("view holder cannot have position -1 unless it"
+ " is removed" + exceptionLabel());
}
@@ -5054,7 +5084,7 @@
if (holder == null || holder.mPosition < start || holder.mPosition > end) {
continue;
}
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "offsetPositionRecordsForMove attached child " + i + " holder "
+ holder);
}
@@ -5075,7 +5105,7 @@
for (int i = 0; i < childCount; i++) {
final ViewHolder holder = getChildViewHolderInt(mChildHelper.getUnfilteredChildAt(i));
if (holder != null && !holder.shouldIgnore() && holder.mPosition >= positionStart) {
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "offsetPositionRecordsForInsert attached child " + i + " holder "
+ holder + " now at position " + (holder.mPosition + itemCount));
}
@@ -5095,7 +5125,7 @@
final ViewHolder holder = getChildViewHolderInt(mChildHelper.getUnfilteredChildAt(i));
if (holder != null && !holder.shouldIgnore()) {
if (holder.mPosition >= positionEnd) {
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "offsetPositionRecordsForRemove attached child " + i
+ " holder " + holder + " now at position "
+ (holder.mPosition - itemCount));
@@ -5103,7 +5133,7 @@
holder.offsetPosition(-itemCount, applyToPreLayout);
mState.mStructureChanged = true;
} else if (holder.mPosition >= positionStart) {
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "offsetPositionRecordsForRemove attached child " + i
+ " holder " + holder + " now REMOVED");
}
@@ -6284,7 +6314,7 @@
PoolingContainer.callPoolingContainerOnRelease(scrap.itemView);
return;
}
- if (DEBUG && scrapHeap.contains(scrap)) {
+ if (sDebugAssertionsEnabled && scrapHeap.contains(scrap)) {
throw new IllegalArgumentException("this scrap item already exists");
}
scrap.resetInternal();
@@ -6539,7 +6569,7 @@
// if it is a removed holder, nothing to verify since we cannot ask adapter anymore
// if it is not removed, verify the type and id.
if (holder.isRemoved()) {
- if (DEBUG && !mState.isPreLayout()) {
+ if (sDebugAssertionsEnabled && !mState.isPreLayout()) {
throw new IllegalStateException("should not receive a removed view unless it"
+ " is pre layout" + exceptionLabel());
}
@@ -6788,7 +6818,7 @@
}
}
if (holder == null) { // fallback to pool
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "tryGetViewHolderForPositionByDeadline("
+ position + ") fetching from shared pool");
}
@@ -6818,7 +6848,7 @@
long end = getNanoTime();
mRecyclerPool.factorInCreateTime(type, end - start);
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "tryGetViewHolderForPositionByDeadline created new ViewHolder");
}
}
@@ -6845,7 +6875,7 @@
// do not update unless we absolutely have to.
holder.mPreLayoutPosition = position;
} else if (!holder.isBound() || holder.needsUpdate() || holder.isInvalid()) {
- if (DEBUG && holder.isRemoved()) {
+ if (sDebugAssertionsEnabled && holder.isRemoved()) {
throw new IllegalStateException("Removed holder should be bound and it should"
+ " come here only in pre-layout. Holder: " + holder
+ exceptionLabel());
@@ -6984,11 +7014,11 @@
* @param cachedViewIndex The index of the view in cached views list
*/
void recycleCachedViewAt(int cachedViewIndex) {
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "Recycling cached view at index " + cachedViewIndex);
}
ViewHolder viewHolder = mCachedViews.get(cachedViewIndex);
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "CachedViewHolder to be recycled: " + viewHolder);
}
addViewHolderToRecycledViewPool(viewHolder, true);
@@ -7026,7 +7056,7 @@
&& mAdapter.onFailedToRecycleView(holder);
boolean cached = false;
boolean recycled = false;
- if (DEBUG && mCachedViews.contains(holder)) {
+ if (sDebugAssertionsEnabled && mCachedViews.contains(holder)) {
throw new IllegalArgumentException("cached view received recycle internal? "
+ holder + exceptionLabel());
}
@@ -7072,7 +7102,7 @@
// TODO: consider cancelling an animation when an item is removed scrollBy,
// to return it to the pool faster
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "trying to recycle a non-recycleable holder. Hopefully, it will "
+ "re-visit here. We are still removing it from animation lists"
+ exceptionLabel());
@@ -7274,7 +7304,7 @@
if (!dryRun) {
mCachedViews.remove(i);
}
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "getScrapOrHiddenOrCachedHolderForPosition(" + position
+ ") found match in cache: " + holder);
}
@@ -7354,7 +7384,7 @@
if (mState != null) {
mViewInfoStore.removeViewHolder(holder);
}
- if (DEBUG) Log.d(TAG, "dispatchViewRecycled: " + holder);
+ if (sVerboseLoggingEnabled) Log.d(TAG, "dispatchViewRecycled: " + holder);
}
void onAdapterChanged(Adapter<?> oldAdapter, Adapter<?> newAdapter,
@@ -7388,7 +7418,7 @@
} else {
holder.offsetPosition(inBetweenOffset, false);
}
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "offsetPositionRecordsForMove cached child " + i + " holder "
+ holder);
}
@@ -7400,7 +7430,7 @@
for (int i = 0; i < cachedCount; i++) {
final ViewHolder holder = mCachedViews.get(i);
if (holder != null && holder.mPosition >= insertedAt) {
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "offsetPositionRecordsForInsert cached " + i + " holder "
+ holder + " now at position " + (holder.mPosition + count));
}
@@ -7423,7 +7453,7 @@
final ViewHolder holder = mCachedViews.get(i);
if (holder != null) {
if (holder.mPosition >= removedEnd) {
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "offsetPositionRecordsForRemove cached " + i
+ " holder " + holder + " now at position "
+ (holder.mPosition - count));
@@ -9173,7 +9203,7 @@
* @param position Scroll to this adapter position.
*/
public void scrollToPosition(int position) {
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.e(TAG, "You MUST implement scrollToPosition. It will soon become abstract");
}
}
@@ -9354,7 +9384,7 @@
}
}
if (lp.mPendingInvalidate) {
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "consuming pending invalidate on child " + lp.mViewHolder);
}
holder.itemView.invalidate();
@@ -9946,7 +9976,7 @@
private void scrapOrRecycleView(Recycler recycler, int index, View view) {
final ViewHolder viewHolder = getChildViewHolderInt(view);
if (viewHolder.shouldIgnore()) {
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "ignoring view " + viewHolder);
}
return;
@@ -12246,7 +12276,7 @@
mIsRecyclableCount = recyclable ? mIsRecyclableCount - 1 : mIsRecyclableCount + 1;
if (mIsRecyclableCount < 0) {
mIsRecyclableCount = 0;
- if (DEBUG) {
+ if (sDebugAssertionsEnabled) {
throw new RuntimeException("isRecyclable decremented below 0: "
+ "unmatched pair of setIsRecyable() calls for " + this);
}
@@ -12257,7 +12287,7 @@
} else if (recyclable && mIsRecyclableCount == 0) {
mFlags &= ~FLAG_NOT_RECYCLABLE;
}
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "setIsRecyclable val:" + recyclable + ":" + this);
}
}
@@ -12852,7 +12882,7 @@
protected void onChildAttachedToWindow(View child) {
if (getChildPosition(child) == getTargetPosition()) {
mTargetView = child;
- if (DEBUG) {
+ if (sVerboseLoggingEnabled) {
Log.d(TAG, "smooth scroll target view has been attached");
}
}
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/InvalidationTrackerFlowTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/InvalidationTrackerFlowTest.kt
index 3ee01a5..1b5d195 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/InvalidationTrackerFlowTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/InvalidationTrackerFlowTest.kt
@@ -39,6 +39,7 @@
import kotlinx.coroutines.yield
import org.junit.After
import org.junit.Assert.fail
+import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
@@ -105,6 +106,7 @@
channel.cancel()
}
+ @Ignore // b/268534919
@Test
fun emitOnceForMultipleTablesInTransaction(): Unit = runBlocking {
val results = mutableListOf<Set<String>>()
diff --git a/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java b/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java
index 9ecf09b..1a7bd69f 100644
--- a/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java
+++ b/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java
@@ -143,6 +143,10 @@
/**
* Builder for an EncryptedFile.
*
+ * <p>If the <code>masterKeyAlias</code> used here is for a key that is not yet
+ * created, this method will not be thread safe. Use the alternate signature that is not
+ * deprecated for multi-threaded contexts.
+ *
* @deprecated Use {@link #Builder(Context, File, MasterKey, FileEncryptionScheme)} instead.
*/
@Deprecated
diff --git a/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedSharedPreferences.java b/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedSharedPreferences.java
index 2060e40..d974cd3 100644
--- a/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedSharedPreferences.java
+++ b/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedSharedPreferences.java
@@ -134,6 +134,12 @@
/**
* Opens an instance of encrypted SharedPreferences
*
+ * <p>If the <code>masterKeyAlias</code> used here is for a key that is not yet created, this
+ * method will not be thread safe. Use the alternate signature that is not deprecated for
+ * multi-threaded contexts.
+ *
+ * @deprecated Use {@link #create(Context, String, MasterKey,
+ * PrefKeyEncryptionScheme, PrefValueEncryptionScheme)} instead.
* @param fileName The name of the file to open; can not contain path
* separators.
* @param masterKeyAlias The alias of the master key to use.
@@ -143,8 +149,6 @@
* @return The SharedPreferences instance that encrypts all data.
* @throws GeneralSecurityException when a bad master key or keyset has been attempted
* @throws IOException when fileName can not be used
- * @deprecated Use {@link #create(Context, String, MasterKey,
- * PrefKeyEncryptionScheme, PrefValueEncryptionScheme)} instead.
*/
@Deprecated
@NonNull
diff --git a/security/security-crypto/src/main/java/androidx/security/crypto/MasterKeys.java b/security/security-crypto/src/main/java/androidx/security/crypto/MasterKeys.java
index 5734b8b..854d83f 100644
--- a/security/security-crypto/src/main/java/androidx/security/crypto/MasterKeys.java
+++ b/security/security-crypto/src/main/java/androidx/security/crypto/MasterKeys.java
@@ -54,6 +54,8 @@
public static final KeyGenParameterSpec AES256_GCM_SPEC =
createAES256GCMKeyGenParameterSpec(MASTER_KEY_ALIAS);
+ private static Object sLock = new Object();
+
/**
* Provides a safe and easy to use KenGenParameterSpec with the settings.
* Algorithm: AES
@@ -92,9 +94,13 @@
@NonNull KeyGenParameterSpec keyGenParameterSpec)
throws GeneralSecurityException, IOException {
validate(keyGenParameterSpec);
- if (!MasterKeys.keyExists(keyGenParameterSpec.getKeystoreAlias())) {
- generateKey(keyGenParameterSpec);
+
+ synchronized (sLock) {
+ if (!MasterKeys.keyExists(keyGenParameterSpec.getKeystoreAlias())) {
+ generateKey(keyGenParameterSpec);
+ }
}
+
return keyGenParameterSpec.getKeystoreAlias();
}
diff --git a/settings.gradle b/settings.gradle
index 2449093..e4063e7 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -985,20 +985,20 @@
includeProject(":wear:watchface:watchface-style-old-api-test-stub", "wear/watchface/watchface-style/old-api-test-stub", [BuildType.MAIN, BuildType.WEAR])
includeProject(":webkit:integration-tests:testapp", [BuildType.MAIN])
includeProject(":webkit:webkit", [BuildType.MAIN])
-includeProject(":window:window", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:window-samples", "window/window/samples", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:extensions:extensions", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:extensions:core:core", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:integration-tests:configuration-change-tests", [BuildType.MAIN])
-includeProject(":window:sidecar:sidecar", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:window-java", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:window-core", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:window-rxjava2", [BuildType.MAIN])
-includeProject(":window:window-rxjava3", [BuildType.MAIN])
-includeProject(":window:window-demos:demo", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:window-demos:demo-common", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:window-demos:demo-second-app", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:window-testing", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
+includeProject(":window:window", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA, BuildType.WINDOW])
+includeProject(":window:window-samples", "window/window/samples", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA, BuildType.WINDOW])
+includeProject(":window:extensions:extensions", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA, BuildType.WINDOW])
+includeProject(":window:extensions:core:core", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA, BuildType.WINDOW])
+includeProject(":window:integration-tests:configuration-change-tests", [BuildType.MAIN, BuildType.WINDOW])
+includeProject(":window:sidecar:sidecar", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA, BuildType.WINDOW])
+includeProject(":window:window-java", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA, BuildType.WINDOW])
+includeProject(":window:window-core", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA, BuildType.WINDOW])
+includeProject(":window:window-rxjava2", [BuildType.MAIN, BuildType.WINDOW])
+includeProject(":window:window-rxjava3", [BuildType.MAIN, BuildType.WINDOW])
+includeProject(":window:window-demos:demo", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA, BuildType.WINDOW])
+includeProject(":window:window-demos:demo-common", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA, BuildType.WINDOW])
+includeProject(":window:window-demos:demo-second-app", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA, BuildType.WINDOW])
+includeProject(":window:window-testing", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA, BuildType.WINDOW])
includeProject(":work:integration-tests:testapp", [BuildType.MAIN])
includeProject(":work:work-benchmark", [BuildType.MAIN])
includeProject(":work:work-gcm", [BuildType.MAIN])
@@ -1030,7 +1030,7 @@
// Note: don't add new samples/ apps. Instead, Create
// <module>/integration-tests/testapp in the "Libraries" section above.
includeProject(":androidx-demos", new File(samplesRoot, "AndroidXDemos"), [BuildType.MAIN])
-includeProject(":media-routing-demo", new File(samplesRoot, "MediaRoutingDemo"), [BuildType.MAIN])
+includeProject(":media-routing-demo", new File(samplesRoot, "MediaRoutingDemo"), [BuildType.MAIN, BuildType.MEDIA])
includeProject(":support-animation-demos", new File(samplesRoot, "SupportAnimationDemos"), [BuildType.MAIN])
includeProject(":support-content-demos", new File(samplesRoot, "SupportContentDemos"), [BuildType.MAIN])
includeProject(":support-emoji-demos", new File(samplesRoot, "SupportEmojiDemos"), [BuildType.MAIN])
diff --git a/slice/slice-view/src/main/res/values-ca/strings.xml b/slice/slice-view/src/main/res/values-ca/strings.xml
index c26df40..8038197 100644
--- a/slice/slice-view/src/main/res/values-ca/strings.xml
+++ b/slice/slice-view/src/main/res/values-ca/strings.xml
@@ -22,17 +22,17 @@
<string name="abc_slice_show_more" msgid="1112789899890391107">"Mostra\'n més"</string>
<string name="abc_slice_updated" msgid="7932359091871934205">"Actualitzat <xliff:g id="TIME">%1$s</xliff:g>"</string>
<plurals name="abc_slice_duration_min" formatted="false" msgid="7664017844210142826">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> min ago</item>
+ <item quantity="many">Fa <xliff:g id="ID_2">%d</xliff:g> min</item>
<item quantity="other">Fa <xliff:g id="ID_2">%d</xliff:g> min</item>
<item quantity="one">Fa <xliff:g id="ID_1">%d</xliff:g> min</item>
</plurals>
<plurals name="abc_slice_duration_years" formatted="false" msgid="2628491538787454021">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> yr ago</item>
+ <item quantity="many">Fa <xliff:g id="ID_2">%d</xliff:g> anys</item>
<item quantity="other">Fa <xliff:g id="ID_2">%d</xliff:g> anys</item>
<item quantity="one">Fa <xliff:g id="ID_1">%d</xliff:g> any</item>
</plurals>
<plurals name="abc_slice_duration_days" formatted="false" msgid="8356547162075064530">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> days ago</item>
+ <item quantity="many">Fa <xliff:g id="ID_2">%d</xliff:g> dies</item>
<item quantity="other">Fa <xliff:g id="ID_2">%d</xliff:g> dies</item>
<item quantity="one">Fa <xliff:g id="ID_1">%d</xliff:g> dia</item>
</plurals>
diff --git a/slice/slice-view/src/main/res/values-es-rUS/strings.xml b/slice/slice-view/src/main/res/values-es-rUS/strings.xml
index 6d9e794..ce7b894 100644
--- a/slice/slice-view/src/main/res/values-es-rUS/strings.xml
+++ b/slice/slice-view/src/main/res/values-es-rUS/strings.xml
@@ -22,17 +22,17 @@
<string name="abc_slice_show_more" msgid="1112789899890391107">"Mostrar más"</string>
<string name="abc_slice_updated" msgid="7932359091871934205">"Actualización: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<plurals name="abc_slice_duration_min" formatted="false" msgid="7664017844210142826">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> min ago</item>
+ <item quantity="many">Hace <xliff:g id="ID_2">%d</xliff:g> min</item>
<item quantity="other">Hace <xliff:g id="ID_2">%d</xliff:g> min</item>
<item quantity="one">Hace <xliff:g id="ID_1">%d</xliff:g> min</item>
</plurals>
<plurals name="abc_slice_duration_years" formatted="false" msgid="2628491538787454021">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> yr ago</item>
+ <item quantity="many">Hace <xliff:g id="ID_2">%d</xliff:g> años</item>
<item quantity="other">Hace <xliff:g id="ID_2">%d</xliff:g> años</item>
<item quantity="one">Hace <xliff:g id="ID_1">%d</xliff:g> año</item>
</plurals>
<plurals name="abc_slice_duration_days" formatted="false" msgid="8356547162075064530">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> days ago</item>
+ <item quantity="many">Hace <xliff:g id="ID_2">%d</xliff:g> días</item>
<item quantity="other">Hace <xliff:g id="ID_2">%d</xliff:g> días</item>
<item quantity="one">Hace <xliff:g id="ID_1">%d</xliff:g> día</item>
</plurals>
diff --git a/slice/slice-view/src/main/res/values-es/strings.xml b/slice/slice-view/src/main/res/values-es/strings.xml
index 5cfad8d..d1421bf 100644
--- a/slice/slice-view/src/main/res/values-es/strings.xml
+++ b/slice/slice-view/src/main/res/values-es/strings.xml
@@ -22,17 +22,17 @@
<string name="abc_slice_show_more" msgid="1112789899890391107">"Mostrar más"</string>
<string name="abc_slice_updated" msgid="7932359091871934205">"Última actualización: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<plurals name="abc_slice_duration_min" formatted="false" msgid="7664017844210142826">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> min ago</item>
+ <item quantity="many">Hace <xliff:g id="ID_2">%d</xliff:g> min</item>
<item quantity="other">Hace <xliff:g id="ID_2">%d</xliff:g> min</item>
<item quantity="one">Hace <xliff:g id="ID_1">%d</xliff:g> min</item>
</plurals>
<plurals name="abc_slice_duration_years" formatted="false" msgid="2628491538787454021">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> yr ago</item>
+ <item quantity="many">Hace <xliff:g id="ID_2">%d</xliff:g> años</item>
<item quantity="other">Hace <xliff:g id="ID_2">%d</xliff:g> años</item>
<item quantity="one">Hace <xliff:g id="ID_1">%d</xliff:g> año</item>
</plurals>
<plurals name="abc_slice_duration_days" formatted="false" msgid="8356547162075064530">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> days ago</item>
+ <item quantity="many">Hace <xliff:g id="ID_2">%d</xliff:g> días</item>
<item quantity="other">Hace <xliff:g id="ID_2">%d</xliff:g> días</item>
<item quantity="one">Hace <xliff:g id="ID_1">%d</xliff:g> día</item>
</plurals>
diff --git a/slice/slice-view/src/main/res/values-it/strings.xml b/slice/slice-view/src/main/res/values-it/strings.xml
index 9f4f52b..8319289 100644
--- a/slice/slice-view/src/main/res/values-it/strings.xml
+++ b/slice/slice-view/src/main/res/values-it/strings.xml
@@ -22,17 +22,17 @@
<string name="abc_slice_show_more" msgid="1112789899890391107">"Mostra altro"</string>
<string name="abc_slice_updated" msgid="7932359091871934205">"Ultimo aggiornamento: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<plurals name="abc_slice_duration_min" formatted="false" msgid="7664017844210142826">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> min ago</item>
+ <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> min fa</item>
<item quantity="other"><xliff:g id="ID_2">%d</xliff:g> min fa</item>
<item quantity="one"><xliff:g id="ID_1">%d</xliff:g> min fa</item>
</plurals>
<plurals name="abc_slice_duration_years" formatted="false" msgid="2628491538787454021">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> yr ago</item>
+ <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> anni fa</item>
<item quantity="other"><xliff:g id="ID_2">%d</xliff:g> anni fa</item>
<item quantity="one"><xliff:g id="ID_1">%d</xliff:g> anno fa</item>
</plurals>
<plurals name="abc_slice_duration_days" formatted="false" msgid="8356547162075064530">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> days ago</item>
+ <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> giorni fa</item>
<item quantity="other"><xliff:g id="ID_2">%d</xliff:g> giorni fa</item>
<item quantity="one"><xliff:g id="ID_1">%d</xliff:g> giorno fa</item>
</plurals>
diff --git a/slice/slice-view/src/main/res/values-pt-rBR/strings.xml b/slice/slice-view/src/main/res/values-pt-rBR/strings.xml
index efe4af2..dd468de 100644
--- a/slice/slice-view/src/main/res/values-pt-rBR/strings.xml
+++ b/slice/slice-view/src/main/res/values-pt-rBR/strings.xml
@@ -23,17 +23,17 @@
<string name="abc_slice_updated" msgid="7932359091871934205">"Atualizado <xliff:g id="TIME">%1$s</xliff:g>"</string>
<plurals name="abc_slice_duration_min" formatted="false" msgid="7664017844210142826">
<item quantity="one">Há <xliff:g id="ID_2">%d</xliff:g>min</item>
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> min ago</item>
+ <item quantity="many">Há <xliff:g id="ID_2">%d</xliff:g>min</item>
<item quantity="other">Há <xliff:g id="ID_2">%d</xliff:g>min</item>
</plurals>
<plurals name="abc_slice_duration_years" formatted="false" msgid="2628491538787454021">
<item quantity="one">Há <xliff:g id="ID_2">%d</xliff:g> ano</item>
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> yr ago</item>
+ <item quantity="many">Há <xliff:g id="ID_2">%d</xliff:g> anos</item>
<item quantity="other">Há <xliff:g id="ID_2">%d</xliff:g> anos</item>
</plurals>
<plurals name="abc_slice_duration_days" formatted="false" msgid="8356547162075064530">
<item quantity="one"><xliff:g id="ID_2">%d</xliff:g> dia atrás</item>
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> days ago</item>
+ <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> dias atrás</item>
<item quantity="other"><xliff:g id="ID_2">%d</xliff:g> dias atrás</item>
</plurals>
<string name="abc_slice_error" msgid="1794214973158263497">"Não foi possível conectar"</string>
diff --git a/slice/slice-view/src/main/res/values-pt-rPT/strings.xml b/slice/slice-view/src/main/res/values-pt-rPT/strings.xml
index d486321..125ecbf 100644
--- a/slice/slice-view/src/main/res/values-pt-rPT/strings.xml
+++ b/slice/slice-view/src/main/res/values-pt-rPT/strings.xml
@@ -22,17 +22,17 @@
<string name="abc_slice_show_more" msgid="1112789899890391107">"Mostrar mais"</string>
<string name="abc_slice_updated" msgid="7932359091871934205">"Atualização: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<plurals name="abc_slice_duration_min" formatted="false" msgid="7664017844210142826">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> min ago</item>
+ <item quantity="many">Há <xliff:g id="ID_2">%d</xliff:g> min</item>
<item quantity="other">Há <xliff:g id="ID_2">%d</xliff:g> min</item>
<item quantity="one">Há <xliff:g id="ID_1">%d</xliff:g> min</item>
</plurals>
<plurals name="abc_slice_duration_years" formatted="false" msgid="2628491538787454021">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> yr ago</item>
+ <item quantity="many">Há <xliff:g id="ID_2">%d</xliff:g> anos</item>
<item quantity="other">Há <xliff:g id="ID_2">%d</xliff:g> anos</item>
<item quantity="one">Há <xliff:g id="ID_1">%d</xliff:g> ano</item>
</plurals>
<plurals name="abc_slice_duration_days" formatted="false" msgid="8356547162075064530">
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> days ago</item>
+ <item quantity="many">Há <xliff:g id="ID_2">%d</xliff:g> dias</item>
<item quantity="other">Há <xliff:g id="ID_2">%d</xliff:g> dias</item>
<item quantity="one">Há <xliff:g id="ID_1">%d</xliff:g> dia</item>
</plurals>
diff --git a/slice/slice-view/src/main/res/values-pt/strings.xml b/slice/slice-view/src/main/res/values-pt/strings.xml
index efe4af2..dd468de 100644
--- a/slice/slice-view/src/main/res/values-pt/strings.xml
+++ b/slice/slice-view/src/main/res/values-pt/strings.xml
@@ -23,17 +23,17 @@
<string name="abc_slice_updated" msgid="7932359091871934205">"Atualizado <xliff:g id="TIME">%1$s</xliff:g>"</string>
<plurals name="abc_slice_duration_min" formatted="false" msgid="7664017844210142826">
<item quantity="one">Há <xliff:g id="ID_2">%d</xliff:g>min</item>
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> min ago</item>
+ <item quantity="many">Há <xliff:g id="ID_2">%d</xliff:g>min</item>
<item quantity="other">Há <xliff:g id="ID_2">%d</xliff:g>min</item>
</plurals>
<plurals name="abc_slice_duration_years" formatted="false" msgid="2628491538787454021">
<item quantity="one">Há <xliff:g id="ID_2">%d</xliff:g> ano</item>
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> yr ago</item>
+ <item quantity="many">Há <xliff:g id="ID_2">%d</xliff:g> anos</item>
<item quantity="other">Há <xliff:g id="ID_2">%d</xliff:g> anos</item>
</plurals>
<plurals name="abc_slice_duration_days" formatted="false" msgid="8356547162075064530">
<item quantity="one"><xliff:g id="ID_2">%d</xliff:g> dia atrás</item>
- <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> days ago</item>
+ <item quantity="many"><xliff:g id="ID_2">%d</xliff:g> dias atrás</item>
<item quantity="other"><xliff:g id="ID_2">%d</xliff:g> dias atrás</item>
</plurals>
<string name="abc_slice_error" msgid="1794214973158263497">"Não foi possível conectar"</string>
diff --git a/startup/startup-runtime/build.gradle b/startup/startup-runtime/build.gradle
index 68d9455..9cfaac9 100644
--- a/startup/startup-runtime/build.gradle
+++ b/startup/startup-runtime/build.gradle
@@ -31,6 +31,10 @@
}
dependencies {
+ // Ideally startup would depend on profileinstaller so startup gets the benefit of its
+ // baseline profile rules, but profileinstaller calls startup APIs, so we have to avoid
+ // the circular dependency
+
implementation("androidx.annotation:annotation:1.1.0")
implementation("androidx.tracing:tracing:1.0.0")
lintPublish(project(":startup:startup-runtime-lint"))
diff --git a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiScrollableTest.java b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiScrollableTest.java
index b3248e4..765aab1 100644
--- a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiScrollableTest.java
+++ b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiScrollableTest.java
@@ -53,7 +53,6 @@
mDefaultSwipeDeadZonePercentage);
}
- @Ignore // b/266965027
@Test
public void testGetChildByDescription() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -71,7 +70,6 @@
"This is non-existent"));
}
- @Ignore // b/266965027
@Test
public void testGetChildByDescription_withoutScrollSearch() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -89,7 +87,6 @@
false));
}
- @Ignore // b/266965027
@Test
public void testGetChildByInstance() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -106,7 +103,6 @@
1).exists());
}
- @Ignore // b/266965027
@Test
public void testGetChildByText() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -123,7 +119,6 @@
"This is non-existent"));
}
- @Ignore // b/266965027
@Test
public void testGetChildByText_withoutScrollSearch() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -140,7 +135,6 @@
"This is the bottom", false));
}
- @Ignore // b/266965027
@Test
public void testScrollDescriptionIntoView() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -156,7 +150,6 @@
assertFalse(relativeLayout.scrollDescriptionIntoView("This is non-existent"));
}
- @Ignore // b/266965027
@Test
public void testScrollIntoView_withUiObject() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -174,7 +167,6 @@
assertFalse(relativeLayout.scrollIntoView(nonExistentTarget));
}
- @Ignore // b/266965027
@Test
public void testScrollIntoView_withUiSelector() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -190,7 +182,6 @@
assertFalse(relativeLayout.scrollIntoView(nonExistentTarget));
}
- @Ignore // b/266965027
@Test
public void testEnsureFullyVisible() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -207,7 +198,6 @@
mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id/no_node"))));
}
- @Ignore // b/266965027
@Test
public void testScrollTextIntoView() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -223,7 +213,6 @@
assertFalse(relativeLayout.scrollTextIntoView("This is non-existent"));
}
- @Ignore // b/266965027
@Test
public void testSetMaxSearchSwipesAndGetMaxSearchSwipes() {
UiScrollable scrollable = new UiScrollable(new UiSelector()).setMaxSearchSwipes(5);
@@ -248,7 +237,6 @@
assertUiObjectNotFound(noNode::flingForward);
}
- @Ignore // b/266965027
@Test
public void testScrollForward_vertical() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -259,7 +247,6 @@
assertTrue(scrollRegion.scrollForward());
}
- @Ignore // b/266965027
@Test
public void testScrollForward_horizontal() throws Exception {
launchTestActivity(HorizontalScrollTestActivity.class);
@@ -310,7 +297,6 @@
assertEquals("swipe_right", scrollRegion.getText());
}
- @Ignore // b/266965027
@Test
public void testScrollToBeginning_withSteps() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -326,7 +312,6 @@
assertTrue(topText.exists());
}
- @Ignore // b/266965027
@Test
public void testScrollToBeginning_notEnoughSwipes_failed() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -342,7 +327,6 @@
assertFalse(topText.exists());
}
- @Ignore // b/266965027
@Test
public void testScrollToBeginning() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -370,7 +354,6 @@
assertEquals("fling_up", flingRegion.getText());
}
- @Ignore // b/266965027
@Test
public void testScrollToEnd_withSteps() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -385,7 +368,6 @@
assertTrue(bottomText.exists());
}
- @Ignore // b/266965027
@Test
public void testScrollToEnd_notEnoughSwipes_failed() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -400,7 +382,6 @@
assertFalse(bottomText.exists());
}
- @Ignore // b/266965027
@Test
public void testScrollToEnd() throws Exception {
launchTestActivity(VerticalScrollTestActivity.class);
@@ -427,7 +408,6 @@
assertEquals("fling_down", flingRegion.getText());
}
- @Ignore // b/266965027
@Test
public void testSetSwipeDeadZonePercentageAndGetSwipeDeadZonePercentage() {
UiScrollable scrollable =
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java
index 7d662bc..e9a106f 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java
@@ -353,7 +353,7 @@
* @param node
* @return null if node is null, else a Rect containing visible bounds
*/
- private Rect getVisibleBounds(AccessibilityNodeInfo node) {
+ Rect getVisibleBounds(AccessibilityNodeInfo node) {
if (node == null) {
return null;
}
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiScrollable.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiScrollable.java
index 047f4b4..8473756 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiScrollable.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiScrollable.java
@@ -397,8 +397,7 @@
if(node == null) {
throw new UiObjectNotFoundException(getSelector().toString());
}
- Rect rect = new Rect();
- node.getBoundsInScreen(rect);
+ Rect rect = getVisibleBounds(node);
int downX = 0;
int downY = 0;
@@ -472,8 +471,7 @@
if (node == null) {
throw new UiObjectNotFoundException(getSelector().toString());
}
- Rect rect = new Rect();
- node.getBoundsInScreen(rect);
+ Rect rect = getVisibleBounds(node);
int downX = 0;
int downY = 0;
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/IterableSubject.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/IterableSubject.kt
index b255881..3a3c4f6 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/IterableSubject.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/IterableSubject.kt
@@ -519,4 +519,36 @@
}
}
}
+
+ /**
+ * @deprecated You probably meant to call [containsNoneOf] instead.
+ */
+ @Deprecated(
+ message = "You probably meant to call containsNoneOf instead.",
+ replaceWith = ReplaceWith(expression = "containsNoneOf"),
+ )
+ override fun isNoneOf(first: Any?, second: Any?, vararg rest: Any?) {
+ super.isNoneOf(first, second, *rest)
+ }
+
+ @Deprecated(
+ message = "You probably meant to call containsNoneIn instead.",
+ replaceWith = ReplaceWith(expression = "containsNoneIn"),
+ )
+ override fun isNotIn(iterable: Iterable<*>?) {
+ super.isNotIn(iterable)
+
+ requireNonNull(iterable)
+
+ val nonIterables = iterable.filterNot { it is Iterable<*> }
+ if (nonIterables.isNotEmpty()) {
+ fail(
+ "The actual value is an Iterable, and you've written a test that compares it to " +
+ "some objects that are not Iterables. Did you instead mean to check " +
+ "whether its *contents* match any of the *contents* of the given values? " +
+ "If so, call containsNoneOf(...)/containsNoneIn(...) instead. " +
+ "Non-iterables: $nonIterables"
+ )
+ }
+ }
}
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Subject.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Subject.kt
index 346a81d..8c5c948 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Subject.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Subject.kt
@@ -18,6 +18,7 @@
import kotlin.test.assertIs
import kotlin.test.assertTrue
+import kotlin.test.fail
// As opposed to Truth, which limits visibility on `actual` and the generic type, we purposely make
// them visible in Kruth to allow for an easier time extending in Kotlin.
@@ -68,6 +69,30 @@
* Fails if the subject is not an instance of the given class.
*/
inline fun <reified V> isInstanceOf() = assertIs<V>(actual)
+
+ /** Fails unless the subject is equal to any element in the given [iterable]. */
+ open fun isIn(iterable: Iterable<*>?) {
+ if (actual !in requireNonNull(iterable)) {
+ fail("Expected $actual to be in $iterable, but was not")
+ }
+ }
+
+ /** Fails unless the subject is equal to any of the given elements. */
+ open fun isAnyOf(first: Any?, second: Any?, vararg rest: Any?) {
+ isIn(listOf(first, second, *rest))
+ }
+
+ /** Fails if the subject is equal to any element in the given [iterable]. */
+ open fun isNotIn(iterable: Iterable<*>?) {
+ if (actual in requireNonNull(iterable)) {
+ fail("Expected $actual not to be in $iterable, but it was")
+ }
+ }
+
+ /** Fails if the subject is equal to any of the given elements. */
+ open fun isNoneOf(first: Any?, second: Any?, vararg rest: Any?) {
+ isNotIn(listOf(first, second, *rest))
+ }
}
private fun Any?.standardIsEqualTo(expected: Any?) {
diff --git a/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/IterableSubjectTest.kt b/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/IterableSubjectTest.kt
index e08ecda..fd3cd7e 100644
--- a/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/IterableSubjectTest.kt
+++ b/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/IterableSubjectTest.kt
@@ -1000,70 +1000,52 @@
}
}
-//
-// private class Foo private constructor(val x: Int)
-//
-// private class Bar(x: Int) : Foo(x)
-//
-// private val FOO_COMPARATOR: Comparator<Foo> = object : Comparator<Foo?>() {
-// fun compare(a: Foo, b: Foo): Int {
-// return if (a.x < b.x) -1 else if (a.x > b.x) 1 else 0
-// }
-// }
-//
-// @Test
-// fun iterableOrderedByBaseClassComparator() {
-// val targetList: Iterable<Bar> = listOf(Bar(1), Bar(2), Bar(3))
-// assertThat(targetList).isInOrder(FOO_COMPARATOR)
-// assertThat(targetList).isInStrictOrder(FOO_COMPARATOR)
-// }
-//
-// @Test
-// fun isIn() {
-// val actual: ImmutableList<String> = listOf("a")
-// val expectedA: ImmutableList<String> = listOf("a")
-// val expectedB: ImmutableList<String> = listOf("b")
-// val expected: ImmutableList<ImmutableList<String>> = listOf(expectedA, expectedB)
-// assertThat(actual).isIn(expected)
-// }
-//
-// @Test
-// fun isNotIn() {
-// val actual: ImmutableList<String> = listOf("a")
-// assertThat(actual).isNotIn(listOf(listOf("b"), listOf("c")))
-// expectFailureWhenTestingThat(actual).isNotIn(listOf("a", "b"))
-// assertThat(expectFailure.getFailure())
-// .hasMessageThat()
-// .isEqualTo(
-// "The actual value is an Iterable, and you've written a test that compares it to some "
-// + "objects that are not Iterables. Did you instead mean to check whether its "
-// + "*contents* match any of the *contents* of the given values? If so, call "
-// + "containsNoneOf(...)/containsNoneIn(...) instead. Non-iterables: [a, b]"
-// )
-// }
-//
-// @Test
-// fun isAnyOf() {
-// val actual: ImmutableList<String> = listOf("a")
-// val expectedA: ImmutableList<String> = listOf("a")
-// val expectedB: ImmutableList<String> = listOf("b")
-// assertThat(actual).isAnyOf(expectedA, expectedB)
-// }
-//
-// @Test
-// fun isNoneOf() {
-// val actual: ImmutableList<String> = listOf("a")
-// assertThat(actual).isNoneOf(listOf("b"), listOf("c"))
-// expectFailureWhenTestingThat(actual).isNoneOf("a", "b")
-// assertThat(expectFailure.getFailure())
-// .hasMessageThat()
-// .isEqualTo(
-// ("The actual value is an Iterable, and you've written a test that compares it to some "
-// + "objects that are not Iterables. Did you instead mean to check whether its "
-// + "*contents* match any of the *contents* of the given values? If so, call "
-// + "containsNoneOf(...)/containsNoneIn(...) instead. Non-iterables: [a, b]")
-// )
-// }
+ @Test
+ fun iterableOrderedByBaseClassComparator() {
+ val comparator = compareBy<Foo> { it.x }
+ val targetList: Iterable<Bar> = listOf(Bar(1), Bar(2), Bar(3))
+ assertThat(targetList).isInOrder(comparator)
+ assertThat(targetList).isInStrictOrder(comparator)
+ }
+
+ @Test
+ fun isIn() {
+ val actual = listOf("a")
+ val expectedA = listOf("a")
+ val expectedB = listOf("b")
+ val expected = listOf(expectedA, expectedB)
+ assertThat(actual).isIn(expected)
+ }
+
+ @Suppress("DEPRECATION") // Testing a deprecated method
+ @Test
+ fun isNotIn() {
+ val actual = listOf("a")
+ assertThat(actual).isNotIn(listOf(listOf("b"), listOf("c")))
+
+ assertFailsWith<AssertionError> {
+ assertThat(actual).isNotIn(listOf("a", "b"))
+ }
+ }
+
+ @Test
+ fun isAnyOf() {
+ val actual = listOf("a")
+ val expectedA = listOf("a")
+ val expectedB = listOf("b")
+ assertThat(actual).isAnyOf(expectedA, expectedB)
+ }
+
+ @Suppress("DEPRECATION") // Testing a deprecated method
+ @Test
+ fun isNoneOf() {
+ val actual = listOf("a")
+ assertThat(actual).isNoneOf(listOf("b"), listOf("c"))
+
+ assertFailsWith<AssertionError> {
+ assertThat(actual).isNoneOf("a", "b")
+ }
+ }
private companion object {
private val COMPARE_AS_DECIMAL: Comparator<String?> =
@@ -1088,4 +1070,8 @@
override fun toString(): String = "HCT"
}
+
+ private open class Foo(val x: Int)
+
+ private class Bar(x: Int) : Foo(x)
}
diff --git a/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/SubjectTest.kt b/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/SubjectTest.kt
index fed8784..c2d784c 100644
--- a/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/SubjectTest.kt
+++ b/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/SubjectTest.kt
@@ -153,6 +153,142 @@
assertThat(StringBuilder("foo")).isEqualTo(StringBuilder("foo"))
}
}
+
+ @Test
+ fun isIn() {
+ assertThat("b").isIn(oneShotIterable("a", "b", "c"))
+ }
+
+ @Test
+ fun isInJustTwo() {
+ assertThat("b").isIn(oneShotIterable("a", "b"))
+ }
+
+ @Test
+ fun isInFailure() {
+ assertFailsWith<AssertionError> {
+ assertThat("x").isIn(oneShotIterable("a", "b", "c"))
+ }
+ }
+
+ @Test
+ fun isInNullInListWithNull() {
+ assertThat(null as String?).isIn(oneShotIterable("a", "b", null as String?))
+ }
+
+ @Test
+ fun isInNonnullInListWithNull() {
+ assertThat("b").isIn(oneShotIterable("a", "b", null as String?))
+ }
+
+ @Test
+ fun isInNullFailure() {
+ assertFailsWith<AssertionError> {
+ assertThat(null as String?).isIn(oneShotIterable("a", "b", "c"))
+ }
+ }
+
+ @Test
+ fun isInEmptyFailure() {
+ assertFailsWith<AssertionError> {
+ assertThat("b").isIn(emptyList<String>())
+ }
+ }
+
+ @Test
+ fun isAnyOf() {
+ assertThat("b").isAnyOf("a", "b", "c")
+ }
+
+ @Test
+ fun isAnyOfJustTwo() {
+ assertThat("b").isAnyOf("a", "b")
+ }
+
+ @Test
+ fun isAnyOfFailure() {
+ assertFailsWith<AssertionError> {
+ assertThat("x").isAnyOf("a", "b", "c")
+ }
+ }
+
+ @Test
+ fun isAnyOfNullInListWithNull() {
+ assertThat(null as String?).isAnyOf("a", "b", null as String?)
+ }
+
+ @Test
+ fun isAnyOfNonnullInListWithNull() {
+ assertThat("b").isAnyOf("a", "b", null as String?)
+ }
+
+ @Test
+ fun isAnyOfNullFailure() {
+ assertFailsWith<AssertionError> {
+ assertThat(null as String?).isAnyOf("a", "b", "c")
+ }
+ }
+
+ @Test
+ fun isNotIn() {
+ assertThat("x").isNotIn(oneShotIterable("a", "b", "c"))
+ }
+
+ @Test
+ fun isNotInFailure() {
+ assertFailsWith<AssertionError> {
+ assertThat("b").isNotIn(oneShotIterable("a", "b", "c"))
+ }
+ }
+
+ @Test
+ fun isNotInNull() {
+ assertThat(null as String?).isNotIn(oneShotIterable("a", "b", "c"))
+ }
+
+ @Test
+ fun isNotInNullFailure() {
+ assertFailsWith<AssertionError> {
+ assertThat(null as String?).isNotIn(oneShotIterable("a", "b", null as String?))
+ }
+ }
+
+ @Test
+ fun isNotInEmpty() {
+ assertThat("b").isNotIn(emptyList<String>())
+ }
+
+ @Test
+ fun isNoneOf() {
+ assertThat("x").isNoneOf("a", "b", "c")
+ }
+
+ @Test
+ fun isNoneOfFailure() {
+ assertFailsWith<AssertionError> {
+ assertThat("b").isNoneOf("a", "b", "c")
+ }
+ }
+
+ @Test
+ fun isNoneOfNull() {
+ assertThat(null as String?).isNoneOf("a", "b", "c")
+ }
+
+ @Test
+ fun isNoneOfNullFailure() {
+ assertFailsWith<AssertionError> {
+ assertThat(null as String?).isNoneOf("a", "b", null as String?)
+ }
+ }
+
+ private fun <T> oneShotIterable(vararg values: T): Iterable<T> =
+ object : Iterable<T> {
+ private val iterator = values.iterator()
+
+ override fun iterator(): Iterator<T> = iterator
+ override fun toString(): String = values.contentToString()
+ }
}
@Suppress("EqualsOrHashCode")
diff --git a/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt b/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt
index 9f3f678..6c85c25 100644
--- a/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt
+++ b/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt
@@ -93,12 +93,37 @@
startActivityAndWait(intent)
}
+/**
+ * Baseline Profile compilation mode is considered primary, and always worth measuring
+ */
+private fun CompilationMode.isPrimary(): Boolean {
+ return if (Build.VERSION.SDK_INT < 24) {
+ true
+ } else {
+ this is CompilationMode.Partial &&
+ this.warmupIterations == 0 &&
+ (this.baselineProfileMode == BaselineProfileMode.UseIfAvailable ||
+ this.baselineProfileMode == BaselineProfileMode.Require)
+ }
+}
+
fun createStartupCompilationParams(
startupModes: List<StartupMode> = STARTUP_MODES,
compilationModes: List<CompilationMode> = COMPILATION_MODES
): List<Array<Any>> = mutableListOf<Array<Any>>().apply {
+ // To save CI resources, avoid measuring startup combinations which have non-primary
+ // compilation or startup mode (BP, cold respectively) in the default case
+ val minimalIntersection = startupModes == STARTUP_MODES && compilationModes == COMPILATION_MODES
+
for (startupMode in startupModes) {
for (compilationMode in compilationModes) {
+ if (minimalIntersection &&
+ startupMode != StartupMode.COLD &&
+ !compilationMode.isPrimary()
+ ) {
+ continue
+ }
+
// Skip configs that can't run, so they don't clutter Studio benchmark
// output with AssumptionViolatedException dumps
if (compilationMode.isSupportedWithVmSettings()) {
diff --git a/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/AndroidXPaparazzi.kt b/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/AndroidXPaparazzi.kt
index b8723d9..80325ec 100644
--- a/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/AndroidXPaparazzi.kt
+++ b/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/AndroidXPaparazzi.kt
@@ -38,7 +38,7 @@
deviceConfig: DeviceConfig = DeviceConfig.PIXEL_6.copy(softButtons = false),
theme: String = "android:Theme.Material.NoActionBar.Fullscreen",
renderingMode: RenderingMode = RenderingMode.SHRINK,
- imageDiffer: ImageDiffer = ImageDiffer.PixelPerfect
+ imageDiffer: ImageDiffer = ImageDiffer.MSSIMMatcher
) = Paparazzi(
deviceConfig = deviceConfig,
theme = theme,
diff --git a/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/GoldenVerifier.kt b/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/GoldenVerifier.kt
index 71be049..32589d1 100644
--- a/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/GoldenVerifier.kt
+++ b/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/GoldenVerifier.kt
@@ -92,7 +92,7 @@
val analysis = analyze(expected, actual)
fun updateMessage() = "To update golden images for this test module, run " +
- "${updateGoldenGradleTask()}."
+ "${updateGoldenGradleCommand()}."
writeReport(snapshot, analysis)
@@ -110,7 +110,7 @@
)
is AnalysisResult.MissingGolden -> throw AssertionError(
"Expected golden image for test \"${snapshot.testName.methodName}\" does not " +
- "exist. Run ${updateGoldenGradleTask()} -Pandroidx.ignoreTestFailures=true " +
+ "exist. Run ${updateGoldenGradleCommand()} " +
"to create it and update all golden images for this test module."
)
}
@@ -248,8 +248,10 @@
const val ANDROIDX_GOLDEN_REPO_NAME = "platform/frameworks/support-golden"
/** Name of the updateGolden Gradle command for this module, via system properties. */
- fun updateGoldenGradleTask() =
- System.getProperty("$PACKAGE_NAME.updateGoldenTask") ?: ":updateGolden"
+ fun updateGoldenGradleCommand() =
+ "./gradlew ${
+ (System.getProperty("$PACKAGE_NAME.updateGoldenTask") ?: ":updateGolden")
+ } -Pandroidx.ignoreTestFailures=true"
/** Render test function name as a fully qualified string. */
fun TestName.toQualifiedName(): String {
diff --git a/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/ImageDiffer.kt b/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/ImageDiffer.kt
index 201f12e..eabb43b 100644
--- a/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/ImageDiffer.kt
+++ b/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/ImageDiffer.kt
@@ -18,6 +18,7 @@
import androidx.testutils.paparazzi.ImageDiffer.DiffResult.Similar
import java.awt.image.BufferedImage
+import kotlin.math.pow
@JvmDefaultWithCompatibility
/**
@@ -105,8 +106,256 @@
}
}
+ /**
+ * Image comparison using Structural Similarity Index, developed by Wang, Bovik, Sheikh, and
+ * Simoncelli. Details can be read in their paper:
+ * https://ece.uwaterloo.ca/~z70wang/publications/ssim.pdf
+ */
+ object MSSIMMatcher : ImageDiffer {
+ override fun diff(a: BufferedImage, b: BufferedImage): DiffResult {
+ val aIntArray = a.toIntArray()
+ val bIntArray = b.toIntArray()
+ val SSIMTotal = calculateSSIM(aIntArray, bIntArray, a.width, a.height)
+
+ val stats = "[MSSIM] Required SSIM: $SSIM_THRESHOLD, Actual " +
+ "SSIM: " + "%.3f".format(SSIMTotal)
+ if (SSIMTotal >= SSIM_THRESHOLD) {
+ return DiffResult.Similar(stats)
+ }
+ return PixelPerfect.diff(a, b)
+ }
+
+ internal fun calculateSSIM(
+ ideal: IntArray,
+ given: IntArray,
+ width: Int,
+ height: Int
+ ): Double {
+ return calculateSSIM(ideal, given, 0, width, width, height)
+ }
+
+ private fun calculateSSIM(
+ ideal: IntArray,
+ given: IntArray,
+ offset: Int,
+ stride: Int,
+ width: Int,
+ height: Int
+ ): Double {
+ var SSIMTotal = 0.0
+ var windows = 0
+ var currentWindowY = 0
+ while (currentWindowY < height) {
+ val windowHeight = computeWindowSize(currentWindowY, height)
+ var currentWindowX = 0
+ while (currentWindowX < width) {
+ val windowWidth = computeWindowSize(currentWindowX, width)
+ val start: Int =
+ indexFromXAndY(currentWindowX, currentWindowY, stride, offset)
+ if (isWindowWhite(ideal, start, stride, windowWidth, windowHeight) &&
+ isWindowWhite(given, start, stride, windowWidth, windowHeight)
+ ) {
+ currentWindowX += WINDOW_SIZE
+ continue
+ }
+ windows++
+ val means =
+ getMeans(ideal, given, start, stride, windowWidth, windowHeight)
+ val meanX = means[0]
+ val meanY = means[1]
+ val variances = getVariances(
+ ideal, given, meanX, meanY, start, stride,
+ windowWidth, windowHeight
+ )
+ val varX = variances[0]
+ val varY = variances[1]
+ val stdBoth = variances[2]
+ val SSIM = SSIM(meanX, meanY, varX, varY, stdBoth)
+ SSIMTotal += SSIM
+ currentWindowX += WINDOW_SIZE
+ }
+ currentWindowY += WINDOW_SIZE
+ }
+ if (windows == 0) {
+ return 1.0
+ }
+ return SSIMTotal / windows.toDouble()
+ }
+
+ /**
+ * Compute the size of the window. The window defaults to WINDOW_SIZE, but
+ * must be contained within dimension.
+ */
+ private fun computeWindowSize(coordinateStart: Int, dimension: Int): Int {
+ return if (coordinateStart + WINDOW_SIZE <= dimension) {
+ WINDOW_SIZE
+ } else {
+ dimension - coordinateStart
+ }
+ }
+
+ private fun isWindowWhite(
+ colors: IntArray,
+ start: Int,
+ stride: Int,
+ windowWidth: Int,
+ windowHeight: Int
+ ): Boolean {
+ for (y in 0 until windowHeight) {
+ for (x in 0 until windowWidth) {
+ if (colors[indexFromXAndY(x, y, stride, start)] != WHITE) {
+ return false
+ }
+ }
+ }
+ return true
+ }
+
+ /**
+ * This calculates the position in an array that would represent a bitmap given the parameters.
+ */
+ private fun indexFromXAndY(x: Int, y: Int, stride: Int, offset: Int): Int {
+ return x + y * stride + offset
+ }
+
+ private fun SSIM(
+ muX: Double,
+ muY: Double,
+ sigX: Double,
+ sigY: Double,
+ sigXY: Double
+ ): Double {
+ var SSIM = (2 * muX * muY + CONSTANT_C1) * (2 * sigXY + CONSTANT_C2)
+ val denom = ((muX * muX + muY * muY + CONSTANT_C1) * (sigX + sigY + CONSTANT_C2))
+ SSIM /= denom
+ return SSIM
+ }
+
+ /**
+ * This method will find the mean of a window in both sets of pixels. The return is an array
+ * where the first double is the mean of the first set and the second double is the mean of the
+ * second set.
+ */
+ private fun getMeans(
+ pixels0: IntArray,
+ pixels1: IntArray,
+ start: Int,
+ stride: Int,
+ windowWidth: Int,
+ windowHeight: Int
+ ): DoubleArray {
+ var avg0 = 0.0
+ var avg1 = 0.0
+ for (y in 0 until windowHeight) {
+ for (x in 0 until windowWidth) {
+ val index: Int = indexFromXAndY(x, y, stride, start)
+ avg0 += getIntensity(pixels0[index])
+ avg1 += getIntensity(pixels1[index])
+ }
+ }
+ avg0 /= windowWidth * windowHeight.toDouble()
+ avg1 /= windowWidth * windowHeight.toDouble()
+ return doubleArrayOf(avg0, avg1)
+ }
+
+ /**
+ * Finds the variance of the two sets of pixels, as well as the covariance of the windows. The
+ * return value is an array of doubles, the first is the variance of the first set of pixels,
+ * the second is the variance of the second set of pixels, and the third is the covariance.
+ */
+ private fun getVariances(
+ pixels0: IntArray,
+ pixels1: IntArray,
+ mean0: Double,
+ mean1: Double,
+ start: Int,
+ stride: Int,
+ windowWidth: Int,
+ windowHeight: Int
+ ): DoubleArray {
+ var var0 = 0.0
+ var var1 = 0.0
+ var varBoth = 0.0
+ for (y in 0 until windowHeight) {
+ for (x in 0 until windowWidth) {
+ val index: Int = indexFromXAndY(x, y, stride, start)
+ val v0 = getIntensity(pixels0[index]) - mean0
+ val v1 = getIntensity(pixels1[index]) - mean1
+ var0 += v0 * v0
+ var1 += v1 * v1
+ varBoth += v0 * v1
+ }
+ }
+ var0 /= windowWidth * windowHeight - 1.toDouble()
+ var1 /= windowWidth * windowHeight - 1.toDouble()
+ varBoth /= windowWidth * windowHeight - 1.toDouble()
+ return doubleArrayOf(var0, var1, varBoth)
+ }
+
+ /**
+ * Gets the intensity of a given pixel in RGB using luminosity formula
+ *
+ * l = 0.21R' + 0.72G' + 0.07B'
+ *
+ * The prime symbols dictate a gamma correction of 1.
+ */
+ private fun getIntensity(pixel: Int): Double {
+ val gamma = 1.0
+ var l = 0.0
+ l += 0.21f * (red(pixel) / 255f.toDouble()).pow(gamma)
+ l += 0.72f * (green(pixel) / 255f.toDouble()).pow(gamma)
+ l += 0.07f * (blue(pixel) / 255f.toDouble()).pow(gamma)
+ return l
+ }
+
+ /**
+ * Return the red component of a color int. This is the same as saying
+ * (color >> 16) & 0xFF
+ */
+ fun red(color: Int): Int {
+ return color shr 16 and 0xFF
+ }
+
+ /**
+ * Return the green component of a color int. This is the same as saying
+ * (color >> 8) & 0xFF
+ */
+ fun green(color: Int): Int {
+ return color shr 8 and 0xFF
+ }
+
+ /**
+ * Return the blue component of a color int. This is the same as saying
+ * color & 0xFF
+ */
+ fun blue(color: Int): Int {
+ return color and 0xFF
+ }
+
+ private fun BufferedImage.toIntArray(): IntArray {
+ val bitmapArray = IntArray(width * height)
+ for (x in 0 until width) {
+ for (y in 0 until height) {
+ bitmapArray[y * width + x] = getRGB(x, y)
+ }
+ }
+ return bitmapArray
+ }
+ }
+
private companion object {
const val MAGENTA = 0xFF_FF_00_FFu
const val TRANSPARENT = 0x00_FF_FF_FFu
+ const val WHITE = 0xFFFFFF
+
+ // These values were taken from the publication
+ private const val CONSTANT_L = 254.0
+ private const val CONSTANT_K1 = 0.00001
+ private const val CONSTANT_K2 = 0.00003
+ private val CONSTANT_C1 = (CONSTANT_L * CONSTANT_K1).pow(2.0)
+ private val CONSTANT_C2 = (CONSTANT_L * CONSTANT_K2).pow(2.0)
+ private const val WINDOW_SIZE = 10
+
+ private val SSIM_THRESHOLD: Double = 0.98
}
}
\ No newline at end of file
diff --git a/testutils/testutils-paparazzi/src/test/kotlin/androidx/testutils/paparazzi/GoldenVerifierTest.kt b/testutils/testutils-paparazzi/src/test/kotlin/androidx/testutils/paparazzi/GoldenVerifierTest.kt
index 0775bf6..0a99763 100644
--- a/testutils/testutils-paparazzi/src/test/kotlin/androidx/testutils/paparazzi/GoldenVerifierTest.kt
+++ b/testutils/testutils-paparazzi/src/test/kotlin/androidx/testutils/paparazzi/GoldenVerifierTest.kt
@@ -111,7 +111,8 @@
fun `asserts on failure`() {
createGolden("star")
val message = "Actual image differs from golden image: 17837 of 65536 pixels different. " +
- "To update golden images for this test module, run :updateGolden."
+ "To update golden images for this test module, run ./gradlew :updateGolden " +
+ "-Pandroidx.ignoreTestFailures=true."
assertFailsWithMessage(message) {
goldenVerifier().assertMatchesGolden(snapshot(), loadTestImage("circle"))
@@ -165,7 +166,8 @@
fun `asserts on size mismatch`() {
createGolden("horizontal_rectangle")
val message = "Actual image has different dimensions than golden image. Actual: 72x128. " +
- "Golden: 128x72. To update golden images for this test module, run :updateGolden."
+ "Golden: 128x72. To update golden images for this test module, run ./gradlew " +
+ ":updateGolden -Pandroidx.ignoreTestFailures=true."
assertFailsWithMessage(message) {
goldenVerifier().assertMatchesGolden(snapshot(), loadTestImage("vertical_rectangle"))
@@ -219,8 +221,8 @@
@Test
fun `asserts on missing golden`() {
val message = "Expected golden image for test \"asserts on missing golden\" does not " +
- "exist. Run :updateGolden -Pandroidx.ignoreTestFailures=true to create it and update " +
- "all golden images for this test module."
+ "exist. Run ./gradlew :updateGolden -Pandroidx.ignoreTestFailures=true to create it " +
+ "and update all golden images for this test module."
assertFailsWithMessage(message) {
goldenVerifier().assertMatchesGolden(snapshot(), loadTestImage("circle"))
diff --git a/tracing/tracing-perfetto-binary/src/main/cpp/tracing_perfetto.cc b/tracing/tracing-perfetto-binary/src/main/cpp/tracing_perfetto.cc
index 72776fc..e634a06 100644
--- a/tracing/tracing-perfetto-binary/src/main/cpp/tracing_perfetto.cc
+++ b/tracing/tracing-perfetto-binary/src/main/cpp/tracing_perfetto.cc
@@ -25,7 +25,7 @@
// Concept of version useful e.g. for human-readable error messages, and stable once released.
// Does not replace the need for a binary verification mechanism (e.g. checksum check).
// TODO: populate using CMake
-#define VERSION "1.0.0-alpha10"
+#define VERSION "1.0.0-alpha11"
namespace tracing_perfetto {
void RegisterWithPerfetto() {
diff --git a/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/jni/test/PerfettoNativeTest.kt b/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/jni/test/PerfettoNativeTest.kt
index 7178a50..753b9d8 100644
--- a/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/jni/test/PerfettoNativeTest.kt
+++ b/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/jni/test/PerfettoNativeTest.kt
@@ -30,7 +30,7 @@
init {
PerfettoNative.loadLib()
}
- const val libraryVersion = "1.0.0-alpha10" // TODO: get using reflection
+ const val libraryVersion = "1.0.0-alpha11" // TODO: get using reflection
}
@Test
diff --git a/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/security/SafeLibLoaderTest.kt b/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/security/SafeLibLoaderTest.kt
index 6a0500f..ecece91 100644
--- a/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/security/SafeLibLoaderTest.kt
+++ b/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/security/SafeLibLoaderTest.kt
@@ -104,7 +104,7 @@
dstDir.resolve(libFileName).also { dstFile ->
val srcZip = ZipFile(File(context.applicationInfo.publicSourceDir))
val libEntry = srcZip.entries().asSequence()
- .single { entry -> entry.name.matches(Regex(".*lib/.*$abi.*/$libFileName")) }
+ .single { entry -> entry.name.matches(Regex(".*lib/$abi/$libFileName")) }
srcZip.getInputStream(libEntry).use { src ->
dstFile.outputStream().use { dst -> src.copyTo(dst) }
}
@@ -121,4 +121,4 @@
.digest()
.joinToString(separator = "") { "%02x".format(it) }
.also { assertThat(it).matches("[0-9a-f]{64}") }
-}
\ No newline at end of file
+}
diff --git a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/jni/PerfettoNative.kt b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/jni/PerfettoNative.kt
index 5278ec7..a328d3b 100644
--- a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/jni/PerfettoNative.kt
+++ b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/jni/PerfettoNative.kt
@@ -25,12 +25,12 @@
// TODO(224510255): load from a file produced at build time
object Metadata {
- const val version = "1.0.0-alpha10"
+ const val version = "1.0.0-alpha11"
val checksums = mapOf(
- "arm64-v8a" to "189348f277f588ff41f51b4284bf0568bf3d0eab786f6664f8d66847694e0674",
- "armeabi-v7a" to "9550b32340d790d58fe069b3882815e3d2b20474aa634f01e448392e898cc95b",
- "x86" to "07967aaad711d16f35f509783f56139903f28f661ebb0415522c10fc0453810f",
- "x86_64" to "6b2f4129cb1e52d9c9dca5b89d575c7b2a905670da2e0474917d37223f0c8bf5",
+ "arm64-v8a" to "7b593d218cd0d2938b527779f2797e87ddb7d6c042cc5bf1f12543f103a9c291",
+ "armeabi-v7a" to "5c19ff0e61035b7dbdc450642e16761a8948f588ee523adfc329e10f854499b4",
+ "x86" to "2544cdb37d037b5c9976a55d032712c4642a92d1eab22210f9e2831a5df6531a",
+ "x86_64" to "5214e2a413835b2b7328055f50399aa8ae1be28b63a030193003406bf441ac61",
)
}
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListPinnableContainerTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListPinnableContainerTest.kt
index 98ba1e9..53c3a19 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListPinnableContainerTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListPinnableContainerTest.kt
@@ -38,6 +38,7 @@
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.runBlocking
import org.junit.Before
+import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
@@ -250,6 +251,7 @@
.assertIsNotPlaced()
}
+ @Ignore // b/268720713
@Test
fun pinnedItemIsStillPinnedWhenReorderedAndNotVisibleAnymore() {
val state = TvLazyListState()
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListTest.kt
index 51f87fd..cec085f 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListTest.kt
@@ -84,6 +84,7 @@
import java.util.concurrent.CountDownLatch
import kotlin.math.roundToInt
import kotlinx.coroutines.runBlocking
+import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
@@ -812,6 +813,7 @@
}
}
+ @Ignore // b/268211857
@Test
fun scroll_makeListSmaller_scroll() {
var items by mutableStateOf((1..100).toList())
diff --git a/tv/tv-material/api/public_plus_experimental_current.txt b/tv/tv-material/api/public_plus_experimental_current.txt
index 27d2332..cb54025 100644
--- a/tv/tv-material/api/public_plus_experimental_current.txt
+++ b/tv/tv-material/api/public_plus_experimental_current.txt
@@ -36,6 +36,37 @@
property public final int activeSlideIndex;
}
+ @androidx.tv.material3.ExperimentalTvMaterial3Api public final class ClickableSurfaceColor {
+ method public long getDefaultColor();
+ method public long getDisabledColor();
+ method public long getFocusedColor();
+ method public long getPressedColor();
+ property public final long defaultColor;
+ property public final long disabledColor;
+ property public final long focusedColor;
+ property public final long pressedColor;
+ }
+
+ @androidx.tv.material3.ExperimentalTvMaterial3Api public final class ClickableSurfaceDefaults {
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.tv.material3.ClickableSurfaceColor color(optional long defaultColor, optional long focusedColor, optional long pressedColor, optional long disabledColor);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.tv.material3.ClickableSurfaceColor contentColor(optional long defaultColor, optional long focusedColor, optional long pressedColor, optional long disabledColor);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.tv.material3.ClickableSurfaceShape shape(optional androidx.compose.ui.graphics.Shape defaultShape, optional androidx.compose.ui.graphics.Shape focusedShape, optional androidx.compose.ui.graphics.Shape pressedShape, optional androidx.compose.ui.graphics.Shape disabledShape, optional androidx.compose.ui.graphics.Shape focusedDisabledShape);
+ field public static final androidx.tv.material3.ClickableSurfaceDefaults INSTANCE;
+ }
+
+ @androidx.tv.material3.ExperimentalTvMaterial3Api public final class ClickableSurfaceShape {
+ method public androidx.compose.ui.graphics.Shape getDefaultShape();
+ method public androidx.compose.ui.graphics.Shape getDisabledShape();
+ method public androidx.compose.ui.graphics.Shape getFocusedDisabledShape();
+ method public androidx.compose.ui.graphics.Shape getFocusedShape();
+ method public androidx.compose.ui.graphics.Shape getPressedShape();
+ property public final androidx.compose.ui.graphics.Shape defaultShape;
+ property public final androidx.compose.ui.graphics.Shape disabledShape;
+ property public final androidx.compose.ui.graphics.Shape focusedDisabledShape;
+ property public final androidx.compose.ui.graphics.Shape focusedShape;
+ property public final androidx.compose.ui.graphics.Shape pressedShape;
+ }
+
@androidx.compose.runtime.Stable @androidx.tv.material3.ExperimentalTvMaterial3Api public final class ColorScheme {
ctor public ColorScheme(long primary, long onPrimary, long primaryContainer, long onPrimaryContainer, long inversePrimary, long secondary, long onSecondary, long secondaryContainer, long onSecondaryContainer, long tertiary, long onTertiary, long tertiaryContainer, long onTertiaryContainer, long background, long onBackground, long surface, long onSurface, long surfaceVariant, long onSurfaceVariant, long surfaceTint, long inverseSurface, long inverseOnSurface, long error, long onError, long errorContainer, long onErrorContainer, long outline, long outlineVariant, long scrim);
method public androidx.tv.material3.ColorScheme copy(optional long primary, optional long onPrimary, optional long primaryContainer, optional long onPrimaryContainer, optional long inversePrimary, optional long secondary, optional long onSecondary, optional long secondaryContainer, optional long onSecondaryContainer, optional long tertiary, optional long onTertiary, optional long tertiaryContainer, optional long onTertiaryContainer, optional long background, optional long onBackground, optional long surface, optional long onSurface, optional long surfaceVariant, optional long onSurfaceVariant, optional long surfaceTint, optional long inverseSurface, optional long inverseOnSurface, optional long error, optional long onError, optional long errorContainer, optional long onErrorContainer, optional long outline, optional long outlineVariant, optional long scrim);
@@ -184,7 +215,7 @@
}
public final class SurfaceKt {
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float tonalElevation, optional androidx.compose.ui.semantics.Role? role, optional float shadowElevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.tv.material3.ClickableSurfaceShape shape, optional androidx.tv.material3.ClickableSurfaceColor color, optional androidx.tv.material3.ClickableSurfaceColor contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float tonalElevation, optional androidx.compose.ui.semantics.Role? role, optional float shadowElevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> getLocalAbsoluteTonalElevation();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> LocalAbsoluteTonalElevation;
}
diff --git a/tv/tv-material/src/androidTest/java/androidx/tv/material3/SurfaceTest.kt b/tv/tv-material/src/androidTest/java/androidx/tv/material3/SurfaceTest.kt
index 7ce78931..22dd6ab 100644
--- a/tv/tv-material/src/androidTest/java/androidx/tv/material3/SurfaceTest.kt
+++ b/tv/tv-material/src/androidTest/java/androidx/tv/material3/SurfaceTest.kt
@@ -101,15 +101,23 @@
) {
Surface(
onClick = {},
- shape = RectangleShape,
- color = Color.Yellow
+ shape = ClickableSurfaceDefaults.shape(
+ defaultShape = RectangleShape
+ ),
+ color = ClickableSurfaceDefaults.color(
+ defaultColor = Color.Yellow
+ )
) {
Box(Modifier.fillMaxSize())
}
Surface(
onClick = {},
- shape = RectangleShape,
- color = Color.Green
+ shape = ClickableSurfaceDefaults.shape(
+ defaultShape = RectangleShape
+ ),
+ color = ClickableSurfaceDefaults.color(
+ defaultColor = Color.Green
+ )
) {
Box(Modifier.fillMaxSize())
}
@@ -148,7 +156,7 @@
}
/**
- * Tests that composed modifiers applied to TvSurface are applied within the changes to
+ * Tests that composed modifiers applied to Surface are applied within the changes to
* [LocalContentColor], so they can consume the updated values.
*/
@Test
@@ -164,7 +172,7 @@
},
onClick = {},
tonalElevation = 2.toDp(),
- contentColor = expectedColor
+ contentColor = ClickableSurfaceDefaults.color(defaultColor = expectedColor)
) {}
}
}
@@ -175,19 +183,19 @@
}
@Test
- fun tvClickableOverload_semantics() {
+ fun clickableOverload_semantics() {
val count = mutableStateOf(0)
rule.setContent {
Surface(
modifier = Modifier
- .testTag("tvSurface"),
+ .testTag("surface"),
onClick = { count.value += 1 }
) {
Text("${count.value}")
Spacer(Modifier.size(30.toDp()))
}
}
- rule.onNodeWithTag("tvSurface")
+ rule.onNodeWithTag("surface")
.performSemanticsAction(SemanticsActions.RequestFocus)
.assertHasClickAction()
.assertIsEnabled()
@@ -198,12 +206,12 @@
}
@Test
- fun tvClickableOverload_customSemantics() {
+ fun clickableOverload_customSemantics() {
val count = mutableStateOf(0)
rule.setContent {
Surface(
modifier = Modifier
- .testTag("tvSurface"),
+ .testTag("surface"),
onClick = { count.value += 1 },
role = Role.Checkbox
) {
@@ -211,7 +219,7 @@
Spacer(Modifier.size(30.toDp()))
}
}
- rule.onNodeWithTag("tvSurface")
+ rule.onNodeWithTag("surface")
.performSemanticsAction(SemanticsActions.RequestFocus)
.assertHasClickAction()
.assert(SemanticsMatcher.expectValue(SemanticsProperties.Role, Role.Checkbox))
@@ -223,44 +231,44 @@
}
@Test
- fun tvClickableOverload_clickAction() {
+ fun clickableOverload_clickAction() {
val count = mutableStateOf(0)
rule.setContent {
Surface(
modifier = Modifier
- .testTag("tvSurface"),
+ .testTag("surface"),
onClick = { count.value += 1 }
) {
Spacer(modifier = Modifier.size(30.toDp()))
}
}
- rule.onNodeWithTag("tvSurface")
+ rule.onNodeWithTag("surface")
.performSemanticsAction(SemanticsActions.RequestFocus)
.performKeyInput { pressKey(Key.DirectionCenter) }
Truth.assertThat(count.value).isEqualTo(1)
- rule.onNodeWithTag("tvSurface").performKeyInput { pressKey(Key.DirectionCenter) }
+ rule.onNodeWithTag("surface").performKeyInput { pressKey(Key.DirectionCenter) }
.performKeyInput { pressKey(Key.DirectionCenter) }
Truth.assertThat(count.value).isEqualTo(3)
}
@Test
- fun tvSurface_onDisable_clickFails() {
+ fun clickableSurface_onDisable_clickFails() {
val count = mutableStateOf(0f)
val enabled = mutableStateOf(true)
rule.setContent {
Surface(
modifier = Modifier
- .testTag("tvSurface"),
+ .testTag("surface"),
onClick = { count.value += 1 },
enabled = enabled.value
) {
Spacer(Modifier.size(30.toDp()))
}
}
- rule.onNodeWithTag("tvSurface")
+ rule.onNodeWithTag("surface")
.performSemanticsAction(SemanticsActions.RequestFocus)
.assertIsEnabled()
.performKeyInput { pressKey(Key.DirectionCenter) }
@@ -270,7 +278,7 @@
enabled.value = false
}
- rule.onNodeWithTag("tvSurface")
+ rule.onNodeWithTag("surface")
.assertIsNotEnabled()
.performKeyInput { pressKey(Key.DirectionCenter) }
.performKeyInput { pressKey(Key.DirectionCenter) }
@@ -278,7 +286,7 @@
}
@Test
- fun tvClickableOverload_interactionSource() {
+ fun clickableOverload_interactionSource() {
val interactionSource = MutableInteractionSource()
lateinit var scope: CoroutineScope
@@ -287,7 +295,7 @@
scope = rememberCoroutineScope()
Surface(
modifier = Modifier
- .testTag("tvSurface"),
+ .testTag("surface"),
onClick = {},
interactionSource = interactionSource
) {
@@ -305,7 +313,7 @@
Truth.assertThat(interactions).isEmpty()
}
- rule.onNodeWithTag("tvSurface")
+ rule.onNodeWithTag("surface")
.performSemanticsAction(SemanticsActions.RequestFocus)
.performKeyInput { keyDown(Key.DirectionCenter) }
@@ -314,7 +322,7 @@
Truth.assertThat(interactions[1]).isInstanceOf(PressInteraction.Press::class.java)
}
- rule.onNodeWithTag("tvSurface").performKeyInput { keyUp(Key.DirectionCenter) }
+ rule.onNodeWithTag("surface").performKeyInput { keyUp(Key.DirectionCenter) }
rule.runOnIdle {
Truth.assertThat(interactions).hasSize(3)
@@ -327,7 +335,7 @@
}
@Test
- fun tvSurface_allowsFinalPassChildren() {
+ fun clickableSurface_allowsFinalPassChildren() {
val hitTested = mutableStateOf(false)
rule.setContent {
@@ -335,7 +343,7 @@
Surface(
modifier = Modifier
.fillMaxSize()
- .testTag("tvSurface"),
+ .testTag("surface"),
onClick = {}
) {
Box(
@@ -355,7 +363,7 @@
}
}
}
- rule.onNodeWithTag("tvSurface").performSemanticsAction(SemanticsActions.RequestFocus)
+ rule.onNodeWithTag("surface").performSemanticsAction(SemanticsActions.RequestFocus)
rule.onNodeWithTag("pressable", true)
.performKeyInput { pressKey(Key.DirectionCenter) }
Truth.assertThat(hitTested.value).isTrue()
@@ -363,7 +371,7 @@
@OptIn(ExperimentalTestApi::class, ExperimentalComposeUiApi::class)
@Test
- fun tvSurface_reactsToStateChange() {
+ fun clickableSurface_reactsToStateChange() {
val interactionSource = MutableInteractionSource()
var isPressed by mutableStateOf(false)
@@ -371,14 +379,14 @@
isPressed = interactionSource.collectIsPressedAsState().value
Surface(
modifier = Modifier
- .testTag("tvSurface")
+ .testTag("surface")
.size(100.toDp()),
onClick = {},
interactionSource = interactionSource
) {}
}
- with(rule.onNodeWithTag("tvSurface")) {
+ with(rule.onNodeWithTag("surface")) {
performSemanticsAction(SemanticsActions.RequestFocus)
assertIsFocused()
performKeyInput { keyDown(Key.DirectionCenter) }
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/Surface.kt b/tv/tv-material/src/main/java/androidx/tv/material3/Surface.kt
index 36e4df2..ffa3dc4 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/Surface.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/Surface.kt
@@ -19,11 +19,12 @@
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
import androidx.compose.foundation.border
-import androidx.compose.foundation.clickable
import androidx.compose.foundation.focusable
import androidx.compose.foundation.interaction.Interaction
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.PressInteraction
+import androidx.compose.foundation.interaction.collectIsFocusedAsState
+import androidx.compose.foundation.interaction.collectIsPressedAsState
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
@@ -55,68 +56,32 @@
import kotlinx.coroutines.launch
/**
- * Material surface is the central metaphor in material design. Each surface exists at a given
- * elevation, which influences how that piece of surface visually relates to other surfaces and how
- * that surface is modified by tonal variance.
+ * The [Surface] is a building block component that will be used for any focusable
+ * element on TV such as buttons, cards, navigation, etc. This clickable Surface is similar to
+ * Compose Material's Surface composable but will have more functionality that will make focus
+ * management easier. [Surface] will automatically apply the relevant modifier(s) based on
+ * the current interaction state.
*
- * This version of Surface is responsible for a click handling as well as everything else that a
- * regular Surface does:
- *
- * This clickable Surface is responsible for:
- *
- * 1) Clipping: Surface clips its children to the shape specified by [shape]
- *
- * 2) Borders: If [shape] has a border, then it will also be drawn.
- *
- * 3) Background: Surface fills the shape specified by [shape] with the [color]. If [color] is
- * [ColorScheme.surface] a color overlay may be applied. The color of the overlay depends on the
- * [tonalElevation] of this Surface, and the [LocalAbsoluteTonalElevation] set by any
- * parent surfaces. This ensures that a Surface never appears to have a lower elevation overlay than
- * its ancestors, by summing the elevation of all previous Surfaces.
- *
- * 4) Content color: Surface uses [contentColor] to specify a preferred color for the content of
- * this surface - this is used by the [Text] and Icon components as a default color. If no
- * [contentColor] is set, this surface will try and match its background color to a color defined in
- * the theme [ColorScheme], and return the corresponding content color. For example, if the [color]
- * of this surface is [ColorScheme.surface], [contentColor] will be set to [ColorScheme.onSurface].
- * If [color] is not part of the theme palette, [contentColor] will keep the same value set above
- * this Surface.
- *
- * 5) Click handling. This version of surface will react to the clicks, calling [onClick] lambda,
- * updating the [interactionSource] when [PressInteraction] occurs, and showing ripple indication in
- * response to press events. If you don't need click handling, consider using the Surface function
- * that doesn't require [onClick] param. If you need to set a custom label for the [onClick], apply
- * a `Modifier.semantics { onClick(label = "YOUR_LABEL", action = null) }` to the Surface.
- *
- * 6) Semantics for clicks. Just like with [Modifier.clickable], clickable version of Surface will
- * produce semantics to indicate that it is clicked. Also, by default, accessibility services will
- * describe the element as [Role.Button]. You may change this by passing a desired [Role] with a
- * [Modifier.semantics].
- *
- * To manually retrieve the content color inside a surface, use [LocalContentColor].
- *
- * @param onClick callback to be called when the surface is clicked
+ * @param onClick callback to be called when the surface is clicked. Note: DPad Enter button won't
+ * work if this value is null
* @param modifier Modifier to be applied to the layout corresponding to the surface
- * @param enabled Controls the enabled state of the surface. When `false`, this surface will not be
- * clickable
- * @param shape Defines the surface's shape as well its shadow. A shadow is only displayed if the
- * [tonalElevation] is greater than zero.
- * @param color The background color. Use [Color.Transparent] to have no color.
- * @param contentColor The preferred content color provided by this Surface to its children.
- * Defaults to either the matching content color for [color], or if [color] is not a color from the
- * theme, this will keep the same value set above this Surface.
- * @param border Optional border to draw on top of the surface
+ * @param enabled Controls the enabled state of the surface. When `false`, this Surface will not be
+ * clickable or focusable.
* @param tonalElevation When [color] is [ColorScheme.surface], a higher the elevation will result
* in a darker color in light theme and lighter color in dark theme.
- * @param role The type of user interface element. Accessibility services might use this
- * to describe the element or do customizations
* @param shadowElevation The size of the shadow below the surface. Note that It will not affect z
* index of the Surface. If you want to change the drawing order you can use `Modifier.zIndex`.
+ * @param role The type of user interface element. Accessibility services might use this to describe
+ * the element or do customizations.
+ * @param shape Defines the surface's shape.
+ * @param color Color to be used on background of the Surface
+ * @param contentColor The preferred content color provided by this Surface to its children.
+ * @param border Optional border to draw on top of the surface
* @param interactionSource the [MutableInteractionSource] representing the stream of [Interaction]s
* for this Surface. You can create and pass in your own remembered [MutableInteractionSource] if
* you want to observe [Interaction]s and customize the appearance / behavior of this Surface in
* different [Interaction]s.
- * @param content The content inside this Surface
+ * @param content defines the [Composable] content inside the surface
*/
@ExperimentalTvMaterial3Api
@NonRestartableComposable
@@ -125,9 +90,9 @@
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
- shape: Shape = RectangleShape,
- color: Color = MaterialTheme.colorScheme.surface,
- contentColor: Color = contentColorFor(color),
+ shape: ClickableSurfaceShape = ClickableSurfaceDefaults.shape(),
+ color: ClickableSurfaceColor = ClickableSurfaceDefaults.color(),
+ contentColor: ClickableSurfaceColor = ClickableSurfaceDefaults.contentColor(),
border: BorderStroke? = null,
tonalElevation: Dp = 0.dp,
role: Role? = null,
@@ -135,6 +100,8 @@
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable () -> Unit
) {
+ val focused by interactionSource.collectIsFocusedAsState()
+ val pressed by interactionSource.collectIsPressedAsState()
SurfaceImpl(
modifier = modifier.tvClickable(
enabled = enabled,
@@ -142,9 +109,24 @@
interactionSource = interactionSource,
role = role
),
- shape = shape,
- color = color,
- contentColor = contentColor,
+ shape = ClickableSurfaceDefaults.shape(
+ enabled = enabled,
+ focused = focused,
+ pressed = pressed,
+ shape = shape
+ ),
+ color = ClickableSurfaceDefaults.color(
+ enabled = enabled,
+ focused = focused,
+ pressed = pressed,
+ color = color
+ ),
+ contentColor = ClickableSurfaceDefaults.color(
+ enabled = enabled,
+ focused = focused,
+ pressed = pressed,
+ color = contentColor
+ ),
tonalElevation = tonalElevation,
shadowElevation = shadowElevation,
border = border,
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/SurfaceDefaults.kt b/tv/tv-material/src/main/java/androidx/tv/material3/SurfaceDefaults.kt
new file mode 100644
index 0000000..38a3b45
--- /dev/null
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/SurfaceDefaults.kt
@@ -0,0 +1,135 @@
+/*
+ * 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.tv.material3
+
+import androidx.compose.foundation.interaction.Interaction
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ReadOnlyComposable
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.Shape
+
+/**
+ * Contains the default values used by clickable Surface.
+ */
+@ExperimentalTvMaterial3Api
+object ClickableSurfaceDefaults {
+ internal fun shape(
+ enabled: Boolean,
+ focused: Boolean,
+ pressed: Boolean,
+ shape: ClickableSurfaceShape
+ ): Shape {
+ return when {
+ pressed && enabled -> shape.pressedShape
+ focused && enabled -> shape.focusedShape
+ focused && !enabled -> shape.focusedDisabledShape
+ enabled -> shape.defaultShape
+ else -> shape.disabledShape
+ }
+ }
+
+ /**
+ * Creates a [ClickableSurfaceShape] that represents the default container shapes used in a
+ * Surface.
+ *
+ * @param defaultShape the shape used when the Surface is enabled, and has no other
+ * [Interaction]s.
+ * @param focusedShape the shape used when the Surface is enabled and focused.
+ * @param pressedShape the shape used when the Surface is enabled pressed.
+ * @param disabledShape the shape used when the Surface is not enabled.
+ * @param focusedDisabledShape the shape used when the Surface is not enabled and focused.
+ */
+ @ReadOnlyComposable
+ @Composable
+ fun shape(
+ defaultShape: Shape = MaterialTheme.shapes.medium,
+ focusedShape: Shape = defaultShape,
+ pressedShape: Shape = defaultShape,
+ disabledShape: Shape = defaultShape,
+ focusedDisabledShape: Shape = disabledShape
+ ) = ClickableSurfaceShape(
+ defaultShape = defaultShape,
+ focusedShape = focusedShape,
+ pressedShape = pressedShape,
+ disabledShape = disabledShape,
+ focusedDisabledShape = focusedDisabledShape
+ )
+
+ internal fun color(
+ enabled: Boolean,
+ focused: Boolean,
+ pressed: Boolean,
+ color: ClickableSurfaceColor
+ ): Color {
+ return when {
+ pressed && enabled -> color.pressedColor
+ focused && enabled -> color.focusedColor
+ enabled -> color.defaultColor
+ else -> color.disabledColor
+ }
+ }
+
+ /**
+ * Creates a [ClickableSurfaceColor] that represents the default container colors used in a
+ * Surface.
+ *
+ * @param defaultColor the container color of this Surface when enabled
+ * @param focusedColor the container color of this Surface when enabled and focused
+ * @param pressedColor the container color of this Surface when enabled and pressed
+ * @param disabledColor the container color of this Surface when not enabled
+ */
+ @ReadOnlyComposable
+ @Composable
+ fun color(
+ defaultColor: Color = MaterialTheme.colorScheme.surface,
+ focusedColor: Color = MaterialTheme.colorScheme.inverseSurface,
+ pressedColor: Color = MaterialTheme.colorScheme.inverseSurface,
+ disabledColor: Color = MaterialTheme.colorScheme.surfaceVariant.copy(
+ alpha = DisabledBackgroundAlpha
+ )
+ ) = ClickableSurfaceColor(
+ defaultColor = defaultColor,
+ focusedColor = focusedColor,
+ pressedColor = pressedColor,
+ disabledColor = disabledColor
+ )
+
+ /**
+ * Creates a [ClickableSurfaceColor] that represents the default content colors used in a
+ * Surface.
+ *
+ * @param defaultColor the content color of this Surface when enabled
+ * @param focusedColor the content color of this Surface when enabled and focused
+ * @param pressedColor the content color of this Surface when enabled and pressed
+ * @param disabledColor the content color of this Surface when not enabled
+ */
+ @ReadOnlyComposable
+ @Composable
+ fun contentColor(
+ defaultColor: Color = MaterialTheme.colorScheme.onSurface,
+ focusedColor: Color = MaterialTheme.colorScheme.inverseOnSurface,
+ pressedColor: Color = MaterialTheme.colorScheme.inverseOnSurface,
+ disabledColor: Color = MaterialTheme.colorScheme.onSurface
+ ) = ClickableSurfaceColor(
+ defaultColor = defaultColor,
+ focusedColor = focusedColor,
+ pressedColor = pressedColor,
+ disabledColor = disabledColor
+ )
+}
+
+private const val DisabledBackgroundAlpha = 0.4f
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/SurfaceStyles.kt b/tv/tv-material/src/main/java/androidx/tv/material3/SurfaceStyles.kt
new file mode 100644
index 0000000..7d0b3cd
--- /dev/null
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/SurfaceStyles.kt
@@ -0,0 +1,113 @@
+/*
+ * 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.tv.material3
+
+import androidx.compose.foundation.interaction.Interaction
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.Shape
+
+/**
+ * Defines [Shape] for all TV [Interaction] states of a Clickable Surface.
+ * @param defaultShape [Shape] to be applied when Clickable Surface is in the default state.
+ * @param focusedShape [Shape] to be applied when Clickable Surface is focused.
+ * @param pressedShape [Shape] to be applied when Clickable Surface is pressed.
+ * @param disabledShape [Shape] to be applied when Clickable Surface is disabled.
+ * @param focusedDisabledShape [Shape] to be applied when Clickable Surface is focused in the
+ * default state.
+ */
+@ExperimentalTvMaterial3Api
+class ClickableSurfaceShape internal constructor(
+ val defaultShape: Shape,
+ val focusedShape: Shape,
+ val pressedShape: Shape,
+ val disabledShape: Shape,
+ val focusedDisabledShape: Shape
+) {
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (other == null || this::class != other::class) return false
+
+ other as ClickableSurfaceShape
+
+ if (defaultShape != other.defaultShape) return false
+ if (focusedShape != other.focusedShape) return false
+ if (pressedShape != other.pressedShape) return false
+ if (disabledShape != other.disabledShape) return false
+ if (focusedDisabledShape != other.focusedDisabledShape) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = defaultShape.hashCode()
+ result = 31 * result + focusedShape.hashCode()
+ result = 31 * result + pressedShape.hashCode()
+ result = 31 * result + disabledShape.hashCode()
+ result = 31 * result + focusedDisabledShape.hashCode()
+
+ return result
+ }
+
+ override fun toString(): String {
+ return "ClickableSurfaceShape(defaultShape=$defaultShape, focusedShape=$focusedShape, " +
+ "pressedShape=$pressedShape, disabledShape=$disabledShape, " +
+ "focusedDisabledShape=$focusedDisabledShape)"
+ }
+}
+
+/**
+ * Defines [Color] for all TV [Interaction] states of a Clickable Surface.
+ * @param defaultColor [Color] to be applied when Clickable Surface is in the default state.
+ * @param focusedColor [Color] to be applied when Clickable Surface is focused.
+ * @param pressedColor [Color] to be applied when Clickable Surface is pressed.
+ * @param disabledColor [Color] to be applied when Clickable Surface is disabled.
+ */
+@ExperimentalTvMaterial3Api
+class ClickableSurfaceColor internal constructor(
+ val defaultColor: Color,
+ val focusedColor: Color,
+ val pressedColor: Color,
+ val disabledColor: Color
+) {
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (other == null || this::class != other::class) return false
+
+ other as ClickableSurfaceColor
+
+ if (defaultColor != other.defaultColor) return false
+ if (focusedColor != other.focusedColor) return false
+ if (pressedColor != other.pressedColor) return false
+ if (disabledColor != other.disabledColor) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = defaultColor.hashCode()
+ result = 31 * result + focusedColor.hashCode()
+ result = 31 * result + pressedColor.hashCode()
+ result = 31 * result + disabledColor.hashCode()
+
+ return result
+ }
+
+ override fun toString(): String {
+ return "ClickableSurfaceColor(defaultColor=$defaultColor, focusedColor=$focusedColor, " +
+ "pressedColor=$pressedColor, disabledColor=$disabledColor)"
+ }
+}
diff --git a/wear/compose/compose-material/api/current.txt b/wear/compose/compose-material/api/current.txt
index fca0d12..7a338f6 100644
--- a/wear/compose/compose-material/api/current.txt
+++ b/wear/compose/compose-material/api/current.txt
@@ -280,7 +280,7 @@
}
public final class PickerGroupKt {
- method @androidx.compose.runtime.Composable public static void PickerGroup(androidx.wear.compose.material.PickerGroupItem![] pickers, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.PickerGroupState pickerGroupState, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onSelected, optional boolean autoCenter, optional androidx.wear.compose.material.TouchExplorationStateProvider touchExplorationStateProvider, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? separator);
+ method @androidx.compose.runtime.Composable public static void PickerGroup(androidx.wear.compose.material.PickerGroupItem![] pickers, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.PickerGroupState pickerGroupState, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onSelected, optional boolean autoCenter, optional boolean propagateMinConstraints, optional androidx.wear.compose.material.TouchExplorationStateProvider touchExplorationStateProvider, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? separator);
method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerGroupState rememberPickerGroupState(optional int initiallySelectedIndex);
}
diff --git a/wear/compose/compose-material/api/public_plus_experimental_current.txt b/wear/compose/compose-material/api/public_plus_experimental_current.txt
index 863b8a2..0c19e30 100644
--- a/wear/compose/compose-material/api/public_plus_experimental_current.txt
+++ b/wear/compose/compose-material/api/public_plus_experimental_current.txt
@@ -296,7 +296,7 @@
}
public final class PickerGroupKt {
- method @androidx.compose.runtime.Composable public static void PickerGroup(androidx.wear.compose.material.PickerGroupItem![] pickers, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.PickerGroupState pickerGroupState, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onSelected, optional boolean autoCenter, optional androidx.wear.compose.material.TouchExplorationStateProvider touchExplorationStateProvider, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? separator);
+ method @androidx.compose.runtime.Composable public static void PickerGroup(androidx.wear.compose.material.PickerGroupItem![] pickers, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.PickerGroupState pickerGroupState, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onSelected, optional boolean autoCenter, optional boolean propagateMinConstraints, optional androidx.wear.compose.material.TouchExplorationStateProvider touchExplorationStateProvider, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? separator);
method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerGroupState rememberPickerGroupState(optional int initiallySelectedIndex);
}
diff --git a/wear/compose/compose-material/api/restricted_current.txt b/wear/compose/compose-material/api/restricted_current.txt
index fca0d12..7a338f6 100644
--- a/wear/compose/compose-material/api/restricted_current.txt
+++ b/wear/compose/compose-material/api/restricted_current.txt
@@ -280,7 +280,7 @@
}
public final class PickerGroupKt {
- method @androidx.compose.runtime.Composable public static void PickerGroup(androidx.wear.compose.material.PickerGroupItem![] pickers, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.PickerGroupState pickerGroupState, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onSelected, optional boolean autoCenter, optional androidx.wear.compose.material.TouchExplorationStateProvider touchExplorationStateProvider, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? separator);
+ method @androidx.compose.runtime.Composable public static void PickerGroup(androidx.wear.compose.material.PickerGroupItem![] pickers, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.PickerGroupState pickerGroupState, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onSelected, optional boolean autoCenter, optional boolean propagateMinConstraints, optional androidx.wear.compose.material.TouchExplorationStateProvider touchExplorationStateProvider, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? separator);
method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerGroupState rememberPickerGroupState(optional int initiallySelectedIndex);
}
diff --git a/wear/compose/compose-material/samples/build.gradle b/wear/compose/compose-material/samples/build.gradle
index fc8c8f3..4eddd5f 100644
--- a/wear/compose/compose-material/samples/build.gradle
+++ b/wear/compose/compose-material/samples/build.gradle
@@ -60,3 +60,13 @@
inceptionYear = "2021"
description = "Contains the sample code for the Android Wear Compose Material Classes"
}
+
+// Workaround for https://github.com/gradle/gradle/issues/19882
+configurations.all {
+ resolutionStrategy.dependencySubstitution {
+ substitute(module("androidx.lifecycle:lifecycle-viewmodel-ktx:")).
+ using project(":lifecycle:lifecycle-viewmodel-ktx")
+ substitute(module("androidx.lifecycle:lifecycle-runtime-ktx:")).
+ using project(":lifecycle:lifecycle-runtime-ktx")
+ }
+}
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/HorizontalPageIndicator.kt b/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/HorizontalPageIndicator.kt
index f73c371..08dd5cc 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/HorizontalPageIndicator.kt
+++ b/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/HorizontalPageIndicator.kt
@@ -272,9 +272,7 @@
modifier = modifier,
// 90 degrees equals to 6 o'clock position, at the bottom of the screen
anchor = 90f,
- // Since Swipe to dismiss is always LtR, we want to follow the same direction when
- // navigating amongst pages, so the first page is always on the left.
- angularDirection = CurvedDirection.Angular.CounterClockwise
+ angularDirection = CurvedDirection.Angular.Reversed
) {
// drawing 1 extra spacer for transition
curvedComposable {
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/PickerGroup.kt b/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/PickerGroup.kt
index a6f1306..845c4685 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/PickerGroup.kt
+++ b/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/PickerGroup.kt
@@ -37,6 +37,7 @@
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.ParentDataModifier
import androidx.compose.ui.layout.Placeable
+import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
import androidx.wear.compose.foundation.HierarchicalFocusCoordinator
import androidx.wear.compose.foundation.rememberActiveFocusRequester
@@ -64,6 +65,7 @@
* recommended to set this as true when all the pickers cannot be fit into the screen. Or provide a
* mechanism to navigate to pickers which are not visible on screen. If false, the whole row
* containing pickers would be centered.
+ * @param propagateMinConstraints Whether the incoming min constraints should be passed to content.
* @param touchExplorationStateProvider A [TouchExplorationStateProvider] to provide the current
* state of touch exploration service. This will be used to determine how the PickerGroup and
* talkback focus behaves/reacts to click and scroll events.
@@ -78,18 +80,21 @@
pickerGroupState: PickerGroupState = rememberPickerGroupState(),
onSelected: (selectedIndex: Int) -> Unit = {},
autoCenter: Boolean = true,
+ propagateMinConstraints: Boolean = false,
touchExplorationStateProvider: TouchExplorationStateProvider =
DefaultTouchExplorationStateProvider(),
separator: (@Composable (Int) -> Unit)? = null
) {
val touchExplorationServicesEnabled by touchExplorationStateProvider.touchExplorationState()
+
AutoCenteringRow(
modifier = modifier
.then(
// When touch exploration services are enabled, send the scroll events on the parent
// composable to selected picker
if (touchExplorationServicesEnabled &&
- pickerGroupState.selectedIndex in pickers.indices) {
+ pickerGroupState.selectedIndex in pickers.indices
+ ) {
Modifier.scrollablePicker(
pickers[pickerGroupState.selectedIndex].pickerState
)
@@ -97,6 +102,7 @@
Modifier
}
),
+ propagateMinConstraints = propagateMinConstraints
) {
pickers.forEachIndexed { index, pickerData ->
val pickerSelected = index == pickerGroupState.selectedIndex
@@ -235,17 +241,23 @@
@Composable
private fun AutoCenteringRow(
modifier: Modifier = Modifier,
+ propagateMinConstraints: Boolean,
content: @Composable () -> Unit
) {
- Layout(modifier = modifier, content = content) { measurables, constraints ->
+ Layout(modifier = modifier, content = content) { measurables, parentConstraints ->
+ // Reset the min width and height of the constraints used to measure child composables
+ // if min constraints are not supposed to propagated.
+ val constraints = if (propagateMinConstraints) {
+ parentConstraints
+ } else {
+ parentConstraints.copy(minWidth = 0, minHeight = 0)
+ }
val placeables = measurables.map { it.measure(constraints) }
val centeringOffset = computeCenteringOffset(placeables)
val rowWidth =
if (constraints.hasBoundedWidth) constraints.maxWidth
else constraints.minWidth
- val rowHeight =
- if (constraints.hasBoundedHeight) constraints.maxHeight
- else constraints.minHeight
+ val rowHeight = calculateHeight(constraints, placeables)
layout(width = rowWidth, height = rowHeight) {
var x = rowWidth / 2f - centeringOffset
placeables.forEach {
@@ -290,6 +302,16 @@
return sumWidth / 2
}
+/**
+ * Calculates the height of the [AutoCenteringRow] from the given [Placeable]s and [Constraints]. It
+ * is calculated based on the max height of all the [Placeable]s and the height passed from the
+ * [Constraints].
+ */
+private fun calculateHeight(constraints: Constraints, placeables: List<Placeable>): Int {
+ val maxChildrenHeight = placeables.maxOf { it.height }
+ return maxChildrenHeight.coerceIn(constraints.minHeight, constraints.maxHeight)
+}
+
@Suppress("ModifierInspectorInfo")
internal fun Modifier.autoCenteringTarget() = this.then(
object : ParentDataModifier {
diff --git a/wear/compose/compose-material3/samples/build.gradle b/wear/compose/compose-material3/samples/build.gradle
index 8f54238..10c22e1 100644
--- a/wear/compose/compose-material3/samples/build.gradle
+++ b/wear/compose/compose-material3/samples/build.gradle
@@ -59,3 +59,13 @@
inceptionYear = "2022"
description = "Contains the sample code for the Android Wear Compose Material 3 Classes"
}
+
+// Workaround for https://github.com/gradle/gradle/issues/19882
+configurations.all {
+ resolutionStrategy.dependencySubstitution {
+ substitute(module("androidx.lifecycle:lifecycle-viewmodel-ktx:")).
+ using project(":lifecycle:lifecycle-viewmodel-ktx")
+ substitute(module("androidx.lifecycle:lifecycle-runtime-ktx:")).
+ using project(":lifecycle:lifecycle-runtime-ktx")
+ }
+}
diff --git a/wear/compose/compose-navigation/build.gradle b/wear/compose/compose-navigation/build.gradle
index 0cfac0c..0f056c9 100644
--- a/wear/compose/compose-navigation/build.gradle
+++ b/wear/compose/compose-navigation/build.gradle
@@ -45,6 +45,7 @@
androidTestImplementation(project(":wear:compose:compose-navigation-samples"))
androidTestImplementation(libs.truth)
androidTestImplementation("androidx.lifecycle:lifecycle-runtime-testing:2.5.1")
+ androidTestImplementation("androidx.navigation:navigation-testing:2.5.3")
samples(project(":wear:compose:compose-navigation-samples"))
}
diff --git a/wear/compose/compose-navigation/src/androidTest/kotlin/androidx/wear/compose/navigation/SwipeDismissableNavHostTest.kt b/wear/compose/compose-navigation/src/androidTest/kotlin/androidx/wear/compose/navigation/SwipeDismissableNavHostTest.kt
index 4ad9e64..68f68b5 100644
--- a/wear/compose/compose-navigation/src/androidTest/kotlin/androidx/wear/compose/navigation/SwipeDismissableNavHostTest.kt
+++ b/wear/compose/compose-navigation/src/androidTest/kotlin/androidx/wear/compose/navigation/SwipeDismissableNavHostTest.kt
@@ -34,6 +34,7 @@
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.ExperimentalTestApi
import androidx.compose.ui.test.junit4.ComposeContentTestRule
@@ -49,6 +50,7 @@
import androidx.lifecycle.testing.TestLifecycleOwner
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavHostController
+import androidx.navigation.testing.TestNavHostController
import androidx.wear.compose.material.Button
import androidx.wear.compose.material.CompactChip
import androidx.wear.compose.material.MaterialTheme
@@ -390,6 +392,35 @@
}
}
+ @Test
+ fun testNavHostController_starts_at_default_destination() {
+ lateinit var navController: TestNavHostController
+
+ rule.setContentWithTheme {
+ navController = TestNavHostController(LocalContext.current)
+ navController.navigatorProvider.addNavigator(WearNavigator())
+
+ SwipeDismissWithNavigation(navController)
+ }
+
+ rule.onNodeWithText(START).assertExists()
+ }
+
+ @Test
+ fun testNavHostController_sets_current_destination() {
+ lateinit var navController: TestNavHostController
+
+ rule.setContentWithTheme {
+ navController = TestNavHostController(LocalContext.current)
+ navController.navigatorProvider.addNavigator(WearNavigator())
+
+ SwipeDismissWithNavigation(navController)
+ navController.setCurrentDestination(NEXT)
+ }
+
+ rule.onNodeWithText(NEXT).assertExists()
+ }
+
@Composable
fun SwipeDismissWithNavigation(
navController: NavHostController = rememberSwipeDismissableNavController()
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PickerDemo.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PickerDemo.kt
index 9e68e8f..def1922 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PickerDemo.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PickerDemo.kt
@@ -135,9 +135,9 @@
// When the time picker loads, none of the individual pickers are selected in talkback mode,
// otherwise hours picker should be focused.
val pickerGroupState = if (touchExplorationServicesEnabled) {
- rememberPickerGroupState(-1)
+ rememberPickerGroupState(FocusableElementsTimePicker.NONE.index)
} else {
- rememberPickerGroupState(0)
+ rememberPickerGroupState(FocusableElementsTimePicker.HOURS.index)
}
val textStyle = MaterialTheme.typography.display3
val optionColor = MaterialTheme.colors.secondary
@@ -159,13 +159,14 @@
createDescription(pickerGroupState, secondState.selectedOption, "seconds")
}
}
- val onPickerSelected = { selectedPicker: Int ->
- if (pickerGroupState.selectedIndex != selectedPicker) {
- pickerGroupState.selectedIndex = selectedPicker
- } else if (selectedPicker > 2) {
+ val onPickerSelected = { curr: FocusableElementsTimePicker,
+ next: FocusableElementsTimePicker ->
+ if (pickerGroupState.selectedIndex != curr.index) {
+ pickerGroupState.selectedIndex = curr.index
+ } else if (next == FocusableElementsTimePicker.CONFIRM_BUTTON) {
focusRequesterConfirmButton.requestFocus()
} else {
- pickerGroupState.selectedIndex += 1
+ pickerGroupState.selectedIndex = next.index
}
}
@@ -176,10 +177,10 @@
) {
Spacer(Modifier.height(12.dp))
Text(
- text = when (pickerGroupState.selectedIndex) {
- 0 -> "Hour"
- 1 -> "Minute"
- 2 -> "Second"
+ text = when (FocusableElementsTimePicker[pickerGroupState.selectedIndex]) {
+ FocusableElementsTimePicker.HOURS -> "Hour"
+ FocusableElementsTimePicker.MINUTES -> "Minute"
+ FocusableElementsTimePicker.SECONDS -> "Second"
else -> ""
},
color = optionColor,
@@ -202,7 +203,12 @@
pickerState = hourState,
modifier = Modifier.size(40.dp, 100.dp),
focusRequester = remember { FocusRequester() },
- onSelected = { onPickerSelected(0) },
+ onSelected = {
+ onPickerSelected(
+ FocusableElementsTimePicker.HOURS,
+ FocusableElementsTimePicker.MINUTES
+ )
+ },
contentDescription = hourContentDescription,
option = pickerOption
),
@@ -210,7 +216,12 @@
pickerState = minuteState,
modifier = Modifier.size(40.dp, 100.dp),
focusRequester = remember { FocusRequester() },
- onSelected = { onPickerSelected(1) },
+ onSelected = {
+ onPickerSelected(
+ FocusableElementsTimePicker.MINUTES,
+ FocusableElementsTimePicker.SECONDS
+ )
+ },
contentDescription = minuteContentDescription,
option = pickerOption
),
@@ -218,7 +229,12 @@
pickerState = secondState,
modifier = Modifier.size(40.dp, 100.dp),
focusRequester = remember { FocusRequester() },
- onSelected = { onPickerSelected(2) },
+ onSelected = {
+ onPickerSelected(
+ FocusableElementsTimePicker.SECONDS,
+ FocusableElementsTimePicker.CONFIRM_BUTTON
+ )
+ },
contentDescription = secondContentDescription,
option = pickerOption
),
@@ -304,23 +320,21 @@
.touchExplorationState()
MaterialTheme(typography = typography) {
- var focusedElement by remember {
- mutableStateOf(
- if (touchExplorationServicesEnabled) FocusableElement12Hour.NONE
- else FocusableElement12Hour.HOURS
- )
- }
+ val pickerGroupState =
+ if (touchExplorationServicesEnabled) {
+ rememberPickerGroupState(FocusableElement12Hour.NONE.index)
+ } else {
+ rememberPickerGroupState(FocusableElement12Hour.HOURS.index)
+ }
val textStyle = MaterialTheme.typography.display3
- val focusRequesterHours = remember { FocusRequester() }
- val focusRequesterMinutes = remember { FocusRequester() }
- val focusRequesterPeriod = remember { FocusRequester() }
+ val pickerOption = pickerTextOption(textStyle) { "%02d".format(it) }
val focusRequesterConfirmButton = remember { FocusRequester() }
val hoursContentDescription by remember { derivedStateOf {
- createDescription12Hour(focusedElement, hourState.selectedOption + 1, "hours")
+ createDescription12Hour(pickerGroupState, hourState.selectedOption + 1, "hours")
} }
val minutesContentDescription by remember { derivedStateOf {
- createDescription12Hour(focusedElement, minuteState.selectedOption, "minutes")
+ createDescription12Hour(pickerGroupState, minuteState.selectedOption, "minutes")
} }
val amString = remember {
@@ -330,28 +344,13 @@
LocalTime.of(18, 0).format(DateTimeFormatter.ofPattern("a"))
}
val periodContentDescription by remember { derivedStateOf {
- if (focusedElement == FocusableElement12Hour.NONE)
- createDescription12Hour(focusedElement, periodState.selectedOption, "period")
+ if (pickerGroupState.selectedIndex == FocusableElement12Hour.NONE.index)
+ createDescription12Hour(pickerGroupState, periodState.selectedOption, "period")
else if (periodState.selectedOption == 0)
- createDescription12Hour(focusedElement, periodState.selectedOption, amString)
- else createDescription12Hour(focusedElement, periodState.selectedOption, pmString)
+ createDescription12Hour(pickerGroupState, periodState.selectedOption, amString)
+ else createDescription12Hour(pickerGroupState, periodState.selectedOption, pmString)
} }
- Box(
- modifier = modifier
- .fillMaxSize()
- .then(
- if (touchExplorationServicesEnabled) {
- when (focusedElement) {
- FocusableElement12Hour.HOURS -> Modifier.scrollablePicker(hourState)
- FocusableElement12Hour.MINUTES -> Modifier.scrollablePicker(minuteState)
- FocusableElement12Hour.PERIOD -> Modifier.scrollablePicker(periodState)
- else -> Modifier
- }
- } else {
- Modifier
- }
- )
- ) {
+ Box(modifier = modifier.fillMaxSize()) {
Column(
modifier = modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
@@ -359,7 +358,7 @@
) {
Spacer(Modifier.height(12.dp))
Text(
- text = when (focusedElement) {
+ text = when (FocusableElement12Hour[pickerGroupState.selectedIndex]) {
FocusableElement12Hour.HOURS -> "Hour"
FocusableElement12Hour.MINUTES -> "Minute"
else -> ""
@@ -368,10 +367,11 @@
style = MaterialTheme.typography.button,
maxLines = 1,
)
+ val weightsToCenterVertically = 0.5f
Spacer(
Modifier
.fillMaxWidth()
- .weight(0.5f)
+ .weight(weightsToCenterVertically)
)
Row(
modifier = Modifier.fillMaxWidth(),
@@ -380,104 +380,79 @@
) {
val doubleTapToNext =
- { position: FocusableElement12Hour, next: FocusableElement12Hour ->
- focusedElement = when (focusedElement) {
- position -> next
- else -> position
+ { current: FocusableElement12Hour, next: FocusableElement12Hour ->
+ if (pickerGroupState.selectedIndex != current.index) {
+ focusRequesterConfirmButton.requestFocus()
+ } else if (next == FocusableElement12Hour.CONFIRM_BUTTON) {
+ pickerGroupState.selectedIndex = current.index
+ } else {
+ pickerGroupState.selectedIndex = next.index
}
}
- Spacer(Modifier.width(8.dp))
- PickerWithRSB(
- readOnly = focusedElement != FocusableElement12Hour.HOURS,
- state = hourState,
- focusRequester = focusRequesterHours,
- modifier = Modifier.size(48.dp, 100.dp),
- onSelected = {
- doubleTapToNext(
- FocusableElement12Hour.HOURS,
- FocusableElement12Hour.MINUTES
- )
- },
- contentDescription = hoursContentDescription,
- userScrollEnabled = !touchExplorationServicesEnabled ||
- focusedElement == FocusableElement12Hour.HOURS
- ) { hour: Int ->
- TimePiece(
- selected = focusedElement == FocusableElement12Hour.HOURS,
+ PickerGroup(
+ PickerGroupItem(
+ pickerState = hourState,
+ modifier = Modifier.size(40.dp, 100.dp),
+ focusRequester = remember { FocusRequester() },
onSelected = {
doubleTapToNext(
FocusableElement12Hour.HOURS,
FocusableElement12Hour.MINUTES
)
},
- text = "%02d".format(hour + 1),
- style = textStyle,
- touchExplorationServicesEnabled = touchExplorationServicesEnabled
- )
- }
- Separator(2.dp, textStyle)
- PickerWithRSB(
- readOnly = focusedElement != FocusableElement12Hour.MINUTES,
- state = minuteState,
- focusRequester = focusRequesterMinutes,
- modifier = Modifier.size(48.dp, 100.dp),
- onSelected = {
- doubleTapToNext(
- FocusableElement12Hour.MINUTES,
- FocusableElement12Hour.PERIOD
- )
- },
- contentDescription = minutesContentDescription,
- userScrollEnabled = !touchExplorationServicesEnabled ||
- focusedElement == FocusableElement12Hour.MINUTES
- ) { minute: Int ->
- TimePiece(
- selected = focusedElement == FocusableElement12Hour.MINUTES,
+ contentDescription = hoursContentDescription,
+ option = pickerOption
+ ),
+ PickerGroupItem(
+ pickerState = minuteState,
+ modifier = Modifier.size(48.dp, 100.dp),
+ focusRequester = remember { FocusRequester() },
+
onSelected = {
doubleTapToNext(
FocusableElement12Hour.MINUTES,
FocusableElement12Hour.PERIOD
)
},
- text = "%02d".format(minute),
- style = textStyle,
- touchExplorationServicesEnabled = touchExplorationServicesEnabled
- )
- }
- Spacer(Modifier.width(6.dp))
- PickerWithRSB(
- readOnly = focusedElement != FocusableElement12Hour.PERIOD,
- state = periodState,
- focusRequester = focusRequesterPeriod,
- modifier = Modifier.size(64.dp, 100.dp),
- onSelected = {
- doubleTapToNext(
- FocusableElement12Hour.PERIOD,
- FocusableElement12Hour.CONFIRM_BUTTON
- )
- },
- contentDescription = periodContentDescription,
- userScrollEnabled = !touchExplorationServicesEnabled ||
- focusedElement == FocusableElement12Hour.PERIOD
- ) { period: Int ->
- TimePiece(
- selected = focusedElement == FocusableElement12Hour.PERIOD,
+ contentDescription = minutesContentDescription,
+ option = pickerOption
+ ),
+ PickerGroupItem(
+ pickerState = periodState,
+ modifier = Modifier.size(64.dp, 100.dp),
+ focusRequester = remember { FocusRequester() },
+ contentDescription = periodContentDescription,
onSelected = {
doubleTapToNext(
FocusableElement12Hour.PERIOD,
FocusableElement12Hour.CONFIRM_BUTTON
)
},
- text = if (period == 0) amString else pmString,
- style = textStyle,
- touchExplorationServicesEnabled = touchExplorationServicesEnabled
- )
- }
+ option = { optionIndex: Int, pickerSelected: Boolean ->
+ Box(modifier = Modifier.fillMaxSize()) {
+ Text(
+ text = if (optionIndex == 0) amString else pmString,
+ maxLines = 1,
+ style = textStyle,
+ color =
+ if (pickerSelected) MaterialTheme.colors.secondary
+ else MaterialTheme.colors.onBackground,
+ modifier = Modifier
+ .align(Alignment.Center)
+ .wrapContentSize()
+ )
+ }
+ }
+ ),
+ autoCenter = false,
+ pickerGroupState = pickerGroupState,
+ separator = { Separator(6.dp, textStyle) },
+ )
}
Spacer(
Modifier
.fillMaxWidth()
- .weight(0.5f)
+ .weight(weightsToCenterVertically)
)
Button(onClick = {
val confirmedTime = LocalTime.of(
@@ -489,7 +464,8 @@
},
modifier = Modifier
.semantics {
- focused = focusedElement == FocusableElement12Hour.CONFIRM_BUTTON
+ focused = pickerGroupState.selectedIndex ==
+ FocusableElement12Hour.CONFIRM_BUTTON.index
}
.focusRequester(focusRequesterConfirmButton)
@@ -503,14 +479,6 @@
)
}
Spacer(Modifier.height(8.dp))
- LaunchedEffect(focusedElement) {
- if (focusedElement != FocusableElement12Hour.NONE) {
- listOf(
- focusRequesterHours, focusRequesterMinutes, focusRequesterPeriod,
- focusRequesterConfirmButton
- )[focusedElement.index].requestFocus()
- }
- }
}
}
}
@@ -785,14 +753,6 @@
}
Spacer(Modifier.height(12.dp))
}
- LaunchedEffect(focusedElement) {
- if (focusedElement != FocusableElementDatePicker.NONE) {
- listOf(
- focusRequesterDay, focusRequesterMonth, focusRequesterYear,
- focusRequesterConfirmButton
- )[focusedElement.index].requestFocus()
- }
- }
}
}
}
@@ -828,6 +788,8 @@
}
}
+// This is a demo file, suppressing the annotation group error.
+@SuppressLint("NullAnnotationGroup")
@OptIn(ExperimentalComposeUiApi::class)
@Composable
internal fun TimePiece(
@@ -959,21 +921,21 @@
label: String
): String {
return when (pickerGroupState.selectedIndex) {
- -1 -> label
+ FocusableElementsTimePicker.NONE.index -> label
else -> "$selectedValue" + label
}
}
private fun createDescription12Hour(
- focusedElement: FocusableElement12Hour,
+ pickerGroupState: PickerGroupState,
selectedValue: Int,
label: String
): String {
- return when (focusedElement) {
- FocusableElement12Hour.HOURS -> {
+ return when (pickerGroupState.selectedIndex) {
+ FocusableElement12Hour.HOURS.index -> {
"$selectedValue" + label
}
- FocusableElement12Hour.MINUTES -> {
+ FocusableElement12Hour.MINUTES.index -> {
"$selectedValue" + label
}
else -> label
@@ -1161,12 +1123,29 @@
}
}
+enum class FocusableElementsTimePicker(val index: Int) {
+ HOURS(0),
+ MINUTES(1),
+ SECONDS(2),
+ CONFIRM_BUTTON(3),
+ NONE(-1);
+
+ companion object {
+ private val map = FocusableElementsTimePicker.values().associateBy { it.index }
+ operator fun get(value: Int) = map[value]
+ }
+}
+
enum class FocusableElement12Hour(val index: Int) {
HOURS(0),
MINUTES(1),
PERIOD(2),
CONFIRM_BUTTON(3),
- NONE(-1)
+ NONE(-1);
+ companion object {
+ private val map = FocusableElement12Hour.values().associateBy { it.index }
+ operator fun get(value: Int) = map[value]
+ }
}
enum class FocusableElementDatePicker(val index: Int) {
@@ -1174,5 +1153,9 @@
MONTH(1),
YEAR(2),
CONFIRM_BUTTON(3),
- NONE(-1)
+ NONE(-1);
+ companion object {
+ private val map = FocusableElementDatePicker.values().associateBy { it.index }
+ operator fun get(value: Int) = map[value]
+ }
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/api/current.txt b/wear/protolayout/protolayout-expression-pipeline/api/current.txt
index 6f6c05a..5cd07fa 100644
--- a/wear/protolayout/protolayout-expression-pipeline/api/current.txt
+++ b/wear/protolayout/protolayout-expression-pipeline/api/current.txt
@@ -12,6 +12,8 @@
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Integer!>);
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Float!>);
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Integer!>);
+ method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.time.Duration!>);
+ method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.time.Instant!>);
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Boolean!>);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void close();
method @UiThread public void disablePlatformDataSources();
@@ -42,7 +44,7 @@
method @UiThread public void registerSensorGatewayConsumer(androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
method @UiThread public void registerSensorGatewayConsumer(java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
method @UiThread public void unregisterSensorGatewayConsumer(androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final int SENSOR_DATA_TYPE_DAILY_STEP_COUNT = 1; // 0x1
+ field @RequiresApi(android.os.Build.VERSION_CODES.Q) @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final int SENSOR_DATA_TYPE_DAILY_STEP_COUNT = 1; // 0x1
field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final int SENSOR_DATA_TYPE_HEART_RATE = 0; // 0x0
field public static final int SENSOR_DATA_TYPE_INVALID = -1; // 0xffffffff
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/api/public_plus_experimental_current.txt b/wear/protolayout/protolayout-expression-pipeline/api/public_plus_experimental_current.txt
index 6f6c05a..5cd07fa 100644
--- a/wear/protolayout/protolayout-expression-pipeline/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout-expression-pipeline/api/public_plus_experimental_current.txt
@@ -12,6 +12,8 @@
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Integer!>);
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Float!>);
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Integer!>);
+ method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.time.Duration!>);
+ method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.time.Instant!>);
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Boolean!>);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void close();
method @UiThread public void disablePlatformDataSources();
@@ -42,7 +44,7 @@
method @UiThread public void registerSensorGatewayConsumer(androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
method @UiThread public void registerSensorGatewayConsumer(java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
method @UiThread public void unregisterSensorGatewayConsumer(androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final int SENSOR_DATA_TYPE_DAILY_STEP_COUNT = 1; // 0x1
+ field @RequiresApi(android.os.Build.VERSION_CODES.Q) @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final int SENSOR_DATA_TYPE_DAILY_STEP_COUNT = 1; // 0x1
field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final int SENSOR_DATA_TYPE_HEART_RATE = 0; // 0x0
field public static final int SENSOR_DATA_TYPE_INVALID = -1; // 0xffffffff
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/api/restricted_current.txt b/wear/protolayout/protolayout-expression-pipeline/api/restricted_current.txt
index 25399f3..3a48704 100644
--- a/wear/protolayout/protolayout-expression-pipeline/api/restricted_current.txt
+++ b/wear/protolayout/protolayout-expression-pipeline/api/restricted_current.txt
@@ -12,6 +12,8 @@
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Integer!>);
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Float!>);
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Integer!>);
+ method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.time.Duration!>);
+ method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.time.Instant!>);
method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Boolean!>);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void close();
method @UiThread public void disablePlatformDataSources();
@@ -46,7 +48,7 @@
method @UiThread public void registerSensorGatewayConsumer(androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
method @UiThread public void registerSensorGatewayConsumer(java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
method @UiThread public void unregisterSensorGatewayConsumer(androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final int SENSOR_DATA_TYPE_DAILY_STEP_COUNT = 1; // 0x1
+ field @RequiresApi(android.os.Build.VERSION_CODES.Q) @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final int SENSOR_DATA_TYPE_DAILY_STEP_COUNT = 1; // 0x1
field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final int SENSOR_DATA_TYPE_HEART_RATE = 0; // 0x0
field public static final int SENSOR_DATA_TYPE_INVALID = -1; // 0xffffffff
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/ColorNodes.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/ColorNodes.java
index 54cbc77..1ef366a 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/ColorNodes.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/ColorNodes.java
@@ -101,7 +101,7 @@
ValueAnimator.ofArgb(mProtoNode.getFromArgb(), mProtoNode.getToArgb());
animator.addUpdateListener(a -> mDownstream.onData((Integer) a.getAnimatedValue()));
- applyAnimationSpecToAnimator(animator, mProtoNode.getSpec());
+ applyAnimationSpecToAnimator(animator, mProtoNode.getAnimationSpec());
mQuotaAwareAnimator.updateAnimator(animator);
startOrSkipAnimator();
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DurationNodes.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DurationNodes.java
new file mode 100644
index 0000000..3813bd8
--- /dev/null
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DurationNodes.java
@@ -0,0 +1,33 @@
+/*
+ * 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.expression.pipeline;
+
+import java.time.Duration;
+import java.time.Instant;
+
+/** Dynamic data nodes which yield durations. */
+class DurationNodes {
+ private DurationNodes() {}
+
+ /** Dynamic duration node that gets the duration between two time instants. */
+ static class BetweenInstancesNode
+ extends DynamicDataBiTransformNode<Instant, Instant, Duration> {
+
+ BetweenInstancesNode(DynamicTypeValueReceiver<Duration> downstream) {
+ super(downstream, Duration::between);
+ }
+ }
+}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java
index 2468ae7..2080180 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java
@@ -37,6 +37,7 @@
import androidx.wear.protolayout.expression.pipeline.ColorNodes.DynamicAnimatedColorNode;
import androidx.wear.protolayout.expression.pipeline.ColorNodes.FixedColorNode;
import androidx.wear.protolayout.expression.pipeline.ColorNodes.StateColorSourceNode;
+import androidx.wear.protolayout.expression.pipeline.DurationNodes.BetweenInstancesNode;
import androidx.wear.protolayout.expression.pipeline.FloatNodes.AnimatableFixedFloatNode;
import androidx.wear.protolayout.expression.pipeline.FloatNodes.ArithmeticFloatNode;
import androidx.wear.protolayout.expression.pipeline.FloatNodes.DynamicAnimatedFloatNode;
@@ -44,13 +45,15 @@
import androidx.wear.protolayout.expression.pipeline.FloatNodes.Int32ToFloatNode;
import androidx.wear.protolayout.expression.pipeline.FloatNodes.StateFloatNode;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.AnimatableFixedInt32Node;
+import androidx.wear.protolayout.expression.pipeline.InstantNodes.FixedInstantNode;
+import androidx.wear.protolayout.expression.pipeline.InstantNodes.PlatformTimeSourceNode;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.ArithmeticInt32Node;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.DynamicAnimatedInt32Node;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.FixedInt32Node;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.FloatToInt32Node;
+import androidx.wear.protolayout.expression.pipeline.Int32Nodes.GetDurationPartOpNode;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.PlatformInt32SourceNode;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.StateInt32SourceNode;
-import androidx.wear.protolayout.expression.pipeline.PlatformDataSources.EpochTimePlatformDataSource;
import androidx.wear.protolayout.expression.pipeline.PlatformDataSources.SensorGatewayPlatformDataSource;
import androidx.wear.protolayout.expression.pipeline.StringNodes.FixedStringNode;
import androidx.wear.protolayout.expression.pipeline.StringNodes.FloatFormatNode;
@@ -66,13 +69,17 @@
import androidx.wear.protolayout.expression.proto.DynamicProto.ConditionalStringOp;
import androidx.wear.protolayout.expression.proto.DynamicProto.DynamicBool;
import androidx.wear.protolayout.expression.proto.DynamicProto.DynamicColor;
+import androidx.wear.protolayout.expression.proto.DynamicProto.DynamicDuration;
import androidx.wear.protolayout.expression.proto.DynamicProto.DynamicFloat;
+import androidx.wear.protolayout.expression.proto.DynamicProto.DynamicInstant;
import androidx.wear.protolayout.expression.proto.DynamicProto.DynamicInt32;
import androidx.wear.protolayout.expression.proto.DynamicProto.DynamicString;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedColor;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedFloat;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedInt32;
+import java.time.Duration;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -276,12 +283,6 @@
* Adds dynamic type from the given {@link DynamicBuilders.DynamicString} for evaluation.
* Evaluation will start immediately.
*
- * <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
- *
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param stringSource The given String dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -303,10 +304,6 @@
*
* <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
*
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param stringSource The given String dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -329,12 +326,6 @@
* Adds dynamic type from the given {@link DynamicBuilders.DynamicInt32} for evaluation.
* Evaluation will start immediately.
*
- * <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
- *
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param int32Source The given integer dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -355,10 +346,6 @@
*
* <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
*
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param int32Source The given integer dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -378,10 +365,6 @@
/**
* Adds pending expression from the given {@link DynamicInt32} for future evaluation.
*
- * <p>While the {@link BoundDynamicType} is not destroyed with{@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param int32Source The given integer dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -405,12 +388,6 @@
* Adds dynamic type from the given {@link DynamicBuilders.DynamicFloat} for evaluation.
* Evaluation will start immediately.
*
- * <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
- *
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param floatSource The given float dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -431,10 +408,6 @@
*
* <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
*
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param floatSource The given float dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -459,10 +432,6 @@
*
* <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
*
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param floatSource The given float dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -482,12 +451,6 @@
* Adds dynamic type from the given {@link DynamicBuilders.DynamicColor} for evaluation.
* Evaluation will start immediately.
*
- * <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
- *
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param colorSource The given color dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -508,10 +471,6 @@
*
* <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
*
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param colorSource The given color dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -533,10 +492,6 @@
*
* <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
*
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param colorSource The given color dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -557,14 +512,86 @@
}
/**
- * Adds dynamic type from the given {@link DynamicBuilders.DynamicBool} for evaluation.
+ * Adds dynamic type from the given {@link DynamicBuilders.DynamicDuration} for evaluation.
* Evaluation will start immediately.
*
+ * @param durationSource The given duration dynamic type that should be evaluated.
+ * @param consumer The registered consumer for results of the evaluation. It will be called from
+ * UI thread.
+ */
+ @NonNull
+ public BoundDynamicType bind(
+ @NonNull DynamicBuilders.DynamicDuration durationSource,
+ @NonNull DynamicTypeValueReceiver<Duration> consumer) {
+ List<DynamicDataNode<?>> resultBuilder = new ArrayList<>();
+ bindRecursively(durationSource.toDynamicDurationProto(), consumer, resultBuilder);
+ processBindings(resultBuilder);
+ return new BoundDynamicTypeImpl(resultBuilder);
+ }
+
+ /**
+ * Adds pending dynamic type from the given {@link DynamicDuration} for future evaluation.
+ *
* <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
*
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
+ * @param durationSource The given durations dynamic type that should be evaluated.
+ * @param consumer The registered consumer for results of the evaluation. It will be called from
+ * UI thread.
+ * @hide
+ */
+ @NonNull
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public BoundDynamicType bind(
+ @NonNull DynamicDuration durationSource,
+ @NonNull DynamicTypeValueReceiver<Duration> consumer) {
+ List<DynamicDataNode<?>> resultBuilder = new ArrayList<>();
+ bindRecursively(durationSource, consumer, resultBuilder);
+ mDynamicTypeNodes.addAll(resultBuilder);
+ return new BoundDynamicTypeImpl(resultBuilder);
+ }
+
+ /**
+ * Adds dynamic type from the given {@link DynamicBuilders.DynamicInstant} for evaluation.
+ * Evaluation will start immediately.
+ *
+ * @param instantSource The given instant dynamic type that should be evaluated.
+ * @param consumer The registered consumer for results of the evaluation. It will be called from
+ * UI thread.
+ */
+ @NonNull
+ public BoundDynamicType bind(
+ @NonNull DynamicBuilders.DynamicInstant instantSource,
+ @NonNull DynamicTypeValueReceiver<Instant> consumer) {
+ List<DynamicDataNode<?>> resultBuilder = new ArrayList<>();
+ bindRecursively(instantSource.toDynamicInstantProto(), consumer, resultBuilder);
+ processBindings(resultBuilder);
+ return new BoundDynamicTypeImpl(resultBuilder);
+ }
+
+ /**
+ * Adds pending dynamic type from the given {@link DynamicInstant} for future evaluation.
+ *
+ * <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
+ *
+ * @param instantSource The given instant dynamic type that should be evaluated.
+ * @param consumer The registered consumer for results of the evaluation. It will be called from
+ * UI thread.
+ * @hide
+ */
+ @NonNull
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public BoundDynamicType bind(
+ @NonNull DynamicInstant instantSource,
+ @NonNull DynamicTypeValueReceiver<Instant> consumer) {
+ List<DynamicDataNode<?>> resultBuilder = new ArrayList<>();
+ bindRecursively(instantSource, consumer, resultBuilder);
+ mDynamicTypeNodes.addAll(resultBuilder);
+ return new BoundDynamicTypeImpl(resultBuilder);
+ }
+
+ /**
+ * Adds dynamic type from the given {@link DynamicBuilders.DynamicBool} for evaluation.
+ * Evaluation will start immediately.
*
* @param boolSource The given boolean dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
@@ -585,10 +612,6 @@
*
* <p>Evaluation of this dynamic type will start when {@link #processPendingBindings} is called.
*
- * <p>While the {@link BoundDynamicType} is not destroyed with {@link BoundDynamicType#close()}
- * by caller, results of evaluation will be sent through the given {@link
- * DynamicTypeValueReceiver}.
- *
* @param boolSource The given boolean dynamic type that should be evaluated.
* @param consumer The registered consumer for results of the evaluation. It will be called from
* UI thread.
@@ -720,7 +743,6 @@
case PLATFORM_SOURCE:
node = new PlatformInt32SourceNode(
int32Source.getPlatformSource(),
- mTimeDataSource,
mSensorGatewayDataSource,
consumer);
break;
@@ -786,6 +808,18 @@
Optional.empty());
break;
}
+ case DURATION_PART:
+ {
+ GetDurationPartOpNode durationPartOpNode =
+ new GetDurationPartOpNode(int32Source.getDurationPart(), consumer);
+ node = durationPartOpNode;
+
+ bindRecursively(
+ int32Source.getDurationPart().getInput(),
+ durationPartOpNode.getIncomingCallback(),
+ resultBuilder);
+ break;
+ }
case ANIMATABLE_FIXED:
if (!mEnableAnimations && animationFallbackValue.isPresent()) {
// Just assign static value if animations are disabled.
@@ -822,7 +856,7 @@
// animations won't be played and they would jump to the end value.
AnimatableDynamicInt32 dynamicNode = int32Source.getAnimatableDynamic();
DynamicAnimatedInt32Node animationNode =
- new DynamicAnimatedInt32Node(consumer, dynamicNode.getSpec(),
+ new DynamicAnimatedInt32Node(consumer, dynamicNode.getAnimationSpec(),
mAnimationQuotaManager);
node = animationNode;
@@ -843,6 +877,67 @@
}
/**
+ * Same as {@link #bind(DynamicBuilders.DynamicDuration, DynamicTypeValueReceiver)}, but instead
+ * of returning one {@link BoundDynamicType}, all {@link DynamicDataNode} produced by evaluating
+ * given dynamic type are added to the given list.
+ */
+ private void bindRecursively(
+ @NonNull DynamicDuration durationSource,
+ @NonNull DynamicTypeValueReceiver<Duration> consumer,
+ @NonNull List<DynamicDataNode<?>> resultBuilder) {
+ DynamicDataNode<?> node;
+
+ switch (durationSource.getInnerCase()) {
+ case BETWEEN:
+ BetweenInstancesNode betweenInstancesNode = new BetweenInstancesNode(consumer);
+ node = betweenInstancesNode;
+ bindRecursively(
+ durationSource.getBetween().getStartInclusive(),
+ betweenInstancesNode.getLhsIncomingCallback(),
+ resultBuilder);
+ bindRecursively(
+ durationSource.getBetween().getEndExclusive(),
+ betweenInstancesNode.getRhsIncomingCallback(),
+ resultBuilder);
+ break;
+ case INNER_NOT_SET:
+ throw new IllegalArgumentException("DynamicDuration has no inner source set");
+ default:
+ throw new IllegalArgumentException("Unknown DynamicDuration source type");
+ }
+
+ resultBuilder.add(node);
+ }
+
+ /**
+ * Same as {@link #bind(DynamicBuilders.DynamicInstant, DynamicTypeValueReceiver)}, but instead
+ * of returning one {@link BoundDynamicType}, all {@link DynamicDataNode} produced by evaluating
+ * given dynamic type are added to the given list.
+ */
+ private void bindRecursively(
+ @NonNull DynamicInstant instantSource,
+ @NonNull DynamicTypeValueReceiver<Instant> consumer,
+ @NonNull List<DynamicDataNode<?>> resultBuilder) {
+ DynamicDataNode<?> node;
+
+ switch (instantSource.getInnerCase()) {
+ case FIXED:
+ node = new FixedInstantNode(instantSource.getFixed(), consumer);
+ break;
+ case PLATFORM_SOURCE:
+ node = new PlatformTimeSourceNode(mTimeDataSource, consumer);
+ break;
+
+ case INNER_NOT_SET:
+ throw new IllegalArgumentException("DynamicInstant has no inner source set");
+ default:
+ throw new IllegalArgumentException("Unknown DynamicInstant source type");
+ }
+
+ resultBuilder.add(node);
+ }
+
+ /**
* Same as {@link #bind(DynamicBuilders.DynamicFloat, DynamicTypeValueReceiver)}, but instead of
* returning one {@link BoundDynamicType}, all {@link DynamicDataNode} produced by evaluating
* given dynamic type are added to the given list.
@@ -956,7 +1051,10 @@
AnimatableDynamicFloat dynamicNode = floatSource.getAnimatableDynamic();
DynamicAnimatedFloatNode animationNode =
new DynamicAnimatedFloatNode(
- consumer, dynamicNode.getSpec(), mAnimationQuotaManager);
+ consumer,
+ dynamicNode.getAnimationSpec(),
+ mAnimationQuotaManager
+ );
node = animationNode;
bindRecursively(
@@ -1037,7 +1135,10 @@
AnimatableDynamicColor dynamicNode = colorSource.getAnimatableDynamic();
DynamicAnimatedColorNode animationNode =
new DynamicAnimatedColorNode(
- consumer, dynamicNode.getSpec(), mAnimationQuotaManager);
+ consumer,
+ dynamicNode.getAnimationSpec(),
+ mAnimationQuotaManager
+ );
node = animationNode;
bindRecursively(
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/EpochTimePlatformDataSource.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/EpochTimePlatformDataSource.java
new file mode 100644
index 0000000..37c858e
--- /dev/null
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/EpochTimePlatformDataSource.java
@@ -0,0 +1,60 @@
+/*
+ * 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.expression.pipeline;
+
+import androidx.collection.SimpleArrayMap;
+import androidx.wear.protolayout.expression.pipeline.TimeGateway.TimeCallback;
+
+import java.time.Instant;
+import java.util.concurrent.Executor;
+
+/** Utility for time data source. */
+class EpochTimePlatformDataSource {
+ private final Executor mUiExecutor;
+ private final TimeGateway mGateway;
+ private final SimpleArrayMap<DynamicTypeValueReceiver<Instant>, TimeCallback>
+ mConsumerToTimeCallback = new SimpleArrayMap<>();
+
+ EpochTimePlatformDataSource(Executor uiExecutor, TimeGateway gateway) {
+ mUiExecutor = uiExecutor;
+ mGateway = gateway;
+ }
+
+ public void registerForData(DynamicTypeValueReceiver<Instant> consumer) {
+ TimeCallback timeCallback =
+ new TimeCallback() {
+ @Override
+ public void onPreUpdate() {
+ consumer.onPreUpdate();
+ }
+
+ @Override
+ public void onData() {
+ consumer.onData(Instant.now());
+ }
+ };
+ mGateway.registerForUpdates(mUiExecutor, timeCallback);
+ mConsumerToTimeCallback.put(consumer, timeCallback);
+ }
+
+ public void unregisterForData(DynamicTypeValueReceiver<Instant> consumer) {
+ TimeCallback timeCallback = mConsumerToTimeCallback.remove(consumer);
+ if (timeCallback != null) {
+ mGateway.unregisterForUpdates(timeCallback);
+ }
+ }
+}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/FloatNodes.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/FloatNodes.java
index 73727de..4c1027b 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/FloatNodes.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/FloatNodes.java
@@ -145,7 +145,7 @@
ValueAnimator.ofFloat(mProtoNode.getFromValue(), mProtoNode.getToValue());
animator.addUpdateListener(a -> mDownstream.onData((float) a.getAnimatedValue()));
- applyAnimationSpecToAnimator(animator, mProtoNode.getSpec());
+ applyAnimationSpecToAnimator(animator, mProtoNode.getAnimationSpec());
mQuotaAwareAnimator.updateAnimator(animator);
startOrSkipAnimator();
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/InstantNodes.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/InstantNodes.java
new file mode 100644
index 0000000..012469c
--- /dev/null
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/InstantNodes.java
@@ -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.wear.protolayout.expression.pipeline;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.UiThread;
+import androidx.wear.protolayout.expression.proto.FixedProto.FixedInstant;
+
+import java.time.Instant;
+
+/** Dynamic data nodes which yield instants. */
+class InstantNodes {
+ private InstantNodes() {}
+ /** Dynamic instant node that has a fixed value. */
+ static class FixedInstantNode implements DynamicDataSourceNode<Integer> {
+ private final Instant mValue;
+ private final DynamicTypeValueReceiver<Instant> mDownstream;
+
+ FixedInstantNode(FixedInstant protoNode, DynamicTypeValueReceiver<Instant> downstream) {
+ this.mValue = Instant.ofEpochSecond(protoNode.getEpochSeconds());
+ this.mDownstream = downstream;
+ }
+
+ @Override
+ @UiThread
+ public void preInit() {
+ mDownstream.onPreUpdate();
+ }
+
+ @Override
+ @UiThread
+ public void init() {
+ mDownstream.onData(mValue);
+ }
+
+ @Override
+ public void destroy() {}
+ }
+ /** Dynamic Instant node that gets value from the platform source. */
+ static class PlatformTimeSourceNode implements DynamicDataSourceNode<Integer> {
+ @Nullable private final EpochTimePlatformDataSource mEpochTimePlatformDataSource;
+ private final DynamicTypeValueReceiver<Instant> mDownstream;
+
+ PlatformTimeSourceNode(
+ @Nullable EpochTimePlatformDataSource epochTimePlatformDataSource,
+ DynamicTypeValueReceiver<Instant> downstream) {
+ this.mEpochTimePlatformDataSource = epochTimePlatformDataSource;
+ this.mDownstream = downstream;
+ }
+
+ @Override
+ @UiThread
+ public void preInit() {}
+
+ @Override
+ @UiThread
+ public void init() {
+ if (mEpochTimePlatformDataSource != null) {
+ mEpochTimePlatformDataSource.registerForData(mDownstream);
+ } else {
+ mDownstream.onInvalidated();
+ }
+ }
+
+ @Override
+ @UiThread
+ public void destroy() {
+ if (mEpochTimePlatformDataSource != null) {
+ mEpochTimePlatformDataSource.unregisterForData(mDownstream);
+ }
+ }
+ }
+}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/Int32Nodes.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/Int32Nodes.java
index 4fc75c6..a2c9a94 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/Int32Nodes.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/Int32Nodes.java
@@ -17,24 +17,26 @@
package androidx.wear.protolayout.expression.pipeline;
import static androidx.wear.protolayout.expression.pipeline.AnimationsHelper.applyAnimationSpecToAnimator;
+import static java.lang.Math.abs;
import android.animation.ValueAnimator;
import android.util.Log;
-
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
-import androidx.wear.protolayout.expression.pipeline.PlatformDataSources.EpochTimePlatformDataSource;
import androidx.wear.protolayout.expression.pipeline.PlatformDataSources.PlatformDataSource;
import androidx.wear.protolayout.expression.pipeline.PlatformDataSources.SensorGatewayPlatformDataSource;
import androidx.wear.protolayout.expression.proto.AnimationParameterProto.AnimationSpec;
import androidx.wear.protolayout.expression.proto.DynamicProto.AnimatableFixedInt32;
import androidx.wear.protolayout.expression.proto.DynamicProto.ArithmeticInt32Op;
+import androidx.wear.protolayout.expression.proto.DynamicProto.DurationPartType;
import androidx.wear.protolayout.expression.proto.DynamicProto.FloatToInt32Op;
import androidx.wear.protolayout.expression.proto.DynamicProto.PlatformInt32Source;
import androidx.wear.protolayout.expression.proto.DynamicProto.PlatformInt32SourceType;
import androidx.wear.protolayout.expression.proto.DynamicProto.StateInt32Source;
+import androidx.wear.protolayout.expression.proto.DynamicProto.GetDurationPartOp;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedInt32;
+import java.time.Duration;
/** Dynamic data nodes which yield integers. */
class Int32Nodes {
@@ -72,17 +74,14 @@
private static final String TAG = "PlatformInt32SourceNode";
@Nullable private final SensorGatewayPlatformDataSource mSensorGatewaySource;
- @Nullable private final EpochTimePlatformDataSource mEpochTimePlatformDataSource;
private final PlatformInt32Source mProtoNode;
private final DynamicTypeValueReceiver<Integer> mDownstream;
PlatformInt32SourceNode(
PlatformInt32Source protoNode,
- @Nullable EpochTimePlatformDataSource epochTimePlatformDataSource,
@Nullable SensorGatewayPlatformDataSource sensorGatewaySource,
DynamicTypeValueReceiver<Integer> downstream) {
this.mProtoNode = protoNode;
- this.mEpochTimePlatformDataSource = epochTimePlatformDataSource;
this.mSensorGatewaySource = sensorGatewaySource;
this.mDownstream = downstream;
}
@@ -128,8 +127,6 @@
case PLATFORM_INT32_SOURCE_TYPE_CURRENT_HEART_RATE:
case PLATFORM_INT32_SOURCE_TYPE_DAILY_STEP_COUNT:
return mSensorGatewaySource;
- case PLATFORM_INT32_SOURCE_TYPE_EPOCH_TIME_SECONDS:
- return mEpochTimePlatformDataSource;
}
Log.w(TAG, "Unknown PlatformInt32SourceType");
return null;
@@ -210,6 +207,44 @@
}
}
+ /** Dynamic integer node that gets duration part from a duration. */
+ static class GetDurationPartOpNode extends DynamicDataTransformNode<Duration, Integer> {
+
+ private static final String TAG = "GetDurationPartOpNode";
+
+ GetDurationPartOpNode(
+ GetDurationPartOp protoNode, DynamicTypeValueReceiver<Integer> downstream) {
+ super(downstream,
+ duration -> (int) getDurationPart(duration, protoNode.getDurationPart()));
+ }
+
+ private static long getDurationPart(Duration duration, DurationPartType durationPartType) {
+ switch (durationPartType) {
+ case DURATION_PART_TYPE_UNDEFINED:
+ case UNRECOGNIZED:
+ Log.e(TAG, "Unknown duration part type in GetDurationPartOpNode");
+ return 0;
+ case DURATION_PART_TYPE_DAYS:
+ return abs(duration.getSeconds() / (3600 * 24));
+ case DURATION_PART_TYPE_HOURS:
+ return abs((duration.getSeconds() / 3600) % 24);
+ case DURATION_PART_TYPE_MINUTES:
+ return abs((duration.getSeconds() / 60) % 60);
+ case DURATION_PART_TYPE_SECONDS:
+ return abs(duration.getSeconds() % 60);
+ case DURATION_PART_TYPE_TOTAL_DAYS:
+ return duration.toDays();
+ case DURATION_PART_TYPE_TOTAL_HOURS:
+ return duration.toHours();
+ case DURATION_PART_TYPE_TOTAL_MINUTES:
+ return duration.toMinutes();
+ case DURATION_PART_TYPE_TOTAL_SECONDS:
+ return duration.getSeconds();
+ }
+ throw new IllegalArgumentException("Unknown duration part");
+ }
+ }
+
/** Dynamic int32 node that gets animatable value from fixed source. */
static class AnimatableFixedInt32Node extends AnimatableNode
implements DynamicDataSourceNode<Integer> {
@@ -237,7 +272,7 @@
public void init() {
ValueAnimator animator =
ValueAnimator.ofInt(mProtoNode.getFromValue(), mProtoNode.getToValue());
- applyAnimationSpecToAnimator(animator, mProtoNode.getSpec());
+ applyAnimationSpecToAnimator(animator, mProtoNode.getAnimationSpec());
animator.addUpdateListener(a -> mDownstream.onData((Integer) a.getAnimatedValue()));
mQuotaAwareAnimator.updateAnimator(animator);
startOrSkipAnimator();
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/PlatformDataSources.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/PlatformDataSources.java
index 0f86713..b3a2ee2 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/PlatformDataSources.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/PlatformDataSources.java
@@ -22,8 +22,6 @@
import androidx.annotation.DoNotInline;
import androidx.annotation.RequiresApi;
import androidx.collection.ArrayMap;
-import androidx.collection.SimpleArrayMap;
-import androidx.wear.protolayout.expression.pipeline.TimeGateway.TimeCallback;
import androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway;
import androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.SensorDataType;
import androidx.wear.protolayout.expression.proto.DynamicProto.PlatformInt32SourceType;
@@ -43,48 +41,6 @@
PlatformInt32SourceType sourceType, DynamicTypeValueReceiver<Integer> consumer);
}
- /** Utility for time data source. */
- static class EpochTimePlatformDataSource implements PlatformDataSource {
- private final Executor mUiExecutor;
- private final TimeGateway mGateway;
- private final SimpleArrayMap<DynamicTypeValueReceiver<Integer>, TimeCallback>
- mConsumerToTimeCallback = new SimpleArrayMap<>();
-
- EpochTimePlatformDataSource(Executor uiExecutor, TimeGateway gateway) {
- mUiExecutor = uiExecutor;
- mGateway = gateway;
- }
-
- @Override
- public void registerForData(
- PlatformInt32SourceType sourceType, DynamicTypeValueReceiver<Integer> consumer) {
- TimeCallback timeCallback =
- new TimeCallback() {
- @Override
- public void onPreUpdate() {
- consumer.onPreUpdate();
- }
-
- @Override
- public void onData() {
- long currentEpochTimeSeconds = System.currentTimeMillis() / 1000;
- consumer.onData((int) currentEpochTimeSeconds);
- }
- };
- mGateway.registerForUpdates(mUiExecutor, timeCallback);
- mConsumerToTimeCallback.put(consumer, timeCallback);
- }
-
- @Override
- public void unregisterForData(
- PlatformInt32SourceType sourceType, DynamicTypeValueReceiver<Integer> consumer) {
- TimeCallback timeCallback = mConsumerToTimeCallback.remove(consumer);
- if (timeCallback != null) {
- mGateway.unregisterForUpdates(timeCallback);
- }
- }
- }
-
/** Utility for sensor data source. */
static class SensorGatewayPlatformDataSource implements PlatformDataSource {
private static final String TAG = "SensorGtwPltDataSource";
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/sensor/SensorGateway.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/sensor/SensorGateway.java
index 513f38d..1f16396 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/sensor/SensorGateway.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/sensor/SensorGateway.java
@@ -17,10 +17,12 @@
package androidx.wear.protolayout.expression.pipeline.sensor;
import android.Manifest;
+import android.os.Build.VERSION_CODES;
import androidx.annotation.AnyThread;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
import androidx.annotation.RequiresPermission;
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
@@ -54,6 +56,7 @@
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@Retention(RetentionPolicy.SOURCE)
+ @RequiresApi(VERSION_CODES.Q)
@IntDef({
SENSOR_DATA_TYPE_INVALID,
SENSOR_DATA_TYPE_HEART_RATE,
@@ -77,6 +80,7 @@
* each day, and any subscriptions to this data type will log the number of steps the user has
* done since 12:00AM local time.
*/
+ @RequiresApi(VERSION_CODES.Q)
@RequiresPermission(Manifest.permission.ACTIVITY_RECOGNITION)
int SENSOR_DATA_TYPE_DAILY_STEP_COUNT = 1;
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java
index 7f9e3cb..d2ab0198 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java
@@ -27,8 +27,10 @@
import androidx.annotation.NonNull;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString;
@@ -45,6 +47,8 @@
import org.junit.runner.RunWith;
import org.robolectric.ParameterizedRobolectricTestRunner;
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
@@ -151,6 +155,33 @@
test(DynamicInt32.constant(10).gte(11), false),
test(DynamicInt32.constant(10).gte(10), true),
test(DynamicInt32.constant(10).gte(5), true),
+ // Instant maximum value
+ test(DynamicInstant.withSecondsPrecision(Instant.MAX),
+ Instant.MAX.truncatedTo(ChronoUnit.SECONDS)),
+ // Duration Int overflow
+ test(
+ DynamicInstant.withSecondsPrecision(Instant.EPOCH)
+ .durationUntil(DynamicInstant.withSecondsPrecision(Instant.MAX))
+ .toIntSeconds(),
+ (int) Instant.MAX.getEpochSecond()),
+ // Positive duration
+ test(durationOfSeconds(123456L).toIntDays(), 1),
+ test(durationOfSeconds(123456L).toIntHours(), 34),
+ test(durationOfSeconds(123456L).toIntMinutes(), 2057),
+ test(durationOfSeconds(123456L).toIntSeconds(), 123456),
+ test(durationOfSeconds(123456L).getIntDaysPart(), 1),
+ test(durationOfSeconds(123456L).getHoursPart(), 10),
+ test(durationOfSeconds(123456L).getMinutesPart(), 17),
+ test(durationOfSeconds(123456L).getSecondsPart(), 36),
+ // Negative duration
+ test(durationOfSeconds(-123456L).toIntDays(), -1),
+ test(durationOfSeconds(-123456L).toIntHours(), -34),
+ test(durationOfSeconds(-123456L).toIntMinutes(), -2057),
+ test(durationOfSeconds(-123456L).toIntSeconds(), -123456),
+ test(durationOfSeconds(-123456L).getIntDaysPart(), 1),
+ test(durationOfSeconds(-123456L).getHoursPart(), 10),
+ test(durationOfSeconds(-123456L).getMinutesPart(), 17),
+ test(durationOfSeconds(-123456L).getSecondsPart(), 36),
test(
DynamicString.onCondition(DynamicBool.constant(true))
.use(constant("Hello"))
@@ -271,6 +302,17 @@
expectedValue);
}
+ private static DynamicTypeEvaluatorTest.TestCase<Instant> test(
+ DynamicInstant bindUnderTest, Instant instant) {
+ return new DynamicTypeEvaluatorTest.TestCase<>(
+ bindUnderTest.toDynamicInstantProto().toString(),
+ (evaluator, cb) -> {
+ evaluator.bind(bindUnderTest, cb);
+ evaluator.processPendingBindings();
+ },
+ instant);
+ }
+
private static DynamicTypeEvaluatorTest.TestCase<Float> test(
DynamicFloat bindUnderTest, Float expectedValue) {
return new DynamicTypeEvaluatorTest.TestCase<>(
@@ -341,6 +383,12 @@
}
}
+ private static DynamicDuration durationOfSeconds(long seconds) {
+ Instant now = Instant.now();
+ return DynamicInstant.withSecondsPrecision(now)
+ .durationUntil(DynamicInstant.withSecondsPrecision(now.plusSeconds(seconds)));
+ }
+
private static ImmutableMap<String, StateEntryValue> generateExampleState() {
return ImmutableMap.of(
"state_hello_world",
diff --git a/wear/protolayout/protolayout-expression/api/current.txt b/wear/protolayout/protolayout-expression/api/current.txt
index 49d68e38..1e3c3ea 100644
--- a/wear/protolayout/protolayout-expression/api/current.txt
+++ b/wear/protolayout/protolayout-expression/api/current.txt
@@ -104,6 +104,19 @@
method public default byte[] toDynamicColorByteArray();
}
+ public static interface DynamicBuilders.DynamicDuration extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[]);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getHoursPart();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getIntDaysPart();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMinutesPart();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getSecondsPart();
+ method public default byte[] toDynamicDurationByteArray();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntDays();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntHours();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntMinutes();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntSeconds();
+ }
+
public static interface DynamicBuilders.DynamicFloat extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
@@ -156,6 +169,14 @@
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter with();
}
+ public static interface DynamicBuilders.DynamicInstant extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration durationUntil(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant platformTimeWithSecondsPrecision();
+ method public default byte[] toDynamicInstantByteArray();
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant withSecondsPrecision(java.time.Instant);
+ }
+
public static interface DynamicBuilders.DynamicInt32 extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
diff --git a/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt b/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt
index 5ab6ba0..3c2d79b 100644
--- a/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt
@@ -104,6 +104,19 @@
method public default byte[] toDynamicColorByteArray();
}
+ public static interface DynamicBuilders.DynamicDuration extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[]);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getHoursPart();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getIntDaysPart();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMinutesPart();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getSecondsPart();
+ method public default byte[] toDynamicDurationByteArray();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntDays();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntHours();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntMinutes();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntSeconds();
+ }
+
public static interface DynamicBuilders.DynamicFloat extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
@@ -156,6 +169,14 @@
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter with();
}
+ public static interface DynamicBuilders.DynamicInstant extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration durationUntil(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant platformTimeWithSecondsPrecision();
+ method public default byte[] toDynamicInstantByteArray();
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant withSecondsPrecision(java.time.Instant);
+ }
+
public static interface DynamicBuilders.DynamicInt32 extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
diff --git a/wear/protolayout/protolayout-expression/api/restricted_current.txt b/wear/protolayout/protolayout-expression/api/restricted_current.txt
index 49d68e38..1e3c3ea 100644
--- a/wear/protolayout/protolayout-expression/api/restricted_current.txt
+++ b/wear/protolayout/protolayout-expression/api/restricted_current.txt
@@ -104,6 +104,19 @@
method public default byte[] toDynamicColorByteArray();
}
+ public static interface DynamicBuilders.DynamicDuration extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[]);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getHoursPart();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getIntDaysPart();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMinutesPart();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getSecondsPart();
+ method public default byte[] toDynamicDurationByteArray();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntDays();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntHours();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntMinutes();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntSeconds();
+ }
+
public static interface DynamicBuilders.DynamicFloat extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
@@ -156,6 +169,14 @@
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter with();
}
+ public static interface DynamicBuilders.DynamicInstant extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration durationUntil(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant platformTimeWithSecondsPrecision();
+ method public default byte[] toDynamicInstantByteArray();
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant withSecondsPrecision(java.time.Instant);
+ }
+
public static interface DynamicBuilders.DynamicInt32 extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
diff --git a/wear/protolayout/protolayout-expression/build.gradle b/wear/protolayout/protolayout-expression/build.gradle
index eb396f8..7bb1001 100644
--- a/wear/protolayout/protolayout-expression/build.gradle
+++ b/wear/protolayout/protolayout-expression/build.gradle
@@ -40,7 +40,7 @@
namespace "androidx.wear.protolayout.expression"
defaultConfig {
- minSdkVersion 25
+ minSdkVersion 26
}
buildTypes.all {
consumerProguardFiles "proguard-rules.pro"
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicBuilders.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicBuilders.java
index 110f68a..68edcea 100644
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicBuilders.java
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicBuilders.java
@@ -31,15 +31,16 @@
import androidx.wear.protolayout.expression.FixedValueBuilders.FixedBool;
import androidx.wear.protolayout.expression.FixedValueBuilders.FixedColor;
import androidx.wear.protolayout.expression.FixedValueBuilders.FixedFloat;
+import androidx.wear.protolayout.expression.FixedValueBuilders.FixedInstant;
import androidx.wear.protolayout.expression.FixedValueBuilders.FixedInt32;
import androidx.wear.protolayout.expression.FixedValueBuilders.FixedString;
import androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue;
import androidx.wear.protolayout.expression.proto.DynamicProto;
import androidx.wear.protolayout.protobuf.ExtensionRegistryLite;
import androidx.wear.protolayout.protobuf.InvalidProtocolBufferException;
-
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.time.Instant;
/** Builders for dynamic primitive types used by layout elements. */
public final class DynamicBuilders {
@@ -249,6 +250,101 @@
static final int LOGICAL_OP_TYPE_OR = 2;
/**
+ * The duration part to retrieve using {@link GetDurationPartOp}.
+ *
+ * @since 1.2
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ @IntDef({
+ DURATION_PART_TYPE_UNDEFINED,
+ DURATION_PART_TYPE_TOTAL_DAYS,
+ DURATION_PART_TYPE_TOTAL_HOURS,
+ DURATION_PART_TYPE_TOTAL_MINUTES,
+ DURATION_PART_TYPE_TOTAL_SECONDS,
+ DURATION_PART_TYPE_DAYS,
+ DURATION_PART_TYPE_HOURS,
+ DURATION_PART_TYPE_MINUTES,
+ DURATION_PART_TYPE_SECONDS
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ @interface DurationPartType {}
+
+ /**
+ * Undefined duration part type.
+ *
+ * @since 1.2
+ */
+ static final int DURATION_PART_TYPE_UNDEFINED = 0;
+
+ /**
+ * Total number of days in a duration. The fraction part of the result will be truncated. This is
+ * based on the standard definition of a day as 24 hours. Notice that the duration can be
+ * negative, in which case total number of days will be also negative.
+ *
+ * @since 1.2
+ */
+ static final int DURATION_PART_TYPE_TOTAL_DAYS = 1;
+
+ /**
+ * Total number of hours in a duration. The fraction part of the result will be truncated. Notice
+ * that the duration can be negative, in which case total number of hours will be also negative.
+ *
+ * @since 1.2
+ */
+ static final int DURATION_PART_TYPE_TOTAL_HOURS = 2;
+
+ /**
+ * Total number of minutes in a duration. The fraction part of the result will be truncated.
+ * Notice that the duration can be negative, in which case total number of minutes will be also
+ * negative.
+ *
+ * @since 1.2
+ */
+ static final int DURATION_PART_TYPE_TOTAL_MINUTES = 3;
+
+ /**
+ * Total number of seconds in a duration. Notice that the duration can be negative, in which case
+ * total number of seconds will be also negative.
+ *
+ * @since 1.2
+ */
+ static final int DURATION_PART_TYPE_TOTAL_SECONDS = 4;
+
+ /**
+ * Number of days part in the duration. This represents the absolute value of the total number of
+ * days in the duration based on the 24 hours day definition. The fraction part of the result will
+ * be truncated.
+ *
+ * @since 1.2
+ */
+ static final int DURATION_PART_TYPE_DAYS = 5;
+
+ /**
+ * Number of hours part in the duration. This represents the absolute value of remaining hours
+ * when dividing total hours by hours in a day (24 hours).
+ *
+ * @since 1.2
+ */
+ static final int DURATION_PART_TYPE_HOURS = 6;
+
+ /**
+ * Number of minutes part in the duration. This represents the absolute value of remaining minutes
+ * when dividing total minutes by minutes in an hour (60 minutes).
+ *
+ * @since 1.2
+ */
+ static final int DURATION_PART_TYPE_MINUTES = 7;
+
+ /**
+ * Number of seconds part in the duration. This represents the absolute value of remaining seconds
+ * when dividing total seconds by seconds in a minute (60 seconds).
+ *
+ * @since 1.2
+ */
+ static final int DURATION_PART_TYPE_SECONDS = 8;
+
+ /**
* An arithmetic operation, operating on two Int32 instances. This implements simple binary
* operations of the form "result = LHS <op> RHS", where the available operation types are
* described in {@code ArithmeticOpType}.
@@ -922,9 +1018,9 @@
* @since 1.2
*/
@Nullable
- public AnimationSpec getSpec() {
- if (mImpl.hasSpec()) {
- return AnimationSpec.fromProto(mImpl.getSpec());
+ public AnimationSpec getAnimationSpec() {
+ if (mImpl.hasAnimationSpec()) {
+ return AnimationSpec.fromProto(mImpl.getAnimationSpec());
} else {
return null;
}
@@ -981,8 +1077,8 @@
+ getFromValue()
+ ", toValue="
+ getToValue()
- + ", spec="
- + getSpec()
+ + ", animationSpec="
+ + getAnimationSpec()
+ "}";
}
@@ -1024,10 +1120,10 @@
* @since 1.2
*/
@NonNull
- public AnimatableFixedInt32.Builder setSpec(@NonNull AnimationSpec spec) {
- mImpl.setSpec(spec.toProto());
+ public Builder setAnimationSpec(@NonNull AnimationSpec animationSpec) {
+ mImpl.setAnimationSpec(animationSpec.toProto());
mFingerprint.recordPropertyUpdate(
- 3, checkNotNull(spec.getFingerprint()).aggregateValueAsInt());
+ 3, checkNotNull(animationSpec.getFingerprint()).aggregateValueAsInt());
return this;
}
@@ -1080,9 +1176,9 @@
* @since 1.2
*/
@Nullable
- public AnimationSpec getSpec() {
- if (mImpl.hasSpec()) {
- return AnimationSpec.fromProto(mImpl.getSpec());
+ public AnimationSpec getAnimationSpec() {
+ if (mImpl.hasAnimationSpec()) {
+ return AnimationSpec.fromProto(mImpl.getAnimationSpec());
} else {
return null;
}
@@ -1134,7 +1230,12 @@
@Override
@NonNull
public String toString() {
- return "AnimatableDynamicInt32{" + "input=" + getInput() + ", spec=" + getSpec() + "}";
+ return "AnimatableDynamicInt32{"
+ + "input="
+ + getInput()
+ + ", animationSpec="
+ + getAnimationSpec()
+ + "}";
}
/** Builder for {@link AnimatableDynamicInt32}. */
@@ -1164,10 +1265,10 @@
* @since 1.2
*/
@NonNull
- public AnimatableDynamicInt32.Builder setSpec(@NonNull AnimationSpec spec) {
- mImpl.setSpec(spec.toProto());
+ public Builder setAnimationSpec(@NonNull AnimationSpec animationSpec) {
+ mImpl.setAnimationSpec(animationSpec.toProto());
mFingerprint.recordPropertyUpdate(
- 2, checkNotNull(spec.getFingerprint()).aggregateValueAsInt());
+ 2, checkNotNull(animationSpec.getFingerprint()).aggregateValueAsInt());
return this;
}
@@ -1189,18 +1290,16 @@
*
* <p>For example the following expression is equivalent to {@code result = ((a + b)*c)/d }:
*
- * <pre>
+ * <pre>{@code
* a.plus(b).times(c).div(d);
- * </pre>
+ * }</pre>
*
* More complex expressions can be created by nesting expressions. For example the following
* expression is equivalent to {@code result = (a + b)*(c - d) }:
*
- * <pre>
+ * <pre>{@code
* (a.plus(b)).times(c.minus(d));
- * </pre>
- *
- * .
+ * }</pre>
*
* @since 1.2
*/
@@ -1269,15 +1368,15 @@
*
* @param start The start value of the range.
* @param end The end value of the range.
- * @param spec The animation parameters.
+ * @param animationSpec The animation parameters.
*/
@NonNull
- static DynamicInt32 animate(int start, int end, @NonNull AnimationSpec spec) {
+ static DynamicInt32 animate(int start, int end, @NonNull AnimationSpec animationSpec) {
return new AnimatableFixedInt32.Builder()
- .setFromValue(start)
- .setToValue(end)
- .setSpec(spec)
- .build();
+ .setFromValue(start)
+ .setToValue(end)
+ .setAnimationSpec(animationSpec)
+ .build();
}
/**
@@ -1300,25 +1399,28 @@
*
* @param stateKey The key to a {@link StateEntryValue} with an int value from the provider's
* state.
- * @param spec The animation parameters.
+ * @param animationSpec The animation parameters.
*/
@NonNull
- static DynamicInt32 animate(@NonNull String stateKey, @NonNull AnimationSpec spec) {
+ static DynamicInt32 animate(@NonNull String stateKey, @NonNull AnimationSpec animationSpec) {
return new AnimatableDynamicInt32.Builder()
- .setInput(fromState(stateKey))
- .setSpec(spec)
- .build();
+ .setInput(fromState(stateKey))
+ .setAnimationSpec(animationSpec)
+ .build();
}
/**
* Returns a {@link DynamicInt32} that is bound to the value of this {@link DynamicInt32} and
* every time its value is changing, it animates from its current value to the new value.
*
- * @param spec The animation parameters.
+ * @param animationSpec The animation parameters.
*/
@NonNull
- default DynamicInt32 animate(@NonNull AnimationSpec spec) {
- return new AnimatableDynamicInt32.Builder().setInput(this).setSpec(spec).build();
+ default DynamicInt32 animate(@NonNull AnimationSpec animationSpec) {
+ return new AnimatableDynamicInt32.Builder()
+ .setInput(this)
+ .setAnimationSpec(animationSpec)
+ .build();
}
/**
@@ -1838,7 +1940,7 @@
@NonNull
default DynamicFloat rem(float other) {
return new ArithmeticFloatOp.Builder()
- .setInputLhs( this.asFloat())
+ .setInputLhs(this.asFloat())
.setInputRhs(DynamicFloat.constant(other))
.setOperationType(DynamicBuilders.ARITHMETIC_OP_TYPE_MODULO)
.build();
@@ -2115,6 +2217,9 @@
if (proto.hasFloatToInt()) {
return FloatToInt32Op.fromProto(proto.getFloatToInt());
}
+ if (proto.hasDurationPart()) {
+ return GetDurationPartOp.fromProto(proto.getDurationPart());
+ }
if (proto.hasAnimatableFixed()) {
return AnimatableFixedInt32.fromProto(proto.getAnimatableFixed());
}
@@ -3325,9 +3430,9 @@
* @since 1.2
*/
@Nullable
- public AnimationSpec getSpec() {
- if (mImpl.hasSpec()) {
- return AnimationSpec.fromProto(mImpl.getSpec());
+ public AnimationSpec getAnimationSpec() {
+ if (mImpl.hasAnimationSpec()) {
+ return AnimationSpec.fromProto(mImpl.getAnimationSpec());
} else {
return null;
}
@@ -3367,8 +3472,8 @@
+ getFromValue()
+ ", toValue="
+ getToValue()
- + ", spec="
- + getSpec()
+ + ", animationSpec="
+ + getAnimationSpec()
+ "}";
}
@@ -3410,10 +3515,10 @@
* @since 1.2
*/
@NonNull
- public Builder setSpec(@NonNull AnimationSpec spec) {
- mImpl.setSpec(spec.toProto());
+ public Builder setAnimationSpec(@NonNull AnimationSpec animationSpec) {
+ mImpl.setAnimationSpec(animationSpec.toProto());
mFingerprint.recordPropertyUpdate(
- 3, checkNotNull(spec.getFingerprint()).aggregateValueAsInt());
+ 3, checkNotNull(animationSpec.getFingerprint()).aggregateValueAsInt());
return this;
}
@@ -3466,9 +3571,9 @@
* @since 1.2
*/
@Nullable
- public AnimationSpec getSpec() {
- if (mImpl.hasSpec()) {
- return AnimationSpec.fromProto(mImpl.getSpec());
+ public AnimationSpec getAnimationSpec() {
+ if (mImpl.hasAnimationSpec()) {
+ return AnimationSpec.fromProto(mImpl.getAnimationSpec());
} else {
return null;
}
@@ -3503,7 +3608,12 @@
@Override
@NonNull
public String toString() {
- return "AnimatableDynamicFloat{" + "input=" + getInput() + ", spec=" + getSpec() + "}";
+ return "AnimatableDynamicFloat{"
+ + "input="
+ + getInput()
+ + ", animationSpec="
+ + getAnimationSpec()
+ + "}";
}
/** Builder for {@link AnimatableDynamicFloat}. */
@@ -3533,10 +3643,10 @@
* @since 1.2
*/
@NonNull
- public Builder setSpec(@NonNull AnimationSpec spec) {
- mImpl.setSpec(spec.toProto());
+ public Builder setAnimationSpec(@NonNull AnimationSpec animationSpec) {
+ mImpl.setAnimationSpec(animationSpec.toProto());
mFingerprint.recordPropertyUpdate(
- 3, checkNotNull(spec.getFingerprint()).aggregateValueAsInt());
+ 3, checkNotNull(animationSpec.getFingerprint()).aggregateValueAsInt());
return this;
}
@@ -3558,18 +3668,16 @@
*
* <p>For example the following expression is equivalent to {@code result = ((a + b)*c)/d }:
*
- * <pre>
+ * <pre>{@code
* a.plus(b).times(c).div(d);
- * </pre>
+ * }</pre>
*
* More complex expressions can be created by nesting expressions. For example the following
* expression is equivalent to {@code result = (a + b)*(c - d) }:
*
- * <pre>
+ * <pre>{@code
* (a.plus(b)).times(c.minus(d));
- * </pre>
- *
- * .
+ * }</pre>
*
* @since 1.2
*/
@@ -3639,14 +3747,14 @@
*
* @param start The start value of the range.
* @param end The end value of the range.
- * @param spec The animation parameters.
+ * @param animationSpec The animation parameters.
*/
@NonNull
- static DynamicFloat animate(float start, float end, @NonNull AnimationSpec spec) {
+ static DynamicFloat animate(float start, float end, @NonNull AnimationSpec animationSpec) {
return new AnimatableFixedFloat.Builder()
.setFromValue(start)
.setToValue(end)
- .setSpec(spec)
+ .setAnimationSpec(animationSpec)
.build();
}
@@ -3670,13 +3778,13 @@
*
* @param stateKey The key to a {@link StateEntryValue} with a float value from the providers
* state.
- * @param spec The animation parameters.
+ * @param animationSpec The animation parameters.
*/
@NonNull
- static DynamicFloat animate(@NonNull String stateKey, @NonNull AnimationSpec spec) {
+ static DynamicFloat animate(@NonNull String stateKey, @NonNull AnimationSpec animationSpec) {
return new AnimatableDynamicFloat.Builder()
.setInput(fromState(stateKey))
- .setSpec(spec)
+ .setAnimationSpec(animationSpec)
.build();
}
@@ -3684,11 +3792,14 @@
* Returns a {@link DynamicFloat} that is bound to the value of this {@link DynamicFloat} and
* every time its value is changing, it animates from its current value to the new value.
*
- * @param spec The animation parameters.
+ * @param animationSpec The animation parameters.
*/
@NonNull
- default DynamicFloat animate(@NonNull AnimationSpec spec) {
- return new AnimatableDynamicFloat.Builder().setInput(this).setSpec(spec).build();
+ default DynamicFloat animate(@NonNull AnimationSpec animationSpec) {
+ return new AnimatableDynamicFloat.Builder()
+ .setInput(this)
+ .setAnimationSpec(animationSpec)
+ .build();
}
/**
@@ -3730,8 +3841,6 @@
@SuppressWarnings("KotlinOperator")
@NonNull
default DynamicFloat plus(@NonNull DynamicFloat other) {
-
- // overloaded operators.
return new ArithmeticFloatOp.Builder()
.setInputLhs(this)
.setInputRhs(other)
@@ -4036,7 +4145,7 @@
}
/**
- * reates a {@link DynamicFloat} containing the reminder of dividing this {@link DynamicFloat}
+ * Creates a {@link DynamicFloat} containing the reminder of dividing this {@link DynamicFloat}
* by a float; As an example, the following is equal to {@code DynamicFloat.constant(1.5f)}
*
* <pre>
@@ -4060,7 +4169,7 @@
}
/**
- * reates a {@link DynamicFloat} containing the reminder of dividing this {@link DynamicFloat}
+ * Creates a {@link DynamicFloat} containing the reminder of dividing this {@link DynamicFloat}
* by a {@link DynamicInt32}; As an example, the following is equal to {@code
* DynamicFloat.constant(2f)}
*
@@ -5286,9 +5395,9 @@
* @since 1.2
*/
@Nullable
- public AnimationSpec getSpec() {
- if (mImpl.hasSpec()) {
- return AnimationSpec.fromProto(mImpl.getSpec());
+ public AnimationSpec getAnimationSpec() {
+ if (mImpl.hasAnimationSpec()) {
+ return AnimationSpec.fromProto(mImpl.getAnimationSpec());
} else {
return null;
}
@@ -5328,8 +5437,8 @@
+ getFromArgb()
+ ", toArgb="
+ getToArgb()
- + ", spec="
- + getSpec()
+ + ", animationSpec="
+ + getAnimationSpec()
+ "}";
}
@@ -5371,10 +5480,10 @@
* @since 1.2
*/
@NonNull
- public Builder setSpec(@NonNull AnimationSpec spec) {
- mImpl.setSpec(spec.toProto());
+ public Builder setAnimationSpec(@NonNull AnimationSpec animationSpec) {
+ mImpl.setAnimationSpec(animationSpec.toProto());
mFingerprint.recordPropertyUpdate(
- 3, checkNotNull(spec.getFingerprint()).aggregateValueAsInt());
+ 3, checkNotNull(animationSpec.getFingerprint()).aggregateValueAsInt());
return this;
}
@@ -5427,9 +5536,9 @@
* @since 1.2
*/
@Nullable
- public AnimationSpec getSpec() {
- if (mImpl.hasSpec()) {
- return AnimationSpec.fromProto(mImpl.getSpec());
+ public AnimationSpec getAnimationSpec() {
+ if (mImpl.hasAnimationSpec()) {
+ return AnimationSpec.fromProto(mImpl.getAnimationSpec());
} else {
return null;
}
@@ -5464,7 +5573,12 @@
@Override
@NonNull
public String toString() {
- return "AnimatableDynamicColor{" + "input=" + getInput() + ", spec=" + getSpec() + "}";
+ return "AnimatableDynamicColor{"
+ + "input="
+ + getInput()
+ + ", animationSpec="
+ + getAnimationSpec()
+ + "}";
}
/** Builder for {@link AnimatableDynamicColor}. */
@@ -5494,10 +5608,10 @@
* @since 1.2
*/
@NonNull
- public Builder setSpec(@NonNull AnimationSpec spec) {
- mImpl.setSpec(spec.toProto());
+ public Builder setAnimationSpec(@NonNull AnimationSpec animationSpec) {
+ mImpl.setAnimationSpec(animationSpec.toProto());
mFingerprint.recordPropertyUpdate(
- 3, checkNotNull(spec.getFingerprint()).aggregateValueAsInt());
+ 3, checkNotNull(animationSpec.getFingerprint()).aggregateValueAsInt());
return this;
}
@@ -5580,15 +5694,15 @@
*
* @param start The start value of the range.
* @param end The end value of the range.
- * @param spec The animation parameters.
+ * @param animationSpec The animation parameters.
*/
@NonNull
static DynamicColor animate(
- @ColorInt int start, @ColorInt int end, @NonNull AnimationSpec spec) {
+ @ColorInt int start, @ColorInt int end, @NonNull AnimationSpec animationSpec) {
return new AnimatableFixedColor.Builder()
.setFromArgb(start)
.setToArgb(end)
- .setSpec(spec)
+ .setAnimationSpec(animationSpec)
.build();
}
@@ -5597,7 +5711,7 @@
* the state value changes, this {@link DynamicColor} will animate from its current value to the
* new value (from the state).
*
- * @param stateKey The key to a {@link StateEntryValue} with a color value from the providers
+ * @param stateKey The key to a {@link StateEntryValue} with a color value from the provider's
* state.
*/
@NonNull
@@ -5610,15 +5724,15 @@
* the state value changes, this {@link DynamicColor} will animate from its current value to the
* new value (from the state).
*
- * @param stateKey The key to a {@link StateEntryValue} with a color value from the providers
+ * @param stateKey The key to a {@link StateEntryValue} with a color value from the provider's
* state.
- * @param spec The animation parameters.
+ * @param animationSpec The animation parameters.
*/
@NonNull
- static DynamicColor animate(@NonNull String stateKey, @NonNull AnimationSpec spec) {
+ static DynamicColor animate(@NonNull String stateKey, @NonNull AnimationSpec animationSpec) {
return new AnimatableDynamicColor.Builder()
.setInput(fromState(stateKey))
- .setSpec(spec)
+ .setAnimationSpec(animationSpec)
.build();
}
@@ -5626,11 +5740,14 @@
* Returns a {@link DynamicColor} that is bound to the value of this {@link DynamicColor} and
* every time its value is changing, it animates from its current value to the new value.
*
- * @param spec The animation parameters.
+ * @param animationSpec The animation parameters.
*/
@NonNull
- default DynamicColor animate(@NonNull AnimationSpec spec) {
- return new AnimatableDynamicColor.Builder().setInput(this).setSpec(spec).build();
+ default DynamicColor animate(@NonNull AnimationSpec animationSpec) {
+ return new AnimatableDynamicColor.Builder()
+ .setInput(this)
+ .setAnimationSpec(animationSpec)
+ .build();
}
/**
@@ -5690,6 +5807,677 @@
}
/**
+ * A dynamic time instant that sources its value from the platform.
+ *
+ * @since 1.2
+ */
+ static final class PlatformTimeSource implements DynamicInstant {
+ private final DynamicProto.PlatformTimeSource mImpl;
+ @Nullable private final Fingerprint mFingerprint;
+
+ PlatformTimeSource(DynamicProto.PlatformTimeSource impl, @Nullable Fingerprint fingerprint) {
+ this.mImpl = impl;
+ this.mFingerprint = fingerprint;
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ public Fingerprint getFingerprint() {
+ return mFingerprint;
+ }
+
+ @NonNull
+ static PlatformTimeSource fromProto(@NonNull DynamicProto.PlatformTimeSource proto) {
+ return new PlatformTimeSource(proto, null);
+ }
+
+ @NonNull
+ DynamicProto.PlatformTimeSource toProto() {
+ return mImpl;
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public DynamicProto.DynamicInstant toDynamicInstantProto() {
+ return DynamicProto.DynamicInstant.newBuilder().setPlatformSource(mImpl).build();
+ }
+
+ @Override
+ @NonNull
+ public String toString() {
+ return "PlatformTimeSource";
+ }
+
+ /** Builder for {@link PlatformTimeSource}. */
+ public static final class Builder implements DynamicInstant.Builder {
+ private final DynamicProto.PlatformTimeSource.Builder mImpl =
+ DynamicProto.PlatformTimeSource.newBuilder();
+ private final Fingerprint mFingerprint = new Fingerprint(-1895976938);
+
+ public Builder() {}
+
+ @Override
+ @NonNull
+ public PlatformTimeSource build() {
+ return new PlatformTimeSource(mImpl.build(), mFingerprint);
+ }
+ }
+ }
+
+ /**
+ * Interface defining a dynamic time instant type.
+ *
+ * <p> {@link DynamicInstant} precision is seconds. Thus, any time or duration operation will
+ * operate on that precision level.
+ *
+ * @since 1.2
+ */
+ public interface DynamicInstant extends DynamicType {
+ /**
+ * Get the protocol buffer representation of this object.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ DynamicProto.DynamicInstant toDynamicInstantProto();
+
+ /**
+ * Creates a {@link DynamicInstant} from a byte array generated by {@link
+ * #toDynamicInstantByteArray()}.
+ */
+ @NonNull
+ static DynamicInstant fromByteArray(@NonNull byte[] byteArray) {
+ try {
+ return dynamicInstantFromProto(
+ DynamicProto.DynamicInstant.parseFrom(
+ byteArray, ExtensionRegistryLite.getEmptyRegistry()));
+ } catch (InvalidProtocolBufferException e) {
+ throw new IllegalArgumentException("Byte array could not be parsed into DynamicInstant", e);
+ }
+ }
+
+ /** Creates a byte array that can later be used with {@link #fromByteArray(byte[])}. */
+ @NonNull
+ default byte[] toDynamicInstantByteArray() {
+ return toDynamicInstantProto().toByteArray();
+ }
+
+
+ /**
+ * Creates a constant-valued {@link DynamicInstant} from an {@link Instant}. If {@link Instant}
+ * precision is greater than seconds, then any excess precision information will be dropped.
+ */
+ @NonNull
+ static DynamicInstant withSecondsPrecision(@NonNull Instant instant) {
+ return new FixedInstant.Builder().setEpochSeconds(instant.getEpochSecond()).build();
+ }
+
+ /**
+ * Creates a {@link DynamicInstant} that updates its value periodically from the system time.
+ */
+ @NonNull
+ static DynamicInstant platformTimeWithSecondsPrecision() {
+ return new PlatformTimeSource.Builder().build();
+ }
+
+ /**
+ * Returns duration between the two {@link DynamicInstant} instances as a {@link
+ * DynamicDuration}. The resulted duration is inclusive of the start instant and exclusive of
+ * the end; As an example, the following expression yields a duration object representing 10
+ * seconds:
+ *
+ * <pre>
+ * DynamicInstant.withSecondsPrecision(Instant.ofEpochSecond(10L))
+ * .durationUntil(DynamicInstant.withSecondsPrecision(Instant.ofEpochSecond(20L)));
+ * </pre>
+ *
+ * @return a new instance of {@link DynamicDuration} containing the result of the operation.
+ */
+ @NonNull
+ default DynamicDuration durationUntil(@NonNull DynamicInstant to) {
+ return new BetweenDuration.Builder().setStartInclusive(this).setEndExclusive(to).build();
+ }
+
+ /**
+ * Get the fingerprint for this object or null if unknown.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ Fingerprint getFingerprint();
+
+ /**
+ * Builder to create {@link DynamicInstant} objects.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ interface Builder {
+
+ /** Builds an instance with values accumulated in this Builder. */
+ @NonNull
+ DynamicInstant build();
+ }
+ }
+
+ /**
+ * Creates a new wrapper instance from the proto. Intended for testing purposes only. An object
+ * created using this method can't be added to any other wrapper.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public static DynamicInstant dynamicInstantFromProto(@NonNull DynamicProto.DynamicInstant proto) {
+ if (proto.hasFixed()) {
+ return FixedInstant.fromProto(proto.getFixed());
+ }
+ if (proto.hasPlatformSource()) {
+ return PlatformTimeSource.fromProto(proto.getPlatformSource());
+ }
+ throw new IllegalStateException("Proto was not a recognised instance of DynamicInstant");
+ }
+
+ /**
+ * A dynamic duration type that represents the duration between two dynamic time instants.
+ *
+ * @since 1.2
+ */
+ static final class BetweenDuration implements DynamicDuration {
+ private final DynamicProto.BetweenDuration mImpl;
+ @Nullable private final Fingerprint mFingerprint;
+
+ BetweenDuration(DynamicProto.BetweenDuration impl, @Nullable Fingerprint fingerprint) {
+ this.mImpl = impl;
+ this.mFingerprint = fingerprint;
+ }
+
+ /**
+ * Gets the time instant value marking the start of the duration.
+ *
+ * @since 1.2
+ */
+ @Nullable
+ public DynamicInstant getStartInclusive() {
+ if (mImpl.hasStartInclusive()) {
+ return DynamicBuilders.dynamicInstantFromProto(mImpl.getStartInclusive());
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the time instant value marking the end of the duration.
+ *
+ * @since 1.2
+ */
+ @Nullable
+ public DynamicInstant getEndExclusive() {
+ if (mImpl.hasEndExclusive()) {
+ return DynamicBuilders.dynamicInstantFromProto(mImpl.getEndExclusive());
+ } else {
+ return null;
+ }
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ public Fingerprint getFingerprint() {
+ return mFingerprint;
+ }
+
+ @NonNull
+ static BetweenDuration fromProto(@NonNull DynamicProto.BetweenDuration proto) {
+ return new BetweenDuration(proto, null);
+ }
+
+ @NonNull
+ DynamicProto.BetweenDuration toProto() {
+ return mImpl;
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public DynamicProto.DynamicDuration toDynamicDurationProto() {
+ return DynamicProto.DynamicDuration.newBuilder().setBetween(mImpl).build();
+ }
+
+ @Override
+ @NonNull
+ public String toString() {
+ return "BetweenDuration{"
+ + "startInclusive="
+ + getStartInclusive()
+ + ", endExclusive="
+ + getEndExclusive()
+ + "}";
+ }
+
+ /** Builder for {@link BetweenDuration}. */
+ public static final class Builder implements DynamicDuration.Builder {
+ private final DynamicProto.BetweenDuration.Builder mImpl =
+ DynamicProto.BetweenDuration.newBuilder();
+ private final Fingerprint mFingerprint = new Fingerprint(-1615230958);
+
+ public Builder() {}
+
+ /**
+ * Sets the time instant value marking the start of the duration.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setStartInclusive(@NonNull DynamicInstant startInclusive) {
+ mImpl.setStartInclusive(startInclusive.toDynamicInstantProto());
+ mFingerprint.recordPropertyUpdate(
+ 1, checkNotNull(startInclusive.getFingerprint()).aggregateValueAsInt());
+ return this;
+ }
+
+ /**
+ * Sets the time instant value marking the end of the duration.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setEndExclusive(@NonNull DynamicInstant endExclusive) {
+ mImpl.setEndExclusive(endExclusive.toDynamicInstantProto());
+ mFingerprint.recordPropertyUpdate(
+ 2, checkNotNull(endExclusive.getFingerprint()).aggregateValueAsInt());
+ return this;
+ }
+
+ @Override
+ @NonNull
+ public BetweenDuration build() {
+ return new BetweenDuration(mImpl.build(), mFingerprint);
+ }
+ }
+ }
+
+ /**
+ * Interface defining a dynamic duration type.
+ *
+ * @since 1.2
+ */
+ public interface DynamicDuration extends DynamicType {
+ /**
+ * Get the protocol buffer representation of this object.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ DynamicProto.DynamicDuration toDynamicDurationProto();
+
+ /**
+ * Creates a {@link DynamicDuration} from a byte array generated by {@link
+ * #toDynamicDurationByteArray()}.
+ */
+ @NonNull
+ static DynamicDuration fromByteArray(@NonNull byte[] byteArray) {
+ try {
+ return dynamicDurationFromProto(
+ DynamicProto.DynamicDuration.parseFrom(
+ byteArray, ExtensionRegistryLite.getEmptyRegistry()));
+ } catch (InvalidProtocolBufferException e) {
+ throw new IllegalArgumentException(
+ "Byte array could not be parsed into DynamicDuration", e);
+ }
+ }
+
+ /** Creates a byte array that can later be used with {@link #fromByteArray(byte[])}. */
+ @NonNull
+ default byte[] toDynamicDurationByteArray() {
+ return toDynamicDurationProto().toByteArray();
+ }
+
+
+ /**
+ * Returns the total number of days in a {@link DynamicDuration} as a {@link DynamicInt32}. The
+ * fraction part of the result will be truncated. This is based on the standard definition of a
+ * day as 24 hours. As an example, the following is equal to {@code DynamicInt32.constant(1)}
+ *
+ * <pre>
+ * DynamicInstant.withSecondsPrecision(Instant.EPOCH)
+ * .durationUntil(DynamicInstant.withSecondsPrecision(Instant.ofEpochSecond(123456L)))
+ * .toIntDays();
+ * </pre>
+ *
+ * @return a new instance of {@link DynamicInt32} containing the result of the operation.
+ * Integer overflow can occur if the result of the operation is larger than {@link
+ * Integer#MAX_VALUE}.
+ */
+ @NonNull
+ default DynamicInt32 toIntDays() {
+ return new GetDurationPartOp.Builder()
+ .setInput(this)
+ .setDurationPart(DURATION_PART_TYPE_TOTAL_DAYS)
+ .build();
+ }
+
+ /**
+ * Returns the total number of hours in a {@link DynamicDuration} as a {@link DynamicInt32}. The
+ * fraction part of the result will be truncated. As an example, the following is equal to
+ * {@code DynamicInt32.constant(34)}
+ *
+ * <pre>
+ * DynamicInstant.withSecondsPrecision(Instant.EPOCH)
+ * .durationUntil(DynamicInstant.withSecondsPrecision(Instant.ofEpochSecond(123456L)))
+ * .toIntHours();
+ * </pre>
+ *
+ * @return a new instance of {@link DynamicInt32} containing the result of the operation.
+ * Integer overflow can occur if the result of the operation is larger than {@link
+ * Integer#MAX_VALUE}.
+ */
+ @NonNull
+ default DynamicInt32 toIntHours() {
+ return new GetDurationPartOp.Builder()
+ .setInput(this)
+ .setDurationPart(DURATION_PART_TYPE_TOTAL_HOURS)
+ .build();
+ }
+
+ /**
+ * Returns the total number of minutes in a {@link DynamicDuration} as a {@link DynamicInt32}.
+ * The fraction part of the result will be truncated. As an example, the following is equal to
+ * {@code DynamicInt32.constant(2057)}
+ *
+ * <pre>
+ * DynamicInstant.withSecondsPrecision(Instant.EPOCH)
+ * .durationUntil(DynamicInstant.withSecondsPrecision(Instant.ofEpochSecond(123456L)))
+ * .toIntMinutes();
+ * </pre>
+ *
+ * @return a new instance of {@link DynamicInt32} containing the result of the operation.
+ * Integer overflow can occur if the result of the operation is larger than {@link
+ * Integer#MAX_VALUE}.
+ */
+ @NonNull
+ default DynamicInt32 toIntMinutes() {
+ return new GetDurationPartOp.Builder()
+ .setInput(this)
+ .setDurationPart(DURATION_PART_TYPE_TOTAL_MINUTES)
+ .build();
+ }
+
+ /**
+ * Returns the total number of seconds in a {@link DynamicDuration} as a {@link DynamicInt32}.
+ * As an example, the following is equal to {@code DynamicInt32.constant(123456)}
+ *
+ * <pre>
+ * DynamicInstant.withSecondsPrecision(Instant.EPOCH)
+ * .durationUntil(DynamicInstant.withSecondsPrecision(Instant.ofEpochSecond(123456L)))
+ * .toIntSeconds();
+ * </pre>
+ *
+ * @return a new instance of {@link DynamicInt32} containing the result of the operation.
+ * Integer overflow can occur if the result of the operation is larger than {@link
+ * Integer#MAX_VALUE}.
+ */
+ @NonNull
+ default DynamicInt32 toIntSeconds() {
+ return new GetDurationPartOp.Builder()
+ .setInput(this)
+ .setDurationPart(DURATION_PART_TYPE_TOTAL_SECONDS)
+ .build();
+ }
+
+ /**
+ * Returns the total number of days in a duration as a {@link DynamicInt32}. This represents the
+ * absolute value of the total number of days in the duration based on the 24 hours day
+ * definition. The fraction part of the result will be truncated; As an example, the following
+ * is equal to {@code DynamicInt32.constant(1)}
+ *
+ * <pre>
+ * DynamicInstant.withSecondsPrecision(Instant.EPOCH)
+ * .durationUntil(DynamicInstant.withSecondsPrecision(Instant.ofEpochSecond(123456L)))
+ * .getIntDaysPart();
+ * </pre>
+ *
+ * @return a new instance of {@link DynamicInt32} containing the result of the operation.
+ * Integer overflow can occur if the result of the operation is larger than {@link
+ * Integer#MAX_VALUE}.
+ */
+ @NonNull
+ default DynamicInt32 getIntDaysPart() {
+ return new GetDurationPartOp.Builder()
+ .setInput(this)
+ .setDurationPart(DURATION_PART_TYPE_DAYS)
+ .build();
+ }
+
+ /**
+ * Returns the number of hours part in the duration as a {@link DynamicInt32}. This represents
+ * the absolute value of remaining hours when dividing total hours by hours in a day (24 hours);
+ * As an example, the following is equal to {@code DynamicInt32.constant(10)}
+ *
+ * <pre>
+ * DynamicInstant.withSecondsPrecision(Instant.EPOCH)
+ * .durationUntil(DynamicInstant.withSecondsPrecision(Instant.ofEpochSecond(123456L)))
+ * .getHoursPart();
+ * </pre>
+ *
+ * @return a new instance of {@link DynamicInt32} containing the result of the operation.
+ */
+ @NonNull
+ default DynamicInt32 getHoursPart() {
+ return new GetDurationPartOp.Builder()
+ .setInput(this)
+ .setDurationPart(DURATION_PART_TYPE_HOURS)
+ .build();
+ }
+
+ /**
+ * Returns the number of minutes part in the duration as a {@link DynamicInt32}. This represents
+ * the absolute value of remaining minutes when dividing total minutes by minutes in an hour (60
+ * minutes). As an example, the following is equal to {@code DynamicInt32.constant(17)}
+ *
+ * <pre>
+ * DynamicInstant.withSecondsPrecision(Instant.EPOCH)
+ * .durationUntil(DynamicInstant.withSecondsPrecision(Instant.ofEpochSecond(123456L)))
+ * .getMinutesPart();
+ * </pre>
+ *
+ * @return a new instance of {@link DynamicInt32} containing the result of the operation.
+ */
+ @NonNull
+ default DynamicInt32 getMinutesPart() {
+ return new GetDurationPartOp.Builder()
+ .setInput(this)
+ .setDurationPart(DURATION_PART_TYPE_MINUTES)
+ .build();
+ }
+
+ /**
+ * Returns the number of seconds part in the duration as a {@link DynamicInt32}. This represents
+ * the absolute value of remaining seconds when dividing total seconds by seconds in a minute
+ * (60 seconds); As an example, the following is equal to {@code DynamicInt32.constant(36)}
+ *
+ * <pre>
+ * DynamicInstant.withSecondsPrecision(Instant.EPOCH)
+ * .durationUntil(DynamicInstant.withSecondsPrecision(Instant.ofEpochSecond(123456L)))
+ * .getSecondsPart();
+ * </pre>
+ *
+ * @return a new instance of {@link DynamicInt32} containing the result of the operation.
+ */
+ @NonNull
+ default DynamicInt32 getSecondsPart() {
+ return new GetDurationPartOp.Builder()
+ .setInput(this)
+ .setDurationPart(DURATION_PART_TYPE_SECONDS)
+ .build();
+ }
+
+ /**
+ * Get the fingerprint for this object or null if unknown.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ Fingerprint getFingerprint();
+
+ /**
+ * Builder to create {@link DynamicDuration} objects.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ interface Builder {
+
+ /** Builds an instance with values accumulated in this Builder. */
+ @NonNull
+ DynamicDuration build();
+ }
+ }
+
+ /**
+ * Creates a new wrapper instance from the proto. Intended for testing purposes only. An object
+ * created using this method can't be added to any other wrapper.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public static DynamicDuration dynamicDurationFromProto(
+ @NonNull DynamicProto.DynamicDuration proto) {
+ if (proto.hasBetween()) {
+ return BetweenDuration.fromProto(proto.getBetween());
+ }
+ throw new IllegalStateException("Proto was not a recognised instance of DynamicDuration");
+ }
+
+ /**
+ * Retrieve the specified duration part of a {@link DynamicDuration} instance as a {@link
+ * DynamicInt32}.
+ *
+ * @since 1.2
+ */
+ static final class GetDurationPartOp implements DynamicInt32 {
+ private final DynamicProto.GetDurationPartOp mImpl;
+ @Nullable private final Fingerprint mFingerprint;
+
+ GetDurationPartOp(DynamicProto.GetDurationPartOp impl, @Nullable Fingerprint fingerprint) {
+ this.mImpl = impl;
+ this.mFingerprint = fingerprint;
+ }
+
+ /**
+ * Gets the duration input.
+ *
+ * @since 1.2
+ */
+ @Nullable
+ public DynamicDuration getInput() {
+ if (mImpl.hasInput()) {
+ return DynamicBuilders.dynamicDurationFromProto(mImpl.getInput());
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the duration part to retrieve.
+ *
+ * @since 1.2
+ */
+ @DurationPartType
+ public int getDurationPart() {
+ return mImpl.getDurationPart().getNumber();
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ public Fingerprint getFingerprint() {
+ return mFingerprint;
+ }
+
+ @NonNull
+ static GetDurationPartOp fromProto(@NonNull DynamicProto.GetDurationPartOp proto) {
+ return new GetDurationPartOp(proto, null);
+ }
+
+ @NonNull
+ DynamicProto.GetDurationPartOp toProto() {
+ return mImpl;
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public DynamicProto.DynamicInt32 toDynamicInt32Proto() {
+ return DynamicProto.DynamicInt32.newBuilder().setDurationPart(mImpl).build();
+ }
+
+ @Override
+ @NonNull
+ public String toString() {
+ return "GetDurationPartOp{"
+ + "input="
+ + getInput()
+ + ", durationPart="
+ + getDurationPart()
+ + "}";
+ }
+
+ /** Builder for {@link GetDurationPartOp}. */
+ public static final class Builder implements DynamicInt32.Builder {
+ private final DynamicProto.GetDurationPartOp.Builder mImpl =
+ DynamicProto.GetDurationPartOp.newBuilder();
+ private final Fingerprint mFingerprint = new Fingerprint(-225941123);
+
+ public Builder() {}
+
+ /**
+ * Sets the duration input.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setInput(@NonNull DynamicDuration input) {
+ mImpl.setInput(input.toDynamicDurationProto());
+ mFingerprint.recordPropertyUpdate(
+ 1, checkNotNull(input.getFingerprint()).aggregateValueAsInt());
+ return this;
+ }
+
+ /**
+ * Sets the duration part to retrieve.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setDurationPart(@DurationPartType int durationPart) {
+ mImpl.setDurationPart(DynamicProto.DurationPartType.forNumber(durationPart));
+ mFingerprint.recordPropertyUpdate(2, durationPart);
+ return this;
+ }
+
+ @Override
+ @NonNull
+ public GetDurationPartOp build() {
+ return new GetDurationPartOp(mImpl.build(), mFingerprint);
+ }
+ }
+ }
+
+ /**
* Interface to be used as a base type for all other dynamic types. This is not consumed by any
* Tile elements, it exists just as a marker interface for use internally in the Tiles library.
*/
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
index 4ca0ed2..7320b75 100644
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
@@ -49,7 +49,7 @@
}
/**
- * Gets the value. Intended for testing purposes only.
+ * Gets the value.
*
* @since 1.2
*/
@@ -499,4 +499,86 @@
}
}
}
+
+ /**
+ * A fixed time instant type.
+ *
+ * @since 1.2
+ */
+ static final class FixedInstant implements DynamicBuilders.DynamicInstant {
+ private final FixedProto.FixedInstant mImpl;
+ @Nullable private final Fingerprint mFingerprint;
+
+ FixedInstant(FixedProto.FixedInstant impl, @Nullable Fingerprint fingerprint) {
+ this.mImpl = impl;
+ this.mFingerprint = fingerprint;
+ }
+
+ /**
+ * Gets the number of seconds that have elapsed since 00:00:00 UTC on 1 January 1970.
+ *
+ * @since 1.2
+ */
+ public long getEpochSeconds() {
+ return mImpl.getEpochSeconds();
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ public Fingerprint getFingerprint() {
+ return mFingerprint;
+ }
+
+ @NonNull
+ static FixedInstant fromProto(@NonNull FixedProto.FixedInstant proto) {
+ return new FixedInstant(proto, null);
+ }
+
+ @NonNull
+ FixedProto.FixedInstant toProto() {
+ return mImpl;
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public DynamicProto.DynamicInstant toDynamicInstantProto() {
+ return DynamicProto.DynamicInstant.newBuilder().setFixed(mImpl).build();
+ }
+
+ @Override
+ @NonNull
+ public String toString() {
+ return "FixedInstant{" + "epochSeconds=" + getEpochSeconds() + "}";
+ }
+
+ /** Builder for {@link FixedInstant}. */
+ public static final class Builder implements DynamicBuilders.DynamicInstant.Builder {
+ private final FixedProto.FixedInstant.Builder mImpl = FixedProto.FixedInstant.newBuilder();
+ private final Fingerprint mFingerprint = new Fingerprint(-1986552556);
+
+ public Builder() {}
+
+ /**
+ * Sets the number of seconds that have elapsed since 00:00:00 UTC on 1 January 1970.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setEpochSeconds(long epochSeconds) {
+ mImpl.setEpochSeconds(epochSeconds);
+ mFingerprint.recordPropertyUpdate(1, Long.hashCode(epochSeconds));
+ return this;
+ }
+
+ @Override
+ @NonNull
+ public FixedInstant build() {
+ return new FixedInstant(mImpl.build(), mFingerprint);
+ }
+ }
+ }
}
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicColorTest.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicColorTest.java
index b3d3eda..34e1e00 100644
--- a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicColorTest.java
+++ b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicColorTest.java
@@ -74,12 +74,13 @@
DynamicColor animatedColor = DynamicColor.animate(startColor, endColor);
DynamicColor animatedColorWithSpec = DynamicColor.animate(startColor, endColor, SPEC);
- assertThat(animatedColor.toDynamicColorProto().getAnimatableFixed().hasSpec()).isFalse();
+ assertThat(animatedColor.toDynamicColorProto().getAnimatableFixed().hasAnimationSpec())
+ .isFalse();
assertThat(animatedColorWithSpec.toDynamicColorProto().getAnimatableFixed().getFromArgb())
.isEqualTo(startColor);
assertThat(animatedColorWithSpec.toDynamicColorProto().getAnimatableFixed().getToArgb())
.isEqualTo(endColor);
- assertThat(animatedColorWithSpec.toDynamicColorProto().getAnimatableFixed().getSpec())
+ assertThat(animatedColorWithSpec.toDynamicColorProto().getAnimatableFixed().getAnimationSpec())
.isEqualTo(SPEC.toProto());
}
@@ -93,7 +94,7 @@
.toString())
.isEqualTo(
"AnimatableFixedColor{"
- + "fromArgb=1, toArgb=2, spec=AnimationSpec{"
+ + "fromArgb=1, toArgb=2, animationSpec=AnimationSpec{"
+ "durationMillis=0, delayMillis=0, easing=null, repeatable=null}}");
}
@@ -104,11 +105,13 @@
DynamicColor animatedColor = DynamicColor.animate(STATE_KEY);
DynamicColor animatedColorWithSpec = DynamicColor.animate(STATE_KEY, SPEC);
- assertThat(animatedColor.toDynamicColorProto().getAnimatableDynamic().hasSpec()).isFalse();
+ assertThat(animatedColor.toDynamicColorProto().getAnimatableDynamic().hasAnimationSpec())
+ .isFalse();
assertThat(animatedColorWithSpec.toDynamicColorProto().getAnimatableDynamic().getInput())
.isEqualTo(stateColor.toDynamicColorProto());
- assertThat(animatedColorWithSpec.toDynamicColorProto().getAnimatableDynamic().getSpec())
- .isEqualTo(SPEC.toProto());
+ assertThat(
+ animatedColorWithSpec.toDynamicColorProto().getAnimatableDynamic().getAnimationSpec()
+ ).isEqualTo(SPEC.toProto());
assertThat(animatedColor.toDynamicColorProto())
.isEqualTo(stateColor.animate().toDynamicColorProto());
}
@@ -121,7 +124,7 @@
.toString())
.isEqualTo(
"AnimatableDynamicColor{"
- + "input=StateColorSource{sourceKey=key}, spec=AnimationSpec{"
+ + "input=StateColorSource{sourceKey=key}, animationSpec=AnimationSpec{"
+ "durationMillis=0, delayMillis=1, easing=null, repeatable=null}}");
}
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicFloatTest.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicFloatTest.java
index 731406e..dc0344e 100644
--- a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicFloatTest.java
+++ b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicFloatTest.java
@@ -153,12 +153,13 @@
DynamicFloat animatedFloat = DynamicFloat.animate(startFloat, endFloat);
DynamicFloat animatedFloatWithSpec = DynamicFloat.animate(startFloat, endFloat, SPEC);
- assertThat(animatedFloat.toDynamicFloatProto().getAnimatableFixed().hasSpec()).isFalse();
+ assertThat(animatedFloat.toDynamicFloatProto().getAnimatableFixed().hasAnimationSpec())
+ .isFalse();
assertThat(animatedFloatWithSpec.toDynamicFloatProto().getAnimatableFixed().getFromValue())
.isEqualTo(startFloat);
assertThat(animatedFloatWithSpec.toDynamicFloatProto().getAnimatableFixed().getToValue())
.isEqualTo(endFloat);
- assertThat(animatedFloatWithSpec.toDynamicFloatProto().getAnimatableFixed().getSpec())
+ assertThat(animatedFloatWithSpec.toDynamicFloatProto().getAnimatableFixed().getAnimationSpec())
.isEqualTo(SPEC.toProto());
}
@@ -171,7 +172,7 @@
new AnimationSpec.Builder().setDelayMillis(0).build())
.toString())
.isEqualTo(
- "AnimatableFixedFloat{fromValue=1.0, toValue=2.0, spec=AnimationSpec{"
+ "AnimatableFixedFloat{fromValue=1.0, toValue=2.0, animationSpec=AnimationSpec{"
+ "durationMillis=0, delayMillis=0, easing=null, repeatable=null}}");
}
@@ -182,11 +183,13 @@
DynamicFloat animatedFloat = DynamicFloat.animate(STATE_KEY);
DynamicFloat animatedFloatWithSpec = DynamicFloat.animate(STATE_KEY, SPEC);
- assertThat(animatedFloat.toDynamicFloatProto().getAnimatableDynamic().hasSpec()).isFalse();
+ assertThat(animatedFloat.toDynamicFloatProto().getAnimatableDynamic().hasAnimationSpec())
+ .isFalse();
assertThat(animatedFloatWithSpec.toDynamicFloatProto().getAnimatableDynamic().getInput())
.isEqualTo(stateFloat.toDynamicFloatProto());
- assertThat(animatedFloatWithSpec.toDynamicFloatProto().getAnimatableDynamic().getSpec())
- .isEqualTo(SPEC.toProto());
+ assertThat(
+ animatedFloatWithSpec.toDynamicFloatProto().getAnimatableDynamic().getAnimationSpec()
+ ).isEqualTo(SPEC.toProto());
assertThat(animatedFloat.toDynamicFloatProto())
.isEqualTo(stateFloat.animate().toDynamicFloatProto());
}
@@ -199,7 +202,7 @@
.toString())
.isEqualTo(
"AnimatableDynamicFloat{"
- + "input=StateFloatSource{sourceKey=key}, spec=AnimationSpec{"
+ + "input=StateFloatSource{sourceKey=key}, animationSpec=AnimationSpec{"
+ "durationMillis=0, delayMillis=1, easing=null, repeatable=null}}");
}
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto b/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto
index 52dfa35..67d6ff8 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto
@@ -26,9 +26,6 @@
// "ACTIVITY_RECOGNITION" permission granted to it. If this permission is not
// present, this source type will never yield any data.
PLATFORM_INT32_SOURCE_TYPE_DAILY_STEP_COUNT = 2;
-
- // The current epoch time in seconds.
- PLATFORM_INT32_SOURCE_TYPE_EPOCH_TIME_SECONDS = 3;
}
// A dynamic Int32 which sources its data from some platform data source, e.g.
@@ -141,7 +138,7 @@
int32 to_value = 2;
// The animation parameters for duration, delay, etc.
- AnimationSpec spec = 3;
+ AnimationSpec animation_spec = 3;
}
// A dynamic interpolation node. This will watch the value of its input and,
@@ -157,7 +154,7 @@
DynamicInt32 input = 1;
// The animation parameters for duration, delay, etc.
- AnimationSpec spec = 2;
+ AnimationSpec animation_spec = 2;
}
// A dynamic int32 type.
@@ -189,6 +186,7 @@
StateInt32Source state_source = 4;
ConditionalInt32Op conditional_op = 5;
FloatToInt32Op float_to_int = 6;
+ GetDurationPartOp duration_part = 7;
AnimatableFixedInt32 animatable_fixed = 8;
AnimatableDynamicInt32 animatable_dynamic = 9;
}
@@ -319,7 +317,7 @@
float to_value = 2;
// The animation parameters for duration, delay, etc.
- AnimationSpec spec = 3;
+ AnimationSpec animation_spec = 3;
}
// A dynamic interpolation node. This will watch the value of its input and,
@@ -335,7 +333,7 @@
DynamicFloat input = 1;
// The animation parameters for duration, delay, etc.
- AnimationSpec spec = 3;
+ AnimationSpec animation_spec = 3;
}
// A dynamic float type.
@@ -490,7 +488,7 @@
uint32 to_argb = 2;
// The animation parameters for duration, delay, etc.
- AnimationSpec spec = 3;
+ AnimationSpec animation_spec = 3;
}
// A dynamic interpolation node. This will watch the value of its input and,
@@ -506,7 +504,7 @@
DynamicColor input = 1;
// The animation parameters for duration, delay, etc.
- AnimationSpec spec = 3;
+ AnimationSpec animation_spec = 3;
}
// A dynamic color type.
@@ -518,3 +516,86 @@
AnimatableDynamicColor animatable_dynamic = 4;
}
}
+
+// A dynamic time instant that sources its value from the platform.
+message PlatformTimeSource {}
+
+// A dynamic time instant type.
+message DynamicInstant {
+ oneof inner {
+ FixedInstant fixed = 1;
+ PlatformTimeSource platform_source = 2;
+ }
+}
+
+// A dynamic duration type that represents the duration between two dynamic time
+// instants.
+message BetweenDuration {
+ // The time instant value marking the start of the duration.
+ DynamicInstant start_inclusive = 1;
+
+ // The time instant value marking the end of the duration.
+ DynamicInstant end_exclusive = 2;
+}
+
+// A dynamic duration type.
+message DynamicDuration {
+ oneof inner {
+ BetweenDuration between = 1;
+ }
+}
+
+// The duration part to retrieve using GetDurationPartOp.
+enum DurationPartType {
+ // Undefined duration part type.
+ DURATION_PART_TYPE_UNDEFINED = 0;
+
+ // Total number of days in a duration. The fraction part of the result will be
+ // truncated. This is based on the standard definition of a day as 24 hours.
+ // Notice that the duration can be negative, in which case total number of
+ // days will be also negative.
+ DURATION_PART_TYPE_TOTAL_DAYS = 1;
+
+ // Total number of hours in a duration. The fraction part of the result will
+ // be truncated. Notice that the duration can be negative, in which case total
+ // number of hours will be also negative.
+ DURATION_PART_TYPE_TOTAL_HOURS = 2;
+
+ // Total number of minutes in a duration. The fraction part of the result will
+ // be truncated. Notice that the duration can be negative, in which case total
+ // number of minutes will be also negative.
+ DURATION_PART_TYPE_TOTAL_MINUTES = 3;
+
+ // Total number of seconds in a duration. Notice that the duration can be
+ // negative, in which case total number of seconds will be also negative.
+ DURATION_PART_TYPE_TOTAL_SECONDS = 4;
+
+ // Number of days part in the duration. This represents the absolute value of
+ // the total number of days in the duration based on the 24 hours day
+ // definition. The fraction part of the result will be truncated.
+ DURATION_PART_TYPE_DAYS = 5;
+
+ // Number of hours part in the duration. This represents the absolute value of
+ // remaining hours when dividing total hours by hours in a day (24 hours).
+ DURATION_PART_TYPE_HOURS = 6;
+
+ // Number of minutes part in the duration. This represents the absolute value
+ // of remaining minutes when dividing total minutes by minutes in an hour (60
+ // minutes).
+ DURATION_PART_TYPE_MINUTES = 7;
+
+ // Number of seconds part in the duration. This represents the absolute value
+ // of remaining seconds when dividing total seconds by seconds in a minute (60
+ // seconds).
+ DURATION_PART_TYPE_SECONDS = 8;
+}
+
+// Retrieve the specified duration part of a DynamicDuration instance as a
+// DynamicInt32.
+message GetDurationPartOp {
+ // The duration input.
+ DynamicDuration input = 1;
+
+ // The duration part to retrieve.
+ DurationPartType duration_part = 2;
+}
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/fixed.proto b/wear/protolayout/protolayout-proto/src/main/proto/fixed.proto
index f09c002..bc87d47 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/fixed.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/fixed.proto
@@ -36,3 +36,10 @@
// The color value, in ARGB format.
uint32 argb = 1;
}
+
+// A fixed time instant type.
+message FixedInstant {
+ // The number of seconds that have elapsed since 00:00:00 UTC on 1 January
+ // 1970.
+ int64 epoch_seconds = 1;
+}
diff --git a/wear/protolayout/protolayout/api/current.txt b/wear/protolayout/protolayout/api/current.txt
index 2d0294f..497290d 100644
--- a/wear/protolayout/protolayout/api/current.txt
+++ b/wear/protolayout/protolayout/api/current.txt
@@ -5,6 +5,8 @@
method public static androidx.wear.protolayout.ActionBuilders.AndroidBooleanExtra booleanExtra(boolean);
method public static androidx.wear.protolayout.ActionBuilders.AndroidDoubleExtra doubleExtra(double);
method public static androidx.wear.protolayout.ActionBuilders.AndroidIntExtra intExtra(int);
+ method public static androidx.wear.protolayout.ActionBuilders.LaunchAction launchAction(android.content.ComponentName);
+ method public static androidx.wear.protolayout.ActionBuilders.LaunchAction launchAction(android.content.ComponentName, java.util.Map<java.lang.String!,androidx.wear.protolayout.ActionBuilders.AndroidExtra!>);
method public static androidx.wear.protolayout.ActionBuilders.AndroidLongExtra longExtra(long);
method public static androidx.wear.protolayout.ActionBuilders.AndroidStringExtra stringExtra(String);
}
@@ -150,6 +152,8 @@
public static final class DeviceParametersBuilders.DeviceParameters {
method public int getDevicePlatform();
+ method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getFontScale();
+ method public androidx.wear.protolayout.expression.VersionBuilders.VersionInfo getRendererSchemaVersion();
method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getScreenDensity();
method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenHeightDp();
method public int getScreenShape();
@@ -160,6 +164,8 @@
ctor public DeviceParametersBuilders.DeviceParameters.Builder();
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters build();
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setDevicePlatform(int);
+ method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setFontScale(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
+ method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setRendererSchemaVersion(androidx.wear.protolayout.expression.VersionBuilders.VersionInfo);
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenDensity(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenHeightDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenShape(int);
@@ -171,9 +177,7 @@
method public static androidx.wear.protolayout.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(int);
method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(float);
- method public static androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp expand();
method public static androidx.wear.protolayout.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
- method public static androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp wrap();
}
public static interface DimensionBuilders.ContainerDimension {
@@ -213,14 +217,6 @@
method public androidx.wear.protolayout.DimensionBuilders.EmProp.Builder setValue(float);
}
- public static final class DimensionBuilders.ExpandedDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension androidx.wear.protolayout.DimensionBuilders.ImageDimension {
- }
-
- public static final class DimensionBuilders.ExpandedDimensionProp.Builder implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension.Builder androidx.wear.protolayout.DimensionBuilders.ImageDimension.Builder {
- ctor public DimensionBuilders.ExpandedDimensionProp.Builder();
- method public androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp build();
- }
-
public static interface DimensionBuilders.ImageDimension {
}
@@ -257,14 +253,6 @@
method public androidx.wear.protolayout.DimensionBuilders.SpacerDimension build();
}
- public static final class DimensionBuilders.WrappedDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension {
- }
-
- public static final class DimensionBuilders.WrappedDimensionProp.Builder implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension.Builder {
- ctor public DimensionBuilders.WrappedDimensionProp.Builder();
- method public androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp build();
- }
-
public final class LayoutElementBuilders {
field public static final int ARC_ANCHOR_CENTER = 2; // 0x2
field public static final int ARC_ANCHOR_END = 3; // 0x3
@@ -851,10 +839,26 @@
}
public final class ResourceBuilders {
+ field public static final int ANIMATED_IMAGE_FORMAT_AVD = 1; // 0x1
+ field public static final int ANIMATED_IMAGE_FORMAT_UNDEFINED = 0; // 0x0
field public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
field public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
}
+ public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId {
+ method public int getAnimatedImageFormat();
+ method @DrawableRes public int getResourceId();
+ method public androidx.wear.protolayout.TriggerBuilders.Trigger? getStartTrigger();
+ }
+
+ public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder {
+ ctor public ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId build();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setAnimatedImageFormat(int);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setResourceId(@DrawableRes int);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setStartTrigger(androidx.wear.protolayout.TriggerBuilders.Trigger);
+ }
+
public static final class ResourceBuilders.AndroidImageResourceByResId {
method @DrawableRes public int getResourceId();
}
@@ -865,15 +869,33 @@
method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId.Builder setResourceId(@DrawableRes int);
}
+ public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId {
+ method public int getAnimatedImageFormat();
+ method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getProgress();
+ method @DrawableRes public int getResourceId();
+ }
+
+ public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder {
+ ctor public ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId build();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setAnimatedImageFormat(int);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setProgress(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setResourceId(@DrawableRes int);
+ }
+
public static final class ResourceBuilders.ImageResource {
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId? getAndroidAnimatedResourceByResId();
method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId? getAndroidResourceByResId();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId? getAndroidSeekableAnimatedResourceByResId();
method public androidx.wear.protolayout.ResourceBuilders.InlineImageResource? getInlineResource();
}
public static final class ResourceBuilders.ImageResource.Builder {
ctor public ResourceBuilders.ImageResource.Builder();
method public androidx.wear.protolayout.ResourceBuilders.ImageResource build();
+ method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidAnimatedResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId);
method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId);
+ method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidSeekableAnimatedResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId);
method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setInlineResource(androidx.wear.protolayout.ResourceBuilders.InlineImageResource);
}
@@ -958,6 +980,32 @@
method public androidx.wear.protolayout.TimelineBuilders.TimelineEntry.Builder setValidity(androidx.wear.protolayout.TimelineBuilders.TimeInterval);
}
+ public final class TriggerBuilders {
+ method public static androidx.wear.protolayout.TriggerBuilders.OnConditionMetTrigger createOnConditionMetTrigger(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ method public static androidx.wear.protolayout.TriggerBuilders.OnLoadTrigger createOnLoadTrigger();
+ }
+
+ public static final class TriggerBuilders.OnConditionMetTrigger implements androidx.wear.protolayout.TriggerBuilders.Trigger {
+ method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool? getTrigger();
+ }
+
+ public static final class TriggerBuilders.OnConditionMetTrigger.Builder {
+ ctor public TriggerBuilders.OnConditionMetTrigger.Builder();
+ method public androidx.wear.protolayout.TriggerBuilders.OnConditionMetTrigger build();
+ method public androidx.wear.protolayout.TriggerBuilders.OnConditionMetTrigger.Builder setTrigger(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ }
+
+ public static final class TriggerBuilders.OnLoadTrigger implements androidx.wear.protolayout.TriggerBuilders.Trigger {
+ }
+
+ public static final class TriggerBuilders.OnLoadTrigger.Builder {
+ ctor public TriggerBuilders.OnLoadTrigger.Builder();
+ method public androidx.wear.protolayout.TriggerBuilders.OnLoadTrigger build();
+ }
+
+ public static interface TriggerBuilders.Trigger {
+ }
+
public final class TypeBuilders {
}
diff --git a/wear/protolayout/protolayout/api/public_plus_experimental_current.txt b/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
index 38735dc..0d15cce 100644
--- a/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
@@ -5,6 +5,8 @@
method public static androidx.wear.protolayout.ActionBuilders.AndroidBooleanExtra booleanExtra(boolean);
method public static androidx.wear.protolayout.ActionBuilders.AndroidDoubleExtra doubleExtra(double);
method public static androidx.wear.protolayout.ActionBuilders.AndroidIntExtra intExtra(int);
+ method public static androidx.wear.protolayout.ActionBuilders.LaunchAction launchAction(android.content.ComponentName);
+ method public static androidx.wear.protolayout.ActionBuilders.LaunchAction launchAction(android.content.ComponentName, java.util.Map<java.lang.String!,androidx.wear.protolayout.ActionBuilders.AndroidExtra!>);
method public static androidx.wear.protolayout.ActionBuilders.AndroidLongExtra longExtra(long);
method public static androidx.wear.protolayout.ActionBuilders.AndroidStringExtra stringExtra(String);
}
@@ -148,8 +150,21 @@
field public static final int SCREEN_SHAPE_UNDEFINED = 0; // 0x0
}
+ @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static final class DeviceParametersBuilders.Capabilities {
+ method @androidx.wear.protolayout.expression.ProtoLayoutExperimental public long getMinimumFreshnessLimitMillis();
+ }
+
+ public static final class DeviceParametersBuilders.Capabilities.Builder {
+ ctor public DeviceParametersBuilders.Capabilities.Builder();
+ method public androidx.wear.protolayout.DeviceParametersBuilders.Capabilities build();
+ method @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.DeviceParametersBuilders.Capabilities.Builder setMinimumFreshnessLimitMillis(long);
+ }
+
public static final class DeviceParametersBuilders.DeviceParameters {
+ method @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.DeviceParametersBuilders.Capabilities? getCapabilities();
method public int getDevicePlatform();
+ method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getFontScale();
+ method public androidx.wear.protolayout.expression.VersionBuilders.VersionInfo getRendererSchemaVersion();
method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getScreenDensity();
method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenHeightDp();
method public int getScreenShape();
@@ -159,7 +174,10 @@
public static final class DeviceParametersBuilders.DeviceParameters.Builder {
ctor public DeviceParametersBuilders.DeviceParameters.Builder();
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters build();
+ method @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setCapabilities(androidx.wear.protolayout.DeviceParametersBuilders.Capabilities);
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setDevicePlatform(int);
+ method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setFontScale(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
+ method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setRendererSchemaVersion(androidx.wear.protolayout.expression.VersionBuilders.VersionInfo);
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenDensity(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenHeightDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenShape(int);
@@ -171,9 +189,7 @@
method public static androidx.wear.protolayout.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(int);
method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(float);
- method public static androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp expand();
method public static androidx.wear.protolayout.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
- method public static androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp wrap();
}
public static interface DimensionBuilders.ContainerDimension {
@@ -213,14 +229,6 @@
method public androidx.wear.protolayout.DimensionBuilders.EmProp.Builder setValue(float);
}
- public static final class DimensionBuilders.ExpandedDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension androidx.wear.protolayout.DimensionBuilders.ImageDimension {
- }
-
- public static final class DimensionBuilders.ExpandedDimensionProp.Builder implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension.Builder androidx.wear.protolayout.DimensionBuilders.ImageDimension.Builder {
- ctor public DimensionBuilders.ExpandedDimensionProp.Builder();
- method public androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp build();
- }
-
public static interface DimensionBuilders.ImageDimension {
}
@@ -257,14 +265,6 @@
method public androidx.wear.protolayout.DimensionBuilders.SpacerDimension build();
}
- public static final class DimensionBuilders.WrappedDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension {
- }
-
- public static final class DimensionBuilders.WrappedDimensionProp.Builder implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension.Builder {
- ctor public DimensionBuilders.WrappedDimensionProp.Builder();
- method public androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp build();
- }
-
public final class LayoutElementBuilders {
field public static final int ARC_ANCHOR_CENTER = 2; // 0x2
field public static final int ARC_ANCHOR_END = 3; // 0x3
@@ -867,10 +867,26 @@
}
public final class ResourceBuilders {
+ field public static final int ANIMATED_IMAGE_FORMAT_AVD = 1; // 0x1
+ field public static final int ANIMATED_IMAGE_FORMAT_UNDEFINED = 0; // 0x0
field public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
field public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
}
+ public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId {
+ method public int getAnimatedImageFormat();
+ method @DrawableRes public int getResourceId();
+ method public androidx.wear.protolayout.TriggerBuilders.Trigger? getStartTrigger();
+ }
+
+ public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder {
+ ctor public ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId build();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setAnimatedImageFormat(int);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setResourceId(@DrawableRes int);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setStartTrigger(androidx.wear.protolayout.TriggerBuilders.Trigger);
+ }
+
public static final class ResourceBuilders.AndroidImageResourceByResId {
method @DrawableRes public int getResourceId();
}
@@ -881,15 +897,33 @@
method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId.Builder setResourceId(@DrawableRes int);
}
+ public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId {
+ method public int getAnimatedImageFormat();
+ method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getProgress();
+ method @DrawableRes public int getResourceId();
+ }
+
+ public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder {
+ ctor public ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId build();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setAnimatedImageFormat(int);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setProgress(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setResourceId(@DrawableRes int);
+ }
+
public static final class ResourceBuilders.ImageResource {
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId? getAndroidAnimatedResourceByResId();
method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId? getAndroidResourceByResId();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId? getAndroidSeekableAnimatedResourceByResId();
method public androidx.wear.protolayout.ResourceBuilders.InlineImageResource? getInlineResource();
}
public static final class ResourceBuilders.ImageResource.Builder {
ctor public ResourceBuilders.ImageResource.Builder();
method public androidx.wear.protolayout.ResourceBuilders.ImageResource build();
+ method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidAnimatedResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId);
method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId);
+ method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidSeekableAnimatedResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId);
method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setInlineResource(androidx.wear.protolayout.ResourceBuilders.InlineImageResource);
}
@@ -910,10 +944,8 @@
}
public static final class ResourceBuilders.Resources {
- method @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static androidx.wear.protolayout.ResourceBuilders.Resources? fromByteArray(byte[]);
method public java.util.Map<java.lang.String!,androidx.wear.protolayout.ResourceBuilders.ImageResource!> getIdToImageMapping();
method public String getVersion();
- method @androidx.wear.protolayout.expression.ProtoLayoutExperimental public byte[] toByteArray();
}
public static final class ResourceBuilders.Resources.Builder {
@@ -976,6 +1008,32 @@
method public androidx.wear.protolayout.TimelineBuilders.TimelineEntry.Builder setValidity(androidx.wear.protolayout.TimelineBuilders.TimeInterval);
}
+ public final class TriggerBuilders {
+ method public static androidx.wear.protolayout.TriggerBuilders.OnConditionMetTrigger createOnConditionMetTrigger(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ method public static androidx.wear.protolayout.TriggerBuilders.OnLoadTrigger createOnLoadTrigger();
+ }
+
+ public static final class TriggerBuilders.OnConditionMetTrigger implements androidx.wear.protolayout.TriggerBuilders.Trigger {
+ method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool? getTrigger();
+ }
+
+ public static final class TriggerBuilders.OnConditionMetTrigger.Builder {
+ ctor public TriggerBuilders.OnConditionMetTrigger.Builder();
+ method public androidx.wear.protolayout.TriggerBuilders.OnConditionMetTrigger build();
+ method public androidx.wear.protolayout.TriggerBuilders.OnConditionMetTrigger.Builder setTrigger(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ }
+
+ public static final class TriggerBuilders.OnLoadTrigger implements androidx.wear.protolayout.TriggerBuilders.Trigger {
+ }
+
+ public static final class TriggerBuilders.OnLoadTrigger.Builder {
+ ctor public TriggerBuilders.OnLoadTrigger.Builder();
+ method public androidx.wear.protolayout.TriggerBuilders.OnLoadTrigger build();
+ }
+
+ public static interface TriggerBuilders.Trigger {
+ }
+
public final class TypeBuilders {
}
diff --git a/wear/protolayout/protolayout/api/restricted_current.txt b/wear/protolayout/protolayout/api/restricted_current.txt
index 2d0294f..497290d 100644
--- a/wear/protolayout/protolayout/api/restricted_current.txt
+++ b/wear/protolayout/protolayout/api/restricted_current.txt
@@ -5,6 +5,8 @@
method public static androidx.wear.protolayout.ActionBuilders.AndroidBooleanExtra booleanExtra(boolean);
method public static androidx.wear.protolayout.ActionBuilders.AndroidDoubleExtra doubleExtra(double);
method public static androidx.wear.protolayout.ActionBuilders.AndroidIntExtra intExtra(int);
+ method public static androidx.wear.protolayout.ActionBuilders.LaunchAction launchAction(android.content.ComponentName);
+ method public static androidx.wear.protolayout.ActionBuilders.LaunchAction launchAction(android.content.ComponentName, java.util.Map<java.lang.String!,androidx.wear.protolayout.ActionBuilders.AndroidExtra!>);
method public static androidx.wear.protolayout.ActionBuilders.AndroidLongExtra longExtra(long);
method public static androidx.wear.protolayout.ActionBuilders.AndroidStringExtra stringExtra(String);
}
@@ -150,6 +152,8 @@
public static final class DeviceParametersBuilders.DeviceParameters {
method public int getDevicePlatform();
+ method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getFontScale();
+ method public androidx.wear.protolayout.expression.VersionBuilders.VersionInfo getRendererSchemaVersion();
method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getScreenDensity();
method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenHeightDp();
method public int getScreenShape();
@@ -160,6 +164,8 @@
ctor public DeviceParametersBuilders.DeviceParameters.Builder();
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters build();
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setDevicePlatform(int);
+ method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setFontScale(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
+ method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setRendererSchemaVersion(androidx.wear.protolayout.expression.VersionBuilders.VersionInfo);
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenDensity(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenHeightDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenShape(int);
@@ -171,9 +177,7 @@
method public static androidx.wear.protolayout.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(int);
method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(float);
- method public static androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp expand();
method public static androidx.wear.protolayout.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
- method public static androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp wrap();
}
public static interface DimensionBuilders.ContainerDimension {
@@ -213,14 +217,6 @@
method public androidx.wear.protolayout.DimensionBuilders.EmProp.Builder setValue(float);
}
- public static final class DimensionBuilders.ExpandedDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension androidx.wear.protolayout.DimensionBuilders.ImageDimension {
- }
-
- public static final class DimensionBuilders.ExpandedDimensionProp.Builder implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension.Builder androidx.wear.protolayout.DimensionBuilders.ImageDimension.Builder {
- ctor public DimensionBuilders.ExpandedDimensionProp.Builder();
- method public androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp build();
- }
-
public static interface DimensionBuilders.ImageDimension {
}
@@ -257,14 +253,6 @@
method public androidx.wear.protolayout.DimensionBuilders.SpacerDimension build();
}
- public static final class DimensionBuilders.WrappedDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension {
- }
-
- public static final class DimensionBuilders.WrappedDimensionProp.Builder implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension.Builder {
- ctor public DimensionBuilders.WrappedDimensionProp.Builder();
- method public androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp build();
- }
-
public final class LayoutElementBuilders {
field public static final int ARC_ANCHOR_CENTER = 2; // 0x2
field public static final int ARC_ANCHOR_END = 3; // 0x3
@@ -851,10 +839,26 @@
}
public final class ResourceBuilders {
+ field public static final int ANIMATED_IMAGE_FORMAT_AVD = 1; // 0x1
+ field public static final int ANIMATED_IMAGE_FORMAT_UNDEFINED = 0; // 0x0
field public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
field public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
}
+ public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId {
+ method public int getAnimatedImageFormat();
+ method @DrawableRes public int getResourceId();
+ method public androidx.wear.protolayout.TriggerBuilders.Trigger? getStartTrigger();
+ }
+
+ public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder {
+ ctor public ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId build();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setAnimatedImageFormat(int);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setResourceId(@DrawableRes int);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setStartTrigger(androidx.wear.protolayout.TriggerBuilders.Trigger);
+ }
+
public static final class ResourceBuilders.AndroidImageResourceByResId {
method @DrawableRes public int getResourceId();
}
@@ -865,15 +869,33 @@
method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId.Builder setResourceId(@DrawableRes int);
}
+ public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId {
+ method public int getAnimatedImageFormat();
+ method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getProgress();
+ method @DrawableRes public int getResourceId();
+ }
+
+ public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder {
+ ctor public ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId build();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setAnimatedImageFormat(int);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setProgress(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setResourceId(@DrawableRes int);
+ }
+
public static final class ResourceBuilders.ImageResource {
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId? getAndroidAnimatedResourceByResId();
method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId? getAndroidResourceByResId();
+ method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId? getAndroidSeekableAnimatedResourceByResId();
method public androidx.wear.protolayout.ResourceBuilders.InlineImageResource? getInlineResource();
}
public static final class ResourceBuilders.ImageResource.Builder {
ctor public ResourceBuilders.ImageResource.Builder();
method public androidx.wear.protolayout.ResourceBuilders.ImageResource build();
+ method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidAnimatedResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId);
method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId);
+ method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidSeekableAnimatedResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId);
method public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setInlineResource(androidx.wear.protolayout.ResourceBuilders.InlineImageResource);
}
@@ -958,6 +980,32 @@
method public androidx.wear.protolayout.TimelineBuilders.TimelineEntry.Builder setValidity(androidx.wear.protolayout.TimelineBuilders.TimeInterval);
}
+ public final class TriggerBuilders {
+ method public static androidx.wear.protolayout.TriggerBuilders.OnConditionMetTrigger createOnConditionMetTrigger(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ method public static androidx.wear.protolayout.TriggerBuilders.OnLoadTrigger createOnLoadTrigger();
+ }
+
+ public static final class TriggerBuilders.OnConditionMetTrigger implements androidx.wear.protolayout.TriggerBuilders.Trigger {
+ method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool? getTrigger();
+ }
+
+ public static final class TriggerBuilders.OnConditionMetTrigger.Builder {
+ ctor public TriggerBuilders.OnConditionMetTrigger.Builder();
+ method public androidx.wear.protolayout.TriggerBuilders.OnConditionMetTrigger build();
+ method public androidx.wear.protolayout.TriggerBuilders.OnConditionMetTrigger.Builder setTrigger(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ }
+
+ public static final class TriggerBuilders.OnLoadTrigger implements androidx.wear.protolayout.TriggerBuilders.Trigger {
+ }
+
+ public static final class TriggerBuilders.OnLoadTrigger.Builder {
+ ctor public TriggerBuilders.OnLoadTrigger.Builder();
+ method public androidx.wear.protolayout.TriggerBuilders.OnLoadTrigger build();
+ }
+
+ public static interface TriggerBuilders.Trigger {
+ }
+
public final class TypeBuilders {
}
diff --git a/wear/protolayout/protolayout/build.gradle b/wear/protolayout/protolayout/build.gradle
index e622d23..0cc935b 100644
--- a/wear/protolayout/protolayout/build.gradle
+++ b/wear/protolayout/protolayout/build.gradle
@@ -41,7 +41,7 @@
namespace "androidx.wear.protolayout"
defaultConfig {
- minSdkVersion 25
+ minSdkVersion 26
}
buildTypes.all {
consumerProguardFiles "proguard-rules.pro"
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java
index 403e493..18e805d 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java
@@ -19,6 +19,8 @@
import static androidx.wear.protolayout.expression.Preconditions.checkNotNull;
import android.annotation.SuppressLint;
+
+import android.content.ComponentName;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
@@ -67,6 +69,36 @@
return new AndroidBooleanExtra.Builder().setValue(value).build();
}
+ /** Shortcut for building a {@link LaunchAction}. */
+ @NonNull
+ public static LaunchAction launchAction(@NonNull ComponentName activityComponentName) {
+ return new LaunchAction.Builder()
+ .setAndroidActivity(
+ new AndroidActivity.Builder()
+ .setClassName(activityComponentName.getClassName())
+ .setPackageName(activityComponentName.getPackageName())
+ .build())
+ .build();
+ }
+
+ /** Shortcut for building a {@link LaunchAction} with extras in the launch intent. */
+ @NonNull
+ public static LaunchAction launchAction(
+ @NonNull ComponentName activityComponentName,
+ @NonNull Map<String, AndroidExtra> intentExtras) {
+ AndroidActivity.Builder builder = new AndroidActivity.Builder();
+ for (Map.Entry<String, AndroidExtra> intentExtra : intentExtras.entrySet()) {
+ builder.addKeyToExtraMapping(intentExtra.getKey(), intentExtra.getValue());
+ }
+ return new LaunchAction.Builder()
+ .setAndroidActivity(
+ builder
+ .setClassName(activityComponentName.getClassName())
+ .setPackageName(activityComponentName.getPackageName())
+ .build())
+ .build();
+ }
+
/**
* A string value that can be added to an Android intent's extras.
*
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java
index b46c5a4..0843f24 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2021-2022 The Android Open Source Project
+ * 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.
@@ -22,18 +22,23 @@
import androidx.annotation.FloatRange;
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.expression.ProtoLayoutExperimental;
+import androidx.wear.protolayout.expression.VersionBuilders.VersionInfo;
import androidx.wear.protolayout.proto.DeviceParametersProto;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-/** Builders for request messages used to fetch tiles and resources. */
+/** Builders for request messages used to fetch layouts and resources. */
public final class DeviceParametersBuilders {
private DeviceParametersBuilders() {}
/**
- * The platform of the device requesting a tile.
+ * The platform of the device requesting a layout.
*
+ * @since 1.0
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@@ -41,15 +46,24 @@
@Retention(RetentionPolicy.SOURCE)
public @interface DevicePlatform {}
- /** Device platform is undefined. */
+ /**
+ * Device platform is undefined.
+ *
+ * @since 1.0
+ */
public static final int DEVICE_PLATFORM_UNDEFINED = 0;
- /** Device is a Wear OS device. */
+ /**
+ * Device is a Wear OS device.
+ *
+ * @since 1.0
+ */
public static final int DEVICE_PLATFORM_WEAR_OS = 1;
/**
* The shape of a screen.
*
+ * @since 1.0
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@@ -57,33 +71,55 @@
@Retention(RetentionPolicy.SOURCE)
public @interface ScreenShape {}
- /** Screen shape is undefined. */
+ /**
+ * Screen shape is undefined.
+ *
+ * @since 1.0
+ */
public static final int SCREEN_SHAPE_UNDEFINED = 0;
- /** A round screen (typically found on most Wear devices). */
+ /**
+ * A round screen (typically found on most Wear devices).
+ *
+ * @since 1.0
+ */
public static final int SCREEN_SHAPE_ROUND = 1;
- /** Rectangular screens. */
+ /**
+ * Rectangular screens.
+ *
+ * @since 1.0
+ */
public static final int SCREEN_SHAPE_RECT = 2;
/**
- * Parameters describing the device requesting a tile update. This contains physical and logical
+ * Parameters describing the device requesting a layout update. This contains physical and logical
* characteristics about the device (e.g. screen size and density, etc).
+ *
+ * @since 1.0
*/
public static final class DeviceParameters {
private final DeviceParametersProto.DeviceParameters mImpl;
- private DeviceParameters(DeviceParametersProto.DeviceParameters impl) {
+ DeviceParameters(DeviceParametersProto.DeviceParameters impl) {
this.mImpl = impl;
}
- /** Gets width of the device's screen in DP. */
+ /**
+ * Gets width of the device's screen in DP.
+ *
+ * @since 1.0
+ */
@Dimension(unit = DP)
public int getScreenWidthDp() {
return mImpl.getScreenWidthDp();
}
- /** Gets height of the device's screen in DP. */
+ /**
+ * Gets height of the device's screen in DP.
+ *
+ * @since 1.0
+ */
@Dimension(unit = DP)
public int getScreenHeightDp() {
return mImpl.getScreenHeightDp();
@@ -92,31 +128,97 @@
/**
* Gets density of the display. This value is the scaling factor to get from DP to Pixels (px =
* dp * density).
+ *
+ * @since 1.0
*/
@FloatRange(from = 0.0, fromInclusive = false, toInclusive = false)
public float getScreenDensity() {
return mImpl.getScreenDensity();
}
- /** Gets the platform of the device. */
+ /**
+ * Gets current user preference for the scaling factor for fonts displayed on the display. This
+ * value is used to get from SP to DP (dp = sp * font_scale).
+ *
+ * @since 1.2
+ */
+ @FloatRange(from = 0.0, fromInclusive = false, toInclusive = false)
+ public float getFontScale() {
+ return mImpl.getFontScale();
+ }
+
+ /**
+ * Gets the platform of the device.
+ *
+ * @since 1.0
+ */
@DevicePlatform
public int getDevicePlatform() {
return mImpl.getDevicePlatform().getNumber();
}
- /** Gets the shape of the device's screen. */
+ /**
+ * Gets the shape of the device's screen.
+ *
+ * @since 1.0
+ */
@ScreenShape
public int getScreenShape() {
return mImpl.getScreenShape().getNumber();
}
+ /**
+ * Gets the maximum schema version supported by the current renderer. When building a layout
+ * that uses features not available on schema version 1.0 , the result of this method can be
+ * used to conditionally choose which feature to use.
+ *
+ * @since 1.2
+ */
@NonNull
- static DeviceParameters fromProto(@NonNull DeviceParametersProto.DeviceParameters proto) {
+ public VersionInfo getRendererSchemaVersion() {
+ if (mImpl.hasRendererSchemaVersion()) {
+ return VersionInfo.fromProto(mImpl.getRendererSchemaVersion());
+ } else {
+ return new VersionInfo.Builder().setMajor(1).setMinor(0).build();
+ }
+ }
+
+ /**
+ * Gets renderer supported {@link Capabilities}.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental
+ @Nullable
+ public Capabilities getCapabilities() {
+ if (mImpl.hasCapabilities()) {
+ return Capabilities.fromProto(mImpl.getCapabilities());
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Creates a new wrapper instance from the proto. Intended for testing purposes only. An object
+ * created using this method can't be added to any other wrapper.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public static DeviceParameters fromProto(
+ @NonNull DeviceParametersProto.DeviceParameters proto) {
return new DeviceParameters(proto);
}
+ /**
+ * Returns the internal proto instance.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
- DeviceParametersProto.DeviceParameters toProto() {
+ public DeviceParametersProto.DeviceParameters toProto() {
return mImpl;
}
@@ -127,14 +229,22 @@
public Builder() {}
- /** Sets width of the device's screen in DP. */
+ /**
+ * Sets width of the device's screen in DP.
+ *
+ * @since 1.0
+ */
@NonNull
public Builder setScreenWidthDp(@Dimension(unit = DP) int screenWidthDp) {
mImpl.setScreenWidthDp(screenWidthDp);
return this;
}
- /** Sets height of the device's screen in DP. */
+ /**
+ * Sets height of the device's screen in DP.
+ *
+ * @since 1.0
+ */
@NonNull
public Builder setScreenHeightDp(@Dimension(unit = DP) int screenHeightDp) {
mImpl.setScreenHeightDp(screenHeightDp);
@@ -144,6 +254,8 @@
/**
* Sets density of the display. This value is the scaling factor to get from DP to Pixels (px
* = dp * density).
+ *
+ * @since 1.0
*/
@NonNull
public Builder setScreenDensity(
@@ -152,20 +264,65 @@
return this;
}
- /** Sets the platform of the device. */
+ /**
+ * Sets current user preference for the scaling factor for fonts displayed on the display.
+ * This value is used to get from SP to DP (dp = sp * font_scale).
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setFontScale(
+ @FloatRange(from = 0.0, fromInclusive = false, toInclusive = false) float fontScale) {
+ mImpl.setFontScale(fontScale);
+ return this;
+ }
+
+ /**
+ * Sets the platform of the device.
+ *
+ * @since 1.0
+ */
@NonNull
public Builder setDevicePlatform(@DevicePlatform int devicePlatform) {
mImpl.setDevicePlatform(DeviceParametersProto.DevicePlatform.forNumber(devicePlatform));
return this;
}
- /** Sets the shape of the device's screen. */
+ /**
+ * Sets the shape of the device's screen.
+ *
+ * @since 1.0
+ */
@NonNull
public Builder setScreenShape(@ScreenShape int screenShape) {
mImpl.setScreenShape(DeviceParametersProto.ScreenShape.forNumber(screenShape));
return this;
}
+ /**
+ * Sets the maximum schema version supported by the current renderer. If not set defaults
+ * to schema version 1.0
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setRendererSchemaVersion(@NonNull VersionInfo rendererSchemaVersion) {
+ mImpl.setRendererSchemaVersion(rendererSchemaVersion.toProto());
+ return this;
+ }
+
+ /**
+ * Sets renderer supported {@link Capabilities}.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental
+ @NonNull
+ public Builder setCapabilities(@NonNull Capabilities capabilities) {
+ mImpl.setCapabilities(capabilities.toProto());
+ return this;
+ }
+
/** Builds an instance from accumulated values. */
@NonNull
public DeviceParameters build() {
@@ -173,4 +330,71 @@
}
}
}
+
+ /**
+ * {@link Capabilities} describing the features that the renderer supports. These features can
+ * are not necessarily tied to a specific schema version. Layout providers can use these
+ * information to conditionally generate different layouts based on the presence/value of a
+ * feature.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental
+ public static final class Capabilities {
+ private final DeviceParametersProto.Capabilities mImpl;
+
+ Capabilities(DeviceParametersProto.Capabilities impl) {
+ this.mImpl = impl;
+ }
+
+ /**
+ * Gets current minimum freshness limit in milliseconds for a layout. This can change based on
+ * various factors. Any freshness request lower than the current limit will be replaced by
+ * that limit. A value of 0 here signifies that the minimum freshness limit in unknown.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental
+ public long getMinimumFreshnessLimitMillis() {
+ return mImpl.getMinimumFreshnessLimitMillis();
+ }
+
+ @NonNull
+ static Capabilities fromProto(@NonNull DeviceParametersProto.Capabilities proto) {
+ return new Capabilities(proto);
+ }
+
+ @NonNull
+ DeviceParametersProto.Capabilities toProto() {
+ return mImpl;
+ }
+
+ /** Builder for {@link Capabilities} */
+ public static final class Builder {
+ private final DeviceParametersProto.Capabilities.Builder mImpl =
+ DeviceParametersProto.Capabilities.newBuilder();
+
+ public Builder() {}
+
+ /**
+ * Sets current minimum freshness limit in milliseconds for a layout. This can change based
+ * on various factors. Any freshness request lower than the current limit will be replaced
+ * by that limit. A value of 0 here signifies that the minimum freshness limit in unknown.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ @ProtoLayoutExperimental
+ public Builder setMinimumFreshnessLimitMillis(long minimumFreshnessLimitMillis) {
+ mImpl.setMinimumFreshnessLimitMillis(minimumFreshnessLimitMillis);
+ return this;
+ }
+
+ /** Builds an instance from accumulated values. */
+ @NonNull
+ public Capabilities build() {
+ return Capabilities.fromProto(mImpl.build());
+ }
+ }
+ }
}
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DimensionBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DimensionBuilders.java
index e900f65..0a6f3b0 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DimensionBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/DimensionBuilders.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2021-2022 The Android Open Source Project
+ * 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.
@@ -20,8 +20,6 @@
import static androidx.annotation.Dimension.SP;
import android.annotation.SuppressLint;
-import android.content.Context;
-import android.util.DisplayMetrics;
import androidx.annotation.Dimension;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
@@ -30,14 +28,12 @@
import androidx.annotation.RestrictTo.Scope;
import androidx.wear.protolayout.expression.Fingerprint;
import androidx.wear.protolayout.proto.DimensionProto;
+import androidx.wear.protolayout.proto.TypesProto;
/** Builders for dimensions for layout elements. */
public final class DimensionBuilders {
private DimensionBuilders() {}
- private static final ExpandedDimensionProp EXPAND = new ExpandedDimensionProp.Builder().build();
- private static final WrappedDimensionProp WRAP = new WrappedDimensionProp.Builder().build();
-
/** Shortcut for building a {@link DpProp} using a measurement in DP. */
@NonNull
public static DpProp dp(@Dimension(unit = DP) float valueDp) {
@@ -68,25 +64,10 @@
return new DegreesProp.Builder().setValue(valueDegrees).build();
}
- /**
- * Shortcut for building an {@link ExpandedDimensionProp} that will expand to the size of its
- * parent.
+ /** A type for linear dimensions, measured in dp.
+ *
+ * @since 1.0
*/
- @NonNull
- public static ExpandedDimensionProp expand() {
- return EXPAND;
- }
-
- /**
- * Shortcut for building an {@link WrappedDimensionProp} that will shrink to the size of its
- * children.
- */
- @NonNull
- public static WrappedDimensionProp wrap() {
- return WRAP;
- }
-
- /** A type for linear dimensions, measured in dp. */
public static final class DpProp implements ContainerDimension, ImageDimension, SpacerDimension {
private final DimensionProto.DpProp mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -96,7 +77,11 @@
this.mFingerprint = fingerprint;
}
- /** Gets the value, in dp. Intended for testing purposes only. */
+ /**
+ * Gets the value, in dp.
+ *
+ * @since 1.0
+ */
@Dimension(unit = DP)
public float getValue() {
return mImpl.getValue();
@@ -148,11 +133,15 @@
public static final class Builder
implements ContainerDimension.Builder, ImageDimension.Builder, SpacerDimension.Builder {
private final DimensionProto.DpProp.Builder mImpl = DimensionProto.DpProp.newBuilder();
- private final Fingerprint mFingerprint = new Fingerprint(752970309);
+ private final Fingerprint mFingerprint = new Fingerprint(756413087);
public Builder() {}
- /** Sets the value, in dp. */
+ /**
+ * Sets the value, in dp.
+ *
+ * @since 1.0
+ */
@NonNull
public Builder setValue(@Dimension(unit = DP) float value) {
mImpl.setValue(value);
@@ -168,7 +157,11 @@
}
}
- /** A type for font sizes, measured in sp. */
+ /**
+ * A type for font sizes, measured in sp.
+ *
+ * @since 1.0
+ */
public static final class SpProp {
private final DimensionProto.SpProp mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -178,7 +171,11 @@
this.mFingerprint = fingerprint;
}
- /** Gets the value, in sp. Intended for testing purposes only. */
+ /**
+ * Gets the value, in sp.
+ *
+ * @since 1.0
+ */
@Dimension(unit = SP)
public float getValue() {
return mImpl.getValue();
@@ -208,11 +205,15 @@
/** Builder for {@link SpProp} */
public static final class Builder {
private final DimensionProto.SpProp.Builder mImpl = DimensionProto.SpProp.newBuilder();
- private final Fingerprint mFingerprint = new Fingerprint(-2144685857);
+ private final Fingerprint mFingerprint = new Fingerprint(631793260);
public Builder() {}
- /** Sets the value, in sp. */
+ /**
+ * Sets the value, in sp.
+ *
+ * @since 1.0
+ */
@NonNull
public Builder setValue(@Dimension(unit = SP) float value) {
mImpl.setValue(value);
@@ -228,7 +229,11 @@
}
}
- /** A type for font spacing, measured in em. */
+ /**
+ * A type for font spacing, measured in em.
+ *
+ * @since 1.0
+ */
public static final class EmProp {
private final DimensionProto.EmProp mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -238,7 +243,11 @@
this.mFingerprint = fingerprint;
}
- /** Gets the value, in em. Intended for testing purposes only. */
+ /**
+ * Gets the value, in em.
+ *
+ * @since 1.0
+ */
public float getValue() {
return mImpl.getValue();
}
@@ -267,11 +276,15 @@
/** Builder for {@link EmProp} */
public static final class Builder {
private final DimensionProto.EmProp.Builder mImpl = DimensionProto.EmProp.newBuilder();
- private final Fingerprint mFingerprint = new Fingerprint(1628313311);
+ private final Fingerprint mFingerprint = new Fingerprint(-659639046);
public Builder() {}
- /** Sets the value, in em. */
+ /**
+ * Sets the value, in em.
+ *
+ * @since 1.0
+ */
@NonNull
public Builder setValue(float value) {
mImpl.setValue(value);
@@ -287,7 +300,11 @@
}
}
- /** A type for angular dimensions, measured in degrees. */
+ /**
+ * A type for angular dimensions, measured in degrees.
+ *
+ * @since 1.0
+ */
public static final class DegreesProp {
private final DimensionProto.DegreesProp mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -297,7 +314,11 @@
this.mFingerprint = fingerprint;
}
- /** Gets the value, in degrees. Intended for testing purposes only. */
+ /**
+ * Gets the value, in degrees.
+ *
+ * @since 1.0
+ */
public float getValue() {
return mImpl.getValue();
}
@@ -327,11 +348,15 @@
public static final class Builder {
private final DimensionProto.DegreesProp.Builder mImpl =
DimensionProto.DegreesProp.newBuilder();
- private final Fingerprint mFingerprint = new Fingerprint(405060347);
+ private final Fingerprint mFingerprint = new Fingerprint(-1927567665);
public Builder() {}
- /** Sets the value, in degrees. */
+ /**
+ * Sets the value, in degrees.
+ *
+ * @since 1.0
+ */
@NonNull
public Builder setValue(float value) {
mImpl.setValue(value);
@@ -349,7 +374,11 @@
/**
* A type for a dimension that fills all the space it can (i.e. MATCH_PARENT in Android parlance).
+ *
+ * @since 1.0
+ * @hide
*/
+ @RestrictTo(Scope.LIBRARY_GROUP)
public static final class ExpandedDimensionProp implements ContainerDimension, ImageDimension {
private final DimensionProto.ExpandedDimensionProp mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -360,6 +389,19 @@
this.mFingerprint = fingerprint;
}
+ /**
+ * Gets the layout weight (a dimensionless scalar value) for this element. This will only affect
+ * the width of children of a {@link androidx.wear.protolayout.LayoutElementBuilders.Row} or the
+ * height of children of a {@link androidx.wear.protolayout.LayoutElementBuilders.Column}. By
+ * default, all children have equal weight. Where applicable, the width or height of the element
+ * is proportional to the sum of the weights of its siblings.
+ *
+ * @since 1.2
+ */
+ public float getLayoutWeight() {
+ return mImpl.getLayoutWeight().getValue();
+ }
+
/** @hide */
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@@ -399,10 +441,27 @@
implements ContainerDimension.Builder, ImageDimension.Builder {
private final DimensionProto.ExpandedDimensionProp.Builder mImpl =
DimensionProto.ExpandedDimensionProp.newBuilder();
- private final Fingerprint mFingerprint = new Fingerprint(1053378170);
+ private final Fingerprint mFingerprint = new Fingerprint(-997720604);
public Builder() {}
+ /**
+ * Sets the layout weight (a dimensionless scalar value) for this element. This will only
+ * affect the width of children of a {@link
+ * androidx.wear.protolayout.LayoutElementBuilders.Row} or the height of children of a {@link
+ * androidx.wear.protolayout.LayoutElementBuilders.Column}. By default, all children have
+ * equal weight. Where applicable, the width or height of the element is proportional to the
+ * sum of the weights of its siblings.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setLayoutWeight(float layoutWeight) {
+ mImpl.setLayoutWeight(TypesProto.FloatProp.newBuilder().setValue(layoutWeight));
+ mFingerprint.recordPropertyUpdate(1, Float.floatToIntBits(layoutWeight));
+ return this;
+ }
+
@Override
@NonNull
public ExpandedDimensionProp build() {
@@ -414,7 +473,11 @@
/**
* A type for a dimension that sizes itself to the size of its children (i.e. WRAP_CONTENT in
* Android parlance).
+ *
+ * @since 1.0
+ * @hide
*/
+ @RestrictTo(Scope.LIBRARY_GROUP)
public static final class WrappedDimensionProp implements ContainerDimension {
private final DimensionProto.WrappedDimensionProp mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -425,6 +488,16 @@
this.mFingerprint = fingerprint;
}
+ /**
+ * Gets the minimum size of this dimension. If not set, then there is no minimum size.
+ *
+ * @since 1.2
+ */
+ @Dimension(unit = DP)
+ public float getMinimumSizeDp() {
+ return mImpl.getMinimumSize().getValue();
+ }
+
/** @hide */
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@@ -455,10 +528,22 @@
public static final class Builder implements ContainerDimension.Builder {
private final DimensionProto.WrappedDimensionProp.Builder mImpl =
DimensionProto.WrappedDimensionProp.newBuilder();
- private final Fingerprint mFingerprint = new Fingerprint(-113456542);
+ private final Fingerprint mFingerprint = new Fingerprint(1118918114);
public Builder() {}
+ /**
+ * Sets the minimum size of this dimension. If not set, then there is no minimum size.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setMinimumSizeDp(@Dimension(unit = DP) float minimumSize) {
+ mImpl.setMinimumSize(DimensionProto.DpProp.newBuilder().setValue(minimumSize));
+ mFingerprint.recordPropertyUpdate(1, Float.floatToIntBits(minimumSize));
+ return this;
+ }
+
@Override
@NonNull
public WrappedDimensionProp build() {
@@ -475,6 +560,8 @@
* specifying an element's size using common ratios (e.g. width=4, height=3), or to allow an
* element to be resized proportionally based on the size of an underlying asset (e.g. an 800x600
* image being added to a smaller container and resized accordingly).
+ *
+ * @since 1.0
*/
public static final class ProportionalDimensionProp implements ImageDimension {
private final DimensionProto.ProportionalDimensionProp mImpl;
@@ -487,8 +574,9 @@
}
/**
- * Gets the width to be used when calculating the aspect ratio to preserve. Intended for testing
- * purposes only.
+ * Gets the width to be used when calculating the aspect ratio to preserve.
+ *
+ * @since 1.0
*/
@IntRange(from = 0)
public int getAspectRatioWidth() {
@@ -496,8 +584,9 @@
}
/**
- * Gets the height to be used when calculating the aspect ratio ratio to preserve. Intended for
- * testing purposes only.
+ * Gets the height to be used when calculating the aspect ratio ratio to preserve.
+ *
+ * @since 1.0
*/
@IntRange(from = 0)
public int getAspectRatioHeight() {
@@ -535,11 +624,15 @@
public static final class Builder implements ImageDimension.Builder {
private final DimensionProto.ProportionalDimensionProp.Builder mImpl =
DimensionProto.ProportionalDimensionProp.newBuilder();
- private final Fingerprint mFingerprint = new Fingerprint(-2079046835);
+ private final Fingerprint mFingerprint = new Fingerprint(1725027476);
public Builder() {}
- /** Sets the width to be used when calculating the aspect ratio to preserve. */
+ /**
+ * Sets the width to be used when calculating the aspect ratio to preserve.
+ *
+ * @since 1.0
+ */
@NonNull
public Builder setAspectRatioWidth(@IntRange(from = 0) int aspectRatioWidth) {
mImpl.setAspectRatioWidth(aspectRatioWidth);
@@ -547,7 +640,11 @@
return this;
}
- /** Sets the height to be used when calculating the aspect ratio ratio to preserve. */
+ /**
+ * Sets the height to be used when calculating the aspect ratio ratio to preserve.
+ *
+ * @since 1.0
+ */
@NonNull
public Builder setAspectRatioHeight(@IntRange(from = 0) int aspectRatioHeight) {
mImpl.setAspectRatioHeight(aspectRatioHeight);
@@ -563,7 +660,11 @@
}
}
- /** Interface defining a dimension that can be applied to a container. */
+ /**
+ * Interface defining a dimension that can be applied to a container.
+ *
+ * @since 1.0
+ */
public interface ContainerDimension {
/**
* Get the protocol buffer representation of this object.
@@ -608,7 +709,11 @@
throw new IllegalStateException("Proto was not a recognised instance of ContainerDimension");
}
- /** Interface defining a dimension that can be applied to an image. */
+ /**
+ * Interface defining a dimension that can be applied to an image.
+ *
+ * @since 1.0
+ */
public interface ImageDimension {
/**
* Get the protocol buffer representation of this object.
@@ -652,7 +757,11 @@
throw new IllegalStateException("Proto was not a recognised instance of ImageDimension");
}
- /** Interface defining a dimension that can be applied to a spacer. */
+ /**
+ * Interface defining a dimension that can be applied to a spacer.
+ *
+ * @since 1.0
+ */
public interface SpacerDimension {
/**
* Get the protocol buffer representation of this object.
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ResourceBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ResourceBuilders.java
index 8e23d72..76dbb60 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ResourceBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ResourceBuilders.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2021-2022 The Android Open Source Project
+ * 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.
@@ -19,6 +19,7 @@
import static androidx.annotation.Dimension.PX;
import android.annotation.SuppressLint;
+
import androidx.annotation.Dimension;
import androidx.annotation.DrawableRes;
import androidx.annotation.IntDef;
@@ -26,10 +27,12 @@
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
-import androidx.wear.protolayout.expression.ProtoLayoutExperimental;
+import androidx.wear.protolayout.TriggerBuilders.Trigger;
+import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat;
import androidx.wear.protolayout.proto.ResourceProto;
import androidx.wear.protolayout.protobuf.ByteString;
-import androidx.wear.protolayout.protobuf.InvalidProtocolBufferException;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Collections;
@@ -39,376 +42,733 @@
/** Builders for the resources for a layout. */
public final class ResourceBuilders {
- private ResourceBuilders() {}
-
- /**
- * Format describing the contents of an image data byte array.
- *
- * @hide
- */
- @RestrictTo(RestrictTo.Scope.LIBRARY)
- @IntDef({IMAGE_FORMAT_UNDEFINED, IMAGE_FORMAT_RGB_565})
- @Retention(RetentionPolicy.SOURCE)
- public @interface ImageFormat {}
-
- /** An undefined image format. */
- public static final int IMAGE_FORMAT_UNDEFINED = 0;
-
- /**
- * An image format where each pixel is stored on 2 bytes, with red using 5 bits, green using 6
- * bits and blue using 5 bits of precision.
- */
- public static final int IMAGE_FORMAT_RGB_565 = 1;
-
- /** An image resource which maps to an Android drawable by resource ID. */
- public static final class AndroidImageResourceByResId {
- private final ResourceProto.AndroidImageResourceByResId mImpl;
-
- private AndroidImageResourceByResId(ResourceProto.AndroidImageResourceByResId impl) {
- this.mImpl = impl;
- }
+ private ResourceBuilders() {}
/**
- * Gets the Android resource ID of this image. This must refer to a drawable under R.drawable.
- * Intended for testing purposes only.
- */
- @DrawableRes
- public int getResourceId() {
- return mImpl.getResourceId();
- }
-
- @NonNull
- static AndroidImageResourceByResId fromProto(
- @NonNull ResourceProto.AndroidImageResourceByResId proto) {
- return new AndroidImageResourceByResId(proto);
- }
-
- @NonNull
- ResourceProto.AndroidImageResourceByResId toProto() {
- return mImpl;
- }
-
- /** Builder for {@link AndroidImageResourceByResId} */
- public static final class Builder {
- private final ResourceProto.AndroidImageResourceByResId.Builder mImpl =
- ResourceProto.AndroidImageResourceByResId.newBuilder();
-
- public Builder() {}
-
- /**
- * Sets the Android resource ID of this image. This must refer to a drawable under R.drawable.
- */
- @NonNull
- public Builder setResourceId(@DrawableRes int resourceId) {
- mImpl.setResourceId(resourceId);
- return this;
- }
-
- /** Builds an instance from accumulated values. */
- @NonNull
- public AndroidImageResourceByResId build() {
- return AndroidImageResourceByResId.fromProto(mImpl.build());
- }
- }
- }
-
- /**
- * An image resource whose data is fully inlined, with no dependency on a system or app resource.
- */
- public static final class InlineImageResource {
- private final ResourceProto.InlineImageResource mImpl;
-
- private InlineImageResource(ResourceProto.InlineImageResource impl) {
- this.mImpl = impl;
- }
-
- /** Gets the byte array representing the image. Intended for testing purposes only. */
- @NonNull
- public byte[] getData() {
- return mImpl.getData().toByteArray();
- }
-
- /**
- * Gets the native width of the image, in pixels. Only required for formats (e.g.
- * IMAGE_FORMAT_RGB_565) where the image data does not include size. Intended for testing
- * purposes only.
- */
- @Dimension(unit = PX)
- public int getWidthPx() {
- return mImpl.getWidthPx();
- }
-
- /**
- * Gets the native height of the image, in pixels. Only required for formats (e.g.
- * IMAGE_FORMAT_RGB_565) where the image data does not include size. Intended for testing
- * purposes only.
- */
- @Dimension(unit = PX)
- public int getHeightPx() {
- return mImpl.getHeightPx();
- }
-
- /**
- * Gets the format of the byte array data representing the image. May be left unspecified or set
- * to IMAGE_FORMAT_UNDEFINED in which case the platform will attempt to extract this from the
- * raw image data. If the platform does not support the format, the image will not be decoded or
- * displayed. Intended for testing purposes only.
- */
- @ImageFormat
- public int getFormat() {
- return mImpl.getFormat().getNumber();
- }
-
- @NonNull
- static InlineImageResource fromProto(@NonNull ResourceProto.InlineImageResource proto) {
- return new InlineImageResource(proto);
- }
-
- @NonNull
- ResourceProto.InlineImageResource toProto() {
- return mImpl;
- }
-
- /** Builder for {@link InlineImageResource} */
- public static final class Builder {
- private final ResourceProto.InlineImageResource.Builder mImpl =
- ResourceProto.InlineImageResource.newBuilder();
-
- public Builder() {}
-
- /** Sets the byte array representing the image. */
- @NonNull
- public Builder setData(@NonNull byte[] data) {
- mImpl.setData(ByteString.copyFrom(data));
- return this;
- }
-
- /**
- * Sets the native width of the image, in pixels. Only required for formats (e.g.
- * IMAGE_FORMAT_RGB_565) where the image data does not include size.
- */
- @NonNull
- public Builder setWidthPx(@Dimension(unit = PX) int widthPx) {
- mImpl.setWidthPx(widthPx);
- return this;
- }
-
- /**
- * Sets the native height of the image, in pixels. Only required for formats (e.g.
- * IMAGE_FORMAT_RGB_565) where the image data does not include size.
- */
- @NonNull
- public Builder setHeightPx(@Dimension(unit = PX) int heightPx) {
- mImpl.setHeightPx(heightPx);
- return this;
- }
-
- /**
- * Sets the format of the byte array data representing the image. May be left unspecified or
- * set to IMAGE_FORMAT_UNDEFINED in which case the platform will attempt to extract this from
- * the raw image data. If the platform does not support the format, the image will not be
- * decoded or displayed.
- */
- @NonNull
- public Builder setFormat(@ImageFormat int format) {
- mImpl.setFormat(ResourceProto.ImageFormat.forNumber(format));
- return this;
- }
-
- /** Builds an instance from accumulated values. */
- @NonNull
- public InlineImageResource build() {
- return InlineImageResource.fromProto(mImpl.build());
- }
- }
- }
-
- /**
- * An image resource, which can be used by layouts. This holds multiple underlying resource types,
- * which the underlying runtime will pick according to what it thinks is appropriate.
- */
- public static final class ImageResource {
- private final ResourceProto.ImageResource mImpl;
-
- private ImageResource(ResourceProto.ImageResource impl) {
- this.mImpl = impl;
- }
-
- /**
- * Gets an image resource that maps to an Android drawable by resource ID. Intended for testing
- * purposes only.
- */
- @Nullable
- public AndroidImageResourceByResId getAndroidResourceByResId() {
- if (mImpl.hasAndroidResourceByResId()) {
- return AndroidImageResourceByResId.fromProto(mImpl.getAndroidResourceByResId());
- } else {
- return null;
- }
- }
-
- /**
- * Gets an image resource that contains the image data inline. Intended for testing purposes
- * only.
- */
- @Nullable
- public InlineImageResource getInlineResource() {
- if (mImpl.hasInlineResource()) {
- return InlineImageResource.fromProto(mImpl.getInlineResource());
- } else {
- return null;
- }
- }
-
- @NonNull
- static ImageResource fromProto(@NonNull ResourceProto.ImageResource proto) {
- return new ImageResource(proto);
- }
-
- @NonNull
- ResourceProto.ImageResource toProto() {
- return mImpl;
- }
-
- /** Builder for {@link ImageResource} */
- public static final class Builder {
- private final ResourceProto.ImageResource.Builder mImpl =
- ResourceProto.ImageResource.newBuilder();
-
- public Builder() {}
-
- /** Sets an image resource that maps to an Android drawable by resource ID. */
- @NonNull
- public Builder setAndroidResourceByResId(
- @NonNull AndroidImageResourceByResId androidResourceByResId) {
- mImpl.setAndroidResourceByResId(androidResourceByResId.toProto());
- return this;
- }
-
- /** Sets an image resource that contains the image data inline. */
- @NonNull
- public Builder setInlineResource(@NonNull InlineImageResource inlineResource) {
- mImpl.setInlineResource(inlineResource.toProto());
- return this;
- }
-
- /** Builds an instance from accumulated values. */
- @NonNull
- public ImageResource build() {
- return ImageResource.fromProto(mImpl.build());
- }
- }
- }
-
- /** The resources for a layout. */
- public static final class Resources {
- private final ResourceProto.Resources mImpl;
-
- private Resources(ResourceProto.Resources impl) {
- this.mImpl = impl;
- }
-
- /**
- * Gets the version of this {@link Resources} instance.
+ * Format describing the contents of an image data byte array.
*
- * <p>Each tile specifies the version of resources it requires. After fetching a tile, the
- * renderer will use the resources version specified by the tile to separately fetch the
- * resources.
- *
- * <p>This value must match the version of the resources required by the tile for the tile to
- * render successfully, and must match the resource version specified in {@link
- * androidx.wear.tiles.RequestBuilders.ResourcesRequest} which triggered this request. Intended
- * for testing purposes only.
- */
- @NonNull
- public String getVersion() {
- return mImpl.getVersion();
- }
-
- /**
- * Gets a map of resource_ids to images, which can be used by layouts. Intended for testing
- * purposes only.
- */
- @NonNull
- public Map<String, ImageResource> getIdToImageMapping() {
- Map<String, ImageResource> map = new HashMap<>();
- for (Entry<String, ResourceProto.ImageResource> entry : mImpl.getIdToImageMap().entrySet()) {
- map.put(entry.getKey(), ImageResource.fromProto(entry.getValue()));
- }
- return Collections.unmodifiableMap(map);
- }
-
- /** Converts to byte array representation. */
- @NonNull
- @ProtoLayoutExperimental
- public byte[] toByteArray() {
- return mImpl.toByteArray();
- }
-
- /** Converts from byte array representation. */
- @SuppressWarnings("ProtoParseWithRegistry")
- @Nullable
- @ProtoLayoutExperimental
- public static Resources fromByteArray(@NonNull byte[] byteArray) {
- try {
- return fromProto(ResourceProto.Resources.parseFrom(byteArray));
- } catch (InvalidProtocolBufferException e) {
- return null;
- }
- }
-
- @NonNull
- static Resources fromProto(@NonNull ResourceProto.Resources proto) {
- return new Resources(proto);
- }
-
- /**
- * Returns the internal proto instance.
- *
+ * @since 1.0
* @hide
*/
- @RestrictTo(Scope.LIBRARY_GROUP)
- @NonNull
- public ResourceProto.Resources toProto() {
- return mImpl;
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ @IntDef({IMAGE_FORMAT_UNDEFINED, IMAGE_FORMAT_RGB_565})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface ImageFormat {}
+
+ /**
+ * An undefined image format.
+ *
+ * @since 1.0
+ */
+ public static final int IMAGE_FORMAT_UNDEFINED = 0;
+
+ /**
+ * An image format where each pixel is stored on 2 bytes, with red using 5 bits, green using 6
+ * bits and blue using 5 bits of precision.
+ *
+ * @since 1.0
+ */
+ public static final int IMAGE_FORMAT_RGB_565 = 1;
+
+ /**
+ * Format describing the contents of an animated image.
+ *
+ * @since 1.2
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ @IntDef({ANIMATED_IMAGE_FORMAT_UNDEFINED, ANIMATED_IMAGE_FORMAT_AVD})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface AnimatedImageFormat {}
+
+ /**
+ * An undefined image format.
+ *
+ * @since 1.2
+ */
+ public static final int ANIMATED_IMAGE_FORMAT_UNDEFINED = 0;
+
+ /**
+ * Android AnimatedVectorDrawable.
+ *
+ * @since 1.2
+ */
+ public static final int ANIMATED_IMAGE_FORMAT_AVD = 1;
+
+ /**
+ * An image resource which maps to an Android drawable by resource ID.
+ *
+ * @since 1.0
+ */
+ public static final class AndroidImageResourceByResId {
+ private final ResourceProto.AndroidImageResourceByResId mImpl;
+
+ AndroidImageResourceByResId(ResourceProto.AndroidImageResourceByResId impl) {
+ this.mImpl = impl;
+ }
+
+ /**
+ * Gets the Android resource ID of this image. This must refer to a drawable under
+ * R.drawable.
+ *
+ * @since 1.0
+ */
+ @DrawableRes
+ public int getResourceId() {
+ return mImpl.getResourceId();
+ }
+
+ @NonNull
+ static AndroidImageResourceByResId fromProto(
+ @NonNull ResourceProto.AndroidImageResourceByResId proto) {
+ return new AndroidImageResourceByResId(proto);
+ }
+
+ @NonNull
+ ResourceProto.AndroidImageResourceByResId toProto() {
+ return mImpl;
+ }
+
+ /** Builder for {@link AndroidImageResourceByResId} */
+ public static final class Builder {
+ private final ResourceProto.AndroidImageResourceByResId.Builder mImpl =
+ ResourceProto.AndroidImageResourceByResId.newBuilder();
+
+ public Builder() {}
+
+ /**
+ * Sets the Android resource ID of this image. This must refer to a drawable under
+ * R.drawable.
+ *
+ * @since 1.0
+ */
+ @NonNull
+ public Builder setResourceId(@DrawableRes int resourceId) {
+ mImpl.setResourceId(resourceId);
+ return this;
+ }
+
+ /** Builds an instance from accumulated values. */
+ @NonNull
+ public AndroidImageResourceByResId build() {
+ return AndroidImageResourceByResId.fromProto(mImpl.build());
+ }
+ }
}
- /** Builder for {@link Resources} */
- public static final class Builder {
- private final ResourceProto.Resources.Builder mImpl = ResourceProto.Resources.newBuilder();
+ /**
+ * An image resource whose data is fully inlined, with no dependency on a system or app
+ * resource.
+ *
+ * @since 1.0
+ */
+ public static final class InlineImageResource {
+ private final ResourceProto.InlineImageResource mImpl;
- public Builder() {}
+ InlineImageResource(ResourceProto.InlineImageResource impl) {
+ this.mImpl = impl;
+ }
- /**
- * Sets the version of this {@link Resources} instance.
- *
- * <p>Each tile specifies the version of resources it requires. After fetching a tile, the
- * renderer will use the resources version specified by the tile to separately fetch the
- * resources.
- *
- * <p>This value must match the version of the resources required by the tile for the tile to
- * render successfully, and must match the resource version specified in {@link
- * androidx.wear.tiles.RequestBuilders.ResourcesRequest} which triggered this request.
- */
- @NonNull
- public Builder setVersion(@NonNull String version) {
- mImpl.setVersion(version);
- return this;
- }
+ /**
+ * Gets the byte array representing the image.
+ *
+ * @since 1.0
+ */
+ @NonNull
+ public byte[] getData() {
+ return mImpl.getData().toByteArray();
+ }
- /** Adds an entry into a map of resource_ids to images, which can be used by layouts. */
- @SuppressLint("MissingGetterMatchingBuilder")
- @NonNull
- public Builder addIdToImageMapping(@NonNull String id, @NonNull ImageResource image) {
- mImpl.putIdToImage(id, image.toProto());
- return this;
- }
+ /**
+ * Gets the native width of the image, in pixels. Only required for formats (e.g.
+ * IMAGE_FORMAT_RGB_565) where the image data does not include size.
+ *
+ * @since 1.0
+ */
+ @Dimension(unit = PX)
+ public int getWidthPx() {
+ return mImpl.getWidthPx();
+ }
- /** Builds an instance from accumulated values. */
- @NonNull
- public Resources build() {
- return Resources.fromProto(mImpl.build());
- }
+ /**
+ * Gets the native height of the image, in pixels. Only required for formats (e.g.
+ * IMAGE_FORMAT_RGB_565) where the image data does not include size.
+ *
+ * @since 1.0
+ */
+ @Dimension(unit = PX)
+ public int getHeightPx() {
+ return mImpl.getHeightPx();
+ }
+
+ /**
+ * Gets the format of the byte array data representing the image. May be left unspecified or
+ * set to IMAGE_FORMAT_UNDEFINED in which case the platform will attempt to extract this
+ * from the raw image data. If the platform does not support the format, the image will not
+ * be decoded or displayed.
+ *
+ * @since 1.0
+ */
+ @ImageFormat
+ public int getFormat() {
+ return mImpl.getFormat().getNumber();
+ }
+
+ @NonNull
+ static InlineImageResource fromProto(@NonNull ResourceProto.InlineImageResource proto) {
+ return new InlineImageResource(proto);
+ }
+
+ @NonNull
+ ResourceProto.InlineImageResource toProto() {
+ return mImpl;
+ }
+
+ /** Builder for {@link InlineImageResource} */
+ public static final class Builder {
+ private final ResourceProto.InlineImageResource.Builder mImpl =
+ ResourceProto.InlineImageResource.newBuilder();
+
+ public Builder() {}
+
+ /**
+ * Sets the byte array representing the image.
+ *
+ * @since 1.0
+ */
+ @NonNull
+ public Builder setData(@NonNull byte[] data) {
+ mImpl.setData(ByteString.copyFrom(data));
+ return this;
+ }
+
+ /**
+ * Sets the native width of the image, in pixels. Only required for formats (e.g.
+ * IMAGE_FORMAT_RGB_565) where the image data does not include size.
+ *
+ * @since 1.0
+ */
+ @NonNull
+ public Builder setWidthPx(@Dimension(unit = PX) int widthPx) {
+ mImpl.setWidthPx(widthPx);
+ return this;
+ }
+
+ /**
+ * Sets the native height of the image, in pixels. Only required for formats (e.g.
+ * IMAGE_FORMAT_RGB_565) where the image data does not include size.
+ *
+ * @since 1.0
+ */
+ @NonNull
+ public Builder setHeightPx(@Dimension(unit = PX) int heightPx) {
+ mImpl.setHeightPx(heightPx);
+ return this;
+ }
+
+ /**
+ * Sets the format of the byte array data representing the image. May be left
+ * unspecified or set to IMAGE_FORMAT_UNDEFINED in which case the platform will attempt
+ * to extract this from the raw image data. If the platform does not support the format,
+ * the image will not be decoded or displayed.
+ *
+ * @since 1.0
+ */
+ @NonNull
+ public Builder setFormat(@ImageFormat int format) {
+ mImpl.setFormat(ResourceProto.ImageFormat.forNumber(format));
+ return this;
+ }
+
+ /** Builds an instance from accumulated values. */
+ @NonNull
+ public InlineImageResource build() {
+ return InlineImageResource.fromProto(mImpl.build());
+ }
+ }
}
- }
+
+ /**
+ * A non-seekable animated image resource that maps to an Android drawable by resource ID. The
+ * animation is started with given trigger, fire and forget.
+ *
+ * @since 1.2
+ */
+ public static final class AndroidAnimatedImageResourceByResId {
+ private final ResourceProto.AndroidAnimatedImageResourceByResId mImpl;
+
+ AndroidAnimatedImageResourceByResId(
+ ResourceProto.AndroidAnimatedImageResourceByResId impl) {
+ this.mImpl = impl;
+ }
+
+ /**
+ * Gets the format for the animated image.
+ *
+ * @since 1.2
+ */
+ @AnimatedImageFormat
+ public int getAnimatedImageFormat() {
+ return mImpl.getFormat().getNumber();
+ }
+
+ /**
+ * Gets the Android resource ID, e.g. R.drawable.foo.
+ *
+ * @since 1.2
+ */
+ @DrawableRes
+ public int getResourceId() {
+ return mImpl.getResourceId();
+ }
+
+ /**
+ * Gets the trigger to start the animation.
+ *
+ * @since 1.2
+ */
+ @Nullable
+ public Trigger getStartTrigger() {
+ if (mImpl.hasTrigger()) {
+ return TriggerBuilders.triggerFromProto(mImpl.getTrigger());
+ } else {
+ return null;
+ }
+ }
+
+ @NonNull
+ static AndroidAnimatedImageResourceByResId fromProto(
+ @NonNull ResourceProto.AndroidAnimatedImageResourceByResId proto) {
+ return new AndroidAnimatedImageResourceByResId(proto);
+ }
+
+ @NonNull
+ ResourceProto.AndroidAnimatedImageResourceByResId toProto() {
+ return mImpl;
+ }
+
+ /** Builder for {@link AndroidAnimatedImageResourceByResId} */
+ public static final class Builder {
+ private final ResourceProto.AndroidAnimatedImageResourceByResId.Builder mImpl =
+ ResourceProto.AndroidAnimatedImageResourceByResId.newBuilder();
+
+ public Builder() {}
+
+ /**
+ * Sets the format for the animated image.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setAnimatedImageFormat(@AnimatedImageFormat int format) {
+ mImpl.setFormat(ResourceProto.AnimatedImageFormat.forNumber(format));
+ return this;
+ }
+
+ /**
+ * Sets the Android resource ID, e.g. R.drawable.foo.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setResourceId(@DrawableRes int resourceId) {
+ mImpl.setResourceId(resourceId);
+ return this;
+ }
+
+ /**
+ * Sets the trigger to start the animation.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setStartTrigger(@NonNull Trigger trigger) {
+ mImpl.setTrigger(trigger.toTriggerProto());
+ return this;
+ }
+
+ /** Builds an instance from accumulated values. */
+ @NonNull
+ public AndroidAnimatedImageResourceByResId build() {
+ return AndroidAnimatedImageResourceByResId.fromProto(mImpl.build());
+ }
+ }
+ }
+
+ /**
+ * A seekable animated image resource that maps to an Android drawable by resource ID. The
+ * animation progress is bound to the provided dynamic float.
+ *
+ * @since 1.2
+ */
+ public static final class AndroidSeekableAnimatedImageResourceByResId {
+ private final ResourceProto.AndroidSeekableAnimatedImageResourceByResId mImpl;
+
+ AndroidSeekableAnimatedImageResourceByResId(
+ ResourceProto.AndroidSeekableAnimatedImageResourceByResId impl) {
+ this.mImpl = impl;
+ }
+
+ /**
+ * Gets the format for the animated image.
+ *
+ * @since 1.2
+ */
+ @AnimatedImageFormat
+ public int getAnimatedImageFormat() {
+ return mImpl.getFormat().getNumber();
+ }
+
+ /**
+ * Gets the Android resource ID, e.g. R.drawable.foo.
+ *
+ * @since 1.2
+ */
+ @DrawableRes
+ public int getResourceId() {
+ return mImpl.getResourceId();
+ }
+
+ /**
+ * Gets a {@link DynamicFloat}, normally transformed from certain states with the data
+ * binding pipeline to control the progress of the animation. Its value is required to fall
+ * in the range of [0.0, 1.0]. Any values outside this range would be clamped. When the
+ * first value of the {@link DynamicFloat} arrives, the animation starts from progress 0 to
+ * that value. After that it plays from current progress to the new value on subsequent
+ * updates.
+ * If not set, the animation will play on load (similar to a non-seekable animated).
+ *
+ * @since 1.2
+ */
+ @Nullable
+ public DynamicFloat getProgress() {
+ if (mImpl.hasProgress()) {
+ return DynamicBuilders.dynamicFloatFromProto(mImpl.getProgress());
+ } else {
+ return null;
+ }
+ }
+
+ @NonNull
+ static AndroidSeekableAnimatedImageResourceByResId fromProto(
+ @NonNull ResourceProto.AndroidSeekableAnimatedImageResourceByResId proto) {
+ return new AndroidSeekableAnimatedImageResourceByResId(proto);
+ }
+
+ @NonNull
+ ResourceProto.AndroidSeekableAnimatedImageResourceByResId toProto() {
+ return mImpl;
+ }
+
+ /** Builder for {@link AndroidSeekableAnimatedImageResourceByResId} */
+ public static final class Builder {
+ private final ResourceProto.AndroidSeekableAnimatedImageResourceByResId.Builder mImpl =
+ ResourceProto.AndroidSeekableAnimatedImageResourceByResId.newBuilder();
+
+ public Builder() {}
+
+ /**
+ * Sets the format for the animated image.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setAnimatedImageFormat(@AnimatedImageFormat int format) {
+ mImpl.setFormat(ResourceProto.AnimatedImageFormat.forNumber(format));
+ return this;
+ }
+
+ /**
+ * Sets the Android resource ID, e.g. R.drawable.foo.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setResourceId(@DrawableRes int resourceId) {
+ mImpl.setResourceId(resourceId);
+ return this;
+ }
+
+ /**
+ * Sets a {@link DynamicFloat}, normally transformed from certain states with the data
+ * binding pipeline to control the progress of the animation. Its value is required to
+ * fall in the range of [0.0, 1.0]. Any values outside this range would be clamped. When
+ * the first value of the {@link DynamicFloat} arrives, the animation starts from
+ * progress 0 to that value. After that it plays from current progress to the new value
+ * on subsequent updates.
+ * If not set, the animation will play on load (similar to a non-seekable animated).
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setProgress(@NonNull DynamicFloat progress) {
+ mImpl.setProgress(progress.toDynamicFloatProto());
+ return this;
+ }
+
+ /** Builds an instance from accumulated values. */
+ @NonNull
+ public AndroidSeekableAnimatedImageResourceByResId build() {
+ return AndroidSeekableAnimatedImageResourceByResId.fromProto(mImpl.build());
+ }
+ }
+ }
+
+ /**
+ * An image resource, which can be used by layouts. This holds multiple underlying resource
+ * types, which the underlying runtime will pick according to what it thinks is appropriate.
+ *
+ * @since 1.0
+ */
+ public static final class ImageResource {
+ private final ResourceProto.ImageResource mImpl;
+
+ ImageResource(ResourceProto.ImageResource impl) {
+ this.mImpl = impl;
+ }
+
+ /**
+ * Gets an image resource that maps to an Android drawable by resource ID.
+ *
+ * @since 1.0
+ */
+ @Nullable
+ public AndroidImageResourceByResId getAndroidResourceByResId() {
+ if (mImpl.hasAndroidResourceByResId()) {
+ return AndroidImageResourceByResId.fromProto(mImpl.getAndroidResourceByResId());
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets an image resource that contains the image data inline.
+ *
+ * @since 1.0
+ */
+ @Nullable
+ public InlineImageResource getInlineResource() {
+ if (mImpl.hasInlineResource()) {
+ return InlineImageResource.fromProto(mImpl.getInlineResource());
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets a non-seekable animated image resource that maps to an Android drawable by resource
+ * ID. The animation is started with given trigger, fire and forget.
+ *
+ * @since 1.2
+ */
+ @Nullable
+ public AndroidAnimatedImageResourceByResId getAndroidAnimatedResourceByResId() {
+ if (mImpl.hasAndroidAnimatedResourceByResId()) {
+ return AndroidAnimatedImageResourceByResId.fromProto(
+ mImpl.getAndroidAnimatedResourceByResId());
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets a seekable animated image resource that maps to an Android drawable by resource ID.
+ * The animation progress is bound to the provided dynamic float.
+ *
+ * @since 1.2
+ */
+ @Nullable
+ public AndroidSeekableAnimatedImageResourceByResId
+ getAndroidSeekableAnimatedResourceByResId() {
+ if (mImpl.hasAndroidSeekableAnimatedResourceByResId()) {
+ return AndroidSeekableAnimatedImageResourceByResId.fromProto(
+ mImpl.getAndroidSeekableAnimatedResourceByResId());
+ } else {
+ return null;
+ }
+ }
+
+ @NonNull
+ static ImageResource fromProto(@NonNull ResourceProto.ImageResource proto) {
+ return new ImageResource(proto);
+ }
+
+ @NonNull
+ ResourceProto.ImageResource toProto() {
+ return mImpl;
+ }
+
+ /** Builder for {@link ImageResource} */
+ public static final class Builder {
+ private final ResourceProto.ImageResource.Builder mImpl =
+ ResourceProto.ImageResource.newBuilder();
+
+ public Builder() {}
+
+ /**
+ * Sets an image resource that maps to an Android drawable by resource ID.
+ *
+ * @since 1.0
+ */
+ @NonNull
+ public Builder setAndroidResourceByResId(
+ @NonNull AndroidImageResourceByResId androidResourceByResId) {
+ mImpl.setAndroidResourceByResId(androidResourceByResId.toProto());
+ return this;
+ }
+
+ /**
+ * Sets an image resource that contains the image data inline.
+ *
+ * @since 1.0
+ */
+ @NonNull
+ public Builder setInlineResource(@NonNull InlineImageResource inlineResource) {
+ mImpl.setInlineResource(inlineResource.toProto());
+ return this;
+ }
+
+ /**
+ * Sets a non-seekable animated image resource that maps to an Android drawable by
+ * resource ID. The animation is started with given trigger, fire and forget.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setAndroidAnimatedResourceByResId(
+ @NonNull AndroidAnimatedImageResourceByResId androidAnimatedResourceByResId) {
+ mImpl.setAndroidAnimatedResourceByResId(androidAnimatedResourceByResId.toProto());
+ return this;
+ }
+
+ /**
+ * Sets a seekable animated image resource that maps to an Android drawable by resource
+ * ID. The animation progress is bound to the provided dynamic float.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setAndroidSeekableAnimatedResourceByResId(
+ @NonNull
+ AndroidSeekableAnimatedImageResourceByResId
+ androidSeekableAnimatedResourceByResId) {
+ mImpl.setAndroidSeekableAnimatedResourceByResId(
+ androidSeekableAnimatedResourceByResId.toProto());
+ return this;
+ }
+
+ /** Builds an instance from accumulated values. */
+ @NonNull
+ public ImageResource build() {
+ return ImageResource.fromProto(mImpl.build());
+ }
+ }
+ }
+
+ /**
+ * The resources for a layout.
+ *
+ * @since 1.0
+ */
+ public static final class Resources {
+ private final ResourceProto.Resources mImpl;
+
+ Resources(ResourceProto.Resources impl) {
+ this.mImpl = impl;
+ }
+
+ /**
+ * Gets the version of this {@link Resources} instance.
+ *
+ * <p>Each layout specifies the version of resources it requires. After fetching a layout,
+ * the renderer will use the resources version specified by the layout to separately fetch
+ * the resources.
+ *
+ * <p>This value must match the version of the resources required by the layout for the
+ * layout to render successfully, and must match the resource version specified in
+ * ResourcesRequest which triggered this request.
+ *
+ * @since 1.0
+ */
+ @NonNull
+ public String getVersion() {
+ return mImpl.getVersion();
+ }
+
+ /**
+ * Gets a map of resource_ids to images, which can be used by layouts.
+ *
+ * @since 1.0
+ */
+ @NonNull
+ public Map<String, ImageResource> getIdToImageMapping() {
+ Map<String, ImageResource> map = new HashMap<>();
+ for (Entry<String, ResourceProto.ImageResource> entry :
+ mImpl.getIdToImageMap().entrySet()) {
+ map.put(entry.getKey(), ImageResource.fromProto(entry.getValue()));
+ }
+ return Collections.unmodifiableMap(map);
+ }
+
+ @NonNull
+ static Resources fromProto(@NonNull ResourceProto.Resources proto) {
+ return new Resources(proto);
+ }
+
+ /**
+ * Returns the internal proto instance.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public ResourceProto.Resources toProto() {
+ return mImpl;
+ }
+
+ /** Builder for {@link Resources} */
+ public static final class Builder {
+ private final ResourceProto.Resources.Builder mImpl =
+ ResourceProto.Resources.newBuilder();
+
+ public Builder() {}
+
+ /**
+ * Sets the version of this {@link Resources} instance.
+ *
+ * <p>Each layout specifies the version of resources it requires. After fetching a
+ * layout, the renderer will use the resources version specified by the layout to
+ * separately fetch the resources.
+ *
+ * <p>This value must match the version of the resources required by the layout for the
+ * layout to render successfully, and must match the resource version specified in
+ * ResourcesRequest which triggered this request.
+ *
+ * @since 1.0
+ */
+ @NonNull
+ public Builder setVersion(@NonNull String version) {
+ mImpl.setVersion(version);
+ return this;
+ }
+
+ /**
+ * Adds an entry into a map of resource_ids to images, which can be used by layouts.
+ *
+ * @since 1.0
+ */
+ @SuppressLint("MissingGetterMatchingBuilder")
+ @NonNull
+ public Builder addIdToImageMapping(@NonNull String id, @NonNull ImageResource image) {
+ mImpl.putIdToImage(id, image.toProto());
+ return this;
+ }
+
+ /** Builds an instance from accumulated values. */
+ @NonNull
+ public Resources build() {
+ return Resources.fromProto(mImpl.build());
+ }
+ }
+ }
}
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TriggerBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TriggerBuilders.java
new file mode 100644
index 0000000..675364c
--- /dev/null
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TriggerBuilders.java
@@ -0,0 +1,237 @@
+/*
+ * 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.wear.protolayout;
+
+import static androidx.wear.protolayout.expression.Preconditions.checkNotNull;
+
+import android.annotation.SuppressLint;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.RestrictTo.Scope;
+import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool;
+import androidx.wear.protolayout.expression.Fingerprint;
+import androidx.wear.protolayout.proto.TriggerProto;
+
+/** Builders for triggers that can be used to start an animation. */
+public final class TriggerBuilders {
+ private TriggerBuilders() {}
+
+ /** Shortcut for building an {@link OnLoadTrigger}. */
+ @NonNull
+ public static OnLoadTrigger createOnLoadTrigger() {
+ return new OnLoadTrigger.Builder().build();
+ }
+
+ /** Shortcut for building an {@link OnConditionMetTrigger}. */
+ @NonNull
+ public static OnConditionMetTrigger createOnConditionMetTrigger(
+ @NonNull DynamicBool dynamicBool) {
+ return new OnConditionMetTrigger.Builder().setTrigger(dynamicBool).build();
+ }
+
+ /**
+ * Triggers immediately when the layout is loaded / reloaded.
+ *
+ * @since 1.2
+ */
+ public static final class OnLoadTrigger implements Trigger {
+ private final TriggerProto.OnLoadTrigger mImpl;
+ @Nullable private final Fingerprint mFingerprint;
+
+ OnLoadTrigger(TriggerProto.OnLoadTrigger impl, @Nullable Fingerprint fingerprint) {
+ this.mImpl = impl;
+ this.mFingerprint = fingerprint;
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ public Fingerprint getFingerprint() {
+ return mFingerprint;
+ }
+
+ @NonNull
+ static OnLoadTrigger fromProto(@NonNull TriggerProto.OnLoadTrigger proto) {
+ return new OnLoadTrigger(proto, null);
+ }
+
+ @NonNull
+ TriggerProto.OnLoadTrigger toProto() {
+ return mImpl;
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public TriggerProto.Trigger toTriggerProto() {
+ return TriggerProto.Trigger.newBuilder().setOnLoadTrigger(mImpl).build();
+ }
+
+ /** Builder for {@link OnLoadTrigger}. */
+ public static final class Builder implements Trigger.Builder {
+ private final TriggerProto.OnLoadTrigger.Builder mImpl =
+ TriggerProto.OnLoadTrigger.newBuilder();
+ private final Fingerprint mFingerprint = new Fingerprint(-1262805599);
+
+ public Builder() {}
+
+ @Override
+ @NonNull
+ public OnLoadTrigger build() {
+ return new OnLoadTrigger(mImpl.build(), mFingerprint);
+ }
+ }
+ }
+
+ /**
+ * Triggers *every time* the condition switches from false to true. If the condition is true
+ * initially, that will fire the trigger on load.
+ *
+ * @since 1.2
+ */
+ public static final class OnConditionMetTrigger implements Trigger {
+ private final TriggerProto.OnConditionTrigger mImpl;
+ @Nullable private final Fingerprint mFingerprint;
+
+ OnConditionMetTrigger(TriggerProto.OnConditionTrigger impl, @Nullable Fingerprint fingerprint) {
+ this.mImpl = impl;
+ this.mFingerprint = fingerprint;
+ }
+
+ /**
+ * Gets dynamic boolean used as trigger. Intended for testing purposes only.
+ *
+ * @since 1.2
+ */
+ @Nullable
+ public DynamicBool getTrigger() {
+ if (mImpl.hasDynamicBool()) {
+ return DynamicBuilders.dynamicBoolFromProto(mImpl.getDynamicBool());
+ } else {
+ return null;
+ }
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ public Fingerprint getFingerprint() {
+ return mFingerprint;
+ }
+
+ @NonNull
+ static OnConditionMetTrigger fromProto(@NonNull TriggerProto.OnConditionTrigger proto) {
+ return new OnConditionMetTrigger(proto, null);
+ }
+
+ @NonNull
+ TriggerProto.OnConditionTrigger toProto() {
+ return mImpl;
+ }
+
+ /** @hide */
+ @Override
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public TriggerProto.Trigger toTriggerProto() {
+ return TriggerProto.Trigger.newBuilder().setOnConditionTrigger(mImpl).build();
+ }
+
+ /** Builder for {@link OnConditionMetTrigger}. */
+ public static final class Builder implements Trigger.Builder {
+ private final TriggerProto.OnConditionTrigger.Builder mImpl =
+ TriggerProto.OnConditionTrigger.newBuilder();
+ private final Fingerprint mFingerprint = new Fingerprint(1952746052);
+
+ public Builder() {}
+
+ /**
+ * Sets dynamic boolean used as trigger.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setTrigger(@NonNull DynamicBool dynamicBool) {
+ mImpl.setDynamicBool(dynamicBool.toDynamicBoolProto());
+ mFingerprint.recordPropertyUpdate(
+ 1, checkNotNull(dynamicBool.getFingerprint()).aggregateValueAsInt());
+ return this;
+ }
+
+ @Override
+ @NonNull
+ public OnConditionMetTrigger build() {
+ return new OnConditionMetTrigger(mImpl.build(), mFingerprint);
+ }
+ }
+ }
+
+ /**
+ * Interface defining the triggers that can be fired. These triggers can be used to allow
+ * acting on events. For example some animations can be set to start based on a trigger.
+ *
+ * @since 1.2
+ */
+ public interface Trigger {
+ /**
+ * Get the protocol buffer representation of this object.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ TriggerProto.Trigger toTriggerProto();
+
+ /**
+ * Get the fingerprint for this object or null if unknown.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ Fingerprint getFingerprint();
+
+ /** Builder to create {@link Trigger} objects.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ interface Builder {
+
+ /** Builds an instance with values accumulated in this Builder. */
+ @NonNull
+ Trigger build();
+ }
+ }
+
+ @NonNull
+ static Trigger triggerFromProto(@NonNull TriggerProto.Trigger proto) {
+ if (proto.hasOnLoadTrigger()) {
+ return OnLoadTrigger.fromProto(proto.getOnLoadTrigger());
+ }
+ if (proto.hasOnConditionTrigger()) {
+ return OnConditionMetTrigger.fromProto(proto.getOnConditionTrigger());
+ }
+ throw new IllegalStateException("Proto was not a recognised instance of Trigger");
+ }
+}
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ActionBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ActionBuildersTest.java
index fa3e089..39aa11e 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ActionBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ActionBuildersTest.java
@@ -18,14 +18,22 @@
import static com.google.common.truth.Truth.assertThat;
+import android.content.ComponentName;
+
import androidx.wear.protolayout.expression.StateEntryBuilders;
+import androidx.wear.protolayout.proto.ActionProto;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
+import java.util.Map;
+
@RunWith(RobolectricTestRunner.class)
public class ActionBuildersTest {
+ private static final ComponentName LAUNCH_COMPONENT = new ComponentName("com.package",
+ "launchClass");
+
@Test
public void setStateAction() {
String key = "key";
@@ -38,4 +46,40 @@
assertThat(setStateAction.getValue().toStateEntryValueProto()).isEqualTo(
value.toStateEntryValueProto());
}
+
+ @Test
+ public void launchAction() {
+ ActionBuilders.LaunchAction launchAction = ActionBuilders.launchAction(LAUNCH_COMPONENT);
+
+ ActionProto.LaunchAction launchActionProto = launchAction.toActionProto().getLaunchAction();
+ assertThat(launchActionProto.getAndroidActivity().getPackageName()).isEqualTo(
+ LAUNCH_COMPONENT.getPackageName());
+ assertThat(launchActionProto.getAndroidActivity().getClassName()).isEqualTo(
+ LAUNCH_COMPONENT.getClassName());
+ }
+
+ @Test
+ public void launchActionWithExtras() {
+ String keyString = "keyString";
+ ActionBuilders.AndroidStringExtra stringExtra =
+ new ActionBuilders.AndroidStringExtra.Builder().setValue("string-extra").build();
+ String keyInt = "keyInt";
+ ActionBuilders.AndroidIntExtra intExtra =
+ new ActionBuilders.AndroidIntExtra.Builder().setValue(42).build();
+
+ ActionBuilders.LaunchAction launchAction = ActionBuilders.launchAction(LAUNCH_COMPONENT,
+ Map.of(keyInt, intExtra, keyString, stringExtra));
+
+ ActionProto.LaunchAction launchActionProto = launchAction.toActionProto().getLaunchAction();
+ assertThat(launchActionProto.getAndroidActivity().getPackageName()).isEqualTo(
+ LAUNCH_COMPONENT.getPackageName());
+ assertThat(launchActionProto.getAndroidActivity().getClassName()).isEqualTo(
+ LAUNCH_COMPONENT.getClassName());
+ Map<String, ActionProto.AndroidExtra> keyToExtraMap =
+ launchActionProto.getAndroidActivity().getKeyToExtraMap();
+ assertThat(keyToExtraMap).hasSize(2);
+ assertThat(keyToExtraMap.get(keyString).getStringVal().getValue()).isEqualTo(
+ stringExtra.getValue());
+ assertThat(keyToExtraMap.get(keyInt).getIntVal().getValue()).isEqualTo(intExtra.getValue());
+ }
}
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DeviceParametersBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DeviceParametersBuildersTest.java
new file mode 100644
index 0000000..44af4fec
--- /dev/null
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DeviceParametersBuildersTest.java
@@ -0,0 +1,59 @@
+/*
+ * 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;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.wear.protolayout.expression.VersionBuilders;
+import androidx.wear.protolayout.proto.DeviceParametersProto;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class DeviceParametersBuildersTest {
+
+ @Test
+ public void deviceParameters() {
+ float fontScale = 0.5f;
+ int major = 1;
+ int minor = 2;
+
+ VersionBuilders.VersionInfo rendererVersion =
+ new VersionBuilders.VersionInfo.Builder().setMajor(major).setMinor(minor).build();
+ DeviceParametersBuilders.DeviceParameters deviceParameters =
+ new DeviceParametersBuilders.DeviceParameters.Builder().setFontScale(
+ fontScale).setRendererSchemaVersion(rendererVersion).build();
+
+ DeviceParametersProto.DeviceParameters deviceParametersProto = deviceParameters.toProto();
+ assertThat(deviceParametersProto.getFontScale()).isEqualTo(fontScale);
+ assertThat(deviceParametersProto.getRendererSchemaVersion().getMajor()).isEqualTo(major);
+ assertThat(deviceParametersProto.getRendererSchemaVersion().getMinor()).isEqualTo(minor);
+ }
+
+ @Test
+ public void capabilities() {
+ float fontScale = 0.5f;
+
+ DeviceParametersBuilders.DeviceParameters deviceParameters =
+ new DeviceParametersBuilders.DeviceParameters.Builder().setFontScale(
+ fontScale).build();
+
+ assertThat(deviceParameters.getFontScale()).isEqualTo(fontScale);
+ }
+}
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DimensionBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DimensionBuildersTest.java
new file mode 100644
index 0000000..2f54d7b
--- /dev/null
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DimensionBuildersTest.java
@@ -0,0 +1,56 @@
+/*
+ * 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;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.wear.protolayout.proto.DimensionProto;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class DimensionBuildersTest {
+
+ @Test
+ public void expandedLayoutWeight() {
+ float layoutWeight = 3.14f;
+ DimensionBuilders.ContainerDimension dimensionProp =
+ new DimensionBuilders.ExpandedDimensionProp.Builder().setLayoutWeight(layoutWeight)
+ .build();
+
+ DimensionProto.ContainerDimension dimensionProto =
+ dimensionProp.toContainerDimensionProto();
+ assertThat(dimensionProto.getExpandedDimension().getLayoutWeight().getValue())
+ .isWithin(.001f).of(layoutWeight);
+ }
+
+
+ @Test
+ public void wrappedMinSize() {
+ int minSizeDp = 42;
+ DimensionBuilders.ContainerDimension dimensionProp =
+ new DimensionBuilders.WrappedDimensionProp.Builder().setMinimumSizeDp(minSizeDp)
+ .build();
+
+ DimensionProto.ContainerDimension dimensionProto =
+ dimensionProp.toContainerDimensionProto();
+ assertThat(dimensionProto.getWrappedDimension().getMinimumSize().getValue())
+ .isEqualTo(minSizeDp);
+ }
+}
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ResourceBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ResourceBuildersTest.java
new file mode 100644
index 0000000..59f2df8
--- /dev/null
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ResourceBuildersTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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;
+
+import static androidx.wear.protolayout.ResourceBuilders.ANIMATED_IMAGE_FORMAT_AVD;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.proto.ResourceProto;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class ResourceBuildersTest {
+ private static final int RESOURCE_ID = 10;
+ private static final int FORMAT = ANIMATED_IMAGE_FORMAT_AVD;
+
+ @Test
+ public void avd() {
+ ResourceBuilders.AndroidAnimatedImageResourceByResId avd =
+ new ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder()
+ .setResourceId(RESOURCE_ID)
+ .setAnimatedImageFormat(FORMAT)
+ .setStartTrigger(TriggerBuilders.createOnLoadTrigger())
+ .build();
+
+ ResourceProto.AndroidAnimatedImageResourceByResId avdProto = avd.toProto();
+
+ assertThat(avdProto.getResourceId()).isEqualTo(RESOURCE_ID);
+ assertThat(avdProto.getFormat().getNumber()).isEqualTo(FORMAT);
+ assertThat(avdProto.getTrigger().hasOnLoadTrigger()).isTrue();
+ }
+
+ @Test
+ public void seekableAvd() {
+ String stateKey = "state-key";
+ ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId avd =
+ new ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder()
+ .setResourceId(RESOURCE_ID)
+ .setAnimatedImageFormat(FORMAT)
+ .setProgress(DynamicBuilders.DynamicFloat.fromState(stateKey))
+ .build();
+
+ ResourceProto.AndroidSeekableAnimatedImageResourceByResId avdProto = avd.toProto();
+
+ assertThat(avdProto.getResourceId()).isEqualTo(RESOURCE_ID);
+ assertThat(avdProto.getFormat().getNumber()).isEqualTo(FORMAT);
+ assertThat(avdProto.getProgress().getStateSource().getSourceKey()).isEqualTo(stateKey);
+ }
+}
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java
new file mode 100644
index 0000000..5b3260e
--- /dev/null
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.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.wear.protolayout;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.wear.protolayout.expression.DynamicBuilders;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class TriggerBuildersTest {
+
+ @Test
+ public void onLoadTrigger() {
+ TriggerBuilders.OnLoadTrigger onLoadTrigger = TriggerBuilders.createOnLoadTrigger();
+
+ assertThat(onLoadTrigger.toTriggerProto().hasOnLoadTrigger()).isTrue();
+ }
+
+
+ @Test
+ public void onConditionTrigger() {
+ DynamicBuilders.DynamicBool condition = DynamicBuilders.DynamicBool.fromState("state");
+
+ TriggerBuilders.OnConditionMetTrigger onConditionMetTrigger =
+ TriggerBuilders.createOnConditionMetTrigger(
+ condition);
+
+ assertThat(
+ onConditionMetTrigger.toTriggerProto().getOnConditionTrigger().getDynamicBool())
+ .isEqualTo(condition.toDynamicBoolProto());
+ }
+}
diff --git a/wear/watchface/watchface-client-guava/api/current.txt b/wear/watchface/watchface-client-guava/api/current.txt
index 4c88746..1b8efee 100644
--- a/wear/watchface/watchface-client-guava/api/current.txt
+++ b/wear/watchface/watchface-client-guava/api/current.txt
@@ -11,9 +11,9 @@
method public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient();
method public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId);
method @Deprecated public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
- method public suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, java.util.function.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
+ method public suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData);
- method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, java.util.function.Consumer<java.lang.String> previewImageUpdateRequestedListener);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener);
field public static final androidx.wear.watchface.client.ListenableWatchFaceControlClient.Companion Companion;
}
diff --git a/wear/watchface/watchface-client-guava/api/public_plus_experimental_current.txt b/wear/watchface/watchface-client-guava/api/public_plus_experimental_current.txt
index 4c88746..1b8efee 100644
--- a/wear/watchface/watchface-client-guava/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-client-guava/api/public_plus_experimental_current.txt
@@ -11,9 +11,9 @@
method public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient();
method public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId);
method @Deprecated public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
- method public suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, java.util.function.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
+ method public suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData);
- method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, java.util.function.Consumer<java.lang.String> previewImageUpdateRequestedListener);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener);
field public static final androidx.wear.watchface.client.ListenableWatchFaceControlClient.Companion Companion;
}
diff --git a/wear/watchface/watchface-client-guava/api/restricted_current.txt b/wear/watchface/watchface-client-guava/api/restricted_current.txt
index 4c88746..1b8efee 100644
--- a/wear/watchface/watchface-client-guava/api/restricted_current.txt
+++ b/wear/watchface/watchface-client-guava/api/restricted_current.txt
@@ -11,9 +11,9 @@
method public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient();
method public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId);
method @Deprecated public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
- method public suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, java.util.function.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
+ method public suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData);
- method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, java.util.function.Consumer<java.lang.String> previewImageUpdateRequestedListener);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener);
field public static final androidx.wear.watchface.client.ListenableWatchFaceControlClient.Companion Companion;
}
diff --git a/wear/watchface/watchface-client-guava/src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt b/wear/watchface/watchface-client-guava/src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt
index 338f592..e3de152 100644
--- a/wear/watchface/watchface-client-guava/src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt
+++ b/wear/watchface/watchface-client-guava/src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt
@@ -19,6 +19,7 @@
import android.content.ComponentName
import android.content.Context
import androidx.concurrent.futures.ResolvableFuture
+import androidx.core.util.Consumer
import androidx.wear.watchface.Renderer
import androidx.wear.watchface.client.WatchFaceControlClient.ServiceNotBoundException
import androidx.wear.watchface.complications.data.ComplicationData
@@ -26,7 +27,6 @@
import androidx.wear.watchface.utility.AsyncTraceEvent
import com.google.common.util.concurrent.ListenableFuture
import java.util.concurrent.Executor
-import java.util.function.Consumer
import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
diff --git a/wear/watchface/watchface-client/api/current.txt b/wear/watchface/watchface-client/api/current.txt
index b7a6bc0..04a3c4c 100644
--- a/wear/watchface/watchface-client/api/current.txt
+++ b/wear/watchface/watchface-client/api/current.txt
@@ -190,7 +190,7 @@
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient() throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId) throws android.os.RemoteException;
method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
- method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public default suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, java.util.function.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
+ method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public default suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
method public default boolean hasComplicationDataCache();
field public static final androidx.wear.watchface.client.WatchFaceControlClient.Companion Companion;
}
diff --git a/wear/watchface/watchface-client/api/public_plus_experimental_current.txt b/wear/watchface/watchface-client/api/public_plus_experimental_current.txt
index ff5390c..16c73b9 100644
--- a/wear/watchface/watchface-client/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-client/api/public_plus_experimental_current.txt
@@ -131,7 +131,7 @@
public interface InteractiveWatchFaceClient extends java.lang.AutoCloseable {
method @AnyThread public void addClientDisconnectListener(androidx.wear.watchface.client.InteractiveWatchFaceClient.ClientDisconnectListener listener, java.util.concurrent.Executor executor);
- method @androidx.wear.watchface.client.WatchFaceClientExperimental public default void addOnWatchFaceColorsListener(java.util.concurrent.Executor executor, java.util.function.Consumer<androidx.wear.watchface.WatchFaceColors> listener);
+ method @androidx.wear.watchface.client.WatchFaceClientExperimental public default void addOnWatchFaceColorsListener(java.util.concurrent.Executor executor, androidx.core.util.Consumer<androidx.wear.watchface.WatchFaceColors> listener);
method public void addOnWatchFaceReadyListener(java.util.concurrent.Executor executor, androidx.wear.watchface.client.InteractiveWatchFaceClient.OnWatchFaceReadyListener listener);
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public default Integer? getComplicationIdAt(@Px int x, @Px int y) throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public java.util.Map<java.lang.Integer,androidx.wear.watchface.client.ComplicationSlotState> getComplicationSlotsState() throws android.os.RemoteException;
@@ -144,7 +144,7 @@
method @AnyThread public boolean isConnectionAlive();
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public void performAmbientTick() throws android.os.RemoteException;
method @AnyThread public void removeClientDisconnectListener(androidx.wear.watchface.client.InteractiveWatchFaceClient.ClientDisconnectListener listener);
- method @androidx.wear.watchface.client.WatchFaceClientExperimental public default void removeOnWatchFaceColorsListener(java.util.function.Consumer<androidx.wear.watchface.WatchFaceColors> listener);
+ method @androidx.wear.watchface.client.WatchFaceClientExperimental public default void removeOnWatchFaceColorsListener(androidx.core.util.Consumer<androidx.wear.watchface.WatchFaceColors> listener);
method public void removeOnWatchFaceReadyListener(androidx.wear.watchface.client.InteractiveWatchFaceClient.OnWatchFaceReadyListener listener);
method @RequiresApi(27) @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public android.graphics.Bitmap renderWatchFaceToBitmap(androidx.wear.watchface.RenderParameters renderParameters, java.time.Instant instant, androidx.wear.watchface.style.UserStyle? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? idAndComplicationData) throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public void sendTouchEvent(@Px int xPosition, @Px int yPosition, @androidx.wear.watchface.TapType int tapType) throws android.os.RemoteException;
@@ -199,7 +199,7 @@
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient() throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId) throws android.os.RemoteException;
method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
- method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public default suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, java.util.function.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
+ method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public default suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
method public default boolean hasComplicationDataCache();
field public static final androidx.wear.watchface.client.WatchFaceControlClient.Companion Companion;
}
diff --git a/wear/watchface/watchface-client/api/restricted_current.txt b/wear/watchface/watchface-client/api/restricted_current.txt
index b7a6bc0..04a3c4c 100644
--- a/wear/watchface/watchface-client/api/restricted_current.txt
+++ b/wear/watchface/watchface-client/api/restricted_current.txt
@@ -190,7 +190,7 @@
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient() throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId) throws android.os.RemoteException;
method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
- method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public default suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, java.util.function.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
+ method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public default suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
method public default boolean hasComplicationDataCache();
field public static final androidx.wear.watchface.client.WatchFaceControlClient.Companion Companion;
}
diff --git a/wear/watchface/watchface-client/src/androidTest/java/androidx/wear/watchface/client/test/WatchFaceControlClientTest.kt b/wear/watchface/watchface-client/src/androidTest/java/androidx/wear/watchface/client/test/WatchFaceControlClientTest.kt
index 365da36..b723da6 100644
--- a/wear/watchface/watchface-client/src/androidTest/java/androidx/wear/watchface/client/test/WatchFaceControlClientTest.kt
+++ b/wear/watchface/watchface-client/src/androidTest/java/androidx/wear/watchface/client/test/WatchFaceControlClientTest.kt
@@ -34,6 +34,7 @@
import android.view.SurfaceHolder
import androidx.annotation.CallSuper
import androidx.annotation.RequiresApi
+import androidx.core.util.Consumer
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
@@ -98,7 +99,6 @@
import java.util.concurrent.Executor
import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeoutException
-import java.util.function.Consumer
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
diff --git a/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/InteractiveWatchFaceClient.kt b/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/InteractiveWatchFaceClient.kt
index 566abd4..394bcfa 100644
--- a/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/InteractiveWatchFaceClient.kt
+++ b/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/InteractiveWatchFaceClient.kt
@@ -25,6 +25,7 @@
import androidx.annotation.IntDef
import androidx.annotation.Px
import androidx.annotation.RequiresApi
+import androidx.core.util.Consumer
import androidx.wear.watchface.ComplicationSlot
import androidx.wear.watchface.ComplicationSlotBoundsType
import androidx.wear.watchface.ComplicationSlotsManager
@@ -52,7 +53,6 @@
import androidx.wear.watchface.utility.TraceEvent
import java.time.Instant
import java.util.concurrent.Executor
-import java.util.function.Consumer
/** @hide */
@IntDef(value = [DisconnectReasons.ENGINE_DIED, DisconnectReasons.ENGINE_DETACHED])
diff --git a/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/WatchFaceControlClient.kt b/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/WatchFaceControlClient.kt
index fad38e4..e9177de 100644
--- a/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/WatchFaceControlClient.kt
+++ b/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/WatchFaceControlClient.kt
@@ -23,6 +23,7 @@
import android.os.IBinder
import android.os.RemoteException
import android.util.Log
+import androidx.core.util.Consumer
import androidx.annotation.Px
import androidx.annotation.RestrictTo
import androidx.wear.watchface.Renderer
@@ -44,7 +45,6 @@
import androidx.wear.watchface.utility.AsyncTraceEvent
import androidx.wear.watchface.utility.TraceEvent
import java.util.concurrent.Executor
-import java.util.function.Consumer
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlinx.coroutines.CompletableDeferred
diff --git a/wear/watchface/watchface-complications-data-source/api/current.txt b/wear/watchface/watchface-complications-data-source/api/current.txt
index 73e5e61..d348447 100644
--- a/wear/watchface/watchface-complications-data-source/api/current.txt
+++ b/wear/watchface/watchface-complications-data-source/api/current.txt
@@ -52,14 +52,17 @@
}
public final class ComplicationRequest {
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired, Boolean? isForSafeWatchFace);
ctor public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired);
ctor @Deprecated public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType);
method public int getComplicationInstanceId();
method public androidx.wear.watchface.complications.data.ComplicationType getComplicationType();
+ method public Boolean? isForSafeWatchFace();
method public boolean isImmediateResponseRequired();
property public final int complicationInstanceId;
property public final androidx.wear.watchface.complications.data.ComplicationType complicationType;
property public final boolean immediateResponseRequired;
+ property public final Boolean? isForSafeWatchFace;
}
public final class TimeInterval {
diff --git a/wear/watchface/watchface-complications-data-source/api/public_plus_experimental_current.txt b/wear/watchface/watchface-complications-data-source/api/public_plus_experimental_current.txt
index 73e5e61..d348447 100644
--- a/wear/watchface/watchface-complications-data-source/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-complications-data-source/api/public_plus_experimental_current.txt
@@ -52,14 +52,17 @@
}
public final class ComplicationRequest {
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired, Boolean? isForSafeWatchFace);
ctor public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired);
ctor @Deprecated public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType);
method public int getComplicationInstanceId();
method public androidx.wear.watchface.complications.data.ComplicationType getComplicationType();
+ method public Boolean? isForSafeWatchFace();
method public boolean isImmediateResponseRequired();
property public final int complicationInstanceId;
property public final androidx.wear.watchface.complications.data.ComplicationType complicationType;
property public final boolean immediateResponseRequired;
+ property public final Boolean? isForSafeWatchFace;
}
public final class TimeInterval {
diff --git a/wear/watchface/watchface-complications-data-source/api/restricted_current.txt b/wear/watchface/watchface-complications-data-source/api/restricted_current.txt
index 73e5e61..d348447 100644
--- a/wear/watchface/watchface-complications-data-source/api/restricted_current.txt
+++ b/wear/watchface/watchface-complications-data-source/api/restricted_current.txt
@@ -52,14 +52,17 @@
}
public final class ComplicationRequest {
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired, Boolean? isForSafeWatchFace);
ctor public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired);
ctor @Deprecated public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType);
method public int getComplicationInstanceId();
method public androidx.wear.watchface.complications.data.ComplicationType getComplicationType();
+ method public Boolean? isForSafeWatchFace();
method public boolean isImmediateResponseRequired();
property public final int complicationInstanceId;
property public final androidx.wear.watchface.complications.data.ComplicationType complicationType;
property public final boolean immediateResponseRequired;
+ property public final Boolean? isForSafeWatchFace;
}
public final class TimeInterval {
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 2450fd86..6197888 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
@@ -31,6 +31,7 @@
import android.support.wearable.complications.IComplicationManager
import android.support.wearable.complications.IComplicationProvider
import androidx.annotation.MainThread
+import androidx.annotation.RequiresApi
import androidx.annotation.RestrictTo
import androidx.wear.watchface.complications.data.ComplicationData
import androidx.wear.watchface.complications.data.ComplicationDataExpressionEvaluator
@@ -60,12 +61,34 @@
* deadline). This will only be `true` within a
* [ComplicationDataSourceService.onStartImmediateComplicationRequests]
* [ComplicationDataSourceService.onStopImmediateComplicationRequests] pair.
+ * @param isForSafeWatchFace Whether this request is on behalf of a 'safe' watch face as defined by
+ * the [ComplicationDataSourceService.METADATA_KEY_SAFE_WATCH_FACES] meta data in the data
+ * source's manifest. The data source may choose to serve different results for a 'safe' watch
+ * face. If the data source does not have the privileged permission
+ * `com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE`, then this must be null.
*/
-public class ComplicationRequest(
+public class ComplicationRequest
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+constructor(
complicationInstanceId: Int,
complicationType: ComplicationType,
- immediateResponseRequired: Boolean
+ immediateResponseRequired: Boolean,
+ @Suppress("AutoBoxing")
+ isForSafeWatchFace: Boolean?
) {
+ /** Constructs a [ComplicationRequest] without setting [isForSafeWatchFace]. */
+ @Suppress("NewApi")
+ constructor(
+ complicationInstanceId: Int,
+ complicationType: ComplicationType,
+ immediateResponseRequired: Boolean,
+ ) : this(
+ complicationInstanceId,
+ complicationType,
+ immediateResponseRequired,
+ isForSafeWatchFace = false
+ )
+
/**
* The system's id for the requested complication which is a unique value for the tuple
* [Watch face ComponentName, complication slot ID].
@@ -86,6 +109,23 @@
@get:JvmName("isImmediateResponseRequired")
public val immediateResponseRequired = immediateResponseRequired
+ /**
+ * Intended for OEM use, returns whether this request is on behalf of a 'safe' watch face as
+ * defined by the [ComplicationDataSourceService.METADATA_KEY_SAFE_WATCH_FACES] meta data in the
+ * data source's manifest. The data source may choose to serve different results for a 'safe'
+ * watch face.
+ *
+ * If the [ComplicationDataSourceService.METADATA_KEY_SAFE_WATCH_FACES] meta data is not defined
+ * then this will be false.
+ *
+ * If the DataSourceService does not have the privileged permission
+ * `com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE`, then this will be null.
+ */
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ @get:JvmName("isForSafeWatchFace")
+ @get:Suppress("AutoBoxing")
+ public val isForSafeWatchFace: Boolean? = isForSafeWatchFace
+
@Deprecated("Use a constructor that specifies responseNeededSoon.")
constructor(
complicationInstanceId: Int,
@@ -140,7 +180,7 @@
* also register a separate [METADATA_KEY_IMMEDIATE_UPDATE_PERIOD_MILLISECONDS] meta data tag which
* supports sampling at up to 1Hz when the watch face is visible and non-ambient, however this also
* requires the DataSourceService to have the privileged permission
- * com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE.
+ * `com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE`.
*
* ```
* <meta-data android:name=
@@ -251,7 +291,7 @@
* deadline is 20 seconds. [ComplicationRequest.immediateResponseRequired] will only ever be
* `true` if [METADATA_KEY_IMMEDIATE_UPDATE_PERIOD_MILLISECONDS] is present in the manifest, and
* the provider has the privileged permission
- * com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE, and the
+ * `com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE`, and the
* complication is visible and non-ambient.
*
* @param request The details about the complication that has been requested.
@@ -350,14 +390,26 @@
private inner class IComplicationProviderWrapper : IComplicationProvider.Stub() {
@SuppressLint("SyntheticAccessor")
override fun onUpdate(complicationInstanceId: Int, type: Int, manager: IBinder) {
+ onUpdate2(complicationInstanceId, type, isForSafeWatchFace = false, manager)
+ }
+
+ @SuppressLint("SyntheticAccessor")
+ override fun onUpdate2(
+ complicationInstanceId: Int,
+ type: Int,
+ isForSafeWatchFace: Boolean,
+ manager: IBinder
+ ) {
val expectedDataType = fromWireType(type)
val iComplicationManager = IComplicationManager.Stub.asInterface(manager)
mainThreadHandler.post {
onComplicationRequest(
+ @Suppress("NewApi")
ComplicationRequest(
complicationInstanceId,
expectedDataType,
- immediateResponseRequired = false
+ immediateResponseRequired = false,
+ isForSafeWatchFace = isForSafeWatchFace
),
object : ComplicationRequestListener {
override fun onComplicationData(complicationData: ComplicationData?) {
@@ -553,6 +605,16 @@
override fun onSynchronousComplicationRequest(
complicationInstanceId: Int,
type: Int
+ ) = onSynchronousComplicationRequest2(
+ complicationInstanceId,
+ isForSafeWatchFace = false,
+ type
+ )
+
+ override fun onSynchronousComplicationRequest2(
+ complicationInstanceId: Int,
+ isForSafeWatchFace: Boolean,
+ type: Int
): android.support.wearable.complications.ComplicationData? {
val expectedDataType = fromWireType(type)
val complicationType = fromWireType(type)
@@ -561,10 +623,12 @@
null
mainThreadHandler.post {
this@ComplicationDataSourceService.onComplicationRequest(
+ @Suppress("NewApi")
ComplicationRequest(
complicationInstanceId,
complicationType,
- immediateResponseRequired = true
+ immediateResponseRequired = true,
+ isForSafeWatchFace = isForSafeWatchFace
),
object : ComplicationRequestListener {
override fun onComplicationData(complicationData: ComplicationData?) {
@@ -717,6 +781,11 @@
* called, to declare a specific watch face as safe. An entry can also be a package name, as
* if [ComponentName.getPackageName] had been called, in which case any watch face under the
* app with that package name will be considered safe for this complication data source.
+ *
+ * From Android T, if this provider has the privileged permission
+ * com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACEl, then
+ * [ComplicationRequest.isForSafeWatchFace] will be true if the request is on behalf of a
+ * watch face in this list.
*/
// TODO(b/192233205): Migrate value to androidx.
public const val METADATA_KEY_SAFE_WATCH_FACES: String =
diff --git a/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceServiceTest.kt b/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceServiceTest.kt
index a568b67..901fd9d 100644
--- a/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceServiceTest.kt
+++ b/wear/watchface/watchface-complications-data-source/src/test/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceServiceTest.kt
@@ -15,13 +15,13 @@
*/
package androidx.wear.watchface.complications.datasource
+import android.support.wearable.complications.ComplicationData as WireComplicationData
import android.content.Intent
import android.content.res.Resources
import android.os.Build
import android.os.Handler
import android.os.HandlerThread
import android.os.RemoteException
-import android.support.wearable.complications.ComplicationData as WireComplicationData
import android.support.wearable.complications.IComplicationManager
import android.support.wearable.complications.IComplicationProvider
import android.util.Log
@@ -172,6 +172,25 @@
}
@Test
+ fun testOnComplicationRequest_isForSafeWatchFace() {
+ mService.responseData = LongTextComplicationData.Builder(
+ PlainComplicationText.Builder("hello").build(),
+ ComplicationText.EMPTY
+ ).build()
+ val id = 123
+
+ @Suppress("NewApi") // onUpdate2
+ mProvider.onUpdate2(
+ id, ComplicationType.LONG_TEXT.toWireComplicationType(),
+ /* isForSafeWatchFace= */ true, mLocalManager
+ )
+
+ assertThat(mUpdateComplicationDataLatch.await(1000, TimeUnit.MILLISECONDS)).isTrue()
+ @Suppress("NewApi") // isForSafeWatchFace
+ assertThat(mService.lastRequest!!.isForSafeWatchFace).isTrue()
+ }
+
+ @Test
@Config(sdk = [Build.VERSION_CODES.TIRAMISU])
fun testOnComplicationRequestWithExpression_doesNotEvaluateExpression() {
mService.responseData =
@@ -453,6 +472,45 @@
}
}
+ @Test
+ @Suppress("NewApi") // onSynchronousComplicationRequest2
+ fun testImmediateRequest_isForSafeWatchFace() {
+ val id = 123
+ mService.responseData = LongTextComplicationData.Builder(
+ PlainComplicationText.Builder("hello").build(),
+ ComplicationText.EMPTY
+ ).build()
+ val thread = HandlerThread("testThread")
+ try {
+ thread.start()
+ val threadHandler = Handler(thread.looper)
+ val response =
+ AtomicReference<android.support.wearable.complications.ComplicationData>()
+ val doneLatch = CountDownLatch(1)
+ threadHandler.post {
+ try {
+ @Suppress("NewApi") // onSynchronousComplicationRequest2
+ response.set(
+ mProvider.onSynchronousComplicationRequest2(
+ id,
+ /* isForSafeWatchFace= */ true,
+ ComplicationType.LONG_TEXT.toWireComplicationType()
+ )
+ )
+ doneLatch.countDown()
+ } catch (e: RemoteException) {
+ // Should not happen
+ }
+ }
+
+ assertThat(doneLatch.await(1000, TimeUnit.MILLISECONDS)).isTrue()
+ @Suppress("NewApi") // isForSafeWatchFace
+ assertThat(mService.lastRequest!!.isForSafeWatchFace).isTrue()
+ } finally {
+ thread.quitSafely()
+ }
+ }
+
private fun runUiThreadTasksWhileAwaitingDataLatch(timeout: Long) {
// Allowing UI thread to execute while we wait for the data latch.
var attempts: Long = 0
diff --git a/wear/watchface/watchface-complications-data/src/main/aidl/android/support/wearable/complications/IComplicationProvider.aidl b/wear/watchface/watchface-complications-data/src/main/aidl/android/support/wearable/complications/IComplicationProvider.aidl
index e496132..d5e8eba 100644
--- a/wear/watchface/watchface-complications-data/src/main/aidl/android/support/wearable/complications/IComplicationProvider.aidl
+++ b/wear/watchface/watchface-complications-data/src/main/aidl/android/support/wearable/complications/IComplicationProvider.aidl
@@ -15,7 +15,7 @@
/**
* API version number. This should be incremented every time a new method is added.
*/
- const int API_VERSION = 2;
+ const int API_VERSION = 3;
/**
* Called when a complication data update is requested for the given complication id.
@@ -132,4 +132,30 @@
* @since API version 2.
*/
ComplicationData onSynchronousComplicationRequest(int complicationInstanceId, int type) = 7;
+
+ /**
+ * Same as {@link #onUpdate}, but specifies isForSafeWatchFace.
+ *
+ * @param complicationInstanceId The system's id for the updated complication which is a unique
+ * value for the tuple [Watch face ComponentName, complication slot ID].
+ * @param type The type of complication requested
+ * @param manager The binder for IComplicationManager
+ * @param isForSafeWatchFace Whether this request is on behalf of a safe watchface as defined by
+ * the data source.
+ * @since API version 3.
+ */
+ void onUpdate2(int complicationInstanceId, int type, boolean isForSafeWatchFace,
+ IBinder manager) = 8;
+
+ /**
+ * Same as {@link #onSynchronousComplicationRequest2}, but specifies isForSafeWatchFace.
+ *
+ * @param complicationInstanceId The system's id for the requested complication which is a
+ * @param type The type of complication requested
+ * unique value for the tuple [Watch face ComponentName, complication slot ID].
+ * @return The updated ComplicationData or null if no update is necessary
+ * @since API version 3.
+ */
+ ComplicationData onSynchronousComplicationRequest2(int complicationInstanceId,
+ boolean isForSafeWatchFace, int type) = 9;
}
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluator.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluator.kt
index ae7dd7e..a58485a 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluator.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluator.kt
@@ -20,6 +20,7 @@
import android.support.wearable.complications.ComplicationData as WireComplicationData
import android.support.wearable.complications.ComplicationText as WireComplicationText
import androidx.annotation.RestrictTo
+import androidx.core.util.Consumer
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat
import androidx.wear.protolayout.expression.pipeline.BoundDynamicType
import androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator
@@ -27,7 +28,6 @@
import androidx.wear.protolayout.expression.pipeline.ObservableStateStore
import androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway
import java.util.concurrent.Executor
-import java.util.function.Consumer
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.asCoroutineDispatcher
diff --git a/wear/watchface/watchface-complications-data/src/main/res/values-ca/complication_strings.xml b/wear/watchface/watchface-complications-data/src/main/res/values-ca/complication_strings.xml
index 28b4d7e..0131185 100644
--- a/wear/watchface/watchface-complications-data/src/main/res/values-ca/complication_strings.xml
+++ b/wear/watchface/watchface-complications-data/src/main/res/values-ca/complication_strings.xml
@@ -2,34 +2,34 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<plurals name="time_difference_short_days" formatted="false" msgid="3878057769320887026">
- <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g>d</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> d</item>
<item quantity="other"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> d</item>
<item quantity="one"><xliff:g id="NUMBER_OF_DAYS_0">%d</xliff:g> d</item>
</plurals>
<plurals name="time_difference_short_hours" formatted="false" msgid="6016687406802669982">
- <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g>h</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> h</item>
<item quantity="other"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> h</item>
<item quantity="one"><xliff:g id="NUMBER_OF_HOURS_0">%d</xliff:g> h</item>
</plurals>
<plurals name="time_difference_short_minutes" formatted="false" msgid="6752732458902810711">
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>m</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> m</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> m</item>
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_0">%d</xliff:g> m</item>
</plurals>
<string name="time_difference_short_days_and_hours" msgid="2384500200491672870">"<xliff:g id="SHORT_DAYS">%1$s</xliff:g> <xliff:g id="SHORT_HOURS">%2$s</xliff:g>"</string>
<string name="time_difference_short_hours_and_minutes" msgid="8030280938566792191">"<xliff:g id="SHORT_HOURS">%1$s</xliff:g> <xliff:g id="SHORT_MINUTES">%2$s</xliff:g>"</string>
<plurals name="time_difference_words_days" formatted="false" msgid="5109682345086392533">
- <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> days</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> dies</item>
<item quantity="other"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> dies</item>
<item quantity="one"><xliff:g id="NUMBER_OF_DAYS_0">%d</xliff:g> dia</item>
</plurals>
<plurals name="time_difference_words_hours" formatted="false" msgid="3172220157267000186">
- <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> hours</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> hores</item>
<item quantity="other"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> hores</item>
<item quantity="one"><xliff:g id="NUMBER_OF_HOURS_0">%d</xliff:g> hora</item>
</plurals>
<plurals name="time_difference_words_minutes" formatted="false" msgid="529404827937478243">
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> mins</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> min</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> min</item>
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_0">%d</xliff:g> min</item>
</plurals>
diff --git a/wear/watchface/watchface-complications-data/src/main/res/values-es-rUS/complication_strings.xml b/wear/watchface/watchface-complications-data/src/main/res/values-es-rUS/complication_strings.xml
index 6a7b049..fc52b84 100644
--- a/wear/watchface/watchface-complications-data/src/main/res/values-es-rUS/complication_strings.xml
+++ b/wear/watchface/watchface-complications-data/src/main/res/values-es-rUS/complication_strings.xml
@@ -2,34 +2,34 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<plurals name="time_difference_short_days" formatted="false" msgid="3878057769320887026">
- <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g>d</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> d</item>
<item quantity="other"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> d</item>
<item quantity="one"><xliff:g id="NUMBER_OF_DAYS_0">%d</xliff:g> d</item>
</plurals>
<plurals name="time_difference_short_hours" formatted="false" msgid="6016687406802669982">
- <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g>h</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> h</item>
<item quantity="other"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> h</item>
<item quantity="one"><xliff:g id="NUMBER_OF_HOURS_0">%d</xliff:g> h</item>
</plurals>
<plurals name="time_difference_short_minutes" formatted="false" msgid="6752732458902810711">
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>m</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> m</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> m</item>
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_0">%d</xliff:g> m</item>
</plurals>
<string name="time_difference_short_days_and_hours" msgid="2384500200491672870">"<xliff:g id="SHORT_DAYS">%1$s</xliff:g> <xliff:g id="SHORT_HOURS">%2$s</xliff:g>"</string>
<string name="time_difference_short_hours_and_minutes" msgid="8030280938566792191">"<xliff:g id="SHORT_HOURS">%1$s</xliff:g> <xliff:g id="SHORT_MINUTES">%2$s</xliff:g>"</string>
<plurals name="time_difference_words_days" formatted="false" msgid="5109682345086392533">
- <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> days</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> días</item>
<item quantity="other"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> días</item>
<item quantity="one"><xliff:g id="NUMBER_OF_DAYS_0">%d</xliff:g> día</item>
</plurals>
<plurals name="time_difference_words_hours" formatted="false" msgid="3172220157267000186">
- <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> hours</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> horas</item>
<item quantity="other"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> horas</item>
<item quantity="one"><xliff:g id="NUMBER_OF_HOURS_0">%d</xliff:g> hora</item>
</plurals>
<plurals name="time_difference_words_minutes" formatted="false" msgid="529404827937478243">
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> mins</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> min</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> min</item>
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_0">%d</xliff:g> min</item>
</plurals>
diff --git a/wear/watchface/watchface-complications-data/src/main/res/values-es/complication_strings.xml b/wear/watchface/watchface-complications-data/src/main/res/values-es/complication_strings.xml
index 78df7ea..d33c38f 100644
--- a/wear/watchface/watchface-complications-data/src/main/res/values-es/complication_strings.xml
+++ b/wear/watchface/watchface-complications-data/src/main/res/values-es/complication_strings.xml
@@ -19,17 +19,17 @@
<string name="time_difference_short_days_and_hours" msgid="2384500200491672870">"<xliff:g id="SHORT_DAYS">%1$s</xliff:g> <xliff:g id="SHORT_HOURS">%2$s</xliff:g>"</string>
<string name="time_difference_short_hours_and_minutes" msgid="8030280938566792191">"<xliff:g id="SHORT_HOURS">%1$s</xliff:g> <xliff:g id="SHORT_MINUTES">%2$s</xliff:g>"</string>
<plurals name="time_difference_words_days" formatted="false" msgid="5109682345086392533">
- <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> days</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> días</item>
<item quantity="other"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> días</item>
<item quantity="one"><xliff:g id="NUMBER_OF_DAYS_0">%d</xliff:g> día</item>
</plurals>
<plurals name="time_difference_words_hours" formatted="false" msgid="3172220157267000186">
- <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> hours</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> horas</item>
<item quantity="other"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> horas</item>
<item quantity="one"><xliff:g id="NUMBER_OF_HOURS_0">%d</xliff:g> hora</item>
</plurals>
<plurals name="time_difference_words_minutes" formatted="false" msgid="529404827937478243">
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> mins</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> minutos</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> minutos</item>
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_0">%d</xliff:g> minuto</item>
</plurals>
diff --git a/wear/watchface/watchface-complications-data/src/main/res/values-it/complication_strings.xml b/wear/watchface/watchface-complications-data/src/main/res/values-it/complication_strings.xml
index b7f280d9..e9bab9f 100644
--- a/wear/watchface/watchface-complications-data/src/main/res/values-it/complication_strings.xml
+++ b/wear/watchface/watchface-complications-data/src/main/res/values-it/complication_strings.xml
@@ -2,34 +2,34 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<plurals name="time_difference_short_days" formatted="false" msgid="3878057769320887026">
- <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g>d</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> g</item>
<item quantity="other"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> g</item>
<item quantity="one"><xliff:g id="NUMBER_OF_DAYS_0">%d</xliff:g> g</item>
</plurals>
<plurals name="time_difference_short_hours" formatted="false" msgid="6016687406802669982">
- <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g>h</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> h</item>
<item quantity="other"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> h</item>
<item quantity="one"><xliff:g id="NUMBER_OF_HOURS_0">%d</xliff:g> h</item>
</plurals>
<plurals name="time_difference_short_minutes" formatted="false" msgid="6752732458902810711">
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>m</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> m</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> m</item>
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_0">%d</xliff:g> m</item>
</plurals>
<string name="time_difference_short_days_and_hours" msgid="2384500200491672870">"<xliff:g id="SHORT_DAYS">%1$s</xliff:g> <xliff:g id="SHORT_HOURS">%2$s</xliff:g>"</string>
<string name="time_difference_short_hours_and_minutes" msgid="8030280938566792191">"<xliff:g id="SHORT_HOURS">%1$s</xliff:g> <xliff:g id="SHORT_MINUTES">%2$s</xliff:g>"</string>
<plurals name="time_difference_words_days" formatted="false" msgid="5109682345086392533">
- <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> days</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> giorni</item>
<item quantity="other"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> giorni</item>
<item quantity="one"><xliff:g id="NUMBER_OF_DAYS_0">%d</xliff:g> giorno</item>
</plurals>
<plurals name="time_difference_words_hours" formatted="false" msgid="3172220157267000186">
- <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> hours</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> ore</item>
<item quantity="other"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> ore</item>
<item quantity="one"><xliff:g id="NUMBER_OF_HOURS_0">%d</xliff:g> ora</item>
</plurals>
<plurals name="time_difference_words_minutes" formatted="false" msgid="529404827937478243">
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> mins</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> min</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> min</item>
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_0">%d</xliff:g> min</item>
</plurals>
diff --git a/wear/watchface/watchface-complications-data/src/main/res/values-pt-rBR/complication_strings.xml b/wear/watchface/watchface-complications-data/src/main/res/values-pt-rBR/complication_strings.xml
index 02899c2..bd29110 100644
--- a/wear/watchface/watchface-complications-data/src/main/res/values-pt-rBR/complication_strings.xml
+++ b/wear/watchface/watchface-complications-data/src/main/res/values-pt-rBR/complication_strings.xml
@@ -13,24 +13,24 @@
</plurals>
<plurals name="time_difference_short_minutes" formatted="false" msgid="6752732458902810711">
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>min</item>
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>m</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>min</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>min</item>
</plurals>
<string name="time_difference_short_days_and_hours" msgid="2384500200491672870">"<xliff:g id="SHORT_DAYS">%1$s</xliff:g> <xliff:g id="SHORT_HOURS">%2$s</xliff:g>"</string>
<string name="time_difference_short_hours_and_minutes" msgid="8030280938566792191">"<xliff:g id="SHORT_HOURS">%1$s</xliff:g><xliff:g id="SHORT_MINUTES">%2$s</xliff:g>"</string>
<plurals name="time_difference_words_days" formatted="false" msgid="5109682345086392533">
<item quantity="one"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> dia</item>
- <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> days</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> dias</item>
<item quantity="other"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> dias</item>
</plurals>
<plurals name="time_difference_words_hours" formatted="false" msgid="3172220157267000186">
<item quantity="one"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> hora</item>
- <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> hours</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> horas</item>
<item quantity="other"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> horas</item>
</plurals>
<plurals name="time_difference_words_minutes" formatted="false" msgid="529404827937478243">
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> minuto</item>
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> mins</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> minutos</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> minutos</item>
</plurals>
<string name="time_difference_now" msgid="2068359133884605223">"Agora"</string>
diff --git a/wear/watchface/watchface-complications-data/src/main/res/values-pt-rPT/complication_strings.xml b/wear/watchface/watchface-complications-data/src/main/res/values-pt-rPT/complication_strings.xml
index 43be2b3..e342d0c 100644
--- a/wear/watchface/watchface-complications-data/src/main/res/values-pt-rPT/complication_strings.xml
+++ b/wear/watchface/watchface-complications-data/src/main/res/values-pt-rPT/complication_strings.xml
@@ -2,34 +2,34 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<plurals name="time_difference_short_days" formatted="false" msgid="3878057769320887026">
- <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g>d</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> d</item>
<item quantity="other"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> d</item>
<item quantity="one"><xliff:g id="NUMBER_OF_DAYS_0">%d</xliff:g> d</item>
</plurals>
<plurals name="time_difference_short_hours" formatted="false" msgid="6016687406802669982">
- <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g>h</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> h</item>
<item quantity="other"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> h</item>
<item quantity="one"><xliff:g id="NUMBER_OF_HOURS_0">%d</xliff:g> h</item>
</plurals>
<plurals name="time_difference_short_minutes" formatted="false" msgid="6752732458902810711">
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>m</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> min</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> min</item>
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_0">%d</xliff:g> min</item>
</plurals>
<string name="time_difference_short_days_and_hours" msgid="2384500200491672870">"<xliff:g id="SHORT_DAYS">%1$s</xliff:g> <xliff:g id="SHORT_HOURS">%2$s</xliff:g>"</string>
<string name="time_difference_short_hours_and_minutes" msgid="8030280938566792191">"<xliff:g id="SHORT_HOURS">%1$s</xliff:g> <xliff:g id="SHORT_MINUTES">%2$s</xliff:g>"</string>
<plurals name="time_difference_words_days" formatted="false" msgid="5109682345086392533">
- <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> days</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> dias</item>
<item quantity="other"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> dias</item>
<item quantity="one"><xliff:g id="NUMBER_OF_DAYS_0">%d</xliff:g> dia</item>
</plurals>
<plurals name="time_difference_words_hours" formatted="false" msgid="3172220157267000186">
- <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> hours</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> horas</item>
<item quantity="other"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> horas</item>
<item quantity="one"><xliff:g id="NUMBER_OF_HOURS_0">%d</xliff:g> hora</item>
</plurals>
<plurals name="time_difference_words_minutes" formatted="false" msgid="529404827937478243">
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> mins</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> min</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> min</item>
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_0">%d</xliff:g> min</item>
</plurals>
diff --git a/wear/watchface/watchface-complications-data/src/main/res/values-pt/complication_strings.xml b/wear/watchface/watchface-complications-data/src/main/res/values-pt/complication_strings.xml
index 02899c2..bd29110 100644
--- a/wear/watchface/watchface-complications-data/src/main/res/values-pt/complication_strings.xml
+++ b/wear/watchface/watchface-complications-data/src/main/res/values-pt/complication_strings.xml
@@ -13,24 +13,24 @@
</plurals>
<plurals name="time_difference_short_minutes" formatted="false" msgid="6752732458902810711">
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>min</item>
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>m</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>min</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g>min</item>
</plurals>
<string name="time_difference_short_days_and_hours" msgid="2384500200491672870">"<xliff:g id="SHORT_DAYS">%1$s</xliff:g> <xliff:g id="SHORT_HOURS">%2$s</xliff:g>"</string>
<string name="time_difference_short_hours_and_minutes" msgid="8030280938566792191">"<xliff:g id="SHORT_HOURS">%1$s</xliff:g><xliff:g id="SHORT_MINUTES">%2$s</xliff:g>"</string>
<plurals name="time_difference_words_days" formatted="false" msgid="5109682345086392533">
<item quantity="one"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> dia</item>
- <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> days</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> dias</item>
<item quantity="other"><xliff:g id="NUMBER_OF_DAYS_1">%d</xliff:g> dias</item>
</plurals>
<plurals name="time_difference_words_hours" formatted="false" msgid="3172220157267000186">
<item quantity="one"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> hora</item>
- <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> hours</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> horas</item>
<item quantity="other"><xliff:g id="NUMBER_OF_HOURS_1">%d</xliff:g> horas</item>
</plurals>
<plurals name="time_difference_words_minutes" formatted="false" msgid="529404827937478243">
<item quantity="one"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> minuto</item>
- <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> mins</item>
+ <item quantity="many"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> minutos</item>
<item quantity="other"><xliff:g id="NUMBER_OF_MINUTES_1">%d</xliff:g> minutos</item>
</plurals>
<string name="time_difference_now" msgid="2068359133884605223">"Agora"</string>
diff --git a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt
index 47e9331..7aeaf57 100644
--- a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt
+++ b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt
@@ -20,6 +20,7 @@
import android.support.wearable.complications.ComplicationText as WireComplicationText
import android.util.Log
import androidx.core.content.ContextCompat
+import androidx.core.util.Consumer
import androidx.test.core.app.ApplicationProvider.getApplicationContext
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString
@@ -29,7 +30,6 @@
import androidx.wear.watchface.complications.data.ComplicationDataExpressionEvaluator.Companion.hasExpression
import com.google.common.truth.Expect
import com.google.common.truth.Truth.assertThat
-import java.util.function.Consumer
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.SharingStarted
diff --git a/window/extensions/extensions/api/current.txt b/window/extensions/extensions/api/current.txt
index f0c699b..9df379b 100644
--- a/window/extensions/extensions/api/current.txt
+++ b/window/extensions/extensions/api/current.txt
@@ -52,6 +52,7 @@
method @ColorInt public int getAnimationBackgroundColor();
method public int getLayoutDirection();
method public androidx.window.extensions.embedding.SplitAttributes.SplitType getSplitType();
+ field @ColorInt public static final int DEFAULT_ANIMATION_BACKGROUND_COLOR = 0; // 0x0
}
public static final class SplitAttributes.Builder {
diff --git a/window/extensions/extensions/api/public_plus_experimental_current.txt b/window/extensions/extensions/api/public_plus_experimental_current.txt
index f0c699b..9df379b 100644
--- a/window/extensions/extensions/api/public_plus_experimental_current.txt
+++ b/window/extensions/extensions/api/public_plus_experimental_current.txt
@@ -52,6 +52,7 @@
method @ColorInt public int getAnimationBackgroundColor();
method public int getLayoutDirection();
method public androidx.window.extensions.embedding.SplitAttributes.SplitType getSplitType();
+ field @ColorInt public static final int DEFAULT_ANIMATION_BACKGROUND_COLOR = 0; // 0x0
}
public static final class SplitAttributes.Builder {
diff --git a/window/extensions/extensions/api/restricted_current.txt b/window/extensions/extensions/api/restricted_current.txt
index f0c699b..9df379b 100644
--- a/window/extensions/extensions/api/restricted_current.txt
+++ b/window/extensions/extensions/api/restricted_current.txt
@@ -52,6 +52,7 @@
method @ColorInt public int getAnimationBackgroundColor();
method public int getLayoutDirection();
method public androidx.window.extensions.embedding.SplitAttributes.SplitType getSplitType();
+ field @ColorInt public static final int DEFAULT_ANIMATION_BACKGROUND_COLOR = 0; // 0x0
}
public static final class SplitAttributes.Builder {
diff --git a/window/extensions/extensions/src/test/java/androidx/window/extensions/embedding/SplitAttributesTest.java b/window/extensions/extensions/src/androidTest/java/androidx/window/extensions/embedding/SplitAttributesTest.java
similarity index 93%
rename from window/extensions/extensions/src/test/java/androidx/window/extensions/embedding/SplitAttributesTest.java
rename to window/extensions/extensions/src/androidTest/java/androidx/window/extensions/embedding/SplitAttributesTest.java
index 76a1107..0bd4c63 100644
--- a/window/extensions/extensions/src/test/java/androidx/window/extensions/embedding/SplitAttributesTest.java
+++ b/window/extensions/extensions/src/androidTest/java/androidx/window/extensions/embedding/SplitAttributesTest.java
@@ -36,17 +36,17 @@
final SplitAttributes layout1 = new SplitAttributes.Builder()
.setSplitType(splitEqually())
.setLayoutDirection(LayoutDirection.LOCALE)
- .setAnimationBackgroundColor(0)
+ .setAnimationBackgroundColor(SplitAttributes.DEFAULT_ANIMATION_BACKGROUND_COLOR)
.build();
final SplitAttributes layout2 = new SplitAttributes.Builder()
.setSplitType(new SplitAttributes.SplitType.HingeSplitType(splitEqually()))
.setLayoutDirection(LayoutDirection.LOCALE)
- .setAnimationBackgroundColor(0)
+ .setAnimationBackgroundColor(SplitAttributes.DEFAULT_ANIMATION_BACKGROUND_COLOR)
.build();
final SplitAttributes layout3 = new SplitAttributes.Builder()
.setSplitType(new SplitAttributes.SplitType.HingeSplitType(splitEqually()))
.setLayoutDirection(LayoutDirection.TOP_TO_BOTTOM)
- .setAnimationBackgroundColor(0)
+ .setAnimationBackgroundColor(SplitAttributes.DEFAULT_ANIMATION_BACKGROUND_COLOR)
.build();
final SplitAttributes layout4 = new SplitAttributes.Builder()
.setSplitType(new SplitAttributes.SplitType.HingeSplitType(splitEqually()))
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
index 8b6281a..e0bd30d 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
@@ -61,19 +61,18 @@
*/
@RestrictTo(LIBRARY_GROUP)
int VENDOR_API_LEVEL_1 = 1;
+
// TODO(b/241323716) Removed after we have annotation to check API level
/**
* A vendor API level constant. It helps to unify the format of documenting {@code @since}
* block.
- * <p>
* The added APIs for Vendor API level 2 are:
* <ul>
- * <li>{@link SplitPlaceholderRule.Builder#setFinishPrimaryWithPlaceholder}</li>
- * <li>{@link androidx.window.extensions.embedding.SplitAttributes} APIs</li>
+ * <li>{@link androidx.window.extensions.embedding.SplitPlaceholderRule.Builder#setFinishPrimaryWithPlaceholder(int)}</li>
+ * <li>{@link androidx.window.extensions.embedding.SplitAttributes}</li>
* <li>{@link ActivityEmbeddingComponent#setSplitAttributesCalculator(
- * androidx.window.extensions.core.util.function.Function)}</li>
+ * androidx.window.extensions.core.util.function.Function)}</li>
* </ul>
- * </p>
* @hide
*/
@RestrictTo(LIBRARY_GROUP)
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java
index 69bc4fe..bdca977 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java
@@ -38,6 +38,7 @@
/**
* Updates the rules of embedding activities that are started in the client process.
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_1}
*/
void setEmbeddingRules(@NonNull Set<EmbeddingRule> splitRules);
@@ -46,6 +47,7 @@
* {@link WindowExtensions#VENDOR_API_LEVEL_2}. Only used if
* {@link #setSplitInfoCallback(Consumer)} can't be called on
* {@link WindowExtensions#VENDOR_API_LEVEL_1}.
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_1}
*/
@Deprecated
@SuppressWarnings("ExecutorRegistration") // Jetpack will post it on the app-provided executor.
@@ -58,7 +60,7 @@
* re-posted to the executors provided by developers.
*
* @param consumer the callback to notify {@link SplitInfo} list changes
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
@SuppressWarnings("ExecutorRegistration") // Jetpack will post it on the app-provided executor.
default void setSplitInfoCallback(@NonNull Consumer<List<SplitInfo>> consumer) {
@@ -71,27 +73,46 @@
* {@link ActivityEmbeddingComponent#setSplitInfoCallback(Consumer)}.
* Added in {@link WindowExtensions#getVendorApiLevel()} 2, calling an earlier version will
* throw {@link java.lang.NoSuchMethodError}.
- * since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
void clearSplitInfoCallback();
/**
* Checks if an activity's' presentation is customized by its or any other process and only
* occupies a portion of Task bounds.
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_1}
*/
boolean isActivityEmbedded(@NonNull Activity activity);
/**
- * Sets a callback to compute the {@link SplitAttributes} for the {@link SplitRule} and current
- * window state provided in {@link SplitAttributesCalculatorParams}. This method can be used
- * to dynamically configure the split layout properties when new activities are launched or
- * window properties change. If set, {@link SplitRule#getDefaultSplitAttributes() the default
- * split properties} and {@link SplitRule#checkParentMetrics(WindowMetrics) restrictions}
- * will be ignored, and the callback will be invoked for every change.
+ * Sets a function to compute the {@link SplitAttributes} for the {@link SplitRule} and current
+ * window state provided in {@link SplitAttributesCalculatorParams}.
+ * <p>
+ * This method can be used to dynamically configure the split layout properties when new
+ * activities are launched or window properties change.
+ * <p>
+ * If the {@link SplitAttributes} calculator function is not set or is cleared by
+ * {@link #clearSplitAttributesCalculator()}, apps will update its split layout with
+ * registered {@link SplitRule} configurations:
+ * <ul>
+ * <li>Split with {@link SplitRule#getDefaultSplitAttributes()} if parent task
+ * container size constraints defined by
+ * {@link SplitRule#checkParentMetrics(WindowMetrics)} are satisfied</li>
+ * <li>Occupy the whole parent task bounds if the constraints are not satisfied. </li>
+ * </ul>
+ * <p>
+ * If the function is set, {@link SplitRule#getDefaultSplitAttributes()} and
+ * {@link SplitRule#checkParentMetrics(WindowMetrics)} will be passed to
+ * {@link SplitAttributesCalculatorParams} as
+ * {@link SplitAttributesCalculatorParams#getDefaultSplitAttributes()} and
+ * {@link SplitAttributesCalculatorParams#areDefaultConstraintsSatisfied()} instead, and the
+ * function will be invoked for every device and window state change regardless of the size
+ * constraints. Users can determine to follow the {@link SplitRule} behavior or customize
+ * the {@link SplitAttributes} with the {@link SplitAttributes} calculator function.
*
* @param calculator the callback to set. It will replace the previously set callback if it
* exists.
- * since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
void setSplitAttributesCalculator(
@NonNull Function<SplitAttributesCalculatorParams, SplitAttributes> calculator);
@@ -100,7 +121,7 @@
* Clears the previously callback set in {@link #setSplitAttributesCalculator(Function)}.
*
* @see #setSplitAttributesCalculator(Function)
- * since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
void clearSplitAttributesCalculator();
}
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityRule.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityRule.java
index ed30113..c741647 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityRule.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityRule.java
@@ -107,7 +107,7 @@
* matches the rule
* @param intentPredicate the {@link Predicate} to verify if a given {@link Intent}
* matches the rule
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
public Builder(@NonNull Predicate<Activity> activityPredicate,
@NonNull Predicate<Intent> intentPredicate) {
@@ -124,7 +124,7 @@
/**
* @see ActivityRule#getTag()
- * since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
*/
@NonNull
public Builder setTag(@NonNull String tag) {
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityStack.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityStack.java
index ce24bad..857738d 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityStack.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityStack.java
@@ -22,18 +22,29 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
/**
* Description of a group of activities stacked on top of each other and shown as a single
* container, all within the same task.
*/
public class ActivityStack {
+
@NonNull
private final List<Activity> mActivities;
private final boolean mIsEmpty;
+ /**
+ * The {@code ActivityStack} constructor
+ *
+ * @param activities {@link Activity Activities} in this application's process that
+ * belongs to this {@code ActivityStack}
+ * @param isEmpty Indicates whether there's any {@link Activity} running in this
+ * {@code ActivityStack}
+ */
ActivityStack(@NonNull List<Activity> activities, boolean isEmpty) {
+ Objects.requireNonNull(activities);
mActivities = new ArrayList<>(activities);
mIsEmpty = isEmpty;
}
@@ -77,13 +88,15 @@
@Override
public int hashCode() {
int result = (mIsEmpty ? 1 : 0);
- return result * 31 + mActivities.hashCode();
+ result = result * 31 + mActivities.hashCode();
+ return result;
}
@NonNull
@Override
public String toString() {
return "ActivityStack{" + "mActivities=" + mActivities
- + ", mIsEmpty=" + mIsEmpty + '}';
+ + ", mIsEmpty=" + mIsEmpty
+ + '}';
}
}
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/EmbeddingRule.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/EmbeddingRule.java
index 71acdd9..9333bdc 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/EmbeddingRule.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/EmbeddingRule.java
@@ -41,7 +41,7 @@
* {@link SplitRule} in the {@link Function} set with
* {@link ActivityEmbeddingComponent#setSplitAttributesCalculator(Function)}.
*
- * since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
*/
@Nullable
public String getTag() {
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributes.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributes.java
index 92a427a..e4f1e81 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributes.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributes.java
@@ -23,6 +23,7 @@
import static androidx.window.extensions.embedding.SplitAttributes.LayoutDirection.TOP_TO_BOTTOM;
import android.annotation.SuppressLint;
+import android.graphics.Color;
import androidx.annotation.ColorInt;
import androidx.annotation.FloatRange;
@@ -63,9 +64,22 @@
*
* @see SplitAttributes.SplitType
* @see SplitAttributes.LayoutDirection
- * since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
*/
public class SplitAttributes {
+
+ /**
+ * The default value for animation background color, which means to use the current theme window
+ * background color.
+ *
+ * Only opaque color is supported, so {@code 0} is used as the default. Any other non-opaque
+ * color will be treated as the default.
+ *
+ * @see Builder#setAnimationBackgroundColor(int)
+ */
+ @ColorInt
+ public static final int DEFAULT_ANIMATION_BACKGROUND_COLOR = 0;
+
/**
* The type of window split, which defines the proportion of the parent
* window occupied by the primary and secondary activity containers.
@@ -413,6 +427,9 @@
* Gets the {@link ColorInt} to use for the background color during the
* animation of the split involving this {@code SplitAttributes} object.
*
+ * The default is {@link #DEFAULT_ANIMATION_BACKGROUND_COLOR}, which means
+ * to use the current theme window background color.
+ *
* @return The animation background {@code ColorInt}.
*/
@ColorInt
@@ -423,10 +440,9 @@
/**
* Builder for creating an instance of {@link SplitAttributes}.
*
- * The default split type is an equal split between primary and secondary
- * containers. The default layout direction is based on locale. The default
- * animation background color is 0, which specifies the theme window
- * background color.
+ * - The default split type is an equal split between primary and secondary containers.
+ * - The default layout direction is based on locale.
+ * - The default animation background color is to use the current theme window background color.
*/
public static final class Builder {
@NonNull
@@ -481,16 +497,23 @@
* animation of the split involving this {@code SplitAttributes} object
* if the animation requires a background.
*
- * The default value is 0, which specifies the theme window background
- * color.
+ * Only opaque color is supported.
+ *
+ * The default value is {@link #DEFAULT_ANIMATION_BACKGROUND_COLOR}, which
+ * means to use the current theme window background color. Any non-opaque
+ * animation color will be treated as
+ * {@link #DEFAULT_ANIMATION_BACKGROUND_COLOR}.
*
* @param color A packed color int of the form {@code AARRGGBB} for the
- * animation background color.
+ * animation background color.
* @return This {@code Builder}.
*/
@NonNull
public Builder setAnimationBackgroundColor(@ColorInt int color) {
- mAnimationBackgroundColor = color;
+ // Any non-opaque color will be treated as the default.
+ mAnimationBackgroundColor = Color.alpha(color) != 255
+ ? DEFAULT_ANIMATION_BACKGROUND_COLOR
+ : color;
return this;
}
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributesCalculatorParams.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributesCalculatorParams.java
index ad7aa1b..80f98fe 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributesCalculatorParams.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributesCalculatorParams.java
@@ -32,7 +32,7 @@
* {@link SplitRule} by {@link #getSplitRuleTag()} if {@link SplitRule#getTag()} is specified.
*
* @see ActivityEmbeddingComponent#clearSplitAttributesCalculator()
- * since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
*/
public class SplitAttributesCalculatorParams {
@NonNull
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitInfo.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitInfo.java
index 9b1b24f..33b8bb7 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitInfo.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitInfo.java
@@ -20,8 +20,11 @@
import androidx.window.extensions.WindowExtensions;
import androidx.window.extensions.embedding.SplitAttributes.SplitType;
+import java.util.Objects;
+
/** Describes a split of two containers with activities. */
public class SplitInfo {
+
@NonNull
private final ActivityStack mPrimaryActivityStack;
@NonNull
@@ -29,9 +32,19 @@
@NonNull
private final SplitAttributes mSplitAttributes;
+ /**
+ * The {@code SplitInfo} constructor.
+ *
+ * @param primaryActivityStack The primary {@link ActivityStack}.
+ * @param secondaryActivityStack The secondary {@link ActivityStack}.
+ * @param splitAttributes The current {@link SplitAttributes} of this split pair.
+ */
SplitInfo(@NonNull ActivityStack primaryActivityStack,
@NonNull ActivityStack secondaryActivityStack,
@NonNull SplitAttributes splitAttributes) {
+ Objects.requireNonNull(primaryActivityStack);
+ Objects.requireNonNull(secondaryActivityStack);
+ Objects.requireNonNull(splitAttributes);
mPrimaryActivityStack = primaryActivityStack;
mSecondaryActivityStack = secondaryActivityStack;
mSplitAttributes = splitAttributes;
@@ -64,7 +77,7 @@
/**
* Returns the {@link SplitAttributes} of this split.
- * since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
*/
@NonNull
public SplitAttributes getSplitAttributes() {
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitPairRule.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitPairRule.java
index 1140790..ada0637 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitPairRule.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitPairRule.java
@@ -165,7 +165,7 @@
* @param parentWindowMetricsPredicate the {@link Predicate} to verify if the matched split
* pair is allowed to show adjacent to each other with the
* given parent {@link WindowMetrics}
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
public Builder(@NonNull Predicate<Pair<Activity, Activity>> activityPairPredicate,
@NonNull Predicate<Pair<Activity, Intent>> activityIntentPredicate,
@@ -209,7 +209,7 @@
* Overrides values if set in {@link #setSplitRatio(float)} and
* {@link #setLayoutDirection(int)}
*
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
@NonNull
public Builder setDefaultSplitAttributes(@NonNull SplitAttributes attrs) {
@@ -255,7 +255,7 @@
/**
* @see SplitPairRule#getTag()
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
@NonNull
public Builder setTag(@NonNull String tag) {
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitPlaceholderRule.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitPlaceholderRule.java
index e6cfed8..38b5451 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitPlaceholderRule.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitPlaceholderRule.java
@@ -129,7 +129,7 @@
* Determines what happens with the primary container when all activities are finished in the
* associated secondary/placeholder container.
*
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
// TODO(b/238905747): Add api guard for extensions.
@SplitPlaceholderFinishBehavior
@@ -192,7 +192,7 @@
* @param parentWindowMetricsPredicate the {@link Predicate} to verify if the placeholder
* {@link Activity} should be launched with the given
* {@link WindowMetrics}
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
public Builder(@NonNull Intent placeholderIntent,
@NonNull Predicate<Activity> activityPredicate,
@@ -238,7 +238,7 @@
* Overrides values if set in {@link #setSplitRatio(float)} and
* {@link #setLayoutDirection(int)}
*
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
@NonNull
public Builder setDefaultSplitAttributes(@NonNull SplitAttributes attrs) {
@@ -269,7 +269,7 @@
/**
* @see SplitPlaceholderRule#getFinishPrimaryWithPlaceholder()
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
// TODO(b/238905747): Add api guard for extensions.
@NonNull
@@ -281,7 +281,7 @@
/**
* @see SplitPlaceholderRule#getTag()
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
@NonNull
public Builder setTag(@NonNull String tag) {
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitRule.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitRule.java
index 171df7b..dd02b14 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitRule.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitRule.java
@@ -141,7 +141,7 @@
* Returns the default {@link SplitAttributes} which is applied if
* {@link #checkParentMetrics(WindowMetrics)} is {@code true}.
*
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
@NonNull
public SplitAttributes getDefaultSplitAttributes() {
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/layout/WindowLayoutComponent.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/layout/WindowLayoutComponent.java
index d24f981..9ed7d17 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/layout/WindowLayoutComponent.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/layout/WindowLayoutComponent.java
@@ -40,10 +40,11 @@
*/
public interface WindowLayoutComponent {
/**
- * @deprecated Use {@link #addWindowLayoutInfoListener(Context,Consumer)}
+ * @deprecated Use {@link #addWindowLayoutInfoListener(Context, Consumer)}
* starting with {@link WindowExtensions#VENDOR_API_LEVEL_2}. Only used if
* {@link #addWindowLayoutInfoListener(Context, Consumer)} can't be
* called on {@link WindowExtensions#VENDOR_API_LEVEL_1}.
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_1}
*/
@Deprecated
void addWindowLayoutInfoListener(@NonNull Activity activity,
@@ -54,6 +55,7 @@
* {@link WindowExtensions#VENDOR_API_LEVEL_2}. Only used if
* {@link #removeWindowLayoutInfoListener(Consumer)} can't be called on
* {@link WindowExtensions#VENDOR_API_LEVEL_1}.
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_1}
*/
@Deprecated
void removeWindowLayoutInfoListener(
@@ -61,7 +63,11 @@
// TODO(b/264546746): Remove addWindowLayoutInfoListener(Context, java.util.function.Consumer)
// after apps update to the latest WM Jetpack library.
- /** @deprecated Use {@link #addWindowLayoutInfoListener(Context, Consumer)} instead */
+
+ /**
+ * @deprecated Use {@link #addWindowLayoutInfoListener(Context, Consumer)} instead
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ */
@SuppressWarnings("PairedRegistration")
// The paired method for unregistering is also removeWindowLayoutInfoListener.
@Deprecated
@@ -84,7 +90,7 @@
* {@link Context#createWindowContext(Display, int , Bundle)}, or
* {@link android.inputmethodservice.InputMethodService}.
* @param consumer interested in receiving updates to {@link WindowLayoutInfo}
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
// TODO(b/238905747): Add api guard for extensions.
@SuppressWarnings("PairedRegistration")
@@ -99,7 +105,7 @@
* Removes a listener no longer interested in receiving updates.
*
* @param consumer no longer interested in receiving updates to {@link WindowLayoutInfo}
- * since {@link WindowExtensions#VENDOR_API_LEVEL_2}
+ * Since {@link WindowExtensions#VENDOR_API_LEVEL_2}
*/
default void removeWindowLayoutInfoListener(@NonNull Consumer<WindowLayoutInfo> consumer) {
throw new UnsupportedOperationException("This method must not be called unless there is a"
diff --git a/window/window-demos/demo/build.gradle b/window/window-demos/demo/build.gradle
index e579b7f..bc8df52 100644
--- a/window/window-demos/demo/build.gradle
+++ b/window/window-demos/demo/build.gradle
@@ -87,4 +87,4 @@
type = LibraryType.SAMPLES
inceptionYear = "2023"
description = "Samples for the WM Jetpack Library"
-}
\ No newline at end of file
+}
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/DemoActivityEmbeddingController.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/DemoActivityEmbeddingController.kt
index 0d3771e..69542ac 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/DemoActivityEmbeddingController.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/DemoActivityEmbeddingController.kt
@@ -16,8 +16,8 @@
package androidx.window.demo.embedding
-import androidx.annotation.ColorInt
import androidx.annotation.GuardedBy
+import androidx.window.embedding.SplitAttributes
import java.util.concurrent.locks.ReentrantLock
import kotlin.concurrent.withLock
@@ -27,16 +27,14 @@
private val lock = Object()
@GuardedBy("lock")
- @ColorInt
- private var _animationBackgroundColor = 0
+ private var _animationBackgroundColor = SplitAttributes.BackgroundColor.DEFAULT
/** Animation background color to use when the animation requires a background. */
- var animationBackgroundColor: Int
- @ColorInt
+ var animationBackgroundColor: SplitAttributes.BackgroundColor
get() = synchronized(lock) {
_animationBackgroundColor
}
- set(@ColorInt value) = synchronized(lock) {
+ set(value) = synchronized(lock) {
_animationBackgroundColor = value
}
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
index 1886454..74adead 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
@@ -43,10 +43,10 @@
/**
* Initializes SplitController with a set of statically defined rules.
*/
-@OptIn(ExperimentalWindowApi::class)
class ExampleWindowInitializer : Initializer<RuleController> {
private val mDemoActivityEmbeddingController = DemoActivityEmbeddingController.getInstance()
+ @OptIn(ExperimentalWindowApi::class)
override fun create(context: Context): RuleController {
SplitController.getInstance(context).apply {
if (isSplitAttributesCalculatorSupported()) {
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt
index 5f686b2..56850b4 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt
@@ -410,12 +410,12 @@
const val SUFFIX_REVERSED = "_reversed"
const val SUFFIX_AND_HORIZONTAL_LAYOUT_IN_TABLETOP = "_and_horizontal_layout_in_tabletop"
const val SUFFIX_AND_FULLSCREEN_IN_BOOK_MODE = "_and_fullscreen_in_book_mode"
- val ANIMATION_BACKGROUND_COLORS_TEXT = arrayOf("BLACK", "BLUE", "GREEN", "YELLOW")
+ val ANIMATION_BACKGROUND_COLORS_TEXT = arrayOf("DEFAULT", "BLUE", "GREEN", "YELLOW")
val ANIMATION_BACKGROUND_COLORS_VALUE = arrayOf(
- Color.BLACK,
- Color.BLUE,
- Color.GREEN,
- Color.YELLOW
+ SplitAttributes.BackgroundColor.DEFAULT,
+ SplitAttributes.BackgroundColor.color(Color.BLUE),
+ SplitAttributes.BackgroundColor.color(Color.GREEN),
+ SplitAttributes.BackgroundColor.color(Color.YELLOW)
)
/**
diff --git a/window/window-demos/demo/src/main/res/layout/activity_split_activity_layout.xml b/window/window-demos/demo/src/main/res/layout/activity_split_activity_layout.xml
index 0bbcddf..ab54e1e 100644
--- a/window/window-demos/demo/src/main/res/layout/activity_split_activity_layout.xml
+++ b/window/window-demos/demo/src/main/res/layout/activity_split_activity_layout.xml
@@ -111,6 +111,12 @@
android:layout_height="wrap_content"
android:text="Always launch E in fullscreen" />
+ <CheckBox
+ android:id="@+id/setLaunchingEInActivityStack"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="Launch in current container" />
+
<View
android:layout_width="match_parent"
android:layout_height="1dp"
diff --git a/window/window/api/current.txt b/window/window/api/current.txt
index 2a716a3..c280797 100644
--- a/window/window/api/current.txt
+++ b/window/window/api/current.txt
@@ -84,19 +84,29 @@
}
public final class SplitAttributes {
- method public int getAnimationBackgroundColor();
+ method public androidx.window.embedding.SplitAttributes.BackgroundColor getAnimationBackgroundColor();
method public androidx.window.embedding.SplitAttributes.LayoutDirection getLayoutDirection();
method public androidx.window.embedding.SplitAttributes.SplitType getSplitType();
- property public final int animationBackgroundColor;
+ property public final androidx.window.embedding.SplitAttributes.BackgroundColor animationBackgroundColor;
property public final androidx.window.embedding.SplitAttributes.LayoutDirection layoutDirection;
property public final androidx.window.embedding.SplitAttributes.SplitType splitType;
field public static final androidx.window.embedding.SplitAttributes.Companion Companion;
}
+ public static final class SplitAttributes.BackgroundColor {
+ method public static androidx.window.embedding.SplitAttributes.BackgroundColor color(@ColorInt @IntRange(from=android.graphics.Color.BLACK.toLong(), to=android.graphics.Color.WHITE.toLong()) int color);
+ field public static final androidx.window.embedding.SplitAttributes.BackgroundColor.Companion Companion;
+ field public static final androidx.window.embedding.SplitAttributes.BackgroundColor DEFAULT;
+ }
+
+ public static final class SplitAttributes.BackgroundColor.Companion {
+ method public androidx.window.embedding.SplitAttributes.BackgroundColor color(@ColorInt @IntRange(from=android.graphics.Color.BLACK.toLong(), to=android.graphics.Color.WHITE.toLong()) int color);
+ }
+
public static final class SplitAttributes.Builder {
ctor public SplitAttributes.Builder();
method public androidx.window.embedding.SplitAttributes build();
- method public androidx.window.embedding.SplitAttributes.Builder setAnimationBackgroundColor(@ColorInt int color);
+ method public androidx.window.embedding.SplitAttributes.Builder setAnimationBackgroundColor(androidx.window.embedding.SplitAttributes.BackgroundColor color);
method public androidx.window.embedding.SplitAttributes.Builder setLayoutDirection(androidx.window.embedding.SplitAttributes.LayoutDirection layoutDirection);
method public androidx.window.embedding.SplitAttributes.Builder setSplitType(androidx.window.embedding.SplitAttributes.SplitType type);
}
diff --git a/window/window/api/public_plus_experimental_current.txt b/window/window/api/public_plus_experimental_current.txt
index 986a2d0..adb525c 100644
--- a/window/window/api/public_plus_experimental_current.txt
+++ b/window/window/api/public_plus_experimental_current.txt
@@ -91,19 +91,29 @@
}
public final class SplitAttributes {
- method public int getAnimationBackgroundColor();
+ method public androidx.window.embedding.SplitAttributes.BackgroundColor getAnimationBackgroundColor();
method public androidx.window.embedding.SplitAttributes.LayoutDirection getLayoutDirection();
method public androidx.window.embedding.SplitAttributes.SplitType getSplitType();
- property public final int animationBackgroundColor;
+ property public final androidx.window.embedding.SplitAttributes.BackgroundColor animationBackgroundColor;
property public final androidx.window.embedding.SplitAttributes.LayoutDirection layoutDirection;
property public final androidx.window.embedding.SplitAttributes.SplitType splitType;
field public static final androidx.window.embedding.SplitAttributes.Companion Companion;
}
+ public static final class SplitAttributes.BackgroundColor {
+ method public static androidx.window.embedding.SplitAttributes.BackgroundColor color(@ColorInt @IntRange(from=android.graphics.Color.BLACK.toLong(), to=android.graphics.Color.WHITE.toLong()) int color);
+ field public static final androidx.window.embedding.SplitAttributes.BackgroundColor.Companion Companion;
+ field public static final androidx.window.embedding.SplitAttributes.BackgroundColor DEFAULT;
+ }
+
+ public static final class SplitAttributes.BackgroundColor.Companion {
+ method public androidx.window.embedding.SplitAttributes.BackgroundColor color(@ColorInt @IntRange(from=android.graphics.Color.BLACK.toLong(), to=android.graphics.Color.WHITE.toLong()) int color);
+ }
+
public static final class SplitAttributes.Builder {
ctor public SplitAttributes.Builder();
method public androidx.window.embedding.SplitAttributes build();
- method public androidx.window.embedding.SplitAttributes.Builder setAnimationBackgroundColor(@ColorInt int color);
+ method public androidx.window.embedding.SplitAttributes.Builder setAnimationBackgroundColor(androidx.window.embedding.SplitAttributes.BackgroundColor color);
method public androidx.window.embedding.SplitAttributes.Builder setLayoutDirection(androidx.window.embedding.SplitAttributes.LayoutDirection layoutDirection);
method public androidx.window.embedding.SplitAttributes.Builder setSplitType(androidx.window.embedding.SplitAttributes.SplitType type);
}
diff --git a/window/window/api/restricted_current.txt b/window/window/api/restricted_current.txt
index 2a716a3..c280797 100644
--- a/window/window/api/restricted_current.txt
+++ b/window/window/api/restricted_current.txt
@@ -84,19 +84,29 @@
}
public final class SplitAttributes {
- method public int getAnimationBackgroundColor();
+ method public androidx.window.embedding.SplitAttributes.BackgroundColor getAnimationBackgroundColor();
method public androidx.window.embedding.SplitAttributes.LayoutDirection getLayoutDirection();
method public androidx.window.embedding.SplitAttributes.SplitType getSplitType();
- property public final int animationBackgroundColor;
+ property public final androidx.window.embedding.SplitAttributes.BackgroundColor animationBackgroundColor;
property public final androidx.window.embedding.SplitAttributes.LayoutDirection layoutDirection;
property public final androidx.window.embedding.SplitAttributes.SplitType splitType;
field public static final androidx.window.embedding.SplitAttributes.Companion Companion;
}
+ public static final class SplitAttributes.BackgroundColor {
+ method public static androidx.window.embedding.SplitAttributes.BackgroundColor color(@ColorInt @IntRange(from=android.graphics.Color.BLACK.toLong(), to=android.graphics.Color.WHITE.toLong()) int color);
+ field public static final androidx.window.embedding.SplitAttributes.BackgroundColor.Companion Companion;
+ field public static final androidx.window.embedding.SplitAttributes.BackgroundColor DEFAULT;
+ }
+
+ public static final class SplitAttributes.BackgroundColor.Companion {
+ method public androidx.window.embedding.SplitAttributes.BackgroundColor color(@ColorInt @IntRange(from=android.graphics.Color.BLACK.toLong(), to=android.graphics.Color.WHITE.toLong()) int color);
+ }
+
public static final class SplitAttributes.Builder {
ctor public SplitAttributes.Builder();
method public androidx.window.embedding.SplitAttributes build();
- method public androidx.window.embedding.SplitAttributes.Builder setAnimationBackgroundColor(@ColorInt int color);
+ method public androidx.window.embedding.SplitAttributes.Builder setAnimationBackgroundColor(androidx.window.embedding.SplitAttributes.BackgroundColor color);
method public androidx.window.embedding.SplitAttributes.Builder setLayoutDirection(androidx.window.embedding.SplitAttributes.LayoutDirection layoutDirection);
method public androidx.window.embedding.SplitAttributes.Builder setSplitType(androidx.window.embedding.SplitAttributes.SplitType type);
}
diff --git a/window/window/samples/build.gradle b/window/window/samples/build.gradle
index a391e0a..e44e0ac 100644
--- a/window/window/samples/build.gradle
+++ b/window/window/samples/build.gradle
@@ -28,6 +28,7 @@
api(project(":window:window"))
compileOnly(project(":annotation:annotation-sampled"))
+ implementation("androidx.core:core:1.8.0")
}
android {
diff --git a/window/window/samples/src/main/java/androidx/window/samples/embedding/SplitAttributesCalculatorSamples.kt b/window/window/samples/src/main/java/androidx.window.samples.embedding/SplitAttributesCalculatorSamples.kt
similarity index 93%
rename from window/window/samples/src/main/java/androidx/window/samples/embedding/SplitAttributesCalculatorSamples.kt
rename to window/window/samples/src/main/java/androidx.window.samples.embedding/SplitAttributesCalculatorSamples.kt
index 916701e..2cba736 100644
--- a/window/window/samples/src/main/java/androidx/window/samples/embedding/SplitAttributesCalculatorSamples.kt
+++ b/window/window/samples/src/main/java/androidx.window.samples.embedding/SplitAttributesCalculatorSamples.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2023 The Android Open Source Project
+ * 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.
@@ -59,7 +59,7 @@
}
)
// Set the color to use when switching between vertical and horizontal
- .setAnimationBackgroundColor(Color.GRAY)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.GRAY))
.build()
}
return@setSplitAttributesCalculator if (
@@ -69,7 +69,7 @@
SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.splitEqually())
.setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
- .setAnimationBackgroundColor(Color.GRAY)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.GRAY))
.build()
} else {
// Expand containers if the device is in portrait or the width is less than 600 dp.
@@ -93,13 +93,13 @@
builder
.setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
// Set the color to use when switching between vertical and horizontal
- .setAnimationBackgroundColor(Color.GRAY)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.GRAY))
.build()
} else if (parentConfiguration.screenHeightDp >= 600) {
builder
.setLayoutDirection(SplitAttributes.LayoutDirection.TOP_TO_BOTTOM)
// Set the color to use when switching between vertical and horizontal
- .setAnimationBackgroundColor(Color.GRAY)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.GRAY))
.build()
} else {
// Fallback to expand the secondary container
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/ActivityFilterTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/ActivityFilterTest.kt
index 1d9d74c..44e9c5b 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/ActivityFilterTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/ActivityFilterTest.kt
@@ -52,16 +52,20 @@
}
@Test
- fun testMatchActivity_MatchIntentWithoutAction() {
+ fun testMatch_WithoutAction() {
val filter = ActivityFilter(COMPONENT_1, null /* intentAction */)
assertWithMessage("#matchActivity must be true because intent.component matches")
.that(filter.matchesActivity(activity)).isTrue()
+ assertWithMessage("#matchIntent must be true because intent.component matches")
+ .that(filter.matchesIntent(intent)).isTrue()
intent.component = COMPONENT_2
assertWithMessage("#matchActivity must be false because component mismatches")
.that(filter.matchesActivity(activity)).isFalse()
+ assertWithMessage("#matchesIntent must be false because component mismatches")
+ .that(filter.matchesIntent(intent)).isFalse()
doReturn(COMPONENT_1).whenever(activity).componentName
@@ -70,29 +74,37 @@
}
@Test
- fun testMatchActivity_MatchIntentWithAction() {
+ fun testMatch_WithAction() {
val filter = ActivityFilter(COMPONENT_1, ACTION)
assertWithMessage("#matchActivity must be false because intent has no action")
.that(filter.matchesActivity(activity)).isFalse()
+ assertWithMessage("#matchesIntent must be false because intent has no action")
+ .that(filter.matchesIntent(intent)).isFalse()
intent.action = ACTION
assertWithMessage("#matchActivity must be true because intent matches")
.that(filter.matchesActivity(activity)).isTrue()
+ assertWithMessage("#matchesIntent must be true because intent matches")
+ .that(filter.matchesIntent(intent)).isTrue()
}
@Test
- fun testMatchActivity_MatchWildcardWithAction() {
+ fun testMatch_WildcardWithAction() {
val filter = ActivityFilter(WILDCARD, ACTION)
assertWithMessage("#matchActivity must be false because intent has no action")
.that(filter.matchesActivity(activity)).isFalse()
+ assertWithMessage("#matchesIntent must be false because intent has no action")
+ .that(filter.matchesIntent(intent)).isFalse()
intent.action = ACTION
assertWithMessage("#matchActivity must be true because intent.action matches")
.that(filter.matchesActivity(activity)).isTrue()
+ assertWithMessage("#matchesIntent must be true because intent.action matches")
+ .that(filter.matchesIntent(intent)).isTrue()
intent.component = null
@@ -101,10 +113,15 @@
"of null component"
)
.that(filter.matchesActivity(activity)).isTrue()
+ assertWithMessage(
+ "#matchesIntent must be true because intent.action matches regardless " +
+ "of null component"
+ )
+ .that(filter.matchesIntent(intent)).isTrue()
}
@Test
- fun testMatchActivity_MatchIntentWithPackage() {
+ fun testMatch_IntentWithPackage() {
val filter = ActivityFilter(WILDCARD, null /* intentAction */)
intent.component = null
@@ -112,6 +129,20 @@
assertWithMessage("#matchActivity must be true because intent.package matches")
.that(filter.matchesActivity(activity)).isTrue()
+ assertWithMessage("#matchesIntent must be true because intent.package matches")
+ .that(filter.matchesIntent(intent)).isTrue()
+ }
+
+ @Test
+ fun testMatch_EmptyIntentWithWildcard() {
+ val filter = ActivityFilter(WILDCARD, null /* intentAction */)
+
+ intent.component = null
+
+ assertWithMessage("#matchActivity must be true because rule is wildcard to match all")
+ .that(filter.matchesActivity(activity)).isTrue()
+ assertWithMessage("#matchesIntent must be true because rule is wildcard to match all")
+ .that(filter.matchesIntent(intent)).isTrue()
}
companion object {
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
index 32e974e..0ce0920 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
@@ -19,15 +19,14 @@
import androidx.window.extensions.embedding.ActivityStack as OEMActivityStack
import androidx.window.extensions.embedding.SplitAttributes as OEMSplitAttributes
import androidx.window.extensions.embedding.SplitInfo as OEMSplitInfo
+import android.app.Activity
import android.graphics.Color
import androidx.window.WindowTestUtils
+import androidx.window.core.ExtensionsUtil
import androidx.window.core.PredicateAdapter
import androidx.window.embedding.SplitAttributes.SplitType
import androidx.window.extensions.WindowExtensions
import androidx.window.extensions.embedding.SplitAttributes.LayoutDirection.TOP_TO_BOTTOM
-import androidx.window.extensions.embedding.SplitAttributes.SplitType.ExpandContainersSplitType
-import androidx.window.extensions.embedding.SplitAttributes.SplitType.HingeSplitType
-import androidx.window.extensions.embedding.SplitAttributes.SplitType.RatioSplitType
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.whenever
import org.junit.Assert.assertEquals
@@ -49,29 +48,18 @@
fun testTranslateSplitInfoWithDefaultAttrs() {
WindowTestUtils.assumeAtLeastVendorApiLevel(WindowExtensions.VENDOR_API_LEVEL_2)
- val mockPrimaryActivityStack = mock<OEMActivityStack>().apply {
- whenever(activities).thenReturn(emptyList())
- whenever(isEmpty).thenReturn(true)
- }
- val mockSecondaryActivityStack = mock<OEMActivityStack>().apply {
- whenever(activities).thenReturn(emptyList())
- whenever(isEmpty).thenReturn(true)
- }
- val mockSplitAttributes = mock<OEMSplitAttributes>().apply {
- whenever(splitType).thenReturn(RatioSplitType.splitEqually())
- }
- val oemSplitInfo = mock<OEMSplitInfo>().apply {
- whenever(primaryActivityStack).thenReturn(mockPrimaryActivityStack)
- whenever(secondaryActivityStack).thenReturn(mockSecondaryActivityStack)
- whenever(splitAttributes).thenReturn(mockSplitAttributes)
- }
+ val oemSplitInfo = createTestOEMSplitInfo(
+ createTestOEMActivityStack(ArrayList(), true),
+ createTestOEMActivityStack(ArrayList(), true),
+ OEMSplitAttributes.Builder().build(),
+ )
val expectedSplitInfo = SplitInfo(
ActivityStack(ArrayList(), isEmpty = true),
ActivityStack(ArrayList(), isEmpty = true),
SplitAttributes.Builder()
.setSplitType(SplitType.splitEqually())
.setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
- .setAnimationBackgroundColor(0)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
)
assertEquals(listOf(expectedSplitInfo), adapter.translate(listOf(oemSplitInfo)))
@@ -81,22 +69,13 @@
fun testTranslateSplitInfoWithExpandingContainers() {
WindowTestUtils.assumeAtLeastVendorApiLevel(WindowExtensions.VENDOR_API_LEVEL_2)
- val mockPrimaryActivityStack = mock<OEMActivityStack>().apply {
- whenever(activities).thenReturn(emptyList())
- whenever(isEmpty).thenReturn(true)
- }
- val mockSecondaryActivityStack = mock<OEMActivityStack>().apply {
- whenever(activities).thenReturn(emptyList())
- whenever(isEmpty).thenReturn(true)
- }
- val mockSplitAttributes = mock<OEMSplitAttributes>().apply {
- whenever(splitType).thenReturn(ExpandContainersSplitType())
- }
- val oemSplitInfo = mock<OEMSplitInfo>().apply {
- whenever(primaryActivityStack).thenReturn(mockPrimaryActivityStack)
- whenever(secondaryActivityStack).thenReturn(mockSecondaryActivityStack)
- whenever(splitAttributes).thenReturn(mockSplitAttributes)
- }
+ val oemSplitInfo = createTestOEMSplitInfo(
+ createTestOEMActivityStack(ArrayList(), true),
+ createTestOEMActivityStack(ArrayList(), true),
+ OEMSplitAttributes.Builder()
+ .setSplitType(OEMSplitAttributes.SplitType.ExpandContainersSplitType())
+ .build(),
+ )
val expectedSplitInfo = SplitInfo(
ActivityStack(ArrayList(), isEmpty = true),
ActivityStack(ArrayList(), isEmpty = true),
@@ -113,18 +92,11 @@
fun testTranslateSplitInfoWithApiLevel1() {
WindowTestUtils.assumeBeforeVendorApiLevel(WindowExtensions.VENDOR_API_LEVEL_2)
+ val activityStack = createTestOEMActivityStack(ArrayList(), true)
val expectedSplitRatio = 0.3f
- val mockPrimaryActivityStack = mock<OEMActivityStack>().apply {
- whenever(activities).thenReturn(emptyList())
- whenever(isEmpty).thenReturn(true)
- }
- val mockSecondaryActivityStack = mock<OEMActivityStack>().apply {
- whenever(activities).thenReturn(emptyList())
- whenever(isEmpty).thenReturn(true)
- }
val oemSplitInfo = mock<OEMSplitInfo>().apply {
- whenever(primaryActivityStack).thenReturn(mockPrimaryActivityStack)
- whenever(secondaryActivityStack).thenReturn(mockSecondaryActivityStack)
+ whenever(primaryActivityStack).thenReturn(activityStack)
+ whenever(secondaryActivityStack).thenReturn(activityStack)
whenever(splitRatio).thenReturn(expectedSplitRatio)
}
@@ -144,33 +116,51 @@
fun testTranslateSplitInfoWithApiLevel2() {
WindowTestUtils.assumeAtLeastVendorApiLevel(WindowExtensions.VENDOR_API_LEVEL_2)
- val mockPrimaryActivityStack = mock<OEMActivityStack>().apply {
- whenever(activities).thenReturn(emptyList())
- whenever(isEmpty).thenReturn(true)
- }
- val mockSecondaryActivityStack = mock<OEMActivityStack>().apply {
- whenever(activities).thenReturn(emptyList())
- whenever(isEmpty).thenReturn(true)
- }
- val mockSplitAttributes = mock<OEMSplitAttributes>().apply {
- whenever(splitType).thenReturn(HingeSplitType(RatioSplitType(0.3f)))
- whenever(layoutDirection).thenReturn(TOP_TO_BOTTOM)
- whenever(animationBackgroundColor).thenReturn(Color.YELLOW)
- }
- val oemSplitInfo = mock<OEMSplitInfo>().apply {
- whenever(primaryActivityStack).thenReturn(mockPrimaryActivityStack)
- whenever(secondaryActivityStack).thenReturn(mockSecondaryActivityStack)
- whenever(splitAttributes).thenReturn(mockSplitAttributes)
- }
+ val oemSplitInfo = createTestOEMSplitInfo(
+ createTestOEMActivityStack(ArrayList(), true),
+ createTestOEMActivityStack(ArrayList(), true),
+ OEMSplitAttributes.Builder()
+ .setSplitType(
+ OEMSplitAttributes.SplitType.HingeSplitType(
+ OEMSplitAttributes.SplitType.RatioSplitType(0.3f)
+ )
+ ).setLayoutDirection(TOP_TO_BOTTOM)
+ .setAnimationBackgroundColor(Color.YELLOW)
+ .build(),
+ )
val expectedSplitInfo = SplitInfo(
ActivityStack(ArrayList(), isEmpty = true),
ActivityStack(ArrayList(), isEmpty = true),
SplitAttributes.Builder()
.setSplitType(SplitType.splitByHinge(SplitType.ratio(0.3f)))
.setLayoutDirection(SplitAttributes.LayoutDirection.TOP_TO_BOTTOM)
- .setAnimationBackgroundColor(Color.YELLOW)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.YELLOW))
.build()
)
assertEquals(listOf(expectedSplitInfo), adapter.translate(listOf(oemSplitInfo)))
}
+
+ private fun createTestOEMSplitInfo(
+ testPrimaryActivityStack: OEMActivityStack,
+ testSecondaryActivityStack: OEMActivityStack,
+ testSplitAttributes: OEMSplitAttributes,
+ ): OEMSplitInfo {
+ return mock<OEMSplitInfo>().apply {
+ whenever(primaryActivityStack).thenReturn(testPrimaryActivityStack)
+ whenever(secondaryActivityStack).thenReturn(testSecondaryActivityStack)
+ if (ExtensionsUtil.safeVendorApiLevel >= WindowExtensions.VENDOR_API_LEVEL_2) {
+ whenever(splitAttributes).thenReturn(testSplitAttributes)
+ }
+ }
+ }
+
+ private fun createTestOEMActivityStack(
+ testActivities: List<Activity>,
+ testIsEmpty: Boolean,
+ ): OEMActivityStack {
+ return mock<OEMActivityStack>().apply {
+ whenever(activities).thenReturn(testActivities)
+ whenever(isEmpty).thenReturn(testIsEmpty)
+ }
+ }
}
\ No newline at end of file
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingRuleConstructionTests.kt b/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingRuleConstructionTests.kt
index 62dcd3b..582d047 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingRuleConstructionTests.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingRuleConstructionTests.kt
@@ -81,7 +81,7 @@
val expectedSplitLayout = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.5f))
.setLayoutDirection(LOCALE)
- .setAnimationBackgroundColor(0)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
assertNull(rule.tag)
assertEquals(SPLIT_MIN_DIMENSION_DP_DEFAULT, rule.minWidthDp)
@@ -133,7 +133,7 @@
val expectedSplitLayout = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.3f))
.setLayoutDirection(TOP_TO_BOTTOM)
- .setAnimationBackgroundColor(Color.BLUE)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.BLUE))
.build()
assertEquals(TEST_TAG, rule.tag)
assertEquals(NEVER, rule.finishPrimaryWithSecondary)
@@ -154,7 +154,7 @@
val expectedSplitLayout = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.5f))
.setLayoutDirection(LOCALE)
- .setAnimationBackgroundColor(0)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
assertNull(rule.tag)
assertEquals(SPLIT_MIN_DIMENSION_DP_DEFAULT, rule.minWidthDp)
@@ -180,7 +180,7 @@
val expectedSplitLayout = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.3f))
.setLayoutDirection(LEFT_TO_RIGHT)
- .setAnimationBackgroundColor(Color.GREEN)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.GREEN))
.build()
filters.add(
SplitPairFilter(
@@ -382,7 +382,7 @@
val expectedSplitLayout = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.5f))
.setLayoutDirection(LOCALE)
- .setAnimationBackgroundColor(0)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
assertNull(rule.tag)
assertEquals(SPLIT_MIN_DIMENSION_DP_DEFAULT, rule.minWidthDp)
@@ -437,7 +437,8 @@
val expectedSplitLayout = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.3f))
.setLayoutDirection(BOTTOM_TO_TOP)
- .setAnimationBackgroundColor(application.resources.getColor(R.color.testColor, null))
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(
+ application.resources.getColor(R.color.testColor, null)))
.build()
assertEquals(TEST_TAG, rule.tag)
assertEquals(ALWAYS, rule.finishPrimaryWithPlaceholder)
@@ -465,7 +466,7 @@
val expectedSplitLayout = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.5f))
.setLayoutDirection(LOCALE)
- .setAnimationBackgroundColor(0)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
assertEquals(expectedSplitLayout, rule.defaultSplitAttributes)
assertTrue(rule.checkParentBounds(density, minValidWindowBounds()))
@@ -489,7 +490,7 @@
val expectedSplitLayout = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.3f))
.setLayoutDirection(LEFT_TO_RIGHT)
- .setAnimationBackgroundColor(Color.GREEN)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.GREEN))
.build()
val rule = SplitPlaceholderRule.Builder(filters, intent)
.setMinWidthDp(123)
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/SafeActivityEmbeddingComponentProviderTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/SafeActivityEmbeddingComponentProviderTest.kt
new file mode 100644
index 0000000..3b93a9a
--- /dev/null
+++ b/window/window/src/androidTest/java/androidx/window/embedding/SafeActivityEmbeddingComponentProviderTest.kt
@@ -0,0 +1,79 @@
+/*
+ * 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.window.embedding
+
+import android.util.Log
+import androidx.window.core.ConsumerAdapter
+import androidx.window.extensions.WindowExtensions
+import androidx.window.extensions.WindowExtensionsProvider
+import org.junit.Assert.assertNull
+import org.junit.Test
+
+/**
+ * An integration test to verify that if [WindowExtensionsProvider] is present then
+ * [SafeActivityEmbeddingComponentProvider.activityEmbeddingComponent] will return a value.
+ * This can fail if the implementation of window:extensions:extensions
+ * does not have the expected API.
+ */
+class SafeActivityEmbeddingComponentProviderTest {
+
+ /**
+ * Test that if [WindowExtensionsProvider] is available then
+ * use [SafeActivityEmbeddingComponentProvider.activityEmbeddingComponent] to validate.
+ * If [WindowExtensions.getActivityEmbeddingComponent] matches contract,
+ * return a non-null value.
+ * If it doesn't match, it will return a null.
+ *
+ * TODO(b/267708462) : add a more reliable test
+ */
+ @Test
+ fun activityEmbeddingComponentIsAvailable_ifProviderIsAvailable() {
+ val loader = SafeActivityEmbeddingComponentProviderTest::class.java.classLoader!!
+ val consumerAdapter = ConsumerAdapter(loader)
+ val windowExtensions: WindowExtensions = try {
+ WindowExtensionsProvider.getWindowExtensions()
+ } catch (e: UnsupportedOperationException) {
+ Log.d(TAG, "Device doesn't have WindowExtensions available")
+ return
+ }
+ val safeComponent = SafeActivityEmbeddingComponentProvider(
+ loader,
+ consumerAdapter,
+ windowExtensions
+ )
+ .activityEmbeddingComponent
+ try {
+ val actualComponent = windowExtensions.activityEmbeddingComponent
+ if (actualComponent == null) {
+ assertNull(safeComponent)
+ } else {
+ // TODO(b/267573854) : verify upon each api level
+ // TODO(b/267708462) : more reliable test for testing actual method matching
+ if (safeComponent == null) {
+ Log.d(TAG, "ActivityEmbeddingComponent on device doesn't match our constraints")
+ }
+ }
+ } catch (e: UnsupportedOperationException) {
+ // Invalid implementation of extensions
+ assertNull(safeComponent)
+ }
+ }
+
+ companion object {
+ private const val TAG = "SafeActivityEmbeddingComponentProviderTest"
+ }
+}
\ No newline at end of file
diff --git a/window/window/src/test/java/androidx/window/embedding/SplitAttributesTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/SplitAttributesTest.kt
similarity index 92%
rename from window/window/src/test/java/androidx/window/embedding/SplitAttributesTest.kt
rename to window/window/src/androidTest/java/androidx/window/embedding/SplitAttributesTest.kt
index 96571cc..69c507d 100644
--- a/window/window/src/test/java/androidx/window/embedding/SplitAttributesTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/SplitAttributesTest.kt
@@ -36,27 +36,27 @@
val attrs1 = SplitAttributes.Builder()
.setSplitType(SplitType.splitEqually())
.setLayoutDirection(LOCALE)
- .setAnimationBackgroundColor(0)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
val attrs2 = SplitAttributes.Builder()
.setSplitType(SplitType.splitByHinge())
.setLayoutDirection(LOCALE)
- .setAnimationBackgroundColor(0)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
val attrs3 = SplitAttributes.Builder()
.setSplitType(SplitType.splitByHinge())
.setLayoutDirection(TOP_TO_BOTTOM)
- .setAnimationBackgroundColor(0)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.DEFAULT)
.build()
val attrs4 = SplitAttributes.Builder()
.setSplitType(SplitType.splitByHinge())
.setLayoutDirection(TOP_TO_BOTTOM)
- .setAnimationBackgroundColor(Color.GREEN)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.GREEN))
.build()
val attrs5 = SplitAttributes.Builder()
.setSplitType(SplitType.splitByHinge())
.setLayoutDirection(TOP_TO_BOTTOM)
- .setAnimationBackgroundColor(Color.GREEN)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.color(Color.GREEN))
.build()
assertNotEquals(attrs1, attrs2)
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/SplitPairFilterTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/SplitPairFilterTest.kt
index 408102b..4c75bd7 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/SplitPairFilterTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/SplitPairFilterTest.kt
@@ -22,43 +22,122 @@
import com.google.common.truth.Truth.assertWithMessage
import com.nhaarman.mockitokotlin2.doReturn
import com.nhaarman.mockitokotlin2.mock
+import com.nhaarman.mockitokotlin2.whenever
+import org.junit.Before
import org.junit.Test
class SplitPairFilterTest {
- private val component1 = ComponentName("a.b.c", "a.b.c.TestActivity")
- private val component2 = ComponentName("d.e.f", "d.e.f.TestActivity")
- private val intentClassWildcard = ComponentName("d.e.f", "*")
- private val intent = Intent()
- private val activity = mock<Activity> {
- on { intent } doReturn intent
- on { componentName } doReturn component1
+ private val intent1 = Intent()
+ private val intent2 = Intent()
+ private val activity1 = mock<Activity> {
+ on { intent } doReturn intent1
+ on { componentName } doReturn COMPONENT_1
}
- private val filter =
- SplitPairFilter(component1, intentClassWildcard, null /* secondaryActivityIntentAction */)
+ private val activity2 = mock<Activity> {
+ on { intent } doReturn intent2
+ on { componentName } doReturn COMPONENT_2
+ }
- @Test
- fun testMatchActivityIntentPair_MatchIntentComponent() {
- assertWithMessage("#matchesActivityIntentPair must be false because intent is empty")
- .that(filter.matchesActivityIntentPair(activity, intent)).isFalse()
-
- intent.component = component2
-
- assertWithMessage("#matchesActivityIntentPair must be true because intent.component" +
- " matches")
- .that(filter.matchesActivityIntentPair(activity, intent)).isTrue()
+ @Before
+ fun setUp() {
+ intent1.component = COMPONENT_1
+ intent2.component = COMPONENT_2
}
@Test
- fun testMatchActivityIntentPair_MatchIntentPackage() {
- intent.`package` = intentClassWildcard.packageName
+ fun testMatch_WithoutAction() {
+ val filter = SplitPairFilter(
+ COMPONENT_1,
+ COMPONENT_2,
+ null /* secondaryActivityIntentAction */
+ )
+ assertWithMessage("#matchesActivityPair must be true because intents match")
+ .that(filter.matchesActivityPair(activity1, activity2)).isTrue()
+ assertWithMessage("#matchesActivityIntentPair must be true because intents match")
+ .that(filter.matchesActivityIntentPair(activity1, intent2)).isTrue()
+
+ assertWithMessage("#matchesActivityPair must be false because secondary doesn't match")
+ .that(filter.matchesActivityPair(activity1, activity1)).isFalse()
+ assertWithMessage(
+ "#matchesActivityIntentPair must be false because secondary doesn't match"
+ )
+ .that(filter.matchesActivityIntentPair(activity1, intent1)).isFalse()
+
+ assertWithMessage("#matchesActivityPair must be false because primary doesn't match")
+ .that(filter.matchesActivityPair(activity2, activity2)).isFalse()
+ assertWithMessage(
+ "#matchesActivityIntentPair must be false because primary doesn't match"
+ )
+ .that(filter.matchesActivityIntentPair(activity2, intent2)).isFalse()
+ }
+
+ @Test
+ fun testMatch_WithAction() {
+ val filter = SplitPairFilter(COMPONENT_1, WILDCARD, ACTION)
+
+ assertWithMessage("#matchesActivityPair must be false because intent has no action")
+ .that(filter.matchesActivityPair(activity1, activity2)).isFalse()
+ assertWithMessage("#matchesActivityIntentPair must be false because intent has no action")
+ .that(filter.matchesActivityIntentPair(activity1, intent2)).isFalse()
+
+ intent2.action = ACTION
+
+ assertWithMessage("#matchesActivityPair must be true because intent.action matches")
+ .that(filter.matchesActivityPair(activity1, activity2)).isTrue()
+ assertWithMessage("#matchesActivityIntentPair must be true because intent.action matches")
+ .that(filter.matchesActivityIntentPair(activity1, intent2)).isTrue()
+ }
+
+ @Test
+ fun testMatch_WithIntentPackage() {
+ val filter = SplitPairFilter(
+ COMPONENT_1,
+ CLASS_WILDCARD,
+ null /* secondaryActivityIntentAction */
+ )
+ intent2.component = null
+ intent2.`package` = CLASS_WILDCARD.packageName
+ doReturn(COMPONENT_1).whenever(activity2).componentName
+
+ assertWithMessage("#matchesActivityPair must be true because intent.package matches")
+ .that(filter.matchesActivityPair(activity1, activity2)).isTrue()
assertWithMessage("#matchesActivityIntentPair must be true because intent.package matches")
- .that(filter.matchesActivityIntentPair(activity, intent)).isTrue()
+ .that(filter.matchesActivityIntentPair(activity1, intent2)).isTrue()
- intent.component = component1
+ intent2.component = COMPONENT_1
- assertWithMessage("#matchesActivityIntentPair must be false because intent.component" +
- " doesn't match")
- .that(filter.matchesActivityIntentPair(activity, intent)).isFalse()
+ assertWithMessage(
+ "#matchesActivityPair must be false because intent.component doesn't match"
+ )
+ .that(filter.matchesActivityPair(activity1, activity1)).isFalse()
+ assertWithMessage(
+ "#matchesActivityIntentPair must be false because intent.component doesn't match"
+ )
+ .that(filter.matchesActivityIntentPair(activity1, intent1)).isFalse()
+ }
+
+ @Test
+ fun testMatch_EmptyIntentWithWildcard() {
+ val filter = SplitPairFilter(
+ WILDCARD,
+ WILDCARD,
+ null /* secondaryActivityIntentAction */
+ )
+ intent1.component = null
+ intent2.component = null
+
+ assertWithMessage("#matchesActivityPair must be true because rule is wildcard")
+ .that(filter.matchesActivityPair(activity1, activity2)).isTrue()
+ assertWithMessage("#matchesActivityIntentPair must be true because rule is wildcard")
+ .that(filter.matchesActivityIntentPair(activity1, intent2)).isTrue()
+ }
+
+ companion object {
+ private const val ACTION = "action.test"
+ private val COMPONENT_1 = ComponentName("a.b.c", "a.b.c.TestActivity")
+ private val COMPONENT_2 = ComponentName("d.e.f", "d.e.f.TestActivity")
+ private val WILDCARD = ComponentName("*", "*")
+ private val CLASS_WILDCARD = ComponentName("d.e.f", "*")
}
}
\ No newline at end of file
diff --git a/window/window/src/androidTest/java/androidx/window/layout/SafeWindowLayoutComponentProviderTest.kt b/window/window/src/androidTest/java/androidx/window/layout/SafeWindowLayoutComponentProviderTest.kt
index 246e9a3..bc78a38 100644
--- a/window/window/src/androidTest/java/androidx/window/layout/SafeWindowLayoutComponentProviderTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/layout/SafeWindowLayoutComponentProviderTest.kt
@@ -16,9 +16,9 @@
package androidx.window.layout
+import android.util.Log
import androidx.window.core.ConsumerAdapter
import androidx.window.extensions.WindowExtensionsProvider
-import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Test
@@ -46,11 +46,17 @@
if (actualComponent == null) {
assertNull(safeComponent)
} else {
- assertNotNull(safeComponent)
+ // TODO(b/267831038): verify upon each api level
+ // TODO(b/267708462): more reliable test for testing actual method matching
+ Log.d(TAG, "WindowLayoutComponent on device doesn't match our constraints")
}
} catch (e: UnsupportedOperationException) {
// Invalid implementation of extensions
assertNull(safeComponent)
}
}
+
+ companion object {
+ private const val TAG = "SafeWindowLayoutComponentProviderTest"
+ }
}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/embedding/ActivityEmbeddingController.kt b/window/window/src/main/java/androidx/window/embedding/ActivityEmbeddingController.kt
index d37a4ff..7a9574d 100644
--- a/window/window/src/main/java/androidx/window/embedding/ActivityEmbeddingController.kt
+++ b/window/window/src/main/java/androidx/window/embedding/ActivityEmbeddingController.kt
@@ -33,9 +33,8 @@
* @param activity the [Activity] to check.
*/
// TODO(b/204399167) Migrate to a Flow
- fun isActivityEmbedded(activity: Activity): Boolean {
- return embeddingBackend.isActivityEmbedded(activity)
- }
+ fun isActivityEmbedded(activity: Activity): Boolean =
+ embeddingBackend.isActivityEmbedded(activity)
companion object {
@Volatile
diff --git a/window/window/src/main/java/androidx/window/embedding/ActivityFilter.kt b/window/window/src/main/java/androidx/window/embedding/ActivityFilter.kt
index 836a897..b76a3c2 100644
--- a/window/window/src/main/java/androidx/window/embedding/ActivityFilter.kt
+++ b/window/window/src/main/java/androidx/window/embedding/ActivityFilter.kt
@@ -20,10 +20,11 @@
import android.content.Intent
import android.util.Log
import androidx.window.core.ActivityComponentInfo
-import androidx.window.embedding.MatcherUtils.isActivityOrIntentMatching
+import androidx.window.embedding.MatcherUtils.isActivityMatching
import androidx.window.embedding.MatcherUtils.isIntentMatching
import androidx.window.embedding.MatcherUtils.sDebugMatchers
import androidx.window.embedding.MatcherUtils.sMatchersTag
+import androidx.window.embedding.MatcherUtils.validateComponentName
/**
* Filter for [ActivityRule] and [SplitPlaceholderRule] that checks for component name match when
@@ -69,26 +70,7 @@
)
init {
- val packageName = activityComponentInfo.packageName
- val className = activityComponentInfo.className
- require(
- packageName.isNotEmpty()
- ) { "Package name must not be empty" }
- require(
- className.isNotEmpty()
- ) { "Activity class name must not be empty." }
- require(
- !(
- packageName.contains("*") &&
- packageName.indexOf("*") != packageName.length - 1
- )
- ) { "Wildcard in package name is only allowed at the end." }
- require(
- !(
- className.contains("*") &&
- className.indexOf("*") != className.length - 1
- )
- ) { "Wildcard in class name is only allowed at the end." }
+ validateComponentName(activityComponentInfo.packageName, activityComponentInfo.className)
}
/**
@@ -122,9 +104,8 @@
* @param activity the [Activity] to test against.
*/
fun matchesActivity(activity: Activity): Boolean {
- val match =
- isActivityOrIntentMatching(activity, activityComponentInfo) &&
- (intentAction == null || intentAction == activity.intent?.action)
+ val match = isActivityMatching(activity, activityComponentInfo) &&
+ (intentAction == null || intentAction == activity.intent?.action)
if (sDebugMatchers) {
val matchString = if (match) "MATCH" else "NO MATCH"
Log.w(
diff --git a/window/window/src/main/java/androidx/window/embedding/ActivityRule.kt b/window/window/src/main/java/androidx/window/embedding/ActivityRule.kt
index c231818..310a9fa 100644
--- a/window/window/src/main/java/androidx/window/embedding/ActivityRule.kt
+++ b/window/window/src/main/java/androidx/window/embedding/ActivityRule.kt
@@ -47,18 +47,29 @@
private var alwaysExpand: Boolean = false
/**
- * Whether the activity should always be expanded on launch. Some activities are supposed to
- * expand to the full task bounds, independent of the state of the split. An example is an
- * activity that blocks all user interactions, such as a warning dialog.
+ * Sets whether the activity should always be expanded on launch. Some activities are
+ * supposed to expand to the full task bounds, independent of the state of the split. An
+ * example is an activity that blocks all user interactions, such as a warning dialog.
+ *
+ * @param alwaysExpand whether the activity should always be expanded on launch.
*/
@SuppressWarnings("MissingGetterMatchingBuilder")
fun setAlwaysExpand(alwaysExpand: Boolean): Builder =
apply { this.alwaysExpand = alwaysExpand }
- /** @see ActivityRule.tag */
+ /**
+ * Sets a unique string to identify this [ActivityRule], which defaults to `null`.
+ *
+ * @param tag unique string to identify this [ActivityRule].
+ */
fun setTag(tag: String): Builder =
apply { this.tag = tag }
+ /**
+ * Builds an `ActivityRule` instance.
+ *
+ * @return The new `ActivityRule` instance.
+ */
fun build() = ActivityRule(tag, filters, alwaysExpand)
}
diff --git a/window/window/src/main/java/androidx/window/embedding/ActivityStack.kt b/window/window/src/main/java/androidx/window/embedding/ActivityStack.kt
index 310ce17..7666ad7 100644
--- a/window/window/src/main/java/androidx/window/embedding/ActivityStack.kt
+++ b/window/window/src/main/java/androidx/window/embedding/ActivityStack.kt
@@ -38,18 +38,19 @@
* process(es), [activitiesInProcess] will return an empty list, but this method will return
* `false`.
*/
- val isEmpty: Boolean = false
+ val isEmpty: Boolean
) {
+ /**
+ * Whether this [ActivityStack] contains the [activity].
+ */
operator fun contains(activity: Activity): Boolean {
return activitiesInProcess.contains(activity)
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
- if (javaClass != other?.javaClass) return false
-
- other as ActivityStack
+ if (other !is ActivityStack) return false
if (activitiesInProcess != other.activitiesInProcess) return false
if (isEmpty != other.isEmpty) return false
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
index c96432f..da6a05b 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
@@ -50,6 +50,7 @@
import androidx.window.extensions.embedding.SplitPairRule.FINISH_NEVER
import androidx.window.layout.WindowMetricsCalculator
import androidx.window.layout.adapter.extensions.ExtensionsWindowLayoutInfoAdapter
+import kotlin.Pair
/**
* Adapter class that translates data classes between Extension and Jetpack interfaces.
@@ -58,45 +59,36 @@
private val predicateAdapter: PredicateAdapter
) {
private val vendorApiLevel = ExtensionsUtil.safeVendorApiLevel
- private val vendorApiLevel1Impl = VendorApiLevel1Impl(predicateAdapter)
+ private val api1Impl = VendorApiLevel1Impl(predicateAdapter)
+ private val api2Impl = VendorApiLevel2Impl()
fun translate(splitInfoList: List<OEMSplitInfo>): List<SplitInfo> {
return splitInfoList.map(this::translate)
}
private fun translate(splitInfo: OEMSplitInfo): SplitInfo {
- val primaryActivityStack = splitInfo.primaryActivityStack
- val isPrimaryStackEmpty = try {
- primaryActivityStack.isEmpty
- } catch (e: NoSuchMethodError) {
- // Users may use older library which #isEmpty hasn't existed. Provide a fallback value
- // for this case to avoid crash.
- false
+ return when (vendorApiLevel) {
+ WindowExtensions.VENDOR_API_LEVEL_1 -> api1Impl.translateCompat(splitInfo)
+ WindowExtensions.VENDOR_API_LEVEL_2 -> api2Impl.translateCompat(splitInfo)
+ else -> {
+ val primaryActivityStack = splitInfo.primaryActivityStack
+ val secondaryActivityStack = splitInfo.secondaryActivityStack
+ SplitInfo(
+ ActivityStack(
+ primaryActivityStack.activities,
+ primaryActivityStack.isEmpty
+ ),
+ ActivityStack(
+ secondaryActivityStack.activities,
+ secondaryActivityStack.isEmpty
+ ),
+ translate(splitInfo.splitAttributes)
+ )
+ }
}
- val primaryFragment = ActivityStack(primaryActivityStack.activities, isPrimaryStackEmpty)
-
- val secondaryActivityStack = splitInfo.secondaryActivityStack
- val isSecondaryStackEmpty = try {
- secondaryActivityStack.isEmpty
- } catch (e: NoSuchMethodError) {
- // Users may use older library which #isEmpty hasn't existed. Provide a fallback value
- // for this case to avoid crash.
- false
- }
- val secondaryFragment = ActivityStack(
- secondaryActivityStack.activities,
- isSecondaryStackEmpty
- )
-
- val splitAttributes = if (vendorApiLevel >= WindowExtensions.VENDOR_API_LEVEL_2) {
- translate(splitInfo.splitAttributes)
- } else {
- vendorApiLevel1Impl.getSplitAttributesCompat(splitInfo)
- }
- return SplitInfo(primaryFragment, secondaryFragment, splitAttributes)
}
- private fun translate(splitAttributes: OEMSplitAttributes): SplitAttributes =
+ internal fun translate(splitAttributes: OEMSplitAttributes): SplitAttributes =
SplitAttributes.Builder()
.setSplitType(translate(splitAttributes.splitType))
.setLayoutDirection(
@@ -111,7 +103,9 @@
)
}
)
- .setAnimationBackgroundColor(splitAttributes.animationBackgroundColor)
+ .setAnimationBackgroundColor(SplitAttributes.BackgroundColor.buildFromValue(
+ splitAttributes.animationBackgroundColor)
+ )
.build()
private fun translate(splitType: OEMSplitType): SplitType =
@@ -168,7 +162,7 @@
predicateClass: Class<*>
): OEMSplitPairRule {
if (vendorApiLevel < WindowExtensions.VENDOR_API_LEVEL_2) {
- return vendorApiLevel1Impl.translateSplitPairRuleCompat(context, rule, predicateClass)
+ return api1Impl.translateSplitPairRuleCompat(context, rule, predicateClass)
} else {
val activitiesPairPredicate =
Predicate<AndroidPair<Activity, Activity>> { activitiesPair ->
@@ -208,7 +202,7 @@
}
}
- private fun translateSplitAttributes(splitAttributes: SplitAttributes): OEMSplitAttributes {
+ internal fun translateSplitAttributes(splitAttributes: SplitAttributes): OEMSplitAttributes {
require(vendorApiLevel >= WindowExtensions.VENDOR_API_LEVEL_2)
// To workaround the "unused" error in ktlint. It is necessary to translate SplitAttributes
// from WM Jetpack version to WM extension version.
@@ -226,7 +220,7 @@
)
}
)
- .setAnimationBackgroundColor(splitAttributes.animationBackgroundColor)
+ .setAnimationBackgroundColor(splitAttributes.animationBackgroundColor.value)
.build()
}
@@ -258,7 +252,7 @@
predicateClass: Class<*>
): OEMSplitPlaceholderRule {
if (vendorApiLevel < WindowExtensions.VENDOR_API_LEVEL_2) {
- return vendorApiLevel1Impl.translateSplitPlaceholderRuleCompat(
+ return api1Impl.translateSplitPlaceholderRuleCompat(
context,
rule,
predicateClass
@@ -305,7 +299,7 @@
predicateClass: Class<*>
): OEMActivityRule {
if (vendorApiLevel < WindowExtensions.VENDOR_API_LEVEL_2) {
- return vendorApiLevel1Impl.translateActivityRuleCompat(rule, predicateClass)
+ return api1Impl.translateActivityRuleCompat(rule, predicateClass)
} else {
val activityPredicate = Predicate<Activity> { activity ->
rule.filters.any { filter -> filter.matchesActivity(activity) }
@@ -336,6 +330,27 @@
}.toSet()
}
+ private inner class VendorApiLevel2Impl {
+ fun translateCompat(splitInfo: OEMSplitInfo): SplitInfo {
+ val primaryActivityStack = splitInfo.primaryActivityStack
+ val primaryFragment = ActivityStack(
+ primaryActivityStack.activities,
+ primaryActivityStack.isEmpty
+ )
+
+ val secondaryActivityStack = splitInfo.secondaryActivityStack
+ val secondaryFragment = ActivityStack(
+ secondaryActivityStack.activities,
+ secondaryActivityStack.isEmpty
+ )
+ return SplitInfo(
+ primaryFragment,
+ secondaryFragment,
+ translate(splitInfo.splitAttributes)
+ )
+ }
+ }
+
/**
* Provides backward compatibility for Window extensions with
* [WindowExtensions.VENDOR_API_LEVEL_1]
@@ -494,5 +509,41 @@
predicateAdapter.buildPredicate(WindowMetrics::class) { windowMetrics ->
splitRule.checkParentMetrics(context, windowMetrics)
}
+
+ // TODO(b/267391190): Remove the NoSuchMethodError in EmbeddingAdapter
+ fun translateCompat(splitInfo: OEMSplitInfo): SplitInfo {
+ val primaryActivityStack = splitInfo.primaryActivityStack
+ val isPrimaryStackEmpty = try {
+ primaryActivityStack.isEmpty
+ } catch (e: NoSuchMethodError) {
+ // Users may use older library which #isEmpty hasn't existed. Provide a fallback
+ // value for this case to avoid crash.
+ false
+ }
+ val primaryFragment = ActivityStack(
+ primaryActivityStack.activities,
+ isPrimaryStackEmpty
+ )
+
+ val secondaryActivityStack = splitInfo.secondaryActivityStack
+ val isSecondaryStackEmpty = try {
+ secondaryActivityStack.isEmpty
+ } catch (e: NoSuchMethodError) {
+ // Users may use older library which #isEmpty hasn't existed. Provide a fallback
+ // value for this case to avoid crash.
+ false
+ }
+ val secondaryFragment = ActivityStack(
+ secondaryActivityStack.activities,
+ isSecondaryStackEmpty
+ )
+
+ val splitAttributes = getSplitAttributesCompat(splitInfo)
+ return SplitInfo(
+ primaryFragment,
+ secondaryFragment,
+ splitAttributes
+ )
+ }
}
}
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt
index 0109ecf..dafb5b9 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt
@@ -23,7 +23,6 @@
import androidx.window.core.ConsumerAdapter
import androidx.window.core.ExtensionsUtil
import androidx.window.embedding.EmbeddingInterfaceCompat.EmbeddingCallbackInterface
-import androidx.window.extensions.WindowExtensions
import androidx.window.extensions.WindowExtensions.VENDOR_API_LEVEL_2
import androidx.window.extensions.WindowExtensionsProvider
import androidx.window.extensions.core.util.function.Consumer
@@ -90,7 +89,7 @@
throw UnsupportedOperationException("#setSplitAttributesCalculator is not supported " +
"on the device.")
}
- return embeddingExtension.setSplitAttributesCalculator(
+ embeddingExtension.setSplitAttributesCalculator(
adapter.translateSplitAttributesCalculator(calculator)
)
}
@@ -100,11 +99,11 @@
throw UnsupportedOperationException("#clearSplitAttributesCalculator is not " +
"supported on the device.")
}
- return embeddingExtension.clearSplitAttributesCalculator()
+ embeddingExtension.clearSplitAttributesCalculator()
}
override fun isSplitAttributesCalculatorSupported(): Boolean =
- ExtensionsUtil.safeVendorApiLevel >= WindowExtensions.VENDOR_API_LEVEL_2
+ ExtensionsUtil.safeVendorApiLevel >= VENDOR_API_LEVEL_2
companion object {
const val DEBUG = true
@@ -112,7 +111,13 @@
fun isEmbeddingAvailable(): Boolean {
return try {
- WindowExtensionsProvider.getWindowExtensions().activityEmbeddingComponent != null
+ EmbeddingCompat::class.java.classLoader?.let { loader ->
+ SafeActivityEmbeddingComponentProvider(
+ loader,
+ ConsumerAdapter(loader),
+ WindowExtensionsProvider.getWindowExtensions(),
+ ).activityEmbeddingComponent != null
+ } ?: false
} catch (e: NoClassDefFoundError) {
if (DEBUG) {
Log.d(TAG, "Embedding extension version not found")
@@ -128,17 +133,23 @@
fun embeddingComponent(): ActivityEmbeddingComponent {
return if (isEmbeddingAvailable()) {
- WindowExtensionsProvider.getWindowExtensions().activityEmbeddingComponent
- ?: Proxy.newProxyInstance(
- EmbeddingCompat::class.java.classLoader,
- arrayOf(ActivityEmbeddingComponent::class.java)
- ) { _, _, _ -> } as ActivityEmbeddingComponent
+ EmbeddingCompat::class.java.classLoader?.let { loader ->
+ SafeActivityEmbeddingComponentProvider(
+ loader,
+ ConsumerAdapter(loader),
+ WindowExtensionsProvider.getWindowExtensions(),
+ ).activityEmbeddingComponent
+ } ?: emptyActivityEmbeddingProxy()
} else {
- Proxy.newProxyInstance(
- EmbeddingCompat::class.java.classLoader,
- arrayOf(ActivityEmbeddingComponent::class.java)
- ) { _, _, _ -> } as ActivityEmbeddingComponent
+ emptyActivityEmbeddingProxy()
}
}
+
+ private fun emptyActivityEmbeddingProxy(): ActivityEmbeddingComponent {
+ return Proxy.newProxyInstance(
+ EmbeddingCompat::class.java.classLoader,
+ arrayOf(ActivityEmbeddingComponent::class.java)
+ ) { _, _, _ -> } as ActivityEmbeddingComponent
+ }
}
}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingRule.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingRule.kt
index 987360f..99287fd 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingRule.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingRule.kt
@@ -24,9 +24,9 @@
/**
* A unique string to identify this [EmbeddingRule], which defaults to `null`.
* The suggested usage is to set the tag in the corresponding rule builder to be able to
- * differentiate between different rules in the callbacks. For example, it can be used to
- * compute the right [SplitAttributes] for the right split rule in callback set in
- * [SplitController.setSplitAttributesCalculator].
+ * differentiate between different rules in the [SplitAttributesCalculatorParams.splitRuleTag].
+ * For example, it can be used to compute the right [SplitAttributes] for the right split rule
+ * in callback set in [SplitController.setSplitAttributesCalculator].
*
* @see androidx.window.embedding.RuleController.addRule
*/
diff --git a/window/window/src/main/java/androidx/window/embedding/ExtensionEmbeddingBackend.kt b/window/window/src/main/java/androidx/window/embedding/ExtensionEmbeddingBackend.kt
index 666b488..b9e2aa2 100644
--- a/window/window/src/main/java/androidx/window/embedding/ExtensionEmbeddingBackend.kt
+++ b/window/window/src/main/java/androidx/window/embedding/ExtensionEmbeddingBackend.kt
@@ -191,8 +191,10 @@
splitRules.add(rule)
} else if (tagRuleMap.containsKey(tag)) {
if (throwOnDuplicateTag) {
- throw IllegalArgumentException("Duplicated tag: $tag. Tag must be unique " +
- "among all registered rules")
+ throw IllegalArgumentException(
+ "Duplicated tag: $tag. Tag must be unique " +
+ "among all registered rules"
+ )
} else {
// Update the rule if throwOnDuplicateTag = false
val oldRule = tagRuleMap[tag]
diff --git a/window/window/src/main/java/androidx/window/embedding/MatcherUtils.kt b/window/window/src/main/java/androidx/window/embedding/MatcherUtils.kt
index eb61516..1095444 100644
--- a/window/window/src/main/java/androidx/window/embedding/MatcherUtils.kt
+++ b/window/window/src/main/java/androidx/window/embedding/MatcherUtils.kt
@@ -16,7 +16,6 @@
package androidx.window.embedding
import android.app.Activity
-import android.content.ComponentName
import android.content.Intent
import android.util.Log
import androidx.window.core.ActivityComponentInfo
@@ -27,18 +26,6 @@
internal object MatcherUtils {
/** Checks component match allowing wildcard patterns. */
internal fun areComponentsMatching(
- activityComponent: ComponentName?,
- ruleComponent: ComponentName
- ): Boolean {
- val activityActivityComponentInfo = activityComponent?.let(::ActivityComponentInfo)
- return areComponentsMatching(
- activityActivityComponentInfo,
- ActivityComponentInfo(ruleComponent)
- )
- }
-
- /** Checks component match allowing wildcard patterns. */
- internal fun areComponentsMatching(
activityComponent: ActivityComponentInfo?,
ruleComponent: ActivityComponentInfo
): Boolean {
@@ -69,7 +56,7 @@
* Returns `true` if [Activity.getComponentName] match or [Activity.getIntent] match allowing
* wildcard patterns.
*/
- internal fun isActivityOrIntentMatching(
+ internal fun isActivityMatching(
activity: Activity,
ruleComponent: ActivityComponentInfo
): Boolean {
@@ -86,20 +73,24 @@
*/
internal fun isIntentMatching(
intent: Intent,
- ruleActivityComponentInfo: ActivityComponentInfo
+ ruleComponent: ActivityComponentInfo
): Boolean {
- if (intent.component != null) {
- // Compare the component if set.
- return areComponentsMatching(
+ // Check if the component is matched.
+ if (areComponentsMatching(
intent.component?.let(::ActivityComponentInfo),
- ruleActivityComponentInfo
- )
+ ruleComponent
+ )) {
+ return true
+ }
+ if (intent.component != null) {
+ // Only check package if the component is not set.
+ return false
}
// Check if there is wildcard match for Intent that only specifies the packageName.
val packageName = intent.`package` ?: return false
- return (packageName == ruleActivityComponentInfo.packageName ||
- wildcardMatch(packageName, ruleActivityComponentInfo.packageName)) &&
- ruleActivityComponentInfo.className == "*"
+ return (packageName == ruleComponent.packageName ||
+ wildcardMatch(packageName, ruleComponent.packageName)) &&
+ ruleComponent.className == "*"
}
/**
@@ -123,6 +114,22 @@
return name.startsWith(pattern.substring(0, pattern.length - 1))
}
+ /**
+ * Makes sure the component name is in the correct format.
+ */
+ internal fun validateComponentName(packageName: String, className: String) {
+ require(packageName.isNotEmpty()) { "Package name must not be empty" }
+ require(className.isNotEmpty()) { "Activity class name must not be empty" }
+ require(
+ !(packageName.contains("*") &&
+ packageName.indexOf("*") != packageName.length - 1)
+ ) { "Wildcard in package name is only allowed at the end." }
+ require(
+ !(className.contains("*") &&
+ className.indexOf("*") != className.length - 1)
+ ) { "Wildcard in class name is only allowed at the end." }
+ }
+
internal const val sDebugMatchers = SplitController.sDebug
internal const val sMatchersTag = "SplitRuleResolution"
}
diff --git a/window/window/src/main/java/androidx/window/embedding/RuleParser.kt b/window/window/src/main/java/androidx/window/embedding/RuleParser.kt
index c3334c0..add2f25 100644
--- a/window/window/src/main/java/androidx/window/embedding/RuleParser.kt
+++ b/window/window/src/main/java/androidx/window/embedding/RuleParser.kt
@@ -176,7 +176,8 @@
val clearTop = typedArray.getBoolean(R.styleable.SplitPairRule_clearTop, false)
val animationBackgroundColor = typedArray.getColor(
R.styleable.SplitPairRule_animationBackgroundColor,
- 0)
+ SplitAttributes.BackgroundColor.DEFAULT.value
+ )
typedArray.recycle()
val defaultAttrs = SplitAttributes.Builder()
@@ -184,7 +185,9 @@
.setLayoutDirection(
SplitAttributes.LayoutDirection.getLayoutDirectionFromValue(layoutDir)
)
- .setAnimationBackgroundColor(animationBackgroundColor)
+ .setAnimationBackgroundColor(
+ SplitAttributes.BackgroundColor.buildFromValue(animationBackgroundColor)
+ )
.build()
SplitPairRule.Builder(emptySet())
@@ -258,7 +261,8 @@
)
val animationBackgroundColor = typedArray.getColor(
R.styleable.SplitPlaceholderRule_animationBackgroundColor,
- 0)
+ SplitAttributes.BackgroundColor.DEFAULT.value
+ )
typedArray.recycle()
val defaultAttrs = SplitAttributes.Builder()
@@ -266,7 +270,9 @@
.setLayoutDirection(
SplitAttributes.LayoutDirection.getLayoutDirectionFromValue(layoutDir)
)
- .setAnimationBackgroundColor(animationBackgroundColor)
+ .setAnimationBackgroundColor(
+ SplitAttributes.BackgroundColor.buildFromValue(animationBackgroundColor)
+ )
.build()
val packageName = context.applicationContext.packageName
val placeholderActivityClassName = buildClassName(
diff --git a/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt b/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt
new file mode 100644
index 0000000..44699d8
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt
@@ -0,0 +1,205 @@
+/*
+ * 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.window.embedding
+
+import android.app.Activity
+import androidx.window.core.ConsumerAdapter
+import androidx.window.core.ExtensionsUtil
+import androidx.window.extensions.WindowExtensions
+import androidx.window.extensions.core.util.function.Consumer
+import androidx.window.extensions.core.util.function.Function
+import androidx.window.extensions.embedding.ActivityEmbeddingComponent
+import androidx.window.reflection.ReflectionUtils.doesReturn
+import androidx.window.reflection.ReflectionUtils.isPublic
+import androidx.window.reflection.ReflectionUtils.validateReflection
+import androidx.window.reflection.WindowExtensionsConstants.ACTIVITY_EMBEDDING_COMPONENT_CLASS
+import androidx.window.reflection.WindowExtensionsConstants.WINDOW_EXTENSIONS_CLASS
+import androidx.window.reflection.WindowExtensionsConstants.WINDOW_EXTENSIONS_PROVIDER_CLASS
+
+/**
+ * Reflection Guard for [ActivityEmbeddingComponent].
+ * This will go through the [ActivityEmbeddingComponent]'s method by reflection and
+ * check each method's name and signature to see if the interface is what we required.
+ */
+internal class SafeActivityEmbeddingComponentProvider(
+ private val loader: ClassLoader,
+ private val consumerAdapter: ConsumerAdapter,
+ private val windowExtensions: WindowExtensions
+) {
+ val activityEmbeddingComponent: ActivityEmbeddingComponent?
+ get() {
+ return if (canUseActivityEmbeddingComponent()) {
+ try {
+ windowExtensions.activityEmbeddingComponent
+ } catch (e: UnsupportedOperationException) {
+ null
+ }
+ } else {
+ null
+ }
+ }
+
+ private fun canUseActivityEmbeddingComponent(): Boolean {
+ if (!isWindowExtensionsValid() || !isActivityEmbeddingComponentValid()) {
+ return false
+ }
+ // TODO(b/267573854) : update logic to fallback to lower version
+ // if higher version is not matched
+ return when (ExtensionsUtil.safeVendorApiLevel) {
+ 1 -> hasValidVendorApiLevel1()
+ in 2..Int.MAX_VALUE -> hasValidVendorApiLevel2()
+ // TODO(b/267956499) : add hasValidVendorApiLevel3
+ else -> false
+ }
+ }
+
+ /**
+ * [WindowExtensions.VENDOR_API_LEVEL_1] includes the following methods:
+ * - [ActivityEmbeddingComponent.setEmbeddingRules]
+ * - [ActivityEmbeddingComponent.isActivityEmbedded]
+ * - [ActivityEmbeddingComponent.setSplitInfoCallback] with [java.util.function.Consumer]
+ * and following classes: TODO(b/268583307) : add guard function for those classes
+ * - [androidx.window.extensions.embedding.ActivityRule]
+ * - [androidx.window.extensions.embedding.SplitPairRule]
+ * - [androidx.window.extensions.embedding.SplitPlaceholderRule]
+ * - [androidx.window.extensions.embedding.SplitInfo]
+ */
+ private fun hasValidVendorApiLevel1(): Boolean {
+ return isMethodSetEmbeddingRulesValid() &&
+ isMethodIsActivityEmbeddedValid() &&
+ isMethodSetSplitInfoCallbackJavaConsumerValid()
+ }
+
+ /**
+ * [WindowExtensions.VENDOR_API_LEVEL_2] includes the following methods
+ * - [ActivityEmbeddingComponent.setSplitInfoCallback] with [Consumer]
+ * - [ActivityEmbeddingComponent.clearSplitInfoCallback]
+ * - [ActivityEmbeddingComponent.setSplitAttributesCalculator]
+ * - [ActivityEmbeddingComponent.clearSplitAttributesCalculator]
+ * and following classes: TODO(b/268583307) : add guard function for those classes
+ * - [androidx.window.extensions.embedding.SplitAttributes]
+ */
+ private fun hasValidVendorApiLevel2(): Boolean {
+ return hasValidVendorApiLevel1() &&
+ isMethodSetSplitInfoCallbackWindowConsumerValid() &&
+ isMethodClearSplitInfoCallbackValid() &&
+ isMethodSplitAttributesCalculatorValid()
+ }
+
+ private fun isMethodSetEmbeddingRulesValid(): Boolean {
+ return validateReflection("ActivityEmbeddingComponent#setEmbeddingRules is not valid") {
+ val setEmbeddingRulesMethod = activityEmbeddingComponentClass.getMethod(
+ "setEmbeddingRules",
+ Set::class.java
+ )
+ setEmbeddingRulesMethod.isPublic
+ }
+ }
+
+ private fun isMethodIsActivityEmbeddedValid(): Boolean {
+ return validateReflection("ActivityEmbeddingComponent#isActivityEmbedded is not valid") {
+ val isActivityEmbeddedMethod = activityEmbeddingComponentClass.getMethod(
+ "isActivityEmbedded",
+ Activity::class.java
+ )
+ isActivityEmbeddedMethod.isPublic &&
+ isActivityEmbeddedMethod.doesReturn(Boolean::class.java)
+ }
+ }
+
+ private fun isMethodClearSplitInfoCallbackValid(): Boolean {
+ return validateReflection(
+ "ActivityEmbeddingComponent#clearSplitInfoCallback is not valid"
+ ) {
+ val clearSplitInfoCallbackMethod =
+ activityEmbeddingComponentClass.getMethod("clearSplitInfoCallback")
+ clearSplitInfoCallbackMethod.isPublic
+ }
+ }
+
+ private fun isMethodSplitAttributesCalculatorValid(): Boolean {
+ return validateReflection(
+ "ActivityEmbeddingComponent#setSplitAttributesCalculator is not valid"
+ ) {
+ val setSplitAttributesCalculatorMethod = activityEmbeddingComponentClass.getMethod(
+ "setSplitAttributesCalculator",
+ Function::class.java
+ )
+ val clearSplitAttributesCalculatorMethod =
+ activityEmbeddingComponentClass.getMethod("clearSplitAttributesCalculator")
+ setSplitAttributesCalculatorMethod.isPublic &&
+ clearSplitAttributesCalculatorMethod.isPublic
+ }
+ }
+
+ private fun isMethodSetSplitInfoCallbackJavaConsumerValid(): Boolean {
+ return validateReflection("ActivityEmbeddingComponent#setSplitInfoCallback is not valid") {
+ val consumerClass =
+ consumerAdapter.consumerClassOrNull() ?: return@validateReflection false
+ val setSplitInfoCallbackMethod =
+ activityEmbeddingComponentClass.getMethod("setSplitInfoCallback", consumerClass)
+ setSplitInfoCallbackMethod.isPublic
+ }
+ }
+
+ private fun isMethodSetSplitInfoCallbackWindowConsumerValid(): Boolean {
+ return validateReflection("ActivityEmbeddingComponent#setSplitInfoCallback is not valid") {
+ val setSplitInfoCallbackMethod = activityEmbeddingComponentClass.getMethod(
+ "setSplitInfoCallback",
+ Consumer::class.java
+ )
+ setSplitInfoCallbackMethod.isPublic
+ }
+ }
+
+ private fun isWindowExtensionsValid(): Boolean {
+ return validateReflection("WindowExtensionsProvider#getWindowExtensions is not valid") {
+ val providerClass = windowExtensionsProviderClass
+ val getWindowExtensionsMethod = providerClass.getDeclaredMethod("getWindowExtensions")
+ val windowExtensionsClass = windowExtensionsClass
+ getWindowExtensionsMethod.isPublic && getWindowExtensionsMethod.doesReturn(
+ windowExtensionsClass
+ )
+ }
+ }
+
+ private fun isActivityEmbeddingComponentValid(): Boolean {
+ return validateReflection("WindowExtensions#getActivityEmbeddingComponent is not valid") {
+ val extensionsClass = windowExtensionsClass
+ val getActivityEmbeddingComponentMethod =
+ extensionsClass.getMethod("getActivityEmbeddingComponent")
+ val activityEmbeddingComponentClass = activityEmbeddingComponentClass
+ getActivityEmbeddingComponentMethod.isPublic &&
+ getActivityEmbeddingComponentMethod.doesReturn(activityEmbeddingComponentClass)
+ }
+ }
+
+ private val windowExtensionsProviderClass: Class<*>
+ get() {
+ return loader.loadClass(WINDOW_EXTENSIONS_PROVIDER_CLASS)
+ }
+
+ private val windowExtensionsClass: Class<*>
+ get() {
+ return loader.loadClass(WINDOW_EXTENSIONS_CLASS)
+ }
+
+ private val activityEmbeddingComponentClass: Class<*>
+ get() {
+ return loader.loadClass(ACTIVITY_EMBEDDING_COMPONENT_CLASS)
+ }
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt b/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt
index d83ce52..64219d2 100644
--- a/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt
@@ -17,14 +17,14 @@
package androidx.window.embedding
import android.annotation.SuppressLint
+import android.graphics.Color
import androidx.annotation.ColorInt
import androidx.annotation.FloatRange
import androidx.annotation.IntRange
import androidx.window.core.SpecificationComputer.Companion.startSpecification
import androidx.window.core.VerificationMode
-import androidx.window.embedding.SplitAttributes.LayoutDirection
+import androidx.window.embedding.SplitAttributes.BackgroundColor
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.LOCALE
-import androidx.window.embedding.SplitAttributes.SplitType
import androidx.window.embedding.SplitAttributes.SplitType.Companion.splitEqually
/**
@@ -48,15 +48,16 @@
* - Setting `splitRatio`, `splitLayoutDirection`, and
* `animationBackgroundColor` attributes in `<SplitPairRule>` or
* `<SplitPlaceholderRule>` tags in an XML configuration file. The
- * attributes are parsed as [SplitType], [LayoutDirection], and [ColorInt],
- * respectively. Note that [SplitType.HingeSplitType] is not supported XML
- * format.
+ * attributes are parsed as [SplitType], [LayoutDirection], and
+ * [BackgroundColor], respectively. Note that [SplitType.HingeSplitType]
+ * is not supported XML format.
* - Using
* [SplitAttributesCalculator.computeSplitAttributesForParams] to customize
* the `SplitAttributes` for a given device and window state.
*
* @see SplitAttributes.SplitType
* @see SplitAttributes.LayoutDirection
+ * @see SplitAttributes.BackgroundColor
*/
class SplitAttributes internal constructor(
@@ -73,14 +74,16 @@
val layoutDirection: LayoutDirection = LOCALE,
/**
- * The [ColorInt] to use for the background color during the animation of
+ * The color to use for the background color during the animation of
* the split involving this `SplitAttributes` object if the animation
* requires a background.
*
- * The default is 0, which specifies the theme window background color.
+ * The default is to use the current theme window background color.
+ *
+ * @see BackgroundColor.color
+ * @see BackgroundColor.DEFAULT
*/
- @ColorInt
- val animationBackgroundColor: Int = 0
+ val animationBackgroundColor: BackgroundColor = BackgroundColor.DEFAULT
) {
/**
@@ -422,6 +425,85 @@
}
/**
+ * Background color to be used for window transition animations in a split if the animation
+ * requires a background.
+ *
+ * @see SplitAttributes.animationBackgroundColor
+ */
+ class BackgroundColor private constructor(
+
+ /**
+ * The description of this `BackgroundColor`.
+ */
+ private val description: String,
+
+ /**
+ * [ColorInt] to represent the color to use as the background color.
+ */
+ @ColorInt
+ internal val value: Int,
+ ) {
+ override fun toString() = "BackgroundColor($description)"
+
+ override fun equals(other: Any?): Boolean {
+ if (other === this) return true
+ if (other !is BackgroundColor) return false
+ return value == other.value && description == other.description
+ }
+
+ override fun hashCode() = description.hashCode() + 31 * value.hashCode()
+
+ /**
+ * Methods that create various [BackgroundColor].
+ */
+ companion object {
+
+ /**
+ * Creates a [BackgroundColor] to represent the given [color].
+ *
+ * Only opaque color is supported.
+ *
+ * @param color [ColorInt] of an opaque color.
+ * @return the [BackgroundColor] representing the [color].
+ *
+ * @see [DEFAULT] for the default value, which means to use the
+ * current theme window background color.
+ */
+ @JvmStatic
+ fun color(
+ @IntRange(from = Color.BLACK.toLong(), to = Color.WHITE.toLong())
+ @ColorInt
+ color: Int
+ ):
+ BackgroundColor {
+ require(Color.BLACK <= color && color <= Color.WHITE) {
+ "Background color must be opaque"
+ }
+ return BackgroundColor("color:${Integer.toHexString(color)}", color)
+ }
+
+ /**
+ * The special [BackgroundColor] to represent the default value,
+ * which means to use the current theme window background color.
+ */
+ @JvmField
+ val DEFAULT = BackgroundColor("DEFAULT", 0)
+
+ /**
+ * Returns a [BackgroundColor] with the given [value]
+ */
+ internal fun buildFromValue(@ColorInt value: Int): BackgroundColor {
+ return if (Color.alpha(value) != 255) {
+ // Treat any non-opaque color as the default.
+ DEFAULT
+ } else {
+ color(value)
+ }
+ }
+ }
+ }
+
+ /**
* Non-public properties and methods.
*/
companion object {
@@ -464,21 +546,21 @@
override fun toString(): String =
"${SplitAttributes::class.java.simpleName}:" +
"{splitType=$splitType, layoutDir=$layoutDirection," +
- " animationBackgroundColor=${Integer.toHexString(animationBackgroundColor)}"
+ " animationBackgroundColor=$animationBackgroundColor"
/**
* Builder for creating an instance of [SplitAttributes].
*
- * The default split type is an equal split between primary and secondary
- * containers. The default layout direction is based on locale. The default
- * animation background color is 0, which specifies the theme window
- * background color.
+ * - The default split type is an equal split between primary and secondary
+ * containers.
+ * - The default layout direction is based on locale.
+ * - The default animation background color is to use the current theme
+ * window background color.
*/
class Builder {
private var splitType: SplitType = splitEqually()
private var layoutDirection = LOCALE
- @ColorInt
- private var animationBackgroundColor = 0
+ private var animationBackgroundColor = BackgroundColor.DEFAULT
/**
* Sets the split type attribute.
@@ -507,20 +589,23 @@
apply { this.layoutDirection = layoutDirection }
/**
- * Sets the [ColorInt] to use for the background color during animation
+ * Sets the color to use for the background color during animation
* of the split involving this `SplitAttributes` object if the animation
- * requires a background.
+ * requires a background. Only opaque color is supported.
*
- * The default is 0, which specifies the theme window background color.
+ * The default is [BackgroundColor.DEFAULT], which means to use the
+ * current theme window background color.
*
- * @param color A packed color int of the form `AARRGGBB`, for the
- * animation background color.
+ * @param color The animation background color.
* @return This `Builder`.
*
- * @see SplitAttributes.animationBackgroundColor
+ * @see BackgroundColor.color
+ * @see BackgroundColor.DEFAULT
*/
- fun setAnimationBackgroundColor(@ColorInt color: Int): Builder =
- apply { this.animationBackgroundColor = color }
+ fun setAnimationBackgroundColor(color: BackgroundColor): Builder =
+ apply {
+ animationBackgroundColor = color
+ }
/**
* Builds a `SplitAttributes` instance with the attributes specified by
diff --git a/window/window/src/main/java/androidx/window/embedding/SplitInfo.kt b/window/window/src/main/java/androidx/window/embedding/SplitInfo.kt
index 3bfea72..b3dc89c 100644
--- a/window/window/src/main/java/androidx/window/embedding/SplitInfo.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SplitInfo.kt
@@ -31,6 +31,10 @@
/** The [SplitAttributes] of this split pair. */
val splitAttributes: SplitAttributes
) {
+ /**
+ * Whether the [primaryActivityStack] or the [secondaryActivityStack] in this [SplitInfo]
+ * contains the [activity].
+ */
operator fun contains(activity: Activity): Boolean {
return primaryActivityStack.contains(activity) ||
secondaryActivityStack.contains(activity)
@@ -57,9 +61,10 @@
override fun toString(): String {
return buildString {
append("SplitInfo:{")
- append("primaryActivityStack=$primaryActivityStack,")
- append("secondaryActivityStack=$secondaryActivityStack,")
- append("splitAttributes=$splitAttributes}")
+ append("primaryActivityStack=$primaryActivityStack, ")
+ append("secondaryActivityStack=$secondaryActivityStack, ")
+ append("splitAttributes=$splitAttributes, ")
+ append("}")
}
}
}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/embedding/SplitPairFilter.kt b/window/window/src/main/java/androidx/window/embedding/SplitPairFilter.kt
index d09fa3b..5c022fa 100644
--- a/window/window/src/main/java/androidx/window/embedding/SplitPairFilter.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SplitPairFilter.kt
@@ -20,10 +20,11 @@
import android.content.Intent
import android.util.Log
import androidx.window.core.ActivityComponentInfo
-import androidx.window.embedding.MatcherUtils.areComponentsMatching
+import androidx.window.embedding.MatcherUtils.isActivityMatching
import androidx.window.embedding.MatcherUtils.isIntentMatching
import androidx.window.embedding.MatcherUtils.sDebugMatchers
import androidx.window.embedding.MatcherUtils.sMatchersTag
+import androidx.window.embedding.MatcherUtils.validateComponentName
/**
* Filter for [SplitPairRule] and used to find if a pair of activities should be put in a split.
@@ -79,6 +80,14 @@
val secondaryActivityIntentAction: String?
) {
+ init {
+ validateComponentName(primaryActivityName.packageName, primaryActivityName.className)
+ validateComponentName(secondaryActivityName.packageName, secondaryActivityName.className)
+ }
+
+ private val primaryActivityInfo: ActivityComponentInfo
+ get() = ActivityComponentInfo(primaryActivityName)
+
private val secondaryActivityInfo: ActivityComponentInfo
get() = ActivityComponentInfo(secondaryActivityName)
@@ -92,11 +101,13 @@
*/
fun matchesActivityPair(primaryActivity: Activity, secondaryActivity: Activity): Boolean {
// Check if the activity component names match
- var match = areComponentsMatching(primaryActivity.componentName, primaryActivityName) &&
- areComponentsMatching(secondaryActivity.componentName, secondaryActivityName)
- // If the intent is not empty - check that the rest of the filter fields match
- if (secondaryActivity.intent != null) {
- match = match && matchesActivityIntentPair(primaryActivity, secondaryActivity.intent)
+ val match = if (!isActivityMatching(primaryActivity, primaryActivityInfo)) {
+ false
+ } else if (!isActivityMatching(secondaryActivity, secondaryActivityInfo)) {
+ false
+ } else {
+ secondaryActivityIntentAction == null ||
+ secondaryActivityIntentAction == secondaryActivity.intent?.action
}
if (sDebugMatchers) {
@@ -123,14 +134,9 @@
primaryActivity: Activity,
secondaryActivityIntent: Intent
): Boolean {
- val inPrimaryActivityName = primaryActivity.componentName
- val match = if (
- !areComponentsMatching(inPrimaryActivityName, primaryActivityName)
- ) {
+ val match = if (!isActivityMatching(primaryActivity, primaryActivityInfo)) {
false
- } else if (
- !isIntentMatching(secondaryActivityIntent, secondaryActivityInfo)
- ) {
+ } else if (!isIntentMatching(secondaryActivityIntent, secondaryActivityInfo)) {
false
} else {
secondaryActivityIntentAction == null ||
@@ -147,43 +153,6 @@
return match
}
- init {
- val primaryPackageName = primaryActivityName.packageName
- val primaryClassName = primaryActivityName.className
- val secondaryPackageName = secondaryActivityName.packageName
- val secondaryClassName = secondaryActivityName.className
- require(
- !(primaryPackageName.isEmpty() || secondaryPackageName.isEmpty())
- ) { "Package name must not be empty" }
- require(
- !(primaryClassName.isEmpty() || secondaryClassName.isEmpty())
- ) { "Activity class name must not be empty." }
- require(
- !(
- primaryPackageName.contains("*") &&
- primaryPackageName.indexOf("*") != primaryPackageName.length - 1
- )
- ) { "Wildcard in package name is only allowed at the end." }
- require(
- !(
- primaryClassName.contains("*") &&
- primaryClassName.indexOf("*") != primaryClassName.length - 1
- )
- ) { "Wildcard in class name is only allowed at the end." }
- require(
- !(
- secondaryPackageName.contains("*") &&
- secondaryPackageName.indexOf("*") != secondaryPackageName.length - 1
- )
- ) { "Wildcard in package name is only allowed at the end." }
- require(
- !(
- secondaryClassName.contains("*") &&
- secondaryClassName.indexOf("*") != secondaryClassName.length - 1
- )
- ) { "Wildcard in class name is only allowed at the end." }
- }
-
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is SplitPairFilter) return false
diff --git a/window/window/src/main/java/androidx/window/embedding/SplitPairRule.kt b/window/window/src/main/java/androidx/window/embedding/SplitPairRule.kt
index 76a561c..2cf3650 100644
--- a/window/window/src/main/java/androidx/window/embedding/SplitPairRule.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SplitPairRule.kt
@@ -117,6 +117,9 @@
*
* The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT] if the app doesn't set.
* [SPLIT_MIN_DIMENSION_ALWAYS_ALLOW] means to always allow split.
+ *
+ * @param minWidthDp the smallest value of width of the parent window when the split should
+ * be used, in DP.
*/
fun setMinWidthDp(@IntRange(from = 0) minWidthDp: Int): Builder =
apply { this.minWidthDp = minWidthDp }
@@ -133,6 +136,9 @@
* The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT] if the app doesn't set.
* [SPLIT_MIN_DIMENSION_ALWAYS_ALLOW] means to always allow split.
*
+ * @param minHeightDp the smallest value of height of the parent task window when the split
+ * should be used, in DP.
+ *
* @see SplitAttributes.LayoutDirection.TOP_TO_BOTTOM
* @see SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
*/
@@ -141,12 +147,15 @@
/**
* Sets the smallest value of the smallest possible width of the parent window in any
- * rotation when the split should be used, in DP. When the window size is smaller than
+ * rotation when the split should be used, in DP. When the window size is smaller than
* requested here, activities in the secondary container will be stacked on top of the
* activities in the primary one, completely overlapping them.
*
* The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT] if the app doesn't set.
* [SPLIT_MIN_DIMENSION_ALWAYS_ALLOW] means to always allow split.
+ *
+ * @param minSmallestWidthDp the smallest value of the smallest possible width of the parent
+ * window in any rotation when the split should be used, in DP.
*/
fun setMinSmallestWidthDp(@IntRange(from = 0) minSmallestWidthDp: Int): Builder =
apply { this.minSmallestWidthDp = minSmallestWidthDp }
@@ -163,6 +172,9 @@
* the recommend value to only allow split when the parent window is not too stretched in
* portrait.
*
+ * @param aspectRatio the largest value of the aspect ratio, expressed as `height / width`
+ * in decimal form, of the parent window bounds in portrait when the split should be used.
+ *
* @see EmbeddingAspectRatio.ratio
* @see EmbeddingAspectRatio.ALWAYS_ALLOW
* @see EmbeddingAspectRatio.ALWAYS_DISALLOW
@@ -181,6 +193,9 @@
* The default is [SPLIT_MAX_ASPECT_RATIO_LANDSCAPE_DEFAULT] if the app doesn't set, which
* is the recommend value to always allow split when the parent window is in landscape.
*
+ * @param aspectRatio the largest value of the aspect ratio, expressed as `width / height`
+ * in decimal form, of the parent window bounds in landscape when the split should be used.
+ *
* @see EmbeddingAspectRatio.ratio
* @see EmbeddingAspectRatio.ALWAYS_ALLOW
* @see EmbeddingAspectRatio.ALWAYS_DISALLOW
@@ -192,6 +207,9 @@
* Sets the behavior of the primary container when all activities are finished in the
* associated secondary container.
*
+ * @param finishPrimaryWithSecondary the [SplitRule.FinishBehavior] of the primary container
+ * when all activities are finished in the associated secondary container.
+ *
* @see SplitRule.FinishBehavior.NEVER
* @see SplitRule.FinishBehavior.ALWAYS
* @see SplitRule.FinishBehavior.ADJACENT
@@ -205,6 +223,9 @@
* Sets the behavior of the secondary container when all activities are finished in the
* associated primary container.
*
+ * @param finishSecondaryWithPrimary the [SplitRule.FinishBehavior] of the secondary
+ * container when all activities are finished in the associated primary container.
+ *
* @see SplitRule.FinishBehavior.NEVER
* @see SplitRule.FinishBehavior.ALWAYS
* @see SplitRule.FinishBehavior.ADJACENT
@@ -218,6 +239,9 @@
* Sets whether the existing secondary container on top and all activities in it should be
* destroyed when a new split is created using this rule. Otherwise the new secondary will
* appear on top by default.
+ *
+ * @param clearTop whether the existing secondary container on top and all activities in it
+ * should be destroyed when a new split is created using this rule.
*/
@SuppressWarnings("MissingGetterMatchingBuilder")
fun setClearTop(clearTop: Boolean): Builder =
@@ -227,6 +251,9 @@
* Sets the default [SplitAttributes] to apply on the activity containers pair when the host
* task bounds satisfy [minWidthDp], [minHeightDp], [minSmallestWidthDp],
* [maxAspectRatioInPortrait] and [maxAspectRatioInLandscape] requirements.
+ *
+ * @param defaultSplitAttributes the default [SplitAttributes] to apply on the activity
+ * containers pair when the host task bounds satisfy all the rule requirements.
*/
fun setDefaultSplitAttributes(defaultSplitAttributes: SplitAttributes): Builder =
apply { this.defaultSplitAttributes = defaultSplitAttributes }
@@ -235,10 +262,17 @@
* Sets a unique string to identify this [SplitPairRule], which defaults to `null`.
* The suggested usage is to set the tag to be able to differentiate between different rules
* in the [SplitAttributesCalculatorParams.splitRuleTag].
+ *
+ * @param tag unique string to identify this [SplitPairRule].
*/
fun setTag(tag: String?): Builder =
apply { this.tag = tag }
+ /**
+ * Builds a `SplitPairRule` instance.
+ *
+ * @return The new `SplitPairRule` instance.
+ */
fun build() = SplitPairRule(
tag,
filters,
diff --git a/window/window/src/main/java/androidx/window/embedding/SplitPlaceholderRule.kt b/window/window/src/main/java/androidx/window/embedding/SplitPlaceholderRule.kt
index 83ed1ca..2639171 100644
--- a/window/window/src/main/java/androidx/window/embedding/SplitPlaceholderRule.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SplitPlaceholderRule.kt
@@ -25,7 +25,6 @@
import androidx.window.embedding.SplitRule.Companion.SPLIT_MIN_DIMENSION_DP_DEFAULT
import androidx.window.embedding.SplitRule.FinishBehavior.Companion.ALWAYS
import androidx.window.embedding.SplitRule.FinishBehavior.Companion.NEVER
-import androidx.window.extensions.WindowExtensions
/**
* Configuration rules for split placeholders.
@@ -66,6 +65,8 @@
* Determines what happens with the primary container when all activities are finished in the
* associated placeholder container.
*
+ * **Note** that it is not valid to set [SplitRule.FinishBehavior.NEVER]
+ *
* @see SplitRule.FinishBehavior.ALWAYS
* @see SplitRule.FinishBehavior.ADJACENT
*/
@@ -127,6 +128,9 @@
*
* The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT] if the app doesn't set.
* [SPLIT_MIN_DIMENSION_ALWAYS_ALLOW] means to always allow split.
+ *
+ * @param minWidthDp the smallest value of width of the parent window when the split should
+ * be used, in DP.
*/
fun setMinWidthDp(@IntRange(from = 0) minWidthDp: Int): Builder =
apply { this.minWidthDp = minWidthDp }
@@ -143,6 +147,9 @@
* The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT] if the app doesn't set.
* [SPLIT_MIN_DIMENSION_ALWAYS_ALLOW] means to always allow split.
*
+ * @param minHeightDp the smallest value of height of the parent task window when the split
+ * should be used, in DP.
+ *
* @see SplitAttributes.LayoutDirection.TOP_TO_BOTTOM
* @see SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
*/
@@ -151,12 +158,15 @@
/**
* Sets the smallest value of the smallest possible width of the parent window in any
- * rotation when the split should be used, in DP. When the window size is smaller than
+ * rotation when the split should be used, in DP. When the window size is smaller than
* requested here, activities in the secondary container will be stacked on top of the
* activities in the primary one, completely overlapping them.
*
* The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT] if the app doesn't set.
* [SPLIT_MIN_DIMENSION_ALWAYS_ALLOW] means to always allow split.
+ *
+ * @param minSmallestWidthDp the smallest value of the smallest possible width of the parent
+ * window in any rotation when the split should be used, in DP.
*/
fun setMinSmallestWidthDp(@IntRange(from = 0) minSmallestWidthDp: Int): Builder =
apply { this.minSmallestWidthDp = minSmallestWidthDp }
@@ -173,6 +183,9 @@
* the recommend value to only allow split when the parent window is not too stretched in
* portrait.
*
+ * @param aspectRatio the largest value of the aspect ratio, expressed as `height / width`
+ * in decimal form, of the parent window bounds in portrait when the split should be used.
+ *
* @see EmbeddingAspectRatio.ratio
* @see EmbeddingAspectRatio.ALWAYS_ALLOW
* @see EmbeddingAspectRatio.ALWAYS_DISALLOW
@@ -191,6 +204,9 @@
* The default is [SPLIT_MAX_ASPECT_RATIO_LANDSCAPE_DEFAULT] if the app doesn't set, which
* is the recommend value to always allow split when the parent window is in landscape.
*
+ * @param aspectRatio the largest value of the aspect ratio, expressed as `width / height`
+ * in decimal form, of the parent window bounds in landscape when the split should be used.
+ *
* @see EmbeddingAspectRatio.ratio
* @see EmbeddingAspectRatio.ALWAYS_ALLOW
* @see EmbeddingAspectRatio.ALWAYS_DISALLOW
@@ -202,6 +218,11 @@
* Sets the behavior of the primary container when all activities are finished in the
* associated placeholder container.
*
+ * **Note** that it is not valid to set [SplitRule.FinishBehavior.NEVER]
+ *
+ * @param finishPrimaryWithPlaceholder the [SplitRule.FinishBehavior] of the primary
+ * container when all activities are finished in the associated placeholder container.
+ *
* @see SplitRule.FinishBehavior.ALWAYS
* @see SplitRule.FinishBehavior.ADJACENT
*/
@@ -211,14 +232,11 @@
}
/**
- * @see SplitPlaceholderRule#getTag
- * since [WindowExtensions.VENDOR_API_LEVEL_2]
- */
- fun setTag(tag: String?): Builder = apply { this.tag = tag }
-
- /**
* Sets whether the placeholder will show on top in a smaller window size after it first
* appeared in a split with sufficient minimum width.
+ *
+ * @param isSticky whether the placeholder will show on top in a smaller window size after
+ * it first appeared in a split with sufficient minimum width.
*/
fun setSticky(isSticky: Boolean): Builder =
apply { this.isSticky = isSticky }
@@ -227,10 +245,28 @@
* Sets the default [SplitAttributes] to apply on the activity containers pair when the host
* task bounds satisfy [minWidthDp], [minHeightDp], [minSmallestWidthDp],
* [maxAspectRatioInPortrait] and [maxAspectRatioInLandscape] requirements.
+ *
+ * @param defaultSplitAttributes the default [SplitAttributes] to apply on the activity
+ * containers pair when the host task bounds satisfy all the rule requirements.
*/
fun setDefaultSplitAttributes(defaultSplitAttributes: SplitAttributes): Builder =
apply { this.defaultSplitAttributes = defaultSplitAttributes }
+ /**
+ * Sets a unique string to identify this [SplitPlaceholderRule], which defaults to `null`.
+ * The suggested usage is to set the tag to be able to differentiate between different rules
+ * in the [SplitAttributesCalculatorParams.splitRuleTag].
+ *
+ * @param tag unique string to identify this [SplitPlaceholderRule].
+ */
+ fun setTag(tag: String?): Builder =
+ apply { this.tag = tag }
+
+ /**
+ * Builds a `SplitPlaceholderRule` instance.
+ *
+ * @return The new `SplitPlaceholderRule` instance.
+ */
fun build() = SplitPlaceholderRule(
tag,
filters,
diff --git a/window/window/src/main/java/androidx/window/embedding/SplitRule.kt b/window/window/src/main/java/androidx/window/embedding/SplitRule.kt
index df33033..c989e32 100644
--- a/window/window/src/main/java/androidx/window/embedding/SplitRule.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SplitRule.kt
@@ -63,8 +63,8 @@
* When the window size is smaller than requested here, activities in the secondary container
* will be stacked on top of the activities in the primary one, completely overlapping them.
*
- * Uses `0` to always allow split regardless of the parent task width.
- * The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT].
+ * The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT] if the app doesn't set.
+ * [SPLIT_MIN_DIMENSION_ALWAYS_ALLOW] means to always allow split.
*/
@IntRange(from = 0)
val minWidthDp: Int = SPLIT_MIN_DIMENSION_DP_DEFAULT,
@@ -75,8 +75,8 @@
* will be stacked on top of the activities in the primary one, completely overlapping them.
* It is useful if it's necessary to split the parent window horizontally for this [SplitRule].
*
- * Uses `0` to always allow split regardless of the parent task height.
- * The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT].
+ * The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT] if the app doesn't set.
+ * [SPLIT_MIN_DIMENSION_ALWAYS_ALLOW] means to always allow split.
*
* @see SplitAttributes.LayoutDirection.TOP_TO_BOTTOM
* @see SplitAttributes.LayoutDirection.BOTTOM_TO_TOP
@@ -90,8 +90,8 @@
* activities in the secondary container will be stacked on top of the activities in the primary
* one, completely overlapping them.
*
- * Uses `0` to always allow split regardless of the parent task smallest width.
- * The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT].
+ * The default is [SPLIT_MIN_DIMENSION_DP_DEFAULT] if the app doesn't set.
+ * [SPLIT_MIN_DIMENSION_ALWAYS_ALLOW] means to always allow split.
*/
@IntRange(from = 0)
val minSmallestWidthDp: Int = SPLIT_MIN_DIMENSION_DP_DEFAULT,
@@ -132,7 +132,8 @@
/**
* The default [SplitAttributes] to apply on the activity containers pair when the host task
- * bounds satisfy [minWidthDp], [minHeightDp] and [minSmallestWidthDp] requirements.
+ * bounds satisfy [minWidthDp], [minHeightDp], [minSmallestWidthDp],
+ * [maxAspectRatioInPortrait] and [maxAspectRatioInLandscape] requirements.
*/
val defaultSplitAttributes: SplitAttributes,
) : EmbeddingRule(tag) {
diff --git a/window/window/src/main/java/androidx/window/layout/SafeWindowLayoutComponentProvider.kt b/window/window/src/main/java/androidx/window/layout/SafeWindowLayoutComponentProvider.kt
index 6c9ec9d..fdc25a2 100644
--- a/window/window/src/main/java/androidx/window/layout/SafeWindowLayoutComponentProvider.kt
+++ b/window/window/src/main/java/androidx/window/layout/SafeWindowLayoutComponentProvider.kt
@@ -17,14 +17,30 @@
package androidx.window.layout
import android.app.Activity
+import android.content.Context
import android.graphics.Rect
import androidx.window.core.ConsumerAdapter
+import androidx.window.core.ExtensionsUtil
+import androidx.window.extensions.WindowExtensions
import androidx.window.extensions.WindowExtensionsProvider
+import androidx.window.extensions.core.util.function.Consumer
import androidx.window.extensions.layout.WindowLayoutComponent
-import java.lang.reflect.Method
-import java.lang.reflect.Modifier
-import kotlin.reflect.KClass
+import androidx.window.reflection.ReflectionUtils.checkIsPresent
+import androidx.window.reflection.ReflectionUtils.doesReturn
+import androidx.window.reflection.ReflectionUtils.isPublic
+import androidx.window.reflection.ReflectionUtils.validateReflection
+import androidx.window.reflection.WindowExtensionsConstants.FOLDING_FEATURE_CLASS
+import androidx.window.reflection.WindowExtensionsConstants.JAVA_CONSUMER
+import androidx.window.reflection.WindowExtensionsConstants.WINDOW_CONSUMER
+import androidx.window.reflection.WindowExtensionsConstants.WINDOW_EXTENSIONS_CLASS
+import androidx.window.reflection.WindowExtensionsConstants.WINDOW_EXTENSIONS_PROVIDER_CLASS
+import androidx.window.reflection.WindowExtensionsConstants.WINDOW_LAYOUT_COMPONENT_CLASS
+/**
+ * Reflection Guard for [WindowLayoutComponent].
+ * This will go through the [WindowLayoutComponent]'s method by reflection and
+ * check each method's name and signature to see if the interface is what we required.
+ */
internal class SafeWindowLayoutComponentProvider(
private val loader: ClassLoader,
private val consumerAdapter: ConsumerAdapter
@@ -44,14 +60,53 @@
}
private fun canUseWindowLayoutComponent(): Boolean {
- return isWindowLayoutProviderValid() &&
- isWindowExtensionsValid() &&
- isWindowLayoutComponentValid() &&
- isFoldingFeatureValid()
+ if (!isWindowExtensionsPresent() || !isWindowExtensionsValid() ||
+ !isWindowLayoutProviderValid() ||
+ !isFoldingFeatureValid()
+ ) {
+ return false
+ }
+ // TODO(b/267831038): can fallback to VendorApiLevel1 when level2 is not match
+ // but level 1 is matched
+ return when (ExtensionsUtil.safeVendorApiLevel) {
+ 1 -> hasValidVendorApiLevel1()
+ in 2..Int.MAX_VALUE -> hasValidVendorApiLevel2()
+ // TODO(b/267956499): add hasValidVendorApiLevel3
+ else -> false
+ }
}
- private fun isWindowLayoutProviderValid(): Boolean {
- return validate {
+ private fun isWindowExtensionsPresent(): Boolean {
+ return checkIsPresent {
+ loader.loadClass(WINDOW_EXTENSIONS_PROVIDER_CLASS)
+ }
+ }
+
+ /**
+ * [WindowExtensions.VENDOR_API_LEVEL_1] includes the following methods
+ * - [WindowLayoutComponent.addWindowLayoutInfoListener] with [Activity] and
+ * [java.util.function.Consumer]
+ * - [WindowLayoutComponent.removeWindowLayoutInfoListener] with [java.util.function.Consumer]
+ */
+ private fun hasValidVendorApiLevel1(): Boolean {
+ return isMethodWindowLayoutInfoListenerJavaConsumerValid()
+ }
+
+ /**
+ * [WindowExtensions.VENDOR_API_LEVEL_2] includes the following methods
+ * - [WindowLayoutComponent.addWindowLayoutInfoListener] with [Context] and
+ * [java.util.function.Consumer]
+ * - [WindowLayoutComponent.addWindowLayoutInfoListener] with [Context] and [Consumer]
+ * - [WindowLayoutComponent.removeWindowLayoutInfoListener] with [Consumer]
+ */
+ private fun hasValidVendorApiLevel2(): Boolean {
+ return hasValidVendorApiLevel1() &&
+ isMethodWindowLayoutInfoListenerJavaConsumerUiContextValid() &&
+ isMethodWindowLayoutInfoListenerWindowConsumerValid()
+ }
+
+ private fun isWindowExtensionsValid(): Boolean {
+ return validateReflection("WindowExtensionsProvider#getWindowExtensions is not valid") {
val providerClass = windowExtensionsProviderClass
val getWindowExtensionsMethod = providerClass.getDeclaredMethod("getWindowExtensions")
val windowExtensionsClass = windowExtensionsClass
@@ -60,8 +115,8 @@
}
}
- private fun isWindowExtensionsValid(): Boolean {
- return validate {
+ private fun isWindowLayoutProviderValid(): Boolean {
+ return validateReflection("WindowExtensions#getWindowLayoutComponent is not valid") {
val extensionsClass = windowExtensionsClass
val getWindowLayoutComponentMethod =
extensionsClass.getMethod("getWindowLayoutComponent")
@@ -72,7 +127,7 @@
}
private fun isFoldingFeatureValid(): Boolean {
- return validate {
+ return validateReflection("FoldingFeature class is not valid") {
val foldingFeatureClass = foldingFeatureClass
val getBoundsMethod = foldingFeatureClass.getMethod("getBounds")
val getTypeMethod = foldingFeatureClass.getMethod("getType")
@@ -86,9 +141,13 @@
}
}
- private fun isWindowLayoutComponentValid(): Boolean {
- return validate {
- val consumerClass = consumerAdapter.consumerClassOrNull() ?: return@validate false
+ private fun isMethodWindowLayoutInfoListenerJavaConsumerValid(): Boolean {
+ return validateReflection(
+ "WindowLayoutComponent#addWindowLayoutInfoListener(" +
+ "${Activity::class.java.name}, $JAVA_CONSUMER) is not valid"
+ ) {
+ val consumerClass =
+ consumerAdapter.consumerClassOrNull() ?: return@validateReflection false
val windowLayoutComponent = windowLayoutComponentClass
val addListenerMethod = windowLayoutComponent
.getMethod(
@@ -102,46 +161,59 @@
}
}
- private fun validate(block: () -> Boolean): Boolean {
- return try {
- block()
- } catch (noClass: ClassNotFoundException) {
- false
- } catch (noMethod: NoSuchMethodException) {
- false
+ private fun isMethodWindowLayoutInfoListenerWindowConsumerValid(): Boolean {
+ return validateReflection(
+ "WindowLayoutComponent#addWindowLayoutInfoListener" +
+ "(${Context::class.java.name}, $WINDOW_CONSUMER) is not valid"
+ ) {
+ val windowLayoutComponent = windowLayoutComponentClass
+ val addListenerMethod = windowLayoutComponent
+ .getMethod(
+ "addWindowLayoutInfoListener",
+ Context::class.java,
+ Consumer::class.java
+ )
+ val removeListenerMethod = windowLayoutComponent
+ .getMethod("removeWindowLayoutInfoListener", Consumer::class.java)
+ addListenerMethod.isPublic && removeListenerMethod.isPublic
}
}
- private val Method.isPublic: Boolean
- get() {
- return Modifier.isPublic(modifiers)
+ private fun isMethodWindowLayoutInfoListenerJavaConsumerUiContextValid(): Boolean {
+ return validateReflection(
+ "WindowLayoutComponent#addWindowLayoutInfoListener" +
+ "(${Context::class.java.name}, $JAVA_CONSUMER) is not valid"
+ ) {
+ val consumerClass =
+ consumerAdapter.consumerClassOrNull() ?: return@validateReflection false
+ val windowLayoutComponent = windowLayoutComponentClass
+ val addListenerMethod = windowLayoutComponent
+ .getMethod(
+ "addWindowLayoutInfoListener",
+ Context::class.java,
+ consumerClass
+ )
+ addListenerMethod.isPublic
}
-
- private fun Method.doesReturn(clazz: KClass<*>): Boolean {
- return doesReturn(clazz.java)
- }
-
- private fun Method.doesReturn(clazz: Class<*>): Boolean {
- return returnType.equals(clazz)
}
private val windowExtensionsProviderClass: Class<*>
get() {
- return loader.loadClass("androidx.window.extensions.WindowExtensionsProvider")
+ return loader.loadClass(WINDOW_EXTENSIONS_PROVIDER_CLASS)
}
private val windowExtensionsClass: Class<*>
get() {
- return loader.loadClass("androidx.window.extensions.WindowExtensions")
+ return loader.loadClass(WINDOW_EXTENSIONS_CLASS)
}
private val foldingFeatureClass: Class<*>
get() {
- return loader.loadClass("androidx.window.extensions.layout.FoldingFeature")
+ return loader.loadClass(FOLDING_FEATURE_CLASS)
}
private val windowLayoutComponentClass: Class<*>
get() {
- return loader.loadClass("androidx.window.extensions.layout.WindowLayoutComponent")
+ return loader.loadClass(WINDOW_LAYOUT_COMPONENT_CLASS)
}
}
diff --git a/window/window/src/main/java/androidx/window/reflection/ReflectionUtils.kt b/window/window/src/main/java/androidx/window/reflection/ReflectionUtils.kt
new file mode 100644
index 0000000..326486e
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/reflection/ReflectionUtils.kt
@@ -0,0 +1,83 @@
+/*
+ * 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.window.reflection
+
+import android.util.Log
+import java.lang.reflect.Method
+import java.lang.reflect.Modifier
+import kotlin.reflect.KClass
+
+/**
+ * Utility class used for reflection guard for WindowExtensions classes' validation
+ */
+internal object ReflectionUtils {
+
+ internal fun checkIsPresent(classLoader: () -> Class<*>): Boolean {
+ return try {
+ classLoader()
+ true
+ } catch (noClass: ClassNotFoundException) {
+ false
+ } catch (noDefinition: NoClassDefFoundError) {
+ false
+ }
+ }
+
+ /**
+ * Validates the code block normally for reflection. If there are [ClassNotFoundException]
+ * or [NoSuchMethodException] thrown, validation will fail.
+ * Otherwise will return the validation result from the [block]
+ */
+ @JvmStatic
+ internal fun validateReflection(errorMessage: String? = null, block: () -> Boolean): Boolean {
+ return try {
+ val result = block()
+ if (!result && errorMessage != null) {
+ Log.e("ReflectionGuard", errorMessage)
+ }
+ result
+ } catch (noClass: ClassNotFoundException) {
+ Log.e("ReflectionGuard", "ClassNotFound: ${errorMessage.orEmpty()}")
+ false
+ } catch (noMethod: NoSuchMethodException) {
+ Log.e("ReflectionGuard", "NoSuchMethod: ${errorMessage.orEmpty()}")
+ false
+ }
+ }
+
+ /**
+ * Checks if a method has public modifier
+ */
+ internal val Method.isPublic: Boolean
+ get() {
+ return Modifier.isPublic(modifiers)
+ }
+
+ /**
+ * Checks if a method's return value is type of kotlin [clazz]
+ */
+ internal fun Method.doesReturn(clazz: KClass<*>): Boolean {
+ return doesReturn(clazz.java)
+ }
+
+ /**
+ * Checks if a method's return value is type of java [clazz]
+ */
+ internal fun Method.doesReturn(clazz: Class<*>): Boolean {
+ return returnType.equals(clazz)
+ }
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/reflection/WindowExtensionsConstants.kt b/window/window/src/main/java/androidx/window/reflection/WindowExtensionsConstants.kt
new file mode 100644
index 0000000..341e019
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/reflection/WindowExtensionsConstants.kt
@@ -0,0 +1,74 @@
+/*
+ * 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.window.reflection
+
+/**
+ * Constants for WindowExtensions
+ */
+internal object WindowExtensionsConstants {
+ /**
+ * Constant name for package [androidx.window.extensions]
+ */
+ private const val WINDOW_EXTENSIONS_PACKAGE_NAME = "androidx.window.extensions"
+
+ /**
+ * Constant name for class [androidx.window.extensions.WindowExtensionsProvider] used
+ * for reflection
+ */
+ internal const val WINDOW_EXTENSIONS_PROVIDER_CLASS =
+ "$WINDOW_EXTENSIONS_PACKAGE_NAME.WindowExtensionsProvider"
+
+ /**
+ * Constant name for class [androidx.window.extensions.WindowExtensions] used for reflection
+ */
+ internal const val WINDOW_EXTENSIONS_CLASS =
+ "$WINDOW_EXTENSIONS_PACKAGE_NAME.WindowExtensions"
+
+ /**
+ * Constant name for class [androidx.window.extensions.layout.FoldingFeature]
+ * used for reflection
+ */
+ internal const val FOLDING_FEATURE_CLASS =
+ "$WINDOW_EXTENSIONS_PACKAGE_NAME.layout.FoldingFeature"
+
+ /**
+ * Constant name for class [androidx.window.extensions.layout.WindowLayoutComponent]
+ * used for reflection
+ */
+ internal const val WINDOW_LAYOUT_COMPONENT_CLASS =
+ "$WINDOW_EXTENSIONS_PACKAGE_NAME.layout.WindowLayoutComponent"
+
+ /**
+ * Constant name for class [androidx.window.extensions.embedding.ActivityEmbeddingComponent]
+ * used for reflection
+ */
+ internal const val ACTIVITY_EMBEDDING_COMPONENT_CLASS =
+ "$WINDOW_EXTENSIONS_PACKAGE_NAME.embedding.ActivityEmbeddingComponent"
+
+ /**
+ * Constant name for class [androidx.window.extensions.core.util.function]
+ * used for reflection
+ */
+ internal const val WINDOW_CONSUMER =
+ "$WINDOW_EXTENSIONS_PACKAGE_NAME.core.util.function.Consumer"
+
+ /**
+ * Constant name for class [java.util.function.Consumer]
+ * used for reflection
+ */
+ internal const val JAVA_CONSUMER = "java.util.function.Consumer"
+}
diff --git a/window/window/src/main/res/values/attrs.xml b/window/window/src/main/res/values/attrs.xml
index 8ee9802..a2880ca 100644
--- a/window/window/src/main/res/values/attrs.xml
+++ b/window/window/src/main/res/values/attrs.xml
@@ -47,8 +47,9 @@
<attr name="tag" format="string" />
<!-- An attribute for Activity Embedding rules.
Background color of Activity Embedding window animation if the animation requires a
- background.
- The default is to use the theme's windowBackground. -->
+ background. Only opaque color is supported.
+ The default is to use the current theme's windowBackground. Any non-opaque color will be
+ treated the same as default. -->
<attr name="animationBackgroundColor" format="color" />
<!-- An attribute for Activity Embedding rules.
diff --git a/window/window/src/test/java/androidx/window/embedding/ActivityStackTest.kt b/window/window/src/test/java/androidx/window/embedding/ActivityStackTest.kt
index 1af074c..b13af0c 100644
--- a/window/window/src/test/java/androidx/window/embedding/ActivityStackTest.kt
+++ b/window/window/src/test/java/androidx/window/embedding/ActivityStackTest.kt
@@ -27,16 +27,16 @@
@Test
fun testContainsActivity() {
val activity = mock<Activity>()
- val stack = ActivityStack(listOf(activity))
+ val stack = ActivityStack(listOf(activity), isEmpty = false)
- assertTrue(stack.contains(activity))
+ assertTrue(activity in stack)
}
@Test
fun testEqualsImpliesHashCode() {
val activity = mock<Activity>()
- val first = ActivityStack(listOf(activity))
- val second = ActivityStack(listOf(activity))
+ val first = ActivityStack(listOf(activity), isEmpty = false)
+ val second = ActivityStack(listOf(activity), isEmpty = false)
assertEquals(first, second)
assertEquals(first.hashCode(), second.hashCode())
diff --git a/window/window/src/test/java/androidx/window/embedding/SplitInfoTest.kt b/window/window/src/test/java/androidx/window/embedding/SplitInfoTest.kt
index 06c6bbc..07c0855 100644
--- a/window/window/src/test/java/androidx/window/embedding/SplitInfoTest.kt
+++ b/window/window/src/test/java/androidx/window/embedding/SplitInfoTest.kt
@@ -27,8 +27,8 @@
@Test
fun testSplitInfoContainsActivityFirstStack() {
val activity = mock<Activity>()
- val firstStack = ActivityStack(listOf(activity))
- val secondStack = ActivityStack(emptyList())
+ val firstStack = createTestActivityStack(listOf(activity))
+ val secondStack = createTestActivityStack(emptyList())
val attributes = SplitAttributes()
val info = SplitInfo(firstStack, secondStack, attributes)
@@ -38,8 +38,8 @@
@Test
fun testSplitInfoContainsActivitySecondStack() {
val activity = mock<Activity>()
- val firstStack = ActivityStack(emptyList())
- val secondStack = ActivityStack(listOf(activity))
+ val firstStack = createTestActivityStack(emptyList())
+ val secondStack = createTestActivityStack(listOf(activity))
val attributes = SplitAttributes()
val info = SplitInfo(firstStack, secondStack, attributes)
@@ -49,8 +49,8 @@
@Test
fun testEqualsImpliesHashCode() {
val activity = mock<Activity>()
- val firstStack = ActivityStack(emptyList())
- val secondStack = ActivityStack(listOf(activity))
+ val firstStack = createTestActivityStack(emptyList())
+ val secondStack = createTestActivityStack(listOf(activity))
val attributes = SplitAttributes()
val firstInfo = SplitInfo(firstStack, secondStack, attributes)
val secondInfo = SplitInfo(firstStack, secondStack, attributes)
@@ -58,4 +58,9 @@
assertEquals(firstInfo, secondInfo)
assertEquals(firstInfo.hashCode(), secondInfo.hashCode())
}
+
+ private fun createTestActivityStack(
+ activitiesInProcess: List<Activity>,
+ isEmpty: Boolean = false,
+ ): ActivityStack = ActivityStack(activitiesInProcess, isEmpty)
}
\ No newline at end of file
diff --git a/window/window/src/test/java/androidx/window/reflection/ReflectionUtilsTest.kt b/window/window/src/test/java/androidx/window/reflection/ReflectionUtilsTest.kt
new file mode 100644
index 0000000..bdab6f7
--- /dev/null
+++ b/window/window/src/test/java/androidx/window/reflection/ReflectionUtilsTest.kt
@@ -0,0 +1,88 @@
+/*
+ * 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.window.reflection
+
+import androidx.window.reflection.ReflectionUtils.doesReturn
+import androidx.window.reflection.ReflectionUtils.isPublic
+import androidx.window.reflection.ReflectionUtils.validateReflection
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+
+/**
+ * Unit test for reflection utilities
+ */
+class ReflectionUtilsTest {
+
+ private lateinit var classLoader: ClassLoader
+
+ @Before
+ fun setup() {
+ classLoader = this::class.java.classLoader!!
+ }
+
+ @Test
+ fun testValidateReflectionSuccess() {
+ val result = validateReflection {
+ true
+ }
+ assertTrue(result)
+ }
+
+ @Test
+ fun testValidateReflectionFail() {
+ val result = validateReflection {
+ classLoader.loadClass("SomeUnExistedClass.java")
+ true
+ }
+ assertFalse(result)
+ }
+
+ @Test
+ fun testMethodModifier() {
+ val result = validateReflection {
+ val testClass = this::class.java
+ val privateMethod = testClass.getDeclaredMethod("testMethod").isPublic
+ assertFalse(privateMethod)
+ val publicMethod = testClass.getDeclaredMethod("testMethodModifier").isPublic
+ assertTrue(publicMethod)
+ true
+ }
+ assertTrue(result)
+ }
+
+ @Test
+ fun testDoesReturn() {
+ val result = validateReflection {
+ val testClass = this::class.java
+ val privateMethod = testClass.getDeclaredMethod("testMethod")
+ assertTrue(privateMethod.doesReturn(Int::class.java))
+ assertTrue(privateMethod.doesReturn(Int::class))
+ assertFalse(privateMethod.doesReturn(Any::class.java))
+ assertFalse(privateMethod.doesReturn(Any::class))
+ true
+ }
+ assertTrue(result)
+ }
+
+ // method for testing
+ @Suppress("unused")
+ private fun testMethod(): Int {
+ return 0
+ }
+}
\ No newline at end of file
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 c6d67f2..df87e7e 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
@@ -85,6 +85,7 @@
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;
@@ -407,6 +408,7 @@
containsInAnyOrder(value1, value2));
}
+ @Ignore // b/268530685
@Test
@SmallTest
public void testDependencies_setsPeriodStartTimesForUnblockedWork() {
diff --git a/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerRealExecutorTest.kt b/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerRealExecutorTest.kt
index 848dd44..dd435cc 100644
--- a/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerRealExecutorTest.kt
+++ b/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerRealExecutorTest.kt
@@ -29,8 +29,10 @@
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkInfo
+import androidx.work.WorkInfo.State.ENQUEUED
import androidx.work.impl.WorkManagerImpl
import androidx.work.impl.model.WorkSpec
+import androidx.work.impl.utils.taskexecutor.SerialExecutor
import androidx.work.testing.workers.CountingTestWorker
import androidx.work.testing.workers.RetryWorker
import androidx.work.testing.workers.TestWorker
@@ -81,13 +83,14 @@
// TODO: specifically removing deduplication for periodic workers
// so runs aren't dedupped. We need periodicity data in workinfo
val workInfo = wm.workDatabase.workSpecDao().getWorkStatusPojoLiveDataForIds(
- listOf("${request.id}"))
+ listOf("${request.id}")
+ )
var expectedCounter = 1
val maxCount = 5
handler.post {
workInfo.observeForever {
val info = it.first()
- val isEnqueued = info.state == WorkInfo.State.ENQUEUED
+ val isEnqueued = info.state == ENQUEUED
val counter = CountingTestWorker.COUNT.get()
if (isEnqueued && counter == maxCount) {
periodicLatch.countDown()
@@ -160,6 +163,30 @@
}
@Test
+ fun testSetAllConstraintsDontTriggerSecondRun() {
+ val request = PeriodicWorkRequestBuilder<CountingTestWorker>(10, TimeUnit.DAYS)
+ .setConstraints(Constraints(requiresCharging = true)).build()
+ wm.enqueue(request).result.get()
+ val latch = CountDownLatch(1)
+ wm.workTaskExecutor.serialTaskExecutor.execute {
+ latch.await()
+ }
+ // double call to setAllConstraint. It shouldn't lead to double execution of worker.
+ // It should run once, but second time it shouldn't run because "setPeriodDelayMet" wasn't
+ // called.
+ driver.setAllConstraintsMet(request.id)
+ driver.setAllConstraintsMet(request.id)
+ latch.countDown()
+ awaitCondition(request.id) {
+ it.state == ENQUEUED && CountingTestWorker.COUNT.get() > 0
+ }
+
+ drainSerialExecutor()
+ assertThat(wm.getWorkInfoById(request.id).get().state).isEqualTo(ENQUEUED)
+ assertThat(CountingTestWorker.COUNT.get()).isEqualTo(1)
+ }
+
+ @Test
fun testOneTimeWorkerRetry() {
val request = OneTimeWorkRequest.from(RetryWorker::class.java)
wm.enqueue(request).result.get()
@@ -176,11 +203,11 @@
private fun awaitSuccess(id: UUID) = awaitCondition(id) { it.state == WorkInfo.State.SUCCEEDED }
private fun awaitPeriodicRunOnce(id: UUID) = awaitCondition(id) {
- it.state == WorkInfo.State.ENQUEUED && CountingTestWorker.COUNT.get() == 1
+ it.state == ENQUEUED && CountingTestWorker.COUNT.get() == 1
}
private fun awaitReenqueuedAfterRetry(id: UUID) = awaitCondition(id) {
- it.state == WorkInfo.State.ENQUEUED && it.runAttemptCount == 1
+ it.state == ENQUEUED && it.runAttemptCount == 1
}
private fun awaitCondition(id: UUID, predicate: (WorkSpec.WorkInfoPojo) -> Boolean) {
@@ -198,4 +225,22 @@
}
assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue()
}
+
+ private fun drainSerialExecutor() {
+ val latch = CountDownLatch(1)
+
+ class DrainTask(val executor: SerialExecutor) : Runnable {
+ override fun run() {
+ if (executor.hasPendingTasks()) {
+ executor.execute(this)
+ } else {
+ latch.countDown()
+ }
+ }
+ }
+
+ val executor = wm.workTaskExecutor.serialTaskExecutor
+ executor.execute(DrainTask(executor))
+ latch.await()
+ }
}
\ No newline at end of file
diff --git a/work/work-testing/src/main/java/androidx/work/testing/TestScheduler.kt b/work/work-testing/src/main/java/androidx/work/testing/TestScheduler.kt
index 7369589..534f018 100644
--- a/work/work-testing/src/main/java/androidx/work/testing/TestScheduler.kt
+++ b/work/work-testing/src/main/java/androidx/work/testing/TestScheduler.kt
@@ -23,7 +23,6 @@
import androidx.work.impl.StartStopTokens
import androidx.work.impl.WorkDatabase
import androidx.work.impl.WorkManagerImpl
-import androidx.work.impl.model.WorkGenerationalId
import androidx.work.impl.model.WorkSpec
import androidx.work.impl.model.WorkSpecDao
import androidx.work.impl.model.generationalId
@@ -52,25 +51,19 @@
val toSchedule = mutableMapOf<WorkSpec, InternalWorkState>()
synchronized(lock) {
workSpecs.forEach {
- val state = pendingWorkStates.getOrPut(it.generationalId().workSpecId) {
- InternalWorkState(it, true)
- }
- toSchedule[it] = state.copy(isScheduled = true)
+ val oldState = pendingWorkStates[it.id] ?: InternalWorkState()
+ val state = oldState.copy(isScheduled = true)
+ pendingWorkStates[it.id] = state
+ toSchedule[it] = state
}
}
- toSchedule.forEach { (originalSpec, state) ->
- // this spec is attempted to run for the first time
- // so we have to rewind the time, because we have to override flex.
- val spec = if (originalSpec.isPeriodic && state.periodDelayMet) {
- workManagerImpl.rewindLastEnqueueTime(originalSpec.id)
- } else originalSpec
+ toSchedule.forEach { (spec, state) ->
// don't even try to run a worker that WorkerWrapper won't execute anyway.
// similar to logic in WorkerWrapper
- if ((spec.isPeriodic || spec.isBackedOff) &&
- (spec.calculateNextRunTime() > System.currentTimeMillis())) {
+ if (spec.isBackedOff && spec.calculateNextRunTime() > System.currentTimeMillis()) {
return@forEach
}
- scheduleInternal(spec.generationalId(), state)
+ scheduleInternal(spec, state)
}
}
@@ -95,11 +88,11 @@
val spec = loadSpec(id)
val state: InternalWorkState
synchronized(lock) {
- val oldState = pendingWorkStates[id] ?: InternalWorkState(spec, false)
+ val oldState = pendingWorkStates[id] ?: InternalWorkState(initialDelayMet = false)
state = oldState.copy(constraintsMet = true)
pendingWorkStates[id] = state
}
- scheduleInternal(WorkGenerationalId(id, state.generation), state)
+ scheduleInternal(spec, state)
}
/**
@@ -114,12 +107,11 @@
val state: InternalWorkState
val spec = loadSpec(id)
synchronized(lock) {
- val oldState = pendingWorkStates[id] ?: InternalWorkState(spec, false)
+ val oldState = pendingWorkStates[id] ?: InternalWorkState()
state = oldState.copy(initialDelayMet = true)
pendingWorkStates[id] = state
}
- workManagerImpl.rewindLastEnqueueTime(id)
- scheduleInternal(WorkGenerationalId(id, state.generation), state)
+ scheduleInternal(spec, state)
}
/**
@@ -136,20 +128,21 @@
val state: InternalWorkState
synchronized(lock) {
- val oldState = pendingWorkStates[id] ?: InternalWorkState(spec, false)
+ val oldState = pendingWorkStates[id] ?: InternalWorkState()
state = oldState.copy(periodDelayMet = true)
pendingWorkStates[id] = state
}
- workManagerImpl.rewindLastEnqueueTime(id)
- scheduleInternal(WorkGenerationalId(id, state.generation), state)
+ scheduleInternal(spec, state)
}
- private fun scheduleInternal(generationalId: WorkGenerationalId, state: InternalWorkState) {
- if (state.isRunnable) {
+ private fun scheduleInternal(spec: WorkSpec, state: InternalWorkState) {
+ val generationalId = spec.generationalId()
+ if (isRunnable(spec, state)) {
val token = synchronized(lock) {
pendingWorkStates.remove(generationalId.workSpecId)
startStopTokens.tokenFor(generationalId)
}
+ workManagerImpl.rewindLastEnqueueTime(spec.id)
workManagerImpl.startWork(token)
}
}
@@ -162,29 +155,21 @@
}
internal data class InternalWorkState(
- val generation: Int,
- val constraintsMet: Boolean,
- val initialDelayMet: Boolean,
- val periodDelayMet: Boolean,
- val hasConstraints: Boolean,
- val isPeriodic: Boolean,
+ val constraintsMet: Boolean = false,
+ val initialDelayMet: Boolean = false,
+ val periodDelayMet: Boolean = false,
/* means that TestScheduler received this workrequest in schedule(....) function */
- val isScheduled: Boolean
+ val isScheduled: Boolean = false,
)
-internal val InternalWorkState.isRunnable: Boolean
- get() = constraintsMet && initialDelayMet && periodDelayMet && isScheduled
+internal fun isRunnable(spec: WorkSpec, state: InternalWorkState): Boolean {
+ val constraints = !spec.hasConstraints() || state.constraintsMet
+ val initialDelay = (spec.initialDelay == 0L) || state.initialDelayMet
+ val periodic = if (spec.isPeriodic) (state.periodDelayMet || spec.isFirstPeriodicRun) else true
+ return state.isScheduled && constraints && periodic && initialDelay
+}
-internal fun InternalWorkState(spec: WorkSpec, isScheduled: Boolean): InternalWorkState =
- InternalWorkState(
- generation = spec.generation,
- constraintsMet = !spec.hasConstraints(),
- initialDelayMet = spec.initialDelay == 0L,
- periodDelayMet = spec.periodCount == 0 && spec.runAttemptCount == 0,
- hasConstraints = spec.hasConstraints(),
- isPeriodic = spec.isPeriodic,
- isScheduled = isScheduled,
- )
+private val WorkSpec.isFirstPeriodicRun get() = periodCount == 0 && runAttemptCount == 0
private fun WorkManagerImpl.rewindLastEnqueueTime(id: String): WorkSpec {
// We need to pass check that mWorkSpec.calculateNextRunTime() < now