Merge "Fixes AlertDialog dismiss actions with long text" into androidx-main
diff --git a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateCall.kt b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateCall.kt
index 5b1fdc6..a58ae85 100644
--- a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateCall.kt
+++ b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateCall.kt
@@ -20,8 +20,8 @@
import androidx.appactions.builtintypes.experimental.types.Call
import androidx.appactions.builtintypes.experimental.types.GenericErrorStatus
import androidx.appactions.builtintypes.experimental.types.SuccessStatus
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.CapabilityFactory
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.EntityConverter
@@ -38,21 +38,31 @@
private const val CAPABILITY_NAME: String = "actions.intent.CREATE_CALL"
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(CreateCall.Properties::class.java)
.setArguments(CreateCall.Arguments::class.java, CreateCall.Arguments::Builder)
.setOutput(CreateCall.Output::class.java)
.bindOptionalParameter(
"call.callFormat",
- { property -> Optional.ofNullable(property.callFormat) },
+ { properties ->
+ Optional.ofNullable(
+ properties[CreateCall.PropertyMapStrings.CALL_FORMAT.key]
+ as Property<Call.CanonicalValue.CallFormat>
+ )
+ },
CreateCall.Arguments.Builder::setCallFormat,
TypeConverters.CALL_FORMAT_PARAM_VALUE_CONVERTER,
TypeConverters.CALL_FORMAT_ENTITY_CONVERTER
)
.bindRepeatedParameter(
"call.participant",
- { property -> Optional.ofNullable(property.participant) },
+ { properties ->
+ Optional.ofNullable(
+ properties[CreateCall.PropertyMapStrings.PARTICIPANT.key]
+ as Property<Participant>
+ )
+ },
CreateCall.Arguments.Builder::setParticipantList,
ParticipantValue.PARAM_VALUE_CONVERTER,
EntityConverter.of(PARTICIPANT_TYPE_SPEC)
@@ -71,57 +81,26 @@
@CapabilityFactory(name = CAPABILITY_NAME)
class CreateCall private constructor() {
- class CapabilityBuilder :
- Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
- >(ACTION_SPEC) {
- override fun build(): Capability {
- super.setProperty(Properties.Builder().build())
- // TODO(b/268369632): No-op remove empty property builder after Property is removed.
- super.setProperty(Properties.Builder().build())
- return super.build()
- }
+ internal enum class PropertyMapStrings(val key: String) {
+ CALL_FORMAT("call.callFormat"),
+ PARTICIPANT("call.participant"),
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties
- internal constructor(
- val callFormat: Property<Call.CanonicalValue.CallFormat>?,
- val participant: Property<Participant>?
- ) {
- override fun toString(): String {
- return "Property(callFormat=$callFormat, participant=$participant)"
- }
+ class CapabilityBuilder :
+ Capability.Builder<
+ CapabilityBuilder, Arguments, Output, Confirmation, ExecutionSession
+ >(ACTION_SPEC) {
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass != other?.javaClass) return false
+ private var properties = mutableMapOf<String, Property<*>>()
- other as Properties
+ fun setCallFormat(callFormat: Property<Call.CanonicalValue.CallFormat>): CapabilityBuilder =
+ apply {
+ properties[PropertyMapStrings.CALL_FORMAT.key] = callFormat
+ }
- if (callFormat != other.callFormat) return false
- if (participant != other.participant) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- var result = callFormat.hashCode()
- result = 31 * result + participant.hashCode()
- return result
- }
-
- class Builder {
- private var callFormat: Property<Call.CanonicalValue.CallFormat>? = null
-
- private var participant: Property<Participant>? = null
-
- fun setCallFormat(callFormat: Property<Call.CanonicalValue.CallFormat>): Builder =
- apply {
- this.callFormat = callFormat
- }
-
- fun build(): Properties = Properties(callFormat, participant)
+ override fun build(): Capability {
+ super.setProperty(properties)
+ return super.build()
}
}
diff --git a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateMessage.kt b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateMessage.kt
index d2b8b20..806e5ac 100644
--- a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateMessage.kt
+++ b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/CreateMessage.kt
@@ -18,11 +18,10 @@
import androidx.appactions.builtintypes.experimental.properties.Recipient
import androidx.appactions.builtintypes.experimental.types.GenericErrorStatus
-import androidx.appactions.builtintypes.experimental.types.SuccessStatus
import androidx.appactions.builtintypes.experimental.types.Message
-
-import androidx.appactions.interaction.capabilities.core.Capability
+import androidx.appactions.builtintypes.experimental.types.SuccessStatus
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.CapabilityFactory
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.EntityConverter
@@ -31,8 +30,8 @@
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters.MESSAGE_TYPE_SPEC
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters.RECIPIENT_TYPE_SPEC
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
-import androidx.appactions.interaction.capabilities.core.properties.StringValue
import androidx.appactions.interaction.capabilities.core.properties.Property
+import androidx.appactions.interaction.capabilities.core.properties.StringValue
import androidx.appactions.interaction.proto.ParamValue
import androidx.appactions.interaction.protobuf.Struct
import androidx.appactions.interaction.protobuf.Value
@@ -40,21 +39,31 @@
private const val CAPABILITY_NAME: String = "actions.intent.CREATE_MESSAGE"
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(CreateMessage.Properties::class.java)
.setArguments(CreateMessage.Arguments::class.java, CreateMessage.Arguments::Builder)
.setOutput(CreateMessage.Output::class.java)
.bindRepeatedParameter(
"message.recipient",
- { property -> Optional.ofNullable(property.recipient) },
+ { properties ->
+ Optional.ofNullable(
+ properties[CreateMessage.PropertyMapStrings.RECIPIENT.key]
+ as Property<Recipient>
+ )
+ },
CreateMessage.Arguments.Builder::setRecipientList,
RecipientValue.PARAM_VALUE_CONVERTER,
EntityConverter.of(RECIPIENT_TYPE_SPEC)
)
.bindOptionalParameter(
"message.text",
- { property -> Optional.ofNullable(property.messageText) },
+ { properties ->
+ Optional.ofNullable(
+ properties[CreateMessage.PropertyMapStrings.MESSAGE_TEXT.key]
+ as Property<StringValue>
+ )
+ },
CreateMessage.Arguments.Builder::setMessageText,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER
@@ -73,59 +82,29 @@
@CapabilityFactory(name = CAPABILITY_NAME)
class CreateMessage private constructor() {
- class CapabilityBuilder :
- Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
- >(ACTION_SPEC) {
- override fun build(): Capability {
- super.setProperty(Properties.Builder().build())
- // TODO(b/268369632): No-op remove empty property builder after Property is removed.
- super.setProperty(Properties.Builder().build())
- return super.build()
- }
+ internal enum class PropertyMapStrings(val key: String) {
+ MESSAGE_TEXT("message.text"),
+ RECIPIENT("message.recipient"),
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties
- internal constructor(
- val recipient: Property<Recipient>?,
- val messageText: Property<StringValue>?
- ) {
- override fun toString(): String {
- return "Property(recipient=$recipient, messageText=$messageText)"
+ class CapabilityBuilder :
+ Capability.Builder<
+ CapabilityBuilder, Arguments, Output, Confirmation, ExecutionSession
+ >(ACTION_SPEC) {
+
+ private var properties = mutableMapOf<String, Property<*>>()
+
+ fun setMessageText(messageText: Property<StringValue>): CapabilityBuilder = apply {
+ properties[PropertyMapStrings.MESSAGE_TEXT.key] = messageText
}
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass != other?.javaClass) return false
-
- other as Properties
-
- if (recipient != other.recipient) return false
- if (messageText != other.messageText) return false
-
- return true
+ fun setRecipient(recipient: Property<Recipient>): CapabilityBuilder = apply {
+ properties[PropertyMapStrings.RECIPIENT.key] = recipient
}
- override fun hashCode(): Int {
- var result = recipient.hashCode()
- result = 31 * result + messageText.hashCode()
- return result
- }
-
- class Builder {
- private var recipient: Property<Recipient>? = null
- private var messageText: Property<StringValue>? = null
-
- fun setRecipient(recipient: Property<Recipient>): Builder = apply {
- this.recipient = recipient
- }
-
- fun setMessageText(messageText: Property<StringValue>): Builder = apply {
- this.messageText = messageText
- }
-
- fun build(): Properties = Properties(recipient, messageText)
+ override fun build(): Capability {
+ super.setProperty(properties)
+ return super.build()
}
}
diff --git a/appactions/interaction/interaction-capabilities-core/api/current.txt b/appactions/interaction/interaction-capabilities-core/api/current.txt
index 7622cc1..b2e08cf 100644
--- a/appactions/interaction/interaction-capabilities-core/api/current.txt
+++ b/appactions/interaction/interaction-capabilities-core/api/current.txt
@@ -13,7 +13,7 @@
property public String id;
}
- public abstract static class Capability.Builder<BuilderT extends androidx.appactions.interaction.capabilities.core.Capability.Builder<BuilderT, PropertyT, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT>, PropertyT, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT extends androidx.appactions.interaction.capabilities.core.BaseExecutionSession<ArgumentsT, OutputT>> {
+ public abstract static class Capability.Builder<BuilderT extends androidx.appactions.interaction.capabilities.core.Capability.Builder<BuilderT, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT>, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT extends androidx.appactions.interaction.capabilities.core.BaseExecutionSession<ArgumentsT, OutputT>> {
method public final BuilderT asBuilder();
method public androidx.appactions.interaction.capabilities.core.Capability build();
method public final BuilderT setExecutionCallback(androidx.appactions.interaction.capabilities.core.ExecutionCallback<ArgumentsT,OutputT> executionCallback);
diff --git a/appactions/interaction/interaction-capabilities-core/api/public_plus_experimental_current.txt b/appactions/interaction/interaction-capabilities-core/api/public_plus_experimental_current.txt
index 7622cc1..b2e08cf 100644
--- a/appactions/interaction/interaction-capabilities-core/api/public_plus_experimental_current.txt
+++ b/appactions/interaction/interaction-capabilities-core/api/public_plus_experimental_current.txt
@@ -13,7 +13,7 @@
property public String id;
}
- public abstract static class Capability.Builder<BuilderT extends androidx.appactions.interaction.capabilities.core.Capability.Builder<BuilderT, PropertyT, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT>, PropertyT, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT extends androidx.appactions.interaction.capabilities.core.BaseExecutionSession<ArgumentsT, OutputT>> {
+ public abstract static class Capability.Builder<BuilderT extends androidx.appactions.interaction.capabilities.core.Capability.Builder<BuilderT, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT>, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT extends androidx.appactions.interaction.capabilities.core.BaseExecutionSession<ArgumentsT, OutputT>> {
method public final BuilderT asBuilder();
method public androidx.appactions.interaction.capabilities.core.Capability build();
method public final BuilderT setExecutionCallback(androidx.appactions.interaction.capabilities.core.ExecutionCallback<ArgumentsT,OutputT> executionCallback);
diff --git a/appactions/interaction/interaction-capabilities-core/api/restricted_current.txt b/appactions/interaction/interaction-capabilities-core/api/restricted_current.txt
index 7622cc1..b2e08cf 100644
--- a/appactions/interaction/interaction-capabilities-core/api/restricted_current.txt
+++ b/appactions/interaction/interaction-capabilities-core/api/restricted_current.txt
@@ -13,7 +13,7 @@
property public String id;
}
- public abstract static class Capability.Builder<BuilderT extends androidx.appactions.interaction.capabilities.core.Capability.Builder<BuilderT, PropertyT, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT>, PropertyT, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT extends androidx.appactions.interaction.capabilities.core.BaseExecutionSession<ArgumentsT, OutputT>> {
+ public abstract static class Capability.Builder<BuilderT extends androidx.appactions.interaction.capabilities.core.Capability.Builder<BuilderT, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT>, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT extends androidx.appactions.interaction.capabilities.core.BaseExecutionSession<ArgumentsT, OutputT>> {
method public final BuilderT asBuilder();
method public androidx.appactions.interaction.capabilities.core.Capability build();
method public final BuilderT setExecutionCallback(androidx.appactions.interaction.capabilities.core.ExecutionCallback<ArgumentsT,OutputT> executionCallback);
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/Capability.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/Capability.kt
index a043cd2..6fc55f2 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/Capability.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/Capability.kt
@@ -20,9 +20,10 @@
import androidx.appactions.interaction.capabilities.core.impl.CapabilitySession
import androidx.appactions.interaction.capabilities.core.impl.SingleTurnCapabilityImpl
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpec
+import androidx.appactions.interaction.capabilities.core.impl.task.EmptyTaskUpdater
import androidx.appactions.interaction.capabilities.core.impl.task.SessionBridge
import androidx.appactions.interaction.capabilities.core.impl.task.TaskCapabilityImpl
-import androidx.appactions.interaction.capabilities.core.impl.task.EmptyTaskUpdater
+import androidx.appactions.interaction.capabilities.core.properties.Property
import androidx.appactions.interaction.proto.AppActionsContext.AppAction
/**
@@ -61,27 +62,25 @@
BuilderT :
Builder<
BuilderT,
- PropertyT,
ArgumentsT,
OutputT,
ConfirmationT,
ExecutionSessionT
>,
- PropertyT,
ArgumentsT,
OutputT,
ConfirmationT,
ExecutionSessionT : BaseExecutionSession<ArgumentsT, OutputT>
> private constructor() {
private var id: String? = null
- private var property: PropertyT? = null
+ private var property: Map<String, Property<*>>? = null
private var executionCallback: ExecutionCallback<ArgumentsT, OutputT>? = null
private var sessionFactory:
- (hostProperties: HostProperties?) -> ExecutionSessionT? = { _ -> null }
- private var actionSpec: ActionSpec<PropertyT, ArgumentsT, OutputT>? = null
+ (hostProperties: HostProperties?) -> ExecutionSessionT? = { _ -> null }
+ private var actionSpec: ActionSpec<ArgumentsT, OutputT>? = null
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
- constructor(actionSpec: ActionSpec<PropertyT, ArgumentsT, OutputT>) : this() {
+ constructor(actionSpec: ActionSpec<ArgumentsT, OutputT>) : this() {
this.actionSpec = actionSpec
}
@@ -111,7 +110,7 @@
* Sets the Property instance for this capability.
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
- fun setProperty(property: PropertyT) = asBuilder().apply {
+ fun setProperty(property: Map<String, Property<*>>) = asBuilder().apply {
this.property = property
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/ErrorStatusInternal.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/ErrorStatusInternal.java
index 17b9eeb..d983859 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/ErrorStatusInternal.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/ErrorStatusInternal.java
@@ -23,13 +23,16 @@
public enum ErrorStatusInternal {
CANCELLED(0),
TIMEOUT(1),
- INVALID_REQUEST_TYPE(2),
+ INVALID_REQUEST(2),
UNCHANGED_DISAMBIG_STATE(3),
INVALID_RESOLVER(4),
STRUCT_CONVERSION_FAILURE(5),
+ // TODO(b/276354491): remove SYNC / CONFIRM / TOUCH_EVENT failure codes
SYNC_REQUEST_FAILURE(6),
CONFIRMATION_REQUEST_FAILURE(7),
- TOUCH_EVENT_REQUEST_FAILURE(8);
+ TOUCH_EVENT_REQUEST_FAILURE(8),
+ EXTERNAL_EXCEPTION(9),
+ SESSION_ALREADY_DESTROYED(10);
private final int mCode;
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
index 050d370..2a9393e 100644
--- 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
@@ -17,10 +17,11 @@
package androidx.appactions.interaction.capabilities.core.impl
import androidx.annotation.RestrictTo
-import androidx.appactions.interaction.capabilities.core.ExecutionCallback
import androidx.appactions.interaction.capabilities.core.Capability
+import androidx.appactions.interaction.capabilities.core.ExecutionCallback
import androidx.appactions.interaction.capabilities.core.HostProperties
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpec
+import androidx.appactions.interaction.capabilities.core.properties.Property
import androidx.appactions.interaction.proto.AppActionsContext.AppAction
import androidx.appactions.interaction.proto.TaskInfo
import kotlinx.coroutines.sync.Mutex
@@ -28,13 +29,12 @@
/** @suppress */
@RestrictTo(RestrictTo.Scope.LIBRARY)
internal class SingleTurnCapabilityImpl<
- PropertyT,
ArgumentsT,
OutputT,
> constructor(
id: String,
- val actionSpec: ActionSpec<PropertyT, ArgumentsT, OutputT>,
- val property: PropertyT,
+ val actionSpec: ActionSpec<ArgumentsT, OutputT>,
+ val property: Map<String, Property<*>>,
val executionCallback: ExecutionCallback<ArgumentsT, OutputT>,
) : Capability(id) {
private val mutex = Mutex()
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
index 0f1bccb..32f3753 100644
--- 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
@@ -21,6 +21,9 @@
import androidx.appactions.interaction.capabilities.core.ExecutionResult
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpec
import androidx.appactions.interaction.capabilities.core.impl.utils.invokeExternalSuspendBlock
+import androidx.appactions.interaction.capabilities.core.impl.utils.isCausedBy
+import androidx.appactions.interaction.capabilities.core.impl.utils.toErrorStatusInternal
+import androidx.appactions.interaction.capabilities.core.impl.exceptions.InvalidRequestException
import androidx.appactions.interaction.proto.AppActionsContext.AppDialogState
import androidx.appactions.interaction.proto.FulfillmentResponse
import androidx.appactions.interaction.proto.ParamValue
@@ -42,7 +45,7 @@
OutputT,
>(
override val sessionId: String,
- private val actionSpec: ActionSpec<*, ArgumentsT, OutputT>,
+ private val actionSpec: ActionSpec<ArgumentsT, OutputT>,
private val executionCallback: ExecutionCallback<ArgumentsT, OutputT>,
private val mutex: Mutex,
private val scope: CoroutineScope = CoroutineScope(Dispatchers.Default),
@@ -81,8 +84,11 @@
}
callback.onSuccess(convertToFulfillmentResponse(output))
} catch (t: Throwable) {
- // TODO(b/276354491) add fine-grained error handling
- callback.onError(ErrorStatusInternal.CANCELLED)
+ callback.onError(t.toErrorStatusInternal())
+ // if the exception is caused by a bad request, do not crash the app
+ if (!t.isCausedBy(InvalidRequestException::class)) {
+ throw t
+ }
} finally {
UiHandleRegistry.unregisterUiHandle(uiHandle)
mutex.unlock(owner = this@SingleTurnCapabilitySession)
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/StructConversionException.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/InvalidRequestException.kt
similarity index 61%
copy from appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/StructConversionException.java
copy to appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/InvalidRequestException.kt
index be13634..b060fc8 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/StructConversionException.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/InvalidRequestException.kt
@@ -14,17 +14,10 @@
* limitations under the License.
*/
-package androidx.appactions.interaction.capabilities.core.impl.exceptions;
+package androidx.appactions.interaction.capabilities.core.impl.exceptions
-import androidx.annotation.Nullable;
-
-/** Represents exceptions that happen during object conversion to/from Struct proto. */
-public class StructConversionException extends Exception {
- public StructConversionException(@Nullable String message) {
- super(message);
- }
-
- public StructConversionException(@Nullable String message, @Nullable Throwable cause) {
- super(message, cause);
- }
+/** Represents exceptions that happen as a result of some incoming request that is invalid. */
+sealed class InvalidRequestException : Exception {
+ constructor(message: String?) : super(message)
+ constructor(message: String?, cause: Throwable?) : super(message, cause)
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/StructConversionException.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/StructConversionException.kt
similarity index 69%
rename from appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/StructConversionException.java
rename to appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/StructConversionException.kt
index be13634..450c533 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/StructConversionException.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/exceptions/StructConversionException.kt
@@ -14,17 +14,10 @@
* limitations under the License.
*/
-package androidx.appactions.interaction.capabilities.core.impl.exceptions;
-
-import androidx.annotation.Nullable;
+package androidx.appactions.interaction.capabilities.core.impl.exceptions
/** Represents exceptions that happen during object conversion to/from Struct proto. */
-public class StructConversionException extends Exception {
- public StructConversionException(@Nullable String message) {
- super(message);
- }
-
- public StructConversionException(@Nullable String message, @Nullable Throwable cause) {
- super(message, cause);
- }
+class StructConversionException : InvalidRequestException {
+ constructor(message: String?) : super(message)
+ constructor(message: String?, cause: Throwable?) : super(message, cause)
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpec.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpec.java
index e17f14c..eb8d0ad 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpec.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpec.java
@@ -18,6 +18,7 @@
import androidx.annotation.NonNull;
import androidx.appactions.interaction.capabilities.core.impl.exceptions.StructConversionException;
+import androidx.appactions.interaction.capabilities.core.properties.Property;
import androidx.appactions.interaction.proto.AppActionsContext.AppAction;
import androidx.appactions.interaction.proto.FulfillmentResponse.StructuredOutput;
import androidx.appactions.interaction.proto.ParamValue;
@@ -28,15 +29,15 @@
/**
* A specification for an action, describing it from the app's point of view.
*
- * @param <PropertyT> typed description of action's characteristics.
* @param <ArgumentsT> typed representation of action's arguments.
- * @param <OutputT> typed action's execution output.
+ * @param <OutputT> typed action's execution output.
*/
-public interface ActionSpec<PropertyT, ArgumentsT, OutputT> {
+public interface ActionSpec<ArgumentsT, OutputT> {
/** Converts the property to the {@code AppAction} proto. */
@NonNull
- AppAction convertPropertyToProto(PropertyT property);
+ AppAction convertPropertyToProto(@NonNull Map<String,
+ Property<?>> property);
/** Builds this action's arguments from an ArgumentsWrapper instance. */
@NonNull
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecBuilder.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecBuilder.java
index e95f904..df268de 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecBuilder.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecBuilder.java
@@ -40,18 +40,13 @@
/**
* A builder for the {@code ActionSpec}.
- *
- * @param <PropertyT>
- * @param <ArgumentsT>
- * @param <ArgumentsBuilderT>
- * @param <OutputT>
*/
-public final class ActionSpecBuilder<
- PropertyT, ArgumentsT, ArgumentsBuilderT extends BuilderOf<ArgumentsT>, OutputT> {
+public final class ActionSpecBuilder<ArgumentsT, ArgumentsBuilderT extends BuilderOf<ArgumentsT>,
+ OutputT> {
private final String mCapabilityName;
private final Supplier<ArgumentsBuilderT> mArgumentBuilderSupplier;
- private final ArrayList<ParamBinding<PropertyT, ArgumentsT, ArgumentsBuilderT>>
+ private final ArrayList<ParamBinding<ArgumentsT, ArgumentsBuilderT>>
mParamBindingList = new ArrayList<>();
private final Map<String, Function<OutputT, List<ParamValue>>> mOutputBindings =
new HashMap<>();
@@ -67,49 +62,44 @@
* to Object as a placeholder, which must be replaced by calling setArgument.
*/
@NonNull
- public static ActionSpecBuilder<Void, Object, BuilderOf<Object>, Void> ofCapabilityNamed(
+ public static ActionSpecBuilder<Object, BuilderOf<Object>, Void> ofCapabilityNamed(
@NonNull String capabilityName) {
return new ActionSpecBuilder<>(capabilityName, () -> Object::new);
}
/** Sets the property type and returns a new {@code ActionSpecBuilder}. */
- @NonNull
- public <NewPropertyT>
- ActionSpecBuilder<NewPropertyT, ArgumentsT, ArgumentsBuilderT, OutputT> setDescriptor(
- @NonNull Class<NewPropertyT> unused) {
- return new ActionSpecBuilder<>(this.mCapabilityName, this.mArgumentBuilderSupplier);
- }
/** Sets the argument type and its builder and returns a new {@code ActionSpecBuilder}. */
@NonNull
public <NewArgumentsT, NewArgumentsBuilderT extends BuilderOf<NewArgumentsT>>
- ActionSpecBuilder<PropertyT, NewArgumentsT, NewArgumentsBuilderT, OutputT> setArguments(
- @NonNull Class<NewArgumentsT> unused,
- @NonNull Supplier<NewArgumentsBuilderT> argumentBuilderSupplier) {
+ ActionSpecBuilder<NewArgumentsT, NewArgumentsBuilderT, OutputT> setArguments(
+ @NonNull Class<NewArgumentsT> unused,
+ @NonNull Supplier<NewArgumentsBuilderT> argumentBuilderSupplier) {
return new ActionSpecBuilder<>(this.mCapabilityName, argumentBuilderSupplier);
}
@NonNull
public <NewOutputT>
- ActionSpecBuilder<PropertyT, ArgumentsT, ArgumentsBuilderT, NewOutputT> setOutput(
- @NonNull Class<NewOutputT> unused) {
+ ActionSpecBuilder<ArgumentsT, ArgumentsBuilderT, NewOutputT> setOutput(
+ @NonNull Class<NewOutputT> unused) {
return new ActionSpecBuilder<>(this.mCapabilityName, this.mArgumentBuilderSupplier);
}
/**
* Binds the parameter name, getter and setter.
*
- * @param paramName the name of this action' parameter.
- * @param paramGetter a getter of the param-specific info from the property.
+ * @param paramName the name of this action' parameter.
+ * @param paramGetter a getter of the param-specific info from the property.
* @param argumentSetter a setter to the argument with the input from {@code ParamValue}.
* @return the builder itself.
*/
@NonNull
- private ActionSpecBuilder<PropertyT, ArgumentsT, ArgumentsBuilderT, OutputT>
- bindParameterInternal(
- @NonNull String paramName,
- @NonNull Function<? super PropertyT, Optional<IntentParameter>> paramGetter,
- @NonNull ArgumentSetter<ArgumentsBuilderT> argumentSetter) {
+ private ActionSpecBuilder<ArgumentsT, ArgumentsBuilderT, OutputT>
+ bindParameterInternal(
+ @NonNull String paramName,
+ @NonNull Function<Map<String, Property<?>>,
+ Optional<IntentParameter>> paramGetter,
+ @NonNull ArgumentSetter<ArgumentsBuilderT> argumentSetter) {
mParamBindingList.add(ParamBinding.create(paramName, paramGetter, argumentSetter));
return this;
}
@@ -129,14 +119,15 @@
*/
@NonNull
public <T, PossibleValueT>
- ActionSpecBuilder<PropertyT, ArgumentsT, ArgumentsBuilderT, OutputT> bindParameter(
- @NonNull String paramName,
- @NonNull
- Function<? super PropertyT, Property<PossibleValueT>>
- propertyGetter,
- @NonNull BiConsumer<? super ArgumentsBuilderT, T> paramConsumer,
- @NonNull ParamValueConverter<T> paramValueConverter,
- @NonNull EntityConverter<PossibleValueT> entityConverter) {
+ ActionSpecBuilder<ArgumentsT, ArgumentsBuilderT, OutputT> bindParameter(
+ @NonNull String paramName,
+ @NonNull
+ Function<Map<String, Property<?>>,
+ Property<PossibleValueT>>
+ propertyGetter,
+ @NonNull BiConsumer<? super ArgumentsBuilderT, T> paramConsumer,
+ @NonNull ParamValueConverter<T> paramValueConverter,
+ @NonNull EntityConverter<PossibleValueT> entityConverter) {
return bindOptionalParameter(
paramName,
property -> Optional.of(propertyGetter.apply(property)),
@@ -163,17 +154,17 @@
*/
@NonNull
public <T, PossibleValueT>
- ActionSpecBuilder<PropertyT, ArgumentsT, ArgumentsBuilderT, OutputT>
- bindOptionalParameter(
- @NonNull String paramName,
- @NonNull
- Function<
- ? super PropertyT,
- Optional<Property<PossibleValueT>>>
- optionalPropertyGetter,
- @NonNull BiConsumer<? super ArgumentsBuilderT, T> paramConsumer,
- @NonNull ParamValueConverter<T> paramValueConverter,
- @NonNull EntityConverter<PossibleValueT> entityConverter) {
+ ActionSpecBuilder<ArgumentsT, ArgumentsBuilderT, OutputT>
+ bindOptionalParameter(
+ @NonNull String paramName,
+ @NonNull
+ Function<
+ Map<String, Property<?>>,
+ Optional<Property<PossibleValueT>>>
+ optionalPropertyGetter,
+ @NonNull BiConsumer<? super ArgumentsBuilderT, T> paramConsumer,
+ @NonNull ParamValueConverter<T> paramValueConverter,
+ @NonNull EntityConverter<PossibleValueT> entityConverter) {
return bindParameterInternal(
paramName,
property ->
@@ -200,17 +191,17 @@
*/
@NonNull
public <T, PossibleValueT>
- ActionSpecBuilder<PropertyT, ArgumentsT, ArgumentsBuilderT, OutputT>
- bindRepeatedParameter(
- @NonNull String paramName,
- @NonNull
- Function<
- ? super PropertyT,
- Optional<Property<PossibleValueT>>>
- optionalPropertyGetter,
- @NonNull BiConsumer<? super ArgumentsBuilderT, List<T>> paramConsumer,
- @NonNull ParamValueConverter<T> paramValueConverter,
- @NonNull EntityConverter<PossibleValueT> entityConverter) {
+ ActionSpecBuilder<ArgumentsT, ArgumentsBuilderT, OutputT>
+ bindRepeatedParameter(
+ @NonNull String paramName,
+ @NonNull
+ Function<
+ Map<String, Property<?>>,
+ Optional<Property<PossibleValueT>>>
+ optionalPropertyGetter,
+ @NonNull BiConsumer<? super ArgumentsBuilderT, List<T>> paramConsumer,
+ @NonNull ParamValueConverter<T> paramValueConverter,
+ @NonNull EntityConverter<PossibleValueT> entityConverter) {
return bindParameterInternal(
paramName,
property ->
@@ -227,17 +218,17 @@
/**
* Binds an optional output.
*
- * @param name the BII output slot name of this parameter.
+ * @param name the BII output slot name of this parameter.
* @param outputGetter a getter of the output from the {@code OutputT} instance.
- * @param converter a converter from an output object to a ParamValue.
+ * @param converter a converter from an output object to a ParamValue.
*/
@NonNull
@SuppressWarnings("JdkCollectors")
public <T>
- ActionSpecBuilder<PropertyT, ArgumentsT, ArgumentsBuilderT, OutputT> bindOptionalOutput(
- @NonNull String name,
- @NonNull Function<OutputT, Optional<T>> outputGetter,
- @NonNull Function<T, ParamValue> converter) {
+ ActionSpecBuilder<ArgumentsT, ArgumentsBuilderT, OutputT> bindOptionalOutput(
+ @NonNull String name,
+ @NonNull Function<OutputT, Optional<T>> outputGetter,
+ @NonNull Function<T, ParamValue> converter) {
mOutputBindings.put(
name,
output -> {
@@ -254,17 +245,17 @@
/**
* Binds a repeated output.
*
- * @param name the BII output slot name of this parameter.
+ * @param name the BII output slot name of this parameter.
* @param outputGetter a getter of the output from the {@code OutputT} instance.
- * @param converter a converter from an output object to a ParamValue.
+ * @param converter a converter from an output object to a ParamValue.
*/
@NonNull
@SuppressWarnings("JdkCollectors")
public <T>
- ActionSpecBuilder<PropertyT, ArgumentsT, ArgumentsBuilderT, OutputT> bindRepeatedOutput(
- @NonNull String name,
- @NonNull Function<OutputT, List<T>> outputGetter,
- @NonNull Function<T, ParamValue> converter) {
+ ActionSpecBuilder<ArgumentsT, ArgumentsBuilderT, OutputT> bindRepeatedOutput(
+ @NonNull String name,
+ @NonNull Function<OutputT, List<T>> outputGetter,
+ @NonNull Function<T, ParamValue> converter) {
mOutputBindings.put(
name,
output ->
@@ -276,7 +267,7 @@
/** Builds an {@code ActionSpec} from this builder. */
@NonNull
- public ActionSpec<PropertyT, ArgumentsT, OutputT> build() {
+ public ActionSpec<ArgumentsT, OutputT> build() {
return new ActionSpecImpl<>(
mCapabilityName,
mArgumentBuilderSupplier,
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 47f0a1a..8dfdb19 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
@@ -21,6 +21,7 @@
import androidx.annotation.NonNull;
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf;
import androidx.appactions.interaction.capabilities.core.impl.exceptions.StructConversionException;
+import androidx.appactions.interaction.capabilities.core.properties.Property;
import androidx.appactions.interaction.proto.AppActionsContext.AppAction;
import androidx.appactions.interaction.proto.FulfillmentResponse.StructuredOutput;
import androidx.appactions.interaction.proto.ParamValue;
@@ -33,18 +34,18 @@
/** The implementation of {@code ActionSpec} interface. */
final class ActionSpecImpl<
- PropertyT, ArgumentsT, ArgumentsBuilderT extends BuilderOf<ArgumentsT>, OutputT>
- implements ActionSpec<PropertyT, ArgumentsT, OutputT> {
+ ArgumentsT, ArgumentsBuilderT extends BuilderOf<ArgumentsT>, OutputT>
+ implements ActionSpec<ArgumentsT, OutputT> {
private final String mCapabilityName;
private final Supplier<ArgumentsBuilderT> mArgumentBuilderSupplier;
- private final List<ParamBinding<PropertyT, ArgumentsT, ArgumentsBuilderT>> mParamBindingList;
+ private final List<ParamBinding<ArgumentsT, ArgumentsBuilderT>> mParamBindingList;
private final Map<String, Function<OutputT, List<ParamValue>>> mOutputBindings;
ActionSpecImpl(
String capabilityName,
Supplier<ArgumentsBuilderT> argumentBuilderSupplier,
- List<ParamBinding<PropertyT, ArgumentsT, ArgumentsBuilderT>> paramBindingList,
+ List<ParamBinding<ArgumentsT, ArgumentsBuilderT>> paramBindingList,
Map<String, Function<OutputT, List<ParamValue>>> outputBindings) {
this.mCapabilityName = capabilityName;
this.mArgumentBuilderSupplier = argumentBuilderSupplier;
@@ -54,7 +55,7 @@
@NonNull
@Override
- public AppAction convertPropertyToProto(PropertyT property) {
+ public AppAction convertPropertyToProto(@NonNull Map<String, Property<?>> property) {
return AppAction.newBuilder()
.setName(mCapabilityName)
.addAllParams(
@@ -71,7 +72,7 @@
public ArgumentsT buildArguments(@NonNull Map<String, List<ParamValue>> args)
throws StructConversionException {
ArgumentsBuilderT argumentBuilder = mArgumentBuilderSupplier.get();
- for (ParamBinding<PropertyT, ArgumentsT, ArgumentsBuilderT> binding : mParamBindingList) {
+ for (ParamBinding<ArgumentsT, ArgumentsBuilderT> binding : mParamBindingList) {
List<ParamValue> paramValues = args.get(binding.name());
if (paramValues == null) {
continue;
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ParamBinding.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ParamBinding.java
index f21f6f2..87ce323 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ParamBinding.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ParamBinding.java
@@ -19,31 +19,30 @@
import androidx.annotation.NonNull;
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf;
import androidx.appactions.interaction.capabilities.core.impl.exceptions.StructConversionException;
+import androidx.appactions.interaction.capabilities.core.properties.Property;
import androidx.appactions.interaction.proto.AppActionsContext.IntentParameter;
import androidx.appactions.interaction.proto.ParamValue;
import com.google.auto.value.AutoValue;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
/**
* A binding between a parameter and its Property converter / Argument setter.
- *
- * @param <PropertyT>
- * @param <ArgumentsT>
- * @param <ArgumentsBuilderT>
*/
@AutoValue
public abstract class ParamBinding<
- PropertyT, ArgumentsT, ArgumentsBuilderT extends BuilderOf<ArgumentsT>> {
+ ArgumentsT, ArgumentsBuilderT extends BuilderOf<ArgumentsT>> {
- static <PropertyT, ArgumentsT, ArgumentsBuilderT extends BuilderOf<ArgumentsT>>
- ParamBinding<PropertyT, ArgumentsT, ArgumentsBuilderT> create(
- String name,
- Function<? super PropertyT, Optional<IntentParameter>> paramGetter,
- ArgumentSetter<ArgumentsBuilderT> argumentSetter) {
+ static <ArgumentsT, ArgumentsBuilderT extends BuilderOf<ArgumentsT>>
+ ParamBinding<ArgumentsT, ArgumentsBuilderT> create(
+ String name,
+ Function<Map<String, Property<?>>,
+ Optional<IntentParameter>> paramGetter,
+ ArgumentSetter<ArgumentsBuilderT> argumentSetter) {
return new AutoValue_ParamBinding<>(name, paramGetter, argumentSetter);
}
@@ -52,11 +51,13 @@
public abstract String name();
/**
- * Converts a {@code PropertyT} to an {@code IntentParameter} proto. The resulting proto is the
+ * Converts a {@code Property Map} to an {@code IntentParameter} proto. The resulting proto is
+ * the
* format which we send the current params to Assistant (via. app actions context).
*/
@NonNull
- public abstract Function<? super PropertyT, Optional<IntentParameter>> paramGetter();
+ public abstract Function<Map<String, Property<?>>,
+ Optional<IntentParameter>> paramGetter();
/**
* Populates the {@code ArgumentsBuilderT} for this param with the {@code ParamValue} sent from
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityImpl.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityImpl.kt
index 3f90e23..fc9eeaf 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityImpl.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityImpl.kt
@@ -21,6 +21,7 @@
import androidx.appactions.interaction.capabilities.core.HostProperties
import androidx.appactions.interaction.capabilities.core.impl.CapabilitySession
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpec
+import androidx.appactions.interaction.capabilities.core.properties.Property
import androidx.appactions.interaction.proto.AppActionsContext.AppAction
import androidx.appactions.interaction.proto.TaskInfo
import java.util.function.Supplier
@@ -34,7 +35,6 @@
* @param sessionUpdaterSupplier a Supplier of SessionUpdaterT instances
*/
internal class TaskCapabilityImpl<
- PropertyT,
ArgumentsT,
OutputT,
ExecutionSessionT : BaseExecutionSession<ArgumentsT, OutputT>,
@@ -43,8 +43,8 @@
>
constructor(
id: String,
- private val actionSpec: ActionSpec<PropertyT, ArgumentsT, OutputT>,
- private val property: PropertyT,
+ private val actionSpec: ActionSpec<ArgumentsT, OutputT>,
+ private val property: Map<String, Property<*>>,
private val sessionFactory: (hostProperties: HostProperties?) -> ExecutionSessionT?,
private val sessionBridge: SessionBridge<ExecutionSessionT, ConfirmationT>,
private val sessionUpdaterSupplier: Supplier<SessionUpdaterT>
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilitySession.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilitySession.kt
index 168ab619..1f577f5 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilitySession.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilitySession.kt
@@ -39,7 +39,7 @@
ConfirmationT,
>(
override val sessionId: String,
- actionSpec: ActionSpec<*, ArgumentsT, OutputT>,
+ actionSpec: ActionSpec<ArgumentsT, OutputT>,
appAction: AppAction,
taskHandler: TaskHandler<ConfirmationT>,
externalSession: BaseExecutionSession<ArgumentsT, OutputT>,
@@ -51,7 +51,6 @@
// single-turn capability does not have status
override val isActive: Boolean
get() = when (sessionOrchestrator.status) {
- TaskOrchestrator.Status.COMPLETED,
TaskOrchestrator.Status.DESTROYED -> false
else -> true
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt
index 5e3aaf5..5b51ac3 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt
@@ -58,7 +58,7 @@
*/
internal class TaskOrchestrator<ArgumentsT, OutputT, ConfirmationT>(
private val sessionId: String,
- private val actionSpec: ActionSpec<*, ArgumentsT, OutputT>,
+ private val actionSpec: ActionSpec<ArgumentsT, OutputT>,
private val appAction: AppActionsContext.AppAction,
private val taskHandler: TaskHandler<ConfirmationT>,
private val externalSession: BaseExecutionSession<ArgumentsT, OutputT>,
@@ -68,7 +68,6 @@
internal enum class Status {
UNINITIATED,
IN_PROGRESS,
- COMPLETED,
DESTROYED,
}
/**
@@ -147,7 +146,14 @@
inProgress = true
}
try {
- if (updateRequest.assistantRequest != null) {
+ if (status == Status.DESTROYED) {
+ if (updateRequest.assistantRequest != null) {
+ FulfillmentResult(ErrorStatusInternal.SESSION_ALREADY_DESTROYED)
+ .applyToCallback(updateRequest.assistantRequest.callbackInternal)
+ } else if (updateRequest.touchEventRequest != null && touchEventCallback != null) {
+ touchEventCallback!!.onError(ErrorStatusInternal.SESSION_ALREADY_DESTROYED)
+ }
+ } else if (updateRequest.assistantRequest != null) {
processAssistantUpdateRequest(updateRequest.assistantRequest)
} else if (updateRequest.touchEventRequest != null) {
processTouchEventUpdateRequest(updateRequest.touchEventRequest)
@@ -177,22 +183,22 @@
val callback = assistantUpdateRequest.callbackInternal
val fulfillmentResult: FulfillmentResult
if (argumentsWrapper.requestMetadata == null) {
- fulfillmentResult = FulfillmentResult(ErrorStatusInternal.INVALID_REQUEST_TYPE)
+ fulfillmentResult = FulfillmentResult(ErrorStatusInternal.INVALID_REQUEST)
} else {
fulfillmentResult = when (argumentsWrapper.requestMetadata.requestType()) {
FulfillmentRequest.Fulfillment.Type.UNRECOGNIZED,
FulfillmentRequest.Fulfillment.Type.UNKNOWN_TYPE,
->
- FulfillmentResult(ErrorStatusInternal.INVALID_REQUEST_TYPE)
+ FulfillmentResult(ErrorStatusInternal.INVALID_REQUEST)
FulfillmentRequest.Fulfillment.Type.SYNC -> handleSync(argumentsWrapper)
FulfillmentRequest.Fulfillment.Type.CONFIRM -> handleConfirm()
- FulfillmentRequest.Fulfillment.Type.CANCEL,
- FulfillmentRequest.Fulfillment.Type.TERMINATE,
+ FulfillmentRequest.Fulfillment.Type.CANCEL
-> {
terminate()
FulfillmentResult(FulfillmentResponse.getDefaultInstance())
}
+ else -> FulfillmentResult(ErrorStatusInternal.INVALID_REQUEST)
}
}
fulfillmentResult.applyToCallback(callback)
@@ -254,7 +260,6 @@
}
}
- // TODO: add cleanup logic if any
internal fun terminate() {
externalSession.onDestroy()
status = Status.DESTROYED
@@ -471,7 +476,7 @@
val result = invokeExternalSuspendBlock("onExecute") {
externalSession.onExecute(actionSpec.buildArguments(finalArguments))
}
- status = Status.COMPLETED
+ terminate()
val fulfillmentResponse =
FulfillmentResponse.newBuilder().setStartDictation(result.shouldStartDictation)
convertToExecutionOutput(result)?.let { fulfillmentResponse.executionOutput = it }
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/utils/CallbackUtils.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/utils/CallbackUtils.kt
index 8cc223d..1811abd 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/utils/CallbackUtils.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/utils/CallbackUtils.kt
@@ -16,11 +16,15 @@
package androidx.appactions.interaction.capabilities.core.impl.utils
+import androidx.appactions.interaction.capabilities.core.impl.ErrorStatusInternal
import androidx.appactions.interaction.capabilities.core.impl.exceptions.ExternalException
+import androidx.appactions.interaction.capabilities.core.impl.exceptions.StructConversionException
+import androidx.appactions.interaction.capabilities.core.impl.exceptions.InvalidRequestException
+import kotlin.reflect.KClass
/** invoke an externally implemented method, wrapping any exceptions with ExternalException.
*/
-fun <T> invokeExternalBlock(description: String, block: () -> T): T {
+internal fun <T> invokeExternalBlock(description: String, block: () -> T): T {
try {
return block()
} catch (t: Throwable) {
@@ -31,10 +35,36 @@
/** invoke an externally implemented suspend method, wrapping any exceptions with
* ExternalException.
*/
-suspend fun <T> invokeExternalSuspendBlock(description: String, block: suspend () -> T): T {
+internal suspend fun <T> invokeExternalSuspendBlock(
+ description: String,
+ block: suspend () -> T
+): T {
try {
return block()
} catch (t: Throwable) {
throw ExternalException("exception occurred during '$description'", t)
}
+}
+
+/** Determines whether or not this exception is caused by some type, directly or indirectly. */
+internal fun <T : Throwable> Throwable.isCausedBy(clazz: KClass<T>): Boolean {
+ if (clazz.isInstance(this)) {
+ return true
+ }
+ return this.cause?.isCausedBy(clazz) == true
+}
+
+internal fun Throwable.toErrorStatusInternal(): ErrorStatusInternal {
+ return when {
+ this.isCausedBy(
+ ExternalException::class
+ ) -> ErrorStatusInternal.EXTERNAL_EXCEPTION
+ this.isCausedBy(
+ StructConversionException::class
+ ) -> ErrorStatusInternal.STRUCT_CONVERSION_FAILURE
+ this.isCausedBy(
+ InvalidRequestException::class
+ ) -> ErrorStatusInternal.INVALID_REQUEST
+ else -> ErrorStatusInternal.CANCELLED
+ }
}
\ No newline at end of file
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
index 108565d..a1513d9 100644
--- 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
@@ -19,7 +19,6 @@
import android.util.SizeF
import androidx.appactions.interaction.capabilities.core.ExecutionCallback
import androidx.appactions.interaction.capabilities.core.ExecutionCallbackAsync
-import androidx.appactions.interaction.capabilities.core.toExecutionCallback
import androidx.appactions.interaction.capabilities.core.ExecutionResult
import androidx.appactions.interaction.capabilities.core.HostProperties
import androidx.appactions.interaction.capabilities.core.impl.concurrent.Futures
@@ -28,13 +27,13 @@
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
import androidx.appactions.interaction.capabilities.core.properties.Property
import androidx.appactions.interaction.capabilities.core.properties.StringValue
-import androidx.appactions.interaction.capabilities.testing.internal.ArgumentUtils
-import androidx.appactions.interaction.capabilities.testing.internal.FakeCallbackInternal
-import androidx.appactions.interaction.capabilities.testing.internal.TestingUtils.CB_TIMEOUT
-import androidx.appactions.interaction.capabilities.testing.internal.TestingUtils.BLOCKING_TIMEOUT
import androidx.appactions.interaction.capabilities.core.testing.spec.Arguments
import androidx.appactions.interaction.capabilities.core.testing.spec.Output
-import androidx.appactions.interaction.capabilities.core.testing.spec.Properties
+import androidx.appactions.interaction.capabilities.core.toExecutionCallback
+import androidx.appactions.interaction.capabilities.testing.internal.ArgumentUtils
+import androidx.appactions.interaction.capabilities.testing.internal.FakeCallbackInternal
+import androidx.appactions.interaction.capabilities.testing.internal.TestingUtils.BLOCKING_TIMEOUT
+import androidx.appactions.interaction.capabilities.testing.internal.TestingUtils.CB_TIMEOUT
import androidx.appactions.interaction.proto.AppActionsContext.AppAction
import androidx.appactions.interaction.proto.AppActionsContext.IntentParameter
import androidx.appactions.interaction.proto.FulfillmentResponse
@@ -43,6 +42,7 @@
import androidx.appactions.interaction.proto.ParamValue
import androidx.appactions.interaction.proto.TaskInfo
import com.google.common.truth.Truth.assertThat
+import java.util.Optional
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeoutOrNull
@@ -51,6 +51,7 @@
import org.junit.runners.JUnit4
@RunWith(JUnit4::class)
+@Suppress("UNCHECKED_CAST")
class SingleTurnCapabilityTest {
private val hostProperties =
HostProperties.Builder().setMaxHostSizeDp(SizeF(300f, 500f)).build()
@@ -62,13 +63,13 @@
val capability = SingleTurnCapabilityImpl(
id = "capabilityId",
actionSpec = ACTION_SPEC,
- property = Properties.newBuilder()
- .setRequiredStringField(
- Property.Builder<StringValue>().setPossibleValueSupplier(
+ property = mutableMapOf(
+ "requiredEntity" to Property
+ .Builder<StringValue>()
+ .setPossibleValueSupplier(
mutableEntityList::toList
).build()
- )
- .build(),
+ ),
executionCallback = ExecutionCallback<Arguments, Output> {
ExecutionResult.Builder<Output>().build()
}
@@ -126,17 +127,17 @@
)
.build()
}
+ val property = mutableMapOf<String, Property<*>>()
+ property.put(
+ "requiredString",
+ Property.Builder<StringValue>().build()
+ )
+ property.put("optionalString", Property.prohibited<StringValue>())
val capability =
SingleTurnCapabilityImpl(
id = "capabilityId",
actionSpec = ACTION_SPEC,
- property =
- Properties.newBuilder()
- .setRequiredStringField(
- Property.Builder<StringValue>().build()
- )
- .setOptionalStringField(Property.prohibited())
- .build(),
+ property = property,
executionCallback = executionCallback
)
@@ -181,20 +182,20 @@
}
@Test
- fun oneShotCapability_failure() {
+ fun oneShotCapability_exceptionInExecutionCallback() {
val executionCallback =
ExecutionCallback<Arguments, Output> { throw IllegalStateException("") }
+ val property = mutableMapOf<String, Property<*>>()
+ property.put(
+ "requiredString",
+ Property.Builder<StringValue>().build()
+ )
+ property.put("optionalString", Property.prohibited<StringValue>())
val capability =
SingleTurnCapabilityImpl(
id = "capabilityId",
actionSpec = ACTION_SPEC,
- property =
- Properties.newBuilder()
- .setRequiredStringField(
- Property.Builder<StringValue>().build()
- )
- .setOptionalStringField(Property.prohibited())
- .build(),
+ property = property,
executionCallback = executionCallback
)
@@ -212,23 +213,23 @@
val response = callbackInternal.receiveResponse()
assertThat(response.errorStatus).isNotNull()
- assertThat(response.errorStatus).isEqualTo(ErrorStatusInternal.CANCELLED)
+ assertThat(response.errorStatus).isEqualTo(ErrorStatusInternal.EXTERNAL_EXCEPTION)
}
@Test
fun oneShotSession_uiHandle_withExecutionCallback() {
val executionCallback =
ExecutionCallback<Arguments, Output> { ExecutionResult.Builder<Output>().build() }
+ val property = mutableMapOf<String, Property<*>>()
+ property.put(
+ "requiredString",
+ Property.Builder<StringValue>().build()
+ )
val capability =
SingleTurnCapabilityImpl(
id = "capabilityId",
actionSpec = ACTION_SPEC,
- property =
- Properties.newBuilder()
- .setRequiredStringField(
- Property.Builder<StringValue>().build()
- )
- .build(),
+ property = property,
executionCallback = executionCallback
)
val session = capability.createSession(fakeSessionId, hostProperties)
@@ -241,16 +242,16 @@
ExecutionCallbackAsync<Arguments, Output> {
Futures.immediateFuture(ExecutionResult.Builder<Output>().build())
}
+ val property = mutableMapOf<String, Property<*>>()
+ property.put(
+ "requiredString",
+ Property.Builder<StringValue>().build()
+ )
val capability =
SingleTurnCapabilityImpl(
id = "capabilityId",
actionSpec = ACTION_SPEC,
- property =
- Properties.newBuilder()
- .setRequiredStringField(
- Property.Builder<StringValue>().build()
- )
- .build(),
+ property = property,
executionCallback = executionCallbackAsync.toExecutionCallback()
)
val session = capability.createSession(fakeSessionId, hostProperties)
@@ -266,12 +267,15 @@
argumentChannel.send(it)
executionResultChannel.receive()
}
+ val property = mutableMapOf<String, Property<*>>()
+ property.put(
+ "requiredString",
+ Property.Builder<StringValue>().build()
+ )
val capability = SingleTurnCapabilityImpl(
id = "capabilityId",
actionSpec = ACTION_SPEC,
- property = Properties.newBuilder().setRequiredStringField(
- Property.Builder<StringValue>().build()
- ).build(),
+ property = property,
executionCallback = executionCallback
)
val session1 = capability.createSession("session1", hostProperties)
@@ -322,23 +326,27 @@
}
companion object {
- val ACTION_SPEC: ActionSpec<Properties, Arguments, Output> =
+ val ACTION_SPEC: ActionSpec<Arguments, Output> =
ActionSpecBuilder.ofCapabilityNamed(
"actions.intent.TEST"
)
- .setDescriptor(Properties::class.java)
.setArguments(Arguments::class.java, Arguments::newBuilder)
.setOutput(Output::class.java)
.bindParameter(
"requiredString",
- Properties::requiredStringField,
+ { properties -> properties["requiredEntity"] as Property<StringValue>? },
Arguments.Builder::setRequiredStringField,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER
)
.bindOptionalParameter(
"optionalString",
- Properties::optionalStringField,
+ { properties ->
+ properties["optionalString"]
+ ?.let { it as Property<StringValue> }
+ ?.let { Optional.of(it) }
+ ?: Optional.ofNullable(null)
+ },
Arguments.Builder::setOptionalStringField,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER
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 364bb86..6b7243a 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
@@ -38,32 +38,46 @@
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
-@RunWith(JUnit4.class)
-public final class ActionSpecTest {
- private static final ActionSpec<Properties, Arguments, Output> ACTION_SPEC =
+@RunWith(JUnit4.class)
+@SuppressWarnings("unchecked")
+public final class ActionSpecTest {
+ private static final ActionSpec<Arguments, Output> ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed("actions.intent.TEST")
- .setDescriptor(Properties.class)
.setArguments(Arguments.class, Arguments::newBuilder)
.setOutput(Output.class)
.bindParameter(
"requiredString",
- Properties::requiredStringField,
+ properties ->
+ {
+ return (Property<StringValue>) (properties.get(
+ "requiredString"));
+ },
Arguments.Builder::setRequiredStringField,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER)
.bindOptionalParameter(
"optionalString",
- Properties::optionalStringField,
+ properties ->
+ {
+ return Optional.ofNullable((Property<StringValue>) (properties.get(
+ "optionalString")));
+ },
Arguments.Builder::setOptionalStringField,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER)
.bindRepeatedParameter(
"repeatedString",
- Properties::repeatedStringField,
+ properties ->
+ {
+ return Optional.ofNullable((Property<StringValue>) (properties.get(
+ "repeatedString")));
+ },
Arguments.Builder::setRepeatedStringField,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER)
@@ -96,49 +110,61 @@
.setName(theString)
.build();
- private static final ActionSpec<GenericEntityProperty, GenericEntityArguments, Output>
+ private static final ActionSpec<GenericEntityArguments, Output>
GENERIC_TYPES_ACTION_SPEC =
- ActionSpecBuilder.ofCapabilityNamed("actions.intent.TEST")
- .setDescriptor(GenericEntityProperty.class)
- .setArguments(GenericEntityArguments.class,
- GenericEntityArguments::newBuilder)
- .setOutput(Output.class)
- .bindParameter(
- "requiredEntity",
- GenericEntityProperty::singularField,
- GenericEntityArguments.Builder::setSingularField,
- STRING_PARAM_VALUE_CONVERTER,
- STRING_ENTITY_CONVERTER)
- .bindOptionalParameter("optionalEntity",
- GenericEntityProperty::optionalField,
- GenericEntityArguments.Builder::setOptionalField,
- STRING_PARAM_VALUE_CONVERTER,
- STRING_ENTITY_CONVERTER)
- .bindRepeatedParameter("repeatedEntities",
- GenericEntityProperty::repeatedField,
- GenericEntityArguments.Builder::setRepeatedField,
- STRING_PARAM_VALUE_CONVERTER,
- STRING_ENTITY_CONVERTER)
- .build();
+ ActionSpecBuilder.ofCapabilityNamed("actions.intent.TEST")
+ .setArguments(GenericEntityArguments.class,
+ GenericEntityArguments::newBuilder)
+ .setOutput(Output.class)
+ .bindParameter(
+ "requiredEntity",
+ properties ->
+ {
+ return (Property<String>) (properties.get(
+ "requiredEntity"));
+ },
+ GenericEntityArguments.Builder::setSingularField,
+ STRING_PARAM_VALUE_CONVERTER,
+ STRING_ENTITY_CONVERTER)
+ .bindOptionalParameter("optionalEntity",
+ properties ->
+ {
+ return Optional.of((Property<String>) (properties.get(
+ "optionalEntity")));
+ },
+ GenericEntityArguments.Builder::setOptionalField,
+ STRING_PARAM_VALUE_CONVERTER,
+ STRING_ENTITY_CONVERTER)
+ .bindRepeatedParameter("repeatedEntities",
+ properties ->
+ {
+ return Optional.of((Property<String>) (properties.get(
+ "repeatedEntities")));
+ },
+ GenericEntityArguments.Builder::setRepeatedField,
+ STRING_PARAM_VALUE_CONVERTER,
+ STRING_ENTITY_CONVERTER)
+ .build();
@Test
public void getAppAction_genericParameters() {
- GenericEntityProperty property =
- GenericEntityProperty.create(
- new Property.Builder<String>()
- .setRequired(true)
- .setPossibleValues("one")
- .build(),
- Optional.of(
- new Property.Builder<String>()
- .setRequired(true)
- .setPossibleValues("two")
- .build()),
- Optional.of(
- new Property.Builder<String>()
- .setRequired(true)
- .setPossibleValues("three")
- .build()));
+ Map<String, Property<?>> property = new HashMap<>();
+ property.put("requiredEntity",
+ new Property.Builder<String>()
+ .setRequired(true)
+ .setPossibleValues("one")
+ .build());
+ property.put("optionalEntity",
+ new Property.Builder<String>()
+ .setRequired(true)
+ .setPossibleValues("two")
+ .build()
+ );
+ property.put("repeatedEntities",
+ new Property.Builder<String>()
+ .setRequired(true)
+ .setPossibleValues("three")
+ .build());
assertThat(GENERIC_TYPES_ACTION_SPEC.convertPropertyToProto(property))
.isEqualTo(
@@ -176,12 +202,12 @@
@Test
public void getAppAction_onlyRequiredProperty() {
- Properties property =
- Properties.create(
- new Property.Builder<StringValue>()
- .setPossibleValues(StringValue.of("Donald"))
- .setValueMatchRequired(true)
- .build());
+ Map<String, Property<?>> property = new HashMap<>();
+ property.put("requiredString",
+ new Property.Builder<StringValue>()
+ .setPossibleValues(StringValue.of("Donald"))
+ .setValueMatchRequired(true)
+ .build());
assertThat(ACTION_SPEC.convertPropertyToProto(property))
.isEqualTo(
@@ -201,21 +227,16 @@
@Test
public void getAppAction_allProperties() {
- Properties property =
- Properties.create(
- Optional.of(
- new Property.Builder<TestEnum>()
- .setPossibleValues(TestEnum.VALUE_1)
- .setRequired(true)
- .build()),
- new Property.Builder<StringValue>().build(),
- Optional.of(
- new Property.Builder<StringValue>()
- .setPossibleValues(StringValue.of("value1"))
- .setValueMatchRequired(true)
- .setRequired(true)
- .build()),
- Optional.of(Property.prohibited()));
+ Map<String, Property<?>> property = new HashMap<>();
+ property.put("requiredString",
+ new Property.Builder<StringValue>().build());
+ property.put("optionalString",
+ new Property.Builder<StringValue>()
+ .setPossibleValues(StringValue.of("value1"))
+ .setValueMatchRequired(true)
+ .setRequired(true)
+ .build());
+ property.put("repeatedString", Property.prohibited());
assertThat(ACTION_SPEC.convertPropertyToProto(property))
.isEqualTo(
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.kt b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.kt
index 899825b..1c97879 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/task/impl/TaskCapabilityImplTest.kt
@@ -19,9 +19,11 @@
import androidx.appactions.builtintypes.experimental.types.ListItem
import androidx.appactions.interaction.capabilities.core.AppEntityListener
import androidx.appactions.interaction.capabilities.core.Capability
+import androidx.appactions.interaction.capabilities.core.ConfirmationOutput
import androidx.appactions.interaction.capabilities.core.EntitySearchResult
import androidx.appactions.interaction.capabilities.core.ExecutionResult
import androidx.appactions.interaction.capabilities.core.HostProperties
+import androidx.appactions.interaction.capabilities.core.SearchAction
import androidx.appactions.interaction.capabilities.core.SessionConfig
import androidx.appactions.interaction.capabilities.core.ValidationResult
import androidx.appactions.interaction.capabilities.core.ValueListener
@@ -33,10 +35,11 @@
import androidx.appactions.interaction.capabilities.core.impl.converters.SearchActionConverter
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters.LIST_ITEM_TYPE_SPEC
+import androidx.appactions.interaction.capabilities.core.impl.converters.TypeSpec
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.StringValue
import androidx.appactions.interaction.capabilities.core.properties.Property
+import androidx.appactions.interaction.capabilities.core.properties.StringValue
import androidx.appactions.interaction.capabilities.core.testing.spec.Arguments
import androidx.appactions.interaction.capabilities.core.testing.spec.CapabilityStructFill
import androidx.appactions.interaction.capabilities.core.testing.spec.CapabilityTwoStrings
@@ -44,9 +47,6 @@
import androidx.appactions.interaction.capabilities.core.testing.spec.ExecutionSession
import androidx.appactions.interaction.capabilities.core.testing.spec.Output
import androidx.appactions.interaction.capabilities.core.testing.spec.TestEnum
-import androidx.appactions.interaction.capabilities.core.testing.spec.Properties
-import androidx.appactions.interaction.capabilities.core.SearchAction
-import androidx.appactions.interaction.capabilities.core.impl.converters.TypeSpec
import androidx.appactions.interaction.capabilities.testing.internal.ArgumentUtils.buildRequestArgs
import androidx.appactions.interaction.capabilities.testing.internal.ArgumentUtils.buildSearchActionParamValue
import androidx.appactions.interaction.capabilities.testing.internal.FakeCallbackInternal
@@ -59,6 +59,7 @@
import androidx.appactions.interaction.proto.DisambiguationData
import androidx.appactions.interaction.proto.Entity
import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.Type.CANCEL
+import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.Type
import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.Type.SYNC
import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.Type.UNKNOWN_TYPE
import androidx.appactions.interaction.proto.FulfillmentResponse.StructuredOutput
@@ -69,16 +70,18 @@
import androidx.concurrent.futures.CallbackToFutureAdapter.Completer
import com.google.common.truth.Truth.assertThat
import com.google.common.util.concurrent.ListenableFuture
+import java.util.Optional
+import java.util.concurrent.atomic.AtomicInteger
+import java.util.concurrent.atomic.AtomicReference
+import java.util.function.Supplier
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.runBlocking
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.concurrent.atomic.AtomicInteger
-import java.util.concurrent.atomic.AtomicReference
-import java.util.function.Supplier
@RunWith(JUnit4::class)
+@Suppress("UNCHECKED_CAST")
class TaskCapabilityImplTest {
private val capability: Capability =
createCapability<EmptyTaskUpdater>(
@@ -122,13 +125,13 @@
fun appAction_computedProperty() {
val mutableEntityList = mutableListOf<StringValue>()
val capability = createCapability<EmptyTaskUpdater>(
- Properties.newBuilder()
- .setRequiredStringField(
- Property.Builder<StringValue>()
- .setPossibleValueSupplier(mutableEntityList::toList)
- .build()
- )
- .build(),
+ mutableMapOf(
+ "required" to Property
+ .Builder<StringValue>()
+ .setPossibleValueSupplier(
+ mutableEntityList::toList
+ ).build()
+ ),
sessionFactory =
{
object : ExecutionSession {
@@ -346,26 +349,21 @@
val callback = FakeCallbackInternal()
session.execute(buildRequestArgs(UNKNOWN_TYPE), callback)
assertThat(callback.receiveResponse().errorStatus)
- .isEqualTo(ErrorStatusInternal.INVALID_REQUEST_TYPE)
+ .isEqualTo(ErrorStatusInternal.INVALID_REQUEST)
}
@Test
fun slotFilling_isActive_smokeTest() {
- val property: CapabilityTwoStrings.Properties =
- CapabilityTwoStrings.Properties.newBuilder()
- .setStringSlotA(
- Property.Builder<StringValue>()
- .setRequired(true)
- .build()
- )
- .setStringSlotB(
- Property.Builder<StringValue>()
- .setRequired(true)
- .build()
- )
- .build()
+ val property = mapOf(
+ "stringSlotA" to Property.Builder<StringValue>()
+ .setRequired(true)
+ .build(),
+ "stringSlotB" to Property.Builder<StringValue>()
+ .setRequired(true)
+ .build(),
+ )
val sessionFactory:
- (hostProperties: HostProperties?) -> CapabilityTwoStrings.ExecutionSession =
+ (hostProperties: HostProperties?) -> CapabilityTwoStrings.ExecutionSession =
{ _ ->
object : CapabilityTwoStrings.ExecutionSession {
override suspend fun onExecute(
@@ -435,7 +433,6 @@
buildRequestArgs(CANCEL),
callback3
)
- assertThat(callback3.receiveResponse().fulfillmentResponse).isNotNull()
assertThat(session.isActive).isFalse()
}
@@ -443,25 +440,16 @@
@kotlin.Throws(Exception::class)
fun slotFilling_optionalButRejectedParam_onFinishNotInvoked() {
val onExecuteInvocationCount = AtomicInteger(0)
- val property: CapabilityTwoStrings.Properties =
- CapabilityTwoStrings.Properties.newBuilder()
- .setStringSlotA(
- Property.Builder<
- StringValue
- >()
- .setRequired(true)
- .build()
- )
- .setStringSlotB(
- Property.Builder<
- StringValue
- >()
- .setRequired(false)
- .build()
- )
- .build()
+ val property = mapOf(
+ "stringSlotA" to Property.Builder<StringValue>()
+ .setRequired(true)
+ .build(),
+ "stringSlotB" to Property.Builder<StringValue>()
+ .setRequired(false)
+ .build(),
+ )
val sessionFactory:
- (hostProperties: HostProperties?) -> CapabilityTwoStrings.ExecutionSession =
+ (hostProperties: HostProperties?) -> CapabilityTwoStrings.ExecutionSession =
{ _ ->
object : CapabilityTwoStrings.ExecutionSession {
override suspend fun onExecute(
@@ -535,22 +523,16 @@
@Test
@kotlin.Throws(Exception::class)
fun slotFilling_assistantRemovedParam_clearInSdkState() {
- val property: Properties =
- Properties.newBuilder()
- .setRequiredStringField(
- Property.Builder<
- StringValue
- >()
- .setRequired(true)
- .build()
- )
- .setEnumField(
- Property.Builder<TestEnum>()
- .setPossibleValues(TestEnum.VALUE_1, TestEnum.VALUE_2)
- .setRequired(true)
- .build()
- )
- .build()
+ val property = mapOf(
+ "required" to
+ Property.Builder<StringValue>()
+ .setRequired(true)
+ .build(),
+ "optionalEnum" to Property.Builder<TestEnum>()
+ .setPossibleValues(TestEnum.VALUE_1, TestEnum.VALUE_2)
+ .setRequired(true)
+ .build(),
+ )
val capability: Capability =
createCapability(
property,
@@ -736,11 +718,16 @@
@kotlin.Throws(Exception::class)
@Suppress("DEPRECATION") // TODO(b/269638788) migrate session state to AppDialogState message
fun identifierOnly_refillsStruct() = runBlocking<Unit> {
- val property: CapabilityStructFill.Properties =
- CapabilityStructFill.Properties.newBuilder()
- .setListItem(Property.Builder<ListItem>().setRequired(true).build())
- .setAnyString(Property.Builder<StringValue>().setRequired(true).build())
- .build()
+ val property = mapOf(
+ "listItem" to Property.Builder<
+ ListItem,
+ >()
+ .setRequired(true)
+ .build(),
+ "anyString" to Property.Builder<StringValue>()
+ .setRequired(true)
+ .build(),
+ )
val item1: ListItem = ListItem.Builder().setName("red apple").setIdentifier("item1").build()
val item2: ListItem =
ListItem.Builder().setName("green apple").setIdentifier("item2").build()
@@ -749,7 +736,7 @@
val onExecuteStringDeferred = CompletableDeferred<String>()
val sessionFactory:
- (hostProperties: HostProperties?) -> CapabilityStructFill.ExecutionSession =
+ (hostProperties: HostProperties?) -> CapabilityStructFill.ExecutionSession =
{ _ ->
object : CapabilityStructFill.ExecutionSession {
override suspend fun onExecute(
@@ -788,7 +775,7 @@
TaskHandler.Builder<Void>()
.registerAppEntityTaskParam(
"listItem",
- session.getListItemListener(),
+ session.listItemListener,
ParamValueConverter.of(LIST_ITEM_TYPE_SPEC),
EntityConverter.of(LIST_ITEM_TYPE_SPEC)::convert,
getTrivialSearchActionConverter()
@@ -938,10 +925,10 @@
assertThat(
callback.receiveResponse()
.fulfillmentResponse!!
- .getExecutionOutput()
- .getOutputValuesList()
+ .executionOutput
+ .outputValuesList
)
- .containsExactlyElementsIn(expectedOutput.getOutputValuesList())
+ .containsExactlyElementsIn(expectedOutput.outputValuesList)
}
@Test
@@ -973,6 +960,174 @@
assertThat(callback.receiveResponse().fulfillmentResponse!!.startDictation).isTrue()
}
+ @Test
+ @kotlin.Throws(Exception::class)
+ fun fulfillmentType_finalSync_stateCleared() {
+ val sessionFactory: (hostProperties: HostProperties?) -> ExecutionSession =
+ { _ ->
+ object : ExecutionSession {
+ override suspend fun onExecute(arguments: Arguments) =
+ ExecutionResult.Builder<Output>().build()
+ }
+ }
+ val property: Properties =
+ Properties.newBuilder()
+ .setRequiredStringField(
+ Property.Builder<StringValue>()
+ .setRequired(true)
+ .build(),
+ )
+ .build()
+ val capability: Capability =
+ createCapability(
+ property,
+ sessionFactory = sessionFactory,
+ sessionBridge = SessionBridge { TaskHandler.Builder<Confirmation>().build() },
+ sessionUpdaterSupplier = ::EmptyTaskUpdater,
+ )
+ val session = capability.createSession(fakeSessionId, hostProperties)
+
+ // TURN 1. Not providing all the required slots in the SYNC Request
+ val callback = FakeCallbackInternal()
+ session.execute(
+ buildRequestArgs(SYNC),
+ callback,
+ )
+ assertThat(callback.receiveResponse()).isNotNull()
+ assertThat(getCurrentValues("required", session.state!!)).isEmpty()
+ assertThat(session.isActive).isEqualTo(true)
+
+ // TURN 2. Providing the required slots so that the task completes and the state gets cleared
+ val callback2 = FakeCallbackInternal()
+ session.execute(
+ buildRequestArgs(SYNC,
+ "required",
+ ParamValue.newBuilder().setIdentifier("foo").setStringValue("foo").build()
+ ),
+ callback2,
+ )
+ assertThat(callback2.receiveResponse().fulfillmentResponse).isNotNull()
+ assertThat(session.isActive).isEqualTo(false)
+ }
+
+ @Test
+ @kotlin.Throws(Exception::class)
+ @Suppress("DEPRECATION") // TODO(b/279830425) implement tryExecute (INTENT_CONFIRMED can be used instead)
+ fun fulfillmentType_syncWithConfirmation_stateClearedAfterConfirmation() {
+ val sessionFactory: (hostProperties: HostProperties?) -> ExecutionSession =
+ { _ ->
+ object : ExecutionSession {
+ override suspend fun onExecute(arguments: Arguments) =
+ ExecutionResult.Builder<Output>().build()
+ }
+ }
+ var onReadyToConfirm =
+ object : OnReadyToConfirmListenerInternal<Confirmation> {
+ override suspend fun onReadyToConfirm(args: Map<String, List<ParamValue>>):
+ ConfirmationOutput<Confirmation> {
+ return ConfirmationOutput.Builder<Confirmation>()
+ .setConfirmation(Confirmation.builder().setOptionalStringField("bar")
+ .build())
+ .build()
+ }
+ }
+
+ val property: Properties =
+ Properties.newBuilder()
+ .setRequiredStringField(
+ Property.Builder<StringValue>()
+ .setRequired(true)
+ .build(),
+ )
+ .build()
+ val capability: Capability =
+ createCapability(
+ property,
+ sessionFactory = sessionFactory,
+ sessionBridge = SessionBridge {
+ TaskHandler.Builder<Confirmation>()
+ .setOnReadyToConfirmListenerInternal(onReadyToConfirm)
+ .build() },
+ sessionUpdaterSupplier = ::EmptyTaskUpdater,
+ )
+ val session = capability.createSession(fakeSessionId, hostProperties)
+
+ // TURN 1. Providing all the required slots in the SYNC Request
+ val callback = FakeCallbackInternal()
+ session.execute(
+ buildRequestArgs(SYNC,
+ "required",
+ ParamValue.newBuilder().setIdentifier("foo").setStringValue("foo").build()
+ ),
+ callback,
+ )
+ assertThat(callback.receiveResponse()).isNotNull()
+ assertThat(session.isActive).isEqualTo(true)
+
+ // Sending the confirmation request. After the confirm request, the session should not be
+ // active
+ val callback2 = FakeCallbackInternal()
+ session.execute(
+ buildRequestArgs(Type.CONFIRM),
+ callback2
+ )
+
+ assertThat(callback2.receiveResponse().fulfillmentResponse).isNotNull()
+ assertThat(session.isActive).isEqualTo(false)
+ }
+
+ @Test
+ fun fulfillmentRequest_whenStatusDestroyed_errorReported() {
+ val sessionFactory: (hostProperties: HostProperties?) -> ExecutionSession =
+ { _ ->
+ object : ExecutionSession {
+ override suspend fun onExecute(arguments: Arguments) =
+ ExecutionResult.Builder<Output>().build()
+ }
+ }
+ val property: Properties =
+ Properties.newBuilder()
+ .setRequiredStringField(
+ Property.Builder<StringValue>()
+ .setRequired(true)
+ .build(),
+ )
+ .build()
+ val capability: Capability =
+ createCapability(
+ property,
+ sessionFactory = sessionFactory,
+ sessionBridge = SessionBridge { TaskHandler.Builder<Confirmation>().build() },
+ sessionUpdaterSupplier = ::EmptyTaskUpdater,
+ )
+ val session = capability.createSession(fakeSessionId, hostProperties)
+
+ // TURN 1. Providing the required slots so that the task completes and the state gets cleared
+ val callback = FakeCallbackInternal()
+ session.execute(
+ buildRequestArgs(SYNC,
+ "required",
+ ParamValue.newBuilder().setIdentifier("foo").setStringValue("foo").build()
+ ),
+ callback,
+ )
+ assertThat(callback.receiveResponse().fulfillmentResponse).isNotNull()
+ assertThat(session.isActive).isEqualTo(false)
+
+ // TURN 2. Trying to sync after the session is destroyed
+ val callback2 = FakeCallbackInternal()
+ session.execute(
+ buildRequestArgs(SYNC,
+ "required",
+ ParamValue.newBuilder().setIdentifier("foo").setStringValue("foo").build()
+ ),
+ callback2,
+ )
+ assertThat(session.isActive).isEqualTo(false)
+ assertThat(callback2.receiveResponse().errorStatus)
+ .isEqualTo(ErrorStatusInternal.SESSION_ALREADY_DESTROYED)
+ }
+
/**
* an implementation of Capability.Builder using Argument. Output, etc. defined under
* testing/spec
@@ -980,7 +1135,6 @@
class CapabilityBuilder :
Capability.Builder<
CapabilityBuilder,
- Properties,
Arguments,
Output,
Confirmation,
@@ -994,10 +1148,6 @@
override val sessionBridge: SessionBridge<ExecutionSession, Confirmation> = SessionBridge {
TaskHandler.Builder<Confirmation>().build()
}
-
- public override fun setExecutionSessionFactory(
- sessionFactory: (hostProperties: HostProperties?) -> ExecutionSession,
- ): CapabilityBuilder = super.setExecutionSessionFactory(sessionFactory)
}
companion object {
@@ -1054,37 +1204,55 @@
return ParamValue.newBuilder().build()
}
}
- private val ACTION_SPEC: ActionSpec<Properties, Arguments, Output> =
+ private val ACTION_SPEC: ActionSpec<Arguments, Output> =
ActionSpecBuilder.ofCapabilityNamed(
CAPABILITY_NAME
)
- .setDescriptor(Properties::class.java)
.setArguments(Arguments::class.java, Arguments::newBuilder)
.setOutput(Output::class.java)
.bindParameter(
"required",
- Properties::requiredStringField,
+ { properties ->
+ properties["required"]
+ as
+ Property<StringValue>?
+ },
Arguments.Builder::setRequiredStringField,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER
)
.bindOptionalParameter(
"optional",
- Properties::optionalStringField,
+ { properties ->
+ properties["optional"]
+ ?.let { it as Property<StringValue> }
+ ?.let { Optional.of(it) }
+ ?: Optional.ofNullable(null)
+ },
Arguments.Builder::setOptionalStringField,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER
)
.bindOptionalParameter(
"optionalEnum",
- Properties::enumField,
+ { properties ->
+ properties["optionalEnum"]
+ ?.let { it as Property<TestEnum> }
+ ?.let { Optional.of(it) }
+ ?: Optional.ofNullable(null)
+ },
Arguments.Builder::setEnumField,
ENUM_CONVERTER,
{ Entity.newBuilder().setIdentifier(it.toString()).build() }
)
.bindRepeatedParameter(
"repeated",
- Properties::repeatedStringField,
+ { properties ->
+ properties["repeated"]
+ ?.let { it as Property<StringValue> }
+ ?.let { Optional.of(it) }
+ ?: Optional.ofNullable(null)
+ },
Arguments.Builder::setRepeatedStringField,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER
@@ -1101,26 +1269,23 @@
)
.build()
- private val SINGLE_REQUIRED_FIELD_PROPERTY: Properties =
- Properties.newBuilder()
- .setRequiredStringField(
- Property.Builder<StringValue>()
- .setRequired(true)
- .build()
- )
+ private val SINGLE_REQUIRED_FIELD_PROPERTY = mapOf(
+ "required" to Property.Builder<StringValue>()
+ .setRequired(true)
.build()
+ )
private fun getCurrentValues(
argName: String,
appDialogState: AppDialogState
): List<CurrentValue> {
return appDialogState
- .getParamsList()
+ .paramsList
.stream()
- .filter { dialogParam -> dialogParam.getName().equals(argName) }
+ .filter { dialogParam -> dialogParam.name.equals(argName) }
.findFirst()
.orElse(DialogParameter.getDefaultInstance())
- .getCurrentValueList()
+ .currentValueList
}
/**
@@ -1128,12 +1293,11 @@
* etc., defined under ../../testing/spec
*/
private fun <SessionUpdaterT : AbstractTaskUpdater> createCapability(
- property: Properties,
+ property: Map<String, Property<*>>,
sessionFactory: (hostProperties: HostProperties?) -> ExecutionSession,
sessionBridge: SessionBridge<ExecutionSession, Confirmation>,
sessionUpdaterSupplier: Supplier<SessionUpdaterT>
): TaskCapabilityImpl<
- Properties,
Arguments,
Output,
ExecutionSession,
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityStructFill.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityStructFill.java
index a2317c7..586145d 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityStructFill.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityStructFill.java
@@ -36,22 +36,30 @@
import java.util.Optional;
/** Used to test the filling behavior of structured entities (e.g. ListItem) */
+@SuppressWarnings("unchecked")
public final class CapabilityStructFill {
private static final String CAPABILITY_NAME = "actions.intent.TEST";
- public static final ActionSpec<Properties, Arguments, Void> ACTION_SPEC =
+ public static final ActionSpec<Arguments, Void> ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(Properties.class)
.setArguments(Arguments.class, Arguments::newBuilder)
.bindOptionalParameter(
"listItem",
- Properties::listItem,
+ properties ->
+ {
+ return Optional.ofNullable((Property<ListItem>) (properties.get(
+ "listItem")));
+ },
Arguments.Builder::setListItem,
ParamValueConverter.Companion.of(LIST_ITEM_TYPE_SPEC),
EntityConverter.Companion.of(LIST_ITEM_TYPE_SPEC)::convert)
.bindOptionalParameter(
"string",
- Properties::anyString,
+ properties ->
+ {
+ return Optional.ofNullable((Property<StringValue>) (properties.get(
+ "anyString")));
+ },
Arguments.Builder::setAnyString,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER)
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoStrings.java b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoStrings.java
index 9595d9c..76cf08d 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoStrings.java
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/testing/spec/CapabilityTwoStrings.java
@@ -29,22 +29,29 @@
import java.util.Optional;
+@SuppressWarnings("unchecked")
public final class CapabilityTwoStrings {
-
private static final String CAPABILITY_NAME = "actions.intent.TEST";
- public static final ActionSpec<Properties, Arguments, Void> ACTION_SPEC =
+ public static final ActionSpec<Arguments, Void> ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(Properties.class)
.setArguments(Arguments.class, Arguments::newBuilder)
.bindOptionalParameter(
"stringSlotA",
- Properties::stringSlotA,
+ properties -> {
+ return Optional.ofNullable(
+ (Property<StringValue>) properties.get("stringSlotA")
+ );
+ },
Arguments.Builder::setStringSlotA,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER)
.bindOptionalParameter(
"stringSlotB",
- Properties::stringSlotB,
+ properties -> {
+ return Optional.ofNullable(
+ (Property<StringValue>) properties.get("stringSlotB")
+ );
+ },
Arguments.Builder::setStringSlotB,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER)
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetExerciseObservation.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetExerciseObservation.kt
index 66f19fa..d530c21 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetExerciseObservation.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetExerciseObservation.kt
@@ -16,8 +16,8 @@
package androidx.appactions.interaction.capabilities.fitness.fitness
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.CapabilityFactory
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
@@ -30,24 +30,34 @@
private const val CAPABILITY_NAME = "actions.intent.START_EXERCISE"
// TODO(b/273602015): Update to use Name property from builtintype library.
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(GetExerciseObservation.Properties::class.java)
.setArguments(
GetExerciseObservation.Arguments::class.java,
GetExerciseObservation.Arguments::Builder
)
.setOutput(GetExerciseObservation.Output::class.java)
.bindOptionalParameter(
- "healthObservation.startTime",
- { property -> Optional.ofNullable(property.startTime) },
+ "exerciseObservation.startTime",
+ { properties ->
+ Optional.ofNullable(
+ properties[GetExerciseObservation.PropertyMapStrings.START_TIME.key]
+ as Property<LocalTime>
+ )
+ },
GetExerciseObservation.Arguments.Builder::setStartTime,
TypeConverters.LOCAL_TIME_PARAM_VALUE_CONVERTER,
TypeConverters.LOCAL_TIME_ENTITY_CONVERTER
)
.bindOptionalParameter(
- "healthObservation.endTime",
- { property -> Optional.ofNullable(property.endTime) },
+ "exerciseObservation.endTime",
+ { properties ->
+ Optional.ofNullable(
+ properties[GetExerciseObservation.PropertyMapStrings.END_TIME.key]
+ as Property<LocalTime>
+ )
+ },
GetExerciseObservation.Arguments.Builder::setEndTime,
TypeConverters.LOCAL_TIME_PARAM_VALUE_CONVERTER,
TypeConverters.LOCAL_TIME_ENTITY_CONVERTER
@@ -56,64 +66,26 @@
@CapabilityFactory(name = CAPABILITY_NAME)
class GetExerciseObservation private constructor() {
- class CapabilityBuilder :
- Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
- >(ACTION_SPEC) {
- private var propertyBuilder: Properties.Builder = Properties.Builder()
- fun setStartTimeProperty(startTime: Property<LocalTime>): CapabilityBuilder = apply {
- propertyBuilder.setEndTime(startTime)
- }
-
- fun setEndTimeProperty(endTime: Property<LocalTime>): CapabilityBuilder = apply {
- propertyBuilder.setEndTime(endTime)
- }
-
- override fun build(): Capability {
- // TODO(b/268369632): Clean this up after Property is removed
- super.setProperty(propertyBuilder.build())
- return super.build()
- }
+ internal enum class PropertyMapStrings(val key: String) {
+ START_TIME("exerciseObservation.startTime"),
+ END_TIME("exerciseObservation.endTime"),
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor(
- val startTime: Property<LocalTime>?,
- val endTime: Property<LocalTime>?
- ) {
- override fun toString(): String {
- return "Property(startTime=$startTime, endTime=$endTime)"
- }
+ class CapabilityBuilder :
+ Capability.Builder<
+ CapabilityBuilder, Arguments, Output, Confirmation, ExecutionSession
+ >(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass !== other?.javaClass) return false
+ fun setStartTime(startTime: Property<LocalTime>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.START_TIME.key] = startTime }
- other as Properties
+ fun setEndTime(endTime: Property<LocalTime>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.END_TIME.key] = endTime }
- if (startTime != other.startTime) return false
- if (endTime != other.endTime) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- var result = startTime.hashCode()
- result += 31 * endTime.hashCode()
- return result
- }
-
- class Builder {
- private var startTime: Property<LocalTime>? = null
- private var endTime: Property<LocalTime>? = null
-
- fun setStartTime(startTime: Property<LocalTime>): Builder =
- apply { this.startTime = startTime }
-
- fun setEndTime(endTime: Property<LocalTime>): Builder =
- apply { this.endTime = endTime }
-
- fun build(): Properties = Properties(startTime, endTime)
+ override fun build(): Capability {
+ super.setProperty(properties)
+ return super.build()
}
}
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetHealthObservation.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetHealthObservation.kt
index df9e344..c7482e1 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetHealthObservation.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/GetHealthObservation.kt
@@ -16,8 +16,8 @@
package androidx.appactions.interaction.capabilities.fitness.fitness
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.CapabilityFactory
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
@@ -30,24 +30,34 @@
private const val CAPABILITY_NAME = "actions.intent.START_EXERCISE"
// TODO(b/273602015): Update to use Name property from builtintype library.
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(GetHealthObservation.Properties::class.java)
.setArguments(
GetHealthObservation.Arguments::class.java,
GetHealthObservation.Arguments::Builder
)
.setOutput(GetHealthObservation.Output::class.java)
.bindOptionalParameter(
- "exerciseObservation.startTime",
- { property -> Optional.ofNullable(property.startTime) },
+ "healthObservation.startTime",
+ { properties ->
+ Optional.ofNullable(
+ properties[GetHealthObservation.PropertyMapStrings.START_TIME.key]
+ as Property<LocalTime>
+ )
+ },
GetHealthObservation.Arguments.Builder::setStartTime,
TypeConverters.LOCAL_TIME_PARAM_VALUE_CONVERTER,
TypeConverters.LOCAL_TIME_ENTITY_CONVERTER
)
.bindOptionalParameter(
- "exerciseObservation.endTime",
- { property -> Optional.ofNullable(property.endTime) },
+ "healthObservation.endTime",
+ { properties ->
+ Optional.ofNullable(
+ properties[GetHealthObservation.PropertyMapStrings.END_TIME.key]
+ as Property<LocalTime>
+ )
+ },
GetHealthObservation.Arguments.Builder::setEndTime,
TypeConverters.LOCAL_TIME_PARAM_VALUE_CONVERTER,
TypeConverters.LOCAL_TIME_ENTITY_CONVERTER
@@ -56,64 +66,30 @@
@CapabilityFactory(name = CAPABILITY_NAME)
class GetHealthObservation private constructor() {
- class CapabilityBuilder :
- Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
- >(ACTION_SPEC) {
- private var propertyBuilder: Properties.Builder = Properties.Builder()
- fun setStartTimeProperty(startTime: Property<LocalTime>): CapabilityBuilder = apply {
- propertyBuilder.setEndTime(startTime)
- }
-
- fun setEndTimeProperty(endTime: Property<LocalTime>): CapabilityBuilder = apply {
- propertyBuilder.setEndTime(endTime)
- }
-
- override fun build(): Capability {
- // TODO(b/268369632): Clean this up after Property is removed
- super.setProperty(propertyBuilder.build())
- return super.build()
- }
+ internal enum class PropertyMapStrings(val key: String) {
+ START_TIME("healthObservation.startTime"),
+ END_TIME("healthObservation.endTime"),
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor(
- val startTime: Property<LocalTime>?,
- val endTime: Property<LocalTime>?
- ) {
- override fun toString(): String {
- return "Property(startTime=$startTime, endTime=$endTime)"
- }
+ class CapabilityBuilder :
+ Capability.Builder<
+ CapabilityBuilder,
+ Arguments,
+ Output,
+ Confirmation,
+ ExecutionSession
+ >(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass !== other?.javaClass) return false
+ fun setStartTime(startTime: Property<LocalTime>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.START_TIME.key] = startTime }
- other as Properties
+ fun setEndTime(endTime: Property<LocalTime>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.END_TIME.key] = endTime }
- if (startTime != other.startTime) return false
- if (endTime != other.endTime) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- var result = startTime.hashCode()
- result += 31 * endTime.hashCode()
- return result
- }
-
- class Builder {
- private var startTime: Property<LocalTime>? = null
- private var endTime: Property<LocalTime>? = null
-
- fun setStartTime(startTime: Property<LocalTime>): Builder =
- apply { this.startTime = startTime }
-
- fun setEndTime(endTime: Property<LocalTime>): Builder =
- apply { this.endTime = endTime }
-
- fun build(): Properties = Properties(startTime, endTime)
+ override fun build(): Capability {
+ super.setProperty(properties)
+ return super.build()
}
}
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/PauseExercise.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/PauseExercise.kt
index 332207f..f04ceee 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/PauseExercise.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/PauseExercise.kt
@@ -16,28 +16,33 @@
package androidx.appactions.interaction.capabilities.fitness.fitness
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.CapabilityFactory
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
-import androidx.appactions.interaction.capabilities.core.properties.StringValue
import androidx.appactions.interaction.capabilities.core.properties.Property
+import androidx.appactions.interaction.capabilities.core.properties.StringValue
import java.util.Optional
/** PauseExercise.kt in interaction-capabilities-fitness */
private const val CAPABILITY_NAME = "actions.intent.PAUSE_EXERCISE"
// TODO(b/273602015): Update to use Name property from builtintype library.
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(PauseExercise.Properties::class.java)
.setArguments(PauseExercise.Arguments::class.java, PauseExercise.Arguments::Builder)
.setOutput(PauseExercise.Output::class.java)
.bindOptionalParameter(
"exercise.name",
- { property -> Optional.ofNullable(property.name) },
+ { properties ->
+ Optional.ofNullable(
+ properties[PauseExercise.PropertyMapStrings.NAME.key]
+ as Property<StringValue>
+ )
+ },
PauseExercise.Arguments.Builder::setName,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER
@@ -46,53 +51,25 @@
@CapabilityFactory(name = CAPABILITY_NAME)
class PauseExercise private constructor() {
- class CapabilityBuilder :
- Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
- >(ACTION_SPEC) {
- private var propertyBuilder: Properties.Builder = Properties.Builder()
- fun setNameProperty(name: Property<StringValue>): CapabilityBuilder =
- apply {
- propertyBuilder.setName(name)
- }
-
- override fun build(): Capability {
- // TODO(b/268369632): Clean this up after Property is removed
- super.setProperty(propertyBuilder.build())
- return super.build()
- }
+ internal enum class PropertyMapStrings(val key: String) {
+ NAME("exercise.name"),
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor(
- val name: Property<StringValue>?,
- ) {
- override fun toString(): String {
- return "Property(name=$name)"
- }
+ class CapabilityBuilder :
+ Capability.Builder<
+ CapabilityBuilder,
+ Arguments,
+ Output,
+ Confirmation,
+ ExecutionSession
+ >(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
+ fun setName(name: Property<StringValue>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.NAME.key] = name }
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass !== other?.javaClass) return false
-
- other as Properties
-
- if (name != other.name) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- return name.hashCode()
- }
-
- class Builder {
- private var name: Property<StringValue>? = null
-
- fun setName(name: Property<StringValue>): Builder =
- apply { this.name = name }
-
- fun build(): Properties = Properties(name)
+ override fun build(): Capability {
+ super.setProperty(properties)
+ return super.build()
}
}
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/ResumeExercise.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/ResumeExercise.kt
index 491e804..1881a7c 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/ResumeExercise.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/ResumeExercise.kt
@@ -16,28 +16,33 @@
package androidx.appactions.interaction.capabilities.fitness.fitness
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.CapabilityFactory
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
-import androidx.appactions.interaction.capabilities.core.properties.StringValue
import androidx.appactions.interaction.capabilities.core.properties.Property
+import androidx.appactions.interaction.capabilities.core.properties.StringValue
import java.util.Optional
/** ResumeExercise.kt in interaction-capabilities-fitness */
private const val CAPABILITY_NAME = "actions.intent.RESUME_EXERCISE"
// TODO(b/273602015): Update to use Name property from builtintype library.
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(ResumeExercise.Properties::class.java)
.setArguments(ResumeExercise.Arguments::class.java, ResumeExercise.Arguments::Builder)
.setOutput(ResumeExercise.Output::class.java)
.bindOptionalParameter(
"exercise.name",
- { property -> Optional.ofNullable(property.name) },
+ { properties ->
+ Optional.ofNullable(
+ properties[ResumeExercise.PropertyMapStrings.NAME.key]
+ as Property<StringValue>
+ )
+ },
ResumeExercise.Arguments.Builder::setName,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER
@@ -46,53 +51,25 @@
@CapabilityFactory(name = CAPABILITY_NAME)
class ResumeExercise private constructor() {
- class CapabilityBuilder :
- Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
- >(ACTION_SPEC) {
- private var propertyBuilder: Properties.Builder = Properties.Builder()
- fun setNameProperty(name: Property<StringValue>): CapabilityBuilder =
- apply {
- propertyBuilder.setName(name)
- }
-
- override fun build(): Capability {
- // TODO(b/268369632): Clean this up after Property is removed
- super.setProperty(propertyBuilder.build())
- return super.build()
- }
+ internal enum class PropertyMapStrings(val key: String) {
+ NAME("exercise.name"),
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor(
- val name: Property<StringValue>?,
- ) {
- override fun toString(): String {
- return "Property(name=$name)"
- }
+ class CapabilityBuilder :
+ Capability.Builder<
+ CapabilityBuilder,
+ Arguments,
+ Output,
+ Confirmation,
+ ExecutionSession
+ >(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
+ fun setName(name: Property<StringValue>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.NAME.key] = name }
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass !== other?.javaClass) return false
-
- other as Properties
-
- if (name != other.name) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- return name.hashCode()
- }
-
- class Builder {
- private var name: Property<StringValue>? = null
-
- fun setName(name: Property<StringValue>): Builder =
- apply { this.name = name }
-
- fun build(): Properties = Properties(name)
+ override fun build(): Capability {
+ super.setProperty(properties)
+ return super.build()
}
}
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StartExercise.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StartExercise.kt
index 04524b4..0847d33 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StartExercise.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StartExercise.kt
@@ -16,14 +16,14 @@
package androidx.appactions.interaction.capabilities.fitness.fitness
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.CapabilityFactory
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
-import androidx.appactions.interaction.capabilities.core.properties.StringValue
import androidx.appactions.interaction.capabilities.core.properties.Property
+import androidx.appactions.interaction.capabilities.core.properties.StringValue
import java.time.Duration
import java.util.Optional
@@ -31,21 +31,31 @@
private const val CAPABILITY_NAME = "actions.intent.START_EXERCISE"
// TODO(b/273602015): Update to use Name property from builtintype library.
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(StartExercise.Properties::class.java)
.setArguments(StartExercise.Arguments::class.java, StartExercise.Arguments::Builder)
.setOutput(StartExercise.Output::class.java)
.bindOptionalParameter(
"exercise.duration",
- { property -> Optional.ofNullable(property.duration) },
+ { properties ->
+ Optional.ofNullable(
+ properties[StartExercise.PropertyMapStrings.DURATION.key]
+ as Property<Duration>
+ )
+ },
StartExercise.Arguments.Builder::setDuration,
TypeConverters.DURATION_PARAM_VALUE_CONVERTER,
TypeConverters.DURATION_ENTITY_CONVERTER
)
.bindOptionalParameter(
"exercise.name",
- { property -> Optional.ofNullable(property.name) },
+ { properties ->
+ Optional.ofNullable(
+ properties[StartExercise.PropertyMapStrings.NAME.key]
+ as Property<StringValue>
+ )
+ },
StartExercise.Arguments.Builder::setName,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER
@@ -54,65 +64,30 @@
@CapabilityFactory(name = CAPABILITY_NAME)
class StartExercise private constructor() {
- class CapabilityBuilder :
- Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
- >(ACTION_SPEC) {
- fun setDurationProperty(duration: Property<Duration>): CapabilityBuilder =
- apply {
- Properties.Builder().setDuration(duration).build()
- }
-
- fun setNameProperty(name: Property<StringValue>): CapabilityBuilder =
- apply {
- Properties.Builder().setName(name).build()
- }
-
- override fun build(): Capability {
- // TODO(b/268369632): No-op remove empty property builder after Property od removed
- super.setProperty(Properties.Builder().build())
- return super.build()
- }
+ internal enum class PropertyMapStrings(val key: String) {
+ NAME("exercise.name"),
+ DURATION("exercise.duration"),
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor(
- val duration: Property<Duration>?,
- val name: Property<StringValue>?
- ) {
- override fun toString(): String {
- return "Property(duration=$duration, name=$name)"
- }
+ class CapabilityBuilder :
+ Capability.Builder<
+ CapabilityBuilder,
+ Arguments,
+ Output,
+ Confirmation,
+ ExecutionSession
+ >(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass !== other?.javaClass) return false
+ fun setName(name: Property<StringValue>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.NAME.key] = name }
- other as Properties
+ fun setDuration(duration: Property<Duration>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.DURATION.key] = duration }
- if (duration != other.duration) return false
- if (name != other.name) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- var result = duration.hashCode()
- result += 31 * name.hashCode()
- return result
- }
-
- class Builder {
- private var duration: Property<Duration>? = null
- private var name: Property<StringValue>? = null
-
- fun setDuration(duration: Property<Duration>): Builder =
- apply { this.duration = duration }
-
- fun setName(name: Property<StringValue>): Builder =
- apply { this.name = name }
-
- fun build(): Properties = Properties(duration, name)
+ override fun build(): Capability {
+ super.setProperty(properties)
+ return super.build()
}
}
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StopExercise.kt b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StopExercise.kt
index 09690c52..18efde0 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StopExercise.kt
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/StopExercise.kt
@@ -16,8 +16,8 @@
package androidx.appactions.interaction.capabilities.fitness.fitness
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.CapabilityFactory
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
@@ -30,14 +30,19 @@
private const val CAPABILITY_NAME = "actions.intent.PAUSE_EXERCISE"
// TODO(b/273602015): Update to use Name property from builtintype library.
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(StopExercise.Properties::class.java)
.setArguments(StopExercise.Arguments::class.java, StopExercise.Arguments::Builder)
.setOutput(StopExercise.Output::class.java)
.bindOptionalParameter(
"exercise.name",
- { property -> Optional.ofNullable(property.name) },
+ { properties ->
+ Optional.ofNullable(
+ properties[StopExercise.PropertyMapStrings.NAME.key]
+ as Property<StringValue>
+ )
+ },
StopExercise.Arguments.Builder::setName,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER
@@ -46,53 +51,26 @@
@CapabilityFactory(name = CAPABILITY_NAME)
class StopExercise private constructor() {
- class CapabilityBuilder :
- Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
- >(ACTION_SPEC) {
- private var propertyBuilder: Properties.Builder = Properties.Builder()
- fun setNameProperty(name: Property<StringValue>): CapabilityBuilder =
- apply {
- propertyBuilder.setName(name)
- }
-
- override fun build(): Capability {
- // TODO(b/268369632): Clean this up after Property is removed
- super.setProperty(propertyBuilder.build())
- return super.build()
- }
+ internal enum class PropertyMapStrings(val key: String) {
+ NAME("exercise.name"),
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor(
- val name: Property<StringValue>?,
- ) {
- override fun toString(): String {
- return "Property(name=$name)"
- }
+ class CapabilityBuilder :
+ Capability.Builder<
+ CapabilityBuilder,
+ Arguments,
+ Output,
+ Confirmation,
+ ExecutionSession
+ >(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass !== other?.javaClass) return false
+ fun setName(name: Property<StringValue>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.NAME.key] = name }
- other as Properties
-
- if (name != other.name) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- return name.hashCode()
- }
-
- class Builder {
- private var name: Property<StringValue>? = null
-
- fun setName(name: Property<StringValue>): Builder =
- apply { this.name = name }
-
- fun build(): Properties = Properties(name)
+ override fun build(): Capability {
+ super.setProperty(properties)
+ return super.build()
}
}
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/PauseTimer.kt b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/PauseTimer.kt
index 14c0fed..528a497 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/PauseTimer.kt
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/PauseTimer.kt
@@ -18,8 +18,8 @@
import androidx.appactions.builtintypes.experimental.types.GenericErrorStatus
import androidx.appactions.builtintypes.experimental.types.SuccessStatus
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
@@ -32,14 +32,19 @@
/** PauseTimer.kt in interaction-capabilities-productivity */
private const val CAPABILITY_NAME = "actions.intent.PAUSE_TIMER"
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(PauseTimer.Properties::class.java)
.setArguments(PauseTimer.Arguments::class.java, PauseTimer.Arguments::Builder)
.setOutput(PauseTimer.Output::class.java)
.bindRepeatedParameter(
"timer",
- { property -> Optional.ofNullable(property.timerList) },
+ { properties ->
+ Optional.ofNullable(
+ properties[PauseTimer.PropertyMapStrings.TIMER_LIST.key]
+ as Property<TimerValue>
+ )
+ },
PauseTimer.Arguments.Builder::setTimerList,
TimerValue.PARAM_VALUE_CONVERTER,
TimerValue.ENTITY_CONVERTER
@@ -53,57 +58,29 @@
// TODO(b/267806701): Add capability factory annotation once the testing library is fully migrated.
class PauseTimer private constructor() {
+ internal enum class PropertyMapStrings(val key: String) {
+ TIMER_LIST("timer.timerList"),
+ }
class CapabilityBuilder :
Capability.Builder<
CapabilityBuilder,
- Properties,
Arguments,
Output,
Confirmation,
- ExecutionSession,
- >(ACTION_SPEC) {
+ ExecutionSession
+ >(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
+
+ fun setTimerList(timerList: Property<TimerValue>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.TIMER_LIST.key] = timerList }
+
override fun build(): Capability {
- super.setProperty(Properties.Builder().build())
+ super.setProperty(properties)
return super.build()
}
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties
- internal constructor(
- val timerList: Property<TimerValue>?,
- ) {
- override fun toString(): String {
- return "Property(timerList=$timerList}"
- }
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass != other?.javaClass) return false
-
- other as Properties
-
- if (timerList != other.timerList) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- return timerList.hashCode()
- }
-
- class Builder {
- private var timerList: Property<TimerValue>? = null
-
- fun setTimerList(timerList: Property<TimerValue>): Builder = apply {
- this.timerList = timerList
- }
-
- fun build(): Properties = Properties(timerList)
- }
- }
-
class Arguments
internal constructor(
val timerList: List<TimerValue>?,
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResetTimer.kt b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResetTimer.kt
index d05acf9..94d203b 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResetTimer.kt
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResetTimer.kt
@@ -18,8 +18,8 @@
import androidx.appactions.builtintypes.experimental.types.GenericErrorStatus
import androidx.appactions.builtintypes.experimental.types.SuccessStatus
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
@@ -32,14 +32,19 @@
/** ResetTimer.kt in interaction-capabilities-productivity */
private const val CAPABILITY_NAME = "actions.intent.RESET_TIMER"
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(ResetTimer.Properties::class.java)
.setArguments(ResetTimer.Arguments::class.java, ResetTimer.Arguments::Builder)
.setOutput(ResetTimer.Output::class.java)
.bindRepeatedParameter(
"timer",
- { property -> Optional.ofNullable(property.timerList) },
+ { properties ->
+ Optional.ofNullable(
+ properties[ResetTimer.PropertyMapStrings.TIMER_LIST.key]
+ as Property<TimerValue>
+ )
+ },
ResetTimer.Arguments.Builder::setTimerList,
TimerValue.PARAM_VALUE_CONVERTER,
TimerValue.ENTITY_CONVERTER
@@ -53,49 +58,29 @@
// TODO(b/267806701): Add capability factory annotation once the testing library is fully migrated.
class ResetTimer private constructor() {
+ internal enum class PropertyMapStrings(val key: String) {
+ TIMER_LIST("timer.timerList"),
+ }
class CapabilityBuilder :
Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
- >(ACTION_SPEC) {
+ CapabilityBuilder,
+ Arguments,
+ Output,
+ Confirmation,
+ ExecutionSession
+ >(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
+
+ fun setTimerList(timerList: Property<TimerValue>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.TIMER_LIST.key] = timerList }
+
override fun build(): Capability {
- super.setProperty(Properties.Builder().build())
+ super.setProperty(properties)
return super.build()
}
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor(val timerList: Property<TimerValue>?) {
- override fun toString(): String {
- return "Property(timerList=$timerList}"
- }
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass != other?.javaClass) return false
-
- other as Properties
-
- if (timerList != other.timerList) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- return timerList.hashCode()
- }
-
- class Builder {
- private var timerList: Property<TimerValue>? = null
-
- fun setTimerList(timerList: Property<TimerValue>): Builder = apply {
- this.timerList = timerList
- }
-
- fun build(): Properties = Properties(timerList)
- }
- }
-
class Arguments internal constructor(val timerList: List<TimerValue>?) {
override fun toString(): String {
return "Arguments(timerList=$timerList)"
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResumeTimer.kt b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResumeTimer.kt
index accb730..d967e45 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResumeTimer.kt
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/ResumeTimer.kt
@@ -18,8 +18,8 @@
import androidx.appactions.builtintypes.experimental.types.GenericErrorStatus
import androidx.appactions.builtintypes.experimental.types.SuccessStatus
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
@@ -32,14 +32,19 @@
/** ResumeTimer.kt in interaction-capabilities-productivity */
private const val CAPABILITY_NAME = "actions.intent.RESUME_TIMER"
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(ResumeTimer.Properties::class.java)
.setArguments(ResumeTimer.Arguments::class.java, ResumeTimer.Arguments::Builder)
.setOutput(ResumeTimer.Output::class.java)
.bindRepeatedParameter(
"timer",
- { property -> Optional.ofNullable(property.timerList) },
+ { properties ->
+ Optional.ofNullable(
+ properties[ResumeTimer.PropertyMapStrings.TIMER_LIST.key]
+ as Property<TimerValue>
+ )
+ },
ResumeTimer.Arguments.Builder::setTimerList,
TimerValue.PARAM_VALUE_CONVERTER,
TimerValue.ENTITY_CONVERTER
@@ -53,49 +58,29 @@
// TODO(b/267806701): Add capability factory annotation once the testing library is fully migrated.
class ResumeTimer private constructor() {
+ internal enum class PropertyMapStrings(val key: String) {
+ TIMER_LIST("timer.timerList"),
+ }
class CapabilityBuilder :
Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
- >(ACTION_SPEC) {
+ CapabilityBuilder,
+ Arguments,
+ Output,
+ Confirmation,
+ ExecutionSession
+ >(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
+
+ fun setTimerList(timerList: Property<TimerValue>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.TIMER_LIST.key] = timerList }
+
override fun build(): Capability {
- super.setProperty(Properties.Builder().build())
+ super.setProperty(properties)
return super.build()
}
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor(val timerList: Property<TimerValue>?) {
- override fun toString(): String {
- return "Property(timerList=$timerList}"
- }
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass != other?.javaClass) return false
-
- other as Properties
-
- if (timerList != other.timerList) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- return timerList.hashCode()
- }
-
- class Builder {
- private var timerList: Property<TimerValue>? = null
-
- fun setTimerList(timerList: Property<TimerValue>): Builder = apply {
- this.timerList = timerList
- }
-
- fun build(): Properties = Properties(timerList)
- }
- }
-
class Arguments internal constructor(val timerList: List<TimerValue>?) {
override fun toString(): String {
return "Arguments(timerList=$timerList)"
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StartTimer.kt b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StartTimer.kt
index 25ca3cc..fcd211c 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StartTimer.kt
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StartTimer.kt
@@ -18,17 +18,17 @@
import androidx.appactions.builtintypes.experimental.types.GenericErrorStatus
import androidx.appactions.builtintypes.experimental.types.SuccessStatus
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.HostProperties
import androidx.appactions.interaction.capabilities.core.ValueListener
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
-import androidx.appactions.interaction.capabilities.core.properties.StringValue
-import androidx.appactions.interaction.capabilities.core.properties.Property
import androidx.appactions.interaction.capabilities.core.impl.task.SessionBridge
import androidx.appactions.interaction.capabilities.core.impl.task.TaskHandler
+import androidx.appactions.interaction.capabilities.core.properties.Property
+import androidx.appactions.interaction.capabilities.core.properties.StringValue
import androidx.appactions.interaction.proto.ParamValue
import androidx.appactions.interaction.protobuf.Struct
import androidx.appactions.interaction.protobuf.Value
@@ -38,28 +38,43 @@
/** StartTimer.kt in interaction-capabilities-productivity */
private const val CAPABILITY_NAME = "actions.intent.START_TIMER"
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(StartTimer.Properties::class.java)
.setArguments(StartTimer.Arguments::class.java, StartTimer.Arguments::Builder)
.setOutput(StartTimer.Output::class.java)
.bindOptionalParameter(
"timer.identifier",
- { property -> Optional.ofNullable(property.identifier) },
+ { properties ->
+ Optional.ofNullable(
+ properties[StartTimer.PropertyMapStrings.IDENTIFIER.key]
+ as Property<StringValue>
+ )
+ },
StartTimer.Arguments.Builder::setIdentifier,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER,
)
.bindOptionalParameter(
"timer.name",
- { property -> Optional.ofNullable(property.name) },
+ { properties ->
+ Optional.ofNullable(
+ properties[StartTimer.PropertyMapStrings.NAME.key]
+ as Property<StringValue>
+ )
+ },
StartTimer.Arguments.Builder::setName,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER,
)
.bindOptionalParameter(
"timer.duration",
- { property -> Optional.ofNullable(property.duration) },
+ { properties ->
+ Optional.ofNullable(
+ properties[StartTimer.PropertyMapStrings.DURATION.key]
+ as Property<Duration>
+ )
+ },
StartTimer.Arguments.Builder::setDuration,
TypeConverters.DURATION_PARAM_VALUE_CONVERTER,
TypeConverters.DURATION_ENTITY_CONVERTER,
@@ -93,20 +108,47 @@
// TODO(b/267806701): Add capability factory annotation once the testing library is fully migrated.
class StartTimer private constructor() {
+ internal enum class PropertyMapStrings(val key: String) {
+ TIMER_LIST("timer.timerList"),
+ IDENTIFIER("timer.identifier"),
+ NAME("timer.name"),
+ DURATION("timer.duration"),
+ }
class CapabilityBuilder :
Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession,
+ CapabilityBuilder,
+ Arguments,
+ Output,
+ Confirmation,
+ ExecutionSession
>(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
override val sessionBridge: SessionBridge<ExecutionSession, Confirmation> = SESSION_BRIDGE
- public override fun setExecutionSessionFactory(
+ override fun setExecutionSessionFactory(
sessionFactory: (hostProperties: HostProperties?) -> ExecutionSession,
): CapabilityBuilder = super.setExecutionSessionFactory(sessionFactory)
+ fun setTimerList(timerList: Property<TimerValue>): CapabilityBuilder = apply {
+ properties[PropertyMapStrings.TIMER_LIST.key] = timerList
+ }
+
+ fun setIdentifier(identifier: Property<StringValue>): CapabilityBuilder = apply {
+ properties[PropertyMapStrings.IDENTIFIER.key] = identifier
+ }
+
+ fun setName(name: Property<StringValue>): CapabilityBuilder = apply {
+ properties[PropertyMapStrings.NAME.key] = name
+ }
+
+ fun setDuration(duration: Property<Duration>): CapabilityBuilder = apply {
+ properties[PropertyMapStrings.DURATION.key] = duration
+ }
+
override fun build(): Capability {
- super.setProperty(Properties.Builder().build())
+ super.setProperty(properties)
return super.build()
}
}
@@ -118,56 +160,6 @@
get() = null
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties
- internal constructor(
- val identifier: Property<StringValue>?,
- val name: Property<StringValue>?,
- val duration: Property<Duration>?,
- ) {
- override fun toString(): String {
- return "Property(identifier=$identifier,name=$name,duration=$duration}"
- }
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass != other?.javaClass) return false
-
- other as Properties
-
- if (identifier != other.identifier) return false
- if (name != other.name) return false
- if (duration != other.duration) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- var result = identifier.hashCode()
- result += 31 * name.hashCode()
- result += 31 * duration.hashCode()
- return result
- }
-
- class Builder {
- private var identifier: Property<StringValue>? = null
- private var name: Property<StringValue>? = null
- private var duration: Property<Duration>? = null
-
- fun setIdentifier(identifier: Property<StringValue>): Builder = apply {
- this.identifier = identifier
- }
-
- fun setName(name: Property<StringValue>): Builder = apply { this.name = name }
-
- fun setDuration(duration: Property<Duration>): Builder = apply {
- this.duration = duration
- }
-
- fun build(): Properties = Properties(identifier, name, duration)
- }
- }
-
class Arguments internal constructor(
val identifier: String?,
val name: String?,
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StopTimer.kt b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StopTimer.kt
index fa589e7..93f5b75 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StopTimer.kt
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/StopTimer.kt
@@ -18,8 +18,8 @@
import androidx.appactions.builtintypes.experimental.types.GenericErrorStatus
import androidx.appactions.builtintypes.experimental.types.SuccessStatus
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
@@ -32,14 +32,19 @@
/** StopTimer.kt in interaction-capabilities-productivity */
private const val CAPABILITY_NAME = "actions.intent.STOP_TIMER"
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(StopTimer.Properties::class.java)
.setArguments(StopTimer.Arguments::class.java, StopTimer.Arguments::Builder)
.setOutput(StopTimer.Output::class.java)
.bindRepeatedParameter(
"timer",
- { property -> Optional.ofNullable(property.timerList) },
+ { properties ->
+ Optional.ofNullable(
+ properties[StopTimer.PropertyMapStrings.TIMER_LIST.key]
+ as Property<TimerValue>
+ )
+ },
StopTimer.Arguments.Builder::setTimerList,
TimerValue.PARAM_VALUE_CONVERTER,
TimerValue.ENTITY_CONVERTER
@@ -53,49 +58,29 @@
// TODO(b/267806701): Add capability factory annotation once the testing library is fully migrated.
class StopTimer private constructor() {
+ internal enum class PropertyMapStrings(val key: String) {
+ TIMER_LIST("timer.timerList"),
+ }
class CapabilityBuilder :
Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
+ CapabilityBuilder,
+ Arguments,
+ Output,
+ Confirmation,
+ ExecutionSession
>(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
+
+ fun setTimerList(timerList: Property<TimerValue>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.TIMER_LIST.key] = timerList }
+
override fun build(): Capability {
- super.setProperty(Properties.Builder().build())
+ super.setProperty(properties)
return super.build()
}
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor(val timerList: Property<TimerValue>?) {
- override fun toString(): String {
- return "Property(timerList=$timerList}"
- }
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass != other?.javaClass) return false
-
- other as Properties
-
- if (timerList != other.timerList) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- return timerList.hashCode()
- }
-
- class Builder {
- private var timerList: Property<TimerValue>? = null
-
- fun setTimerList(timerList: Property<TimerValue>): Builder = apply {
- this.timerList = timerList
- }
-
- fun build(): Properties = Properties(timerList)
- }
- }
-
class Arguments internal constructor(val timerList: List<TimerValue>?) {
override fun toString(): String {
return "Arguments(timerList=$timerList)"
diff --git a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartEmergencySharing.kt b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartEmergencySharing.kt
index a0829de..11e0682 100644
--- a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartEmergencySharing.kt
+++ b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartEmergencySharing.kt
@@ -17,13 +17,14 @@
package androidx.appactions.interaction.capabilities.safety
import androidx.appactions.builtintypes.experimental.types.GenericErrorStatus
-import androidx.appactions.builtintypes.experimental.types.SuccessStatus
import androidx.appactions.builtintypes.experimental.types.NoInternetConnection
-import androidx.appactions.interaction.capabilities.core.Capability
+import androidx.appactions.builtintypes.experimental.types.SuccessStatus
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
+import androidx.appactions.interaction.capabilities.core.properties.Property
import androidx.appactions.interaction.capabilities.safety.executionstatus.EmergencySharingInProgress
import androidx.appactions.interaction.capabilities.safety.executionstatus.SafetyAccountNotLoggedIn
import androidx.appactions.interaction.capabilities.safety.executionstatus.SafetyFeatureNotOnboarded
@@ -37,7 +38,6 @@
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(StartEmergencySharing.Properties::class.java)
.setArguments(
StartEmergencySharing.Arguments::class.java,
StartEmergencySharing.Arguments::Builder
@@ -55,17 +55,16 @@
// TODO(b/267805819): Update to include the SessionFactory once Session API is ready.
class CapabilityBuilder :
Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession,
+ CapabilityBuilder, Arguments, Output, Confirmation, ExecutionSession,
>(ACTION_SPEC) {
+
+ private var properties = mutableMapOf<String, Property<*>>()
override fun build(): Capability {
- super.setProperty(Properties())
+ super.setProperty(properties)
return super.build()
}
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor()
-
class Arguments internal constructor() {
class Builder : BuilderOf<Arguments> {
override fun build(): Arguments = Arguments()
diff --git a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt
index cd5b319..9bb6f01 100644
--- a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt
+++ b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt
@@ -21,8 +21,8 @@
import androidx.appactions.builtintypes.experimental.types.NoInternetConnection
import androidx.appactions.builtintypes.experimental.types.SafetyCheck
import androidx.appactions.builtintypes.experimental.types.SuccessStatus
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.ParamValueConverter
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
@@ -42,21 +42,31 @@
/** StartSafetyCheck.kt in interaction-capabilities-safety */
private const val CAPABILITY_NAME = "actions.intent.START_SAFETY_CHECK"
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(StartSafetyCheck.Properties::class.java)
.setArguments(StartSafetyCheck.Arguments::class.java, StartSafetyCheck.Arguments::Builder)
.setOutput(StartSafetyCheck.Output::class.java)
.bindOptionalParameter(
"safetyCheck.duration",
- { property -> Optional.ofNullable(property.duration) },
+ { properties ->
+ Optional.ofNullable(
+ properties[StartSafetyCheck.PropertyMapStrings.DURATION.key]
+ as Property<Duration>
+ )
+ },
StartSafetyCheck.Arguments.Builder::setDuration,
TypeConverters.DURATION_PARAM_VALUE_CONVERTER,
TypeConverters.DURATION_ENTITY_CONVERTER
)
.bindOptionalParameter(
"safetyCheck.checkInTime",
- { property -> Optional.ofNullable(property.checkInTime) },
+ { property ->
+ Optional.ofNullable(
+ property[StartSafetyCheck.PropertyMapStrings.CHECK_IN_TIME.key]
+ as Property<ZonedDateTime>
+ )
+ },
StartSafetyCheck.Arguments.Builder::setCheckInTime,
TypeConverters.ZONED_DATETIME_PARAM_VALUE_CONVERTER,
TypeConverters.ZONED_DATETIME_ENTITY_CONVERTER
@@ -75,60 +85,30 @@
// TODO(b/267806701): Add capability factory annotation once the testing library is fully migrated.
class StartSafetyCheck private constructor() {
+ internal enum class PropertyMapStrings(val key: String) {
+ DURATION("safetycheck.duration"),
+ CHECK_IN_TIME("safetycheck.checkInTime"),
+ }
+
// TODO(b/267805819): Update to include the SessionFactory once Session API is ready.
class CapabilityBuilder :
Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
+ CapabilityBuilder, Arguments, Output, Confirmation, ExecutionSession
>(ACTION_SPEC) {
+ private var properties = mutableMapOf<String, Property<*>>()
+
+ fun setDuration(duration: Property<Duration>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.DURATION.key] = duration }
+
+ fun setCheckInTime(checkInTime: Property<ZonedDateTime>): CapabilityBuilder =
+ apply { properties[PropertyMapStrings.CHECK_IN_TIME.key] = checkInTime }
+
override fun build(): Capability {
- // TODO(b/268369632): No-op remove empty property builder after Property od removed
- super.setProperty(Properties.Builder().build())
+ super.setProperty(properties)
return super.build()
}
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor(
- val duration: Property<Duration>?,
- val checkInTime: Property<ZonedDateTime>?
- ) {
- override fun toString(): String {
- return "Property(duration=$duration, checkInTime=$checkInTime)"
- }
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass != other?.javaClass) return false
-
- other as Properties
-
- if (duration != other.duration) return false
- if (checkInTime != other.checkInTime) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- var result = duration.hashCode()
- result = 31 * result + checkInTime.hashCode()
- return result
- }
-
- class Builder {
- private var duration: Property<Duration>? = null
-
- private var checkInTime: Property<ZonedDateTime>? = null
-
- fun setDuration(duration: Property<Duration>): Builder =
- apply { this.duration = duration }
-
- fun setCheckInTime(checkInTime: Property<ZonedDateTime>): Builder =
- apply { this.checkInTime = checkInTime }
-
- fun build(): Properties = Properties(duration, checkInTime)
- }
- }
-
class Arguments internal constructor(
val duration: Duration?,
val checkInTime: ZonedDateTime?
diff --git a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopEmergencySharing.kt b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopEmergencySharing.kt
index afc9f18..731aff5 100644
--- a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopEmergencySharing.kt
+++ b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopEmergencySharing.kt
@@ -20,11 +20,12 @@
import androidx.appactions.builtintypes.experimental.types.GenericErrorStatus
import androidx.appactions.builtintypes.experimental.types.NoInternetConnection
import androidx.appactions.builtintypes.experimental.types.SuccessStatus
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
+import androidx.appactions.interaction.capabilities.core.properties.Property
import androidx.appactions.interaction.capabilities.safety.executionstatus.SafetyAccountNotLoggedIn
import androidx.appactions.interaction.capabilities.safety.executionstatus.SafetyFeatureNotOnboarded
import androidx.appactions.interaction.proto.ParamValue
@@ -37,7 +38,6 @@
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(StopEmergencySharing.Properties::class.java)
.setArguments(
StopEmergencySharing.Arguments::class.java,
StopEmergencySharing.Arguments::Builder
@@ -55,17 +55,17 @@
// TODO(b/267805819): Update to include the SessionFactory once Session API is ready.
class CapabilityBuilder :
Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession,
+ CapabilityBuilder, Arguments, Output, Confirmation, ExecutionSession,
>(ACTION_SPEC) {
+
+ private var properties = mutableMapOf<String, Property<*>>()
+
override fun build(): Capability {
- super.setProperty(Properties())
+ super.setProperty(properties)
return super.build()
}
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor()
-
class Arguments internal constructor() {
class Builder : BuilderOf<Arguments> {
override fun build(): Arguments = Arguments()
diff --git a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopSafetyCheck.kt b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopSafetyCheck.kt
index 3e5156b..3d3ffed 100644
--- a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopSafetyCheck.kt
+++ b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopSafetyCheck.kt
@@ -20,11 +20,12 @@
import androidx.appactions.builtintypes.experimental.types.GenericErrorStatus
import androidx.appactions.builtintypes.experimental.types.NoInternetConnection
import androidx.appactions.builtintypes.experimental.types.SuccessStatus
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
+import androidx.appactions.interaction.capabilities.core.properties.Property
import androidx.appactions.interaction.capabilities.safety.executionstatus.SafetyAccountNotLoggedIn
import androidx.appactions.interaction.capabilities.safety.executionstatus.SafetyFeatureNotOnboarded
import androidx.appactions.interaction.proto.ParamValue
@@ -37,7 +38,6 @@
private val ACTION_SPEC =
ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(StopSafetyCheck.Properties::class.java)
.setArguments(StopSafetyCheck.Arguments::class.java, StopSafetyCheck.Arguments::Builder)
.setOutput(StopSafetyCheck.Output::class.java)
.bindOptionalOutput(
@@ -52,17 +52,16 @@
// TODO(b/267805819): Update to include the SessionFactory once Session API is ready.
class CapabilityBuilder :
Capability.Builder<
- CapabilityBuilder, Properties, Arguments, Output, Confirmation, ExecutionSession
+ CapabilityBuilder, Arguments, Output, Confirmation, ExecutionSession
>(ACTION_SPEC) {
+
+ private var properties = mutableMapOf<String, Property<*>>()
override fun build(): Capability {
- super.setProperty(Properties())
+ super.setProperty(properties)
return super.build()
}
}
- // TODO(b/268369632): Remove Property from public capability APIs.
- class Properties internal constructor()
-
class Arguments internal constructor() {
class Builder : BuilderOf<Arguments> {
override fun build(): Arguments = Arguments()
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeCapability.kt b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeCapability.kt
index 3d03fc9..9708c4a 100644
--- a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeCapability.kt
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeCapability.kt
@@ -16,26 +16,25 @@
package androidx.appactions.interaction.service.testing.internal
-import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
-import androidx.appactions.interaction.capabilities.core.HostProperties
+import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.ValueListener
import androidx.appactions.interaction.capabilities.core.impl.BuilderOf
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpecBuilder
-import androidx.appactions.interaction.capabilities.core.properties.StringValue
-import androidx.appactions.interaction.capabilities.core.properties.Property
import androidx.appactions.interaction.capabilities.core.impl.task.SessionBridge
import androidx.appactions.interaction.capabilities.core.impl.task.TaskHandler
+import androidx.appactions.interaction.capabilities.core.properties.Property
+import androidx.appactions.interaction.capabilities.core.properties.StringValue
import java.util.Optional
private const val CAPABILITY_NAME = "actions.intent.FAKE_CAPABILITY"
+@Suppress("UNCHECKED_CAST")
private val ACTION_SPEC = ActionSpecBuilder.ofCapabilityNamed(CAPABILITY_NAME)
- .setDescriptor(FakeCapability.Properties::class.java)
.setArguments(FakeCapability.Arguments::class.java, FakeCapability.Arguments::Builder)
.setOutput(FakeCapability.Output::class.java).bindOptionalParameter(
"fieldOne",
- { property -> Optional.ofNullable(property.fieldOne) },
+ { property -> Optional.ofNullable(property["fieldOne"] as Property<StringValue>) },
FakeCapability.Arguments.Builder::setFieldOne,
TypeConverters.STRING_PARAM_VALUE_CONVERTER,
TypeConverters.STRING_VALUE_ENTITY_CONVERTER,
@@ -69,7 +68,6 @@
class CapabilityBuilder : Capability.Builder<
CapabilityBuilder,
- Properties,
Arguments,
Output,
Confirmation,
@@ -94,12 +92,14 @@
this.fieldOne = fieldOne
}
- public override fun setExecutionSessionFactory(
- sessionFactory: (hostProperties: HostProperties?) -> ExecutionSession,
- ) = super.setExecutionSessionFactory(sessionFactory)
-
override fun build(): Capability {
- super.setProperty(Properties(fieldOne))
+ super.setProperty(
+ mutableMapOf(
+ "fieldOne" to (
+ fieldOne ?: Property.Builder<StringValue>().build()
+ )
+ )
+ )
return super.build()
}
}
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Outputs.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Outputs.kt
index ace3165..959758d 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Outputs.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Outputs.kt
@@ -30,14 +30,14 @@
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public object Outputs {
+object Outputs {
private val formatter: SimpleDateFormat = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss")
/**
* The intended output directory that respects the `additionalTestOutputDir`.
*/
- public val outputDirectory: File
+ val outputDirectory: File
/**
* The usable output directory, given permission issues with `adb shell` on Android R.
@@ -46,7 +46,7 @@
* This dir can be read/written by app
* This dir can be read by shell (see [forceFilesForShellAccessible] for API 21/22!)
*/
- public val dirUsableByAppAndShell: File
+ val dirUsableByAppAndShell: File
/**
* Any file created by this process for the shell to use must be explicitly made filesystem
@@ -69,10 +69,12 @@
// Media directory. (b/216588251)
context.getFirstMountedMediaDir()
}
+
Build.VERSION.SDK_INT <= 22 -> {
// prior to API 23, shell didn't have access to externalCacheDir
context.cacheDir
}
+
else -> context.externalCacheDir
} ?: throw IllegalStateException(
"Unable to select a directory for writing files, " +
@@ -94,6 +96,9 @@
Log.d(BenchmarkState.TAG, "Output Directory: $outputDirectory")
outputDirectory.mkdirs()
+
+ // Clear all the existing files in the output directories
+ deleteFiles { true }
}
/**
@@ -104,7 +109,7 @@
*
* @return The absolute path of the output [File].
*/
- public fun writeFile(
+ fun writeFile(
fileName: String,
reportKey: String,
reportOnRunEndOnly: Boolean = false,
@@ -134,22 +139,22 @@
return destination.absolutePath
}
- public fun sanitizeFilename(filename: String): String {
+ fun sanitizeFilename(filename: String): String {
return filename
.replace(" ", "")
.replace("(", "[")
.replace(")", "]")
}
- public fun testOutputFile(filename: String): File {
+ fun testOutputFile(filename: String): File {
return File(outputDirectory, filename)
}
- public fun dateToFileName(date: Date = Date()): String {
+ fun dateToFileName(date: Date = Date()): String {
return formatter.format(date)
}
- public fun relativePathFor(path: String): String {
+ fun relativePathFor(path: String): String {
val hasOutputDirectoryPrefix = path.startsWith(outputDirectory.absolutePath)
val relativePath = when {
hasOutputDirectoryPrefix -> path.removePrefix("${outputDirectory.absolutePath}/")
@@ -160,4 +165,10 @@
}
return relativePath
}
+
+ fun deleteFiles(filterBlock: (File) -> (Boolean)) {
+ listOf(outputDirectory, dirUsableByAppAndShell)
+ .flatMap { it.listFiles(filterBlock)?.asList() ?: emptyList() }
+ .forEach { it.delete() }
+ }
}
diff --git a/benchmark/benchmark-macro-junit4/api/current.txt b/benchmark/benchmark-macro-junit4/api/current.txt
index 0bcc71e..94459b9 100644
--- a/benchmark/benchmark-macro-junit4/api/current.txt
+++ b/benchmark/benchmark-macro-junit4/api/current.txt
@@ -4,7 +4,7 @@
@RequiresApi(28) public final class BaselineProfileRule implements org.junit.rules.TestRule {
ctor public BaselineProfileRule();
method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
- method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean>? filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
diff --git a/benchmark/benchmark-macro-junit4/api/public_plus_experimental_current.txt b/benchmark/benchmark-macro-junit4/api/public_plus_experimental_current.txt
index bd292b7..f2b4517 100644
--- a/benchmark/benchmark-macro-junit4/api/public_plus_experimental_current.txt
+++ b/benchmark/benchmark-macro-junit4/api/public_plus_experimental_current.txt
@@ -4,12 +4,12 @@
@RequiresApi(28) public final class BaselineProfileRule implements org.junit.rules.TestRule {
ctor public BaselineProfileRule();
method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
- method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean>? filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean>? filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
diff --git a/benchmark/benchmark-macro-junit4/api/restricted_current.txt b/benchmark/benchmark-macro-junit4/api/restricted_current.txt
index 0bcc71e..94459b9 100644
--- a/benchmark/benchmark-macro-junit4/api/restricted_current.txt
+++ b/benchmark/benchmark-macro-junit4/api/restricted_current.txt
@@ -4,7 +4,7 @@
@RequiresApi(28) public final class BaselineProfileRule implements org.junit.rules.TestRule {
ctor public BaselineProfileRule();
method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
- method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean>? filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
diff --git a/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/BaselineProfileRule.kt b/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/BaselineProfileRule.kt
index 12dca06..8a0d906 100644
--- a/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/BaselineProfileRule.kt
+++ b/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/BaselineProfileRule.kt
@@ -125,7 +125,7 @@
iterations: Int = 3,
outputFilePrefix: String? = null,
includeInStartupProfile: Boolean = false,
- filterPredicate: ((String) -> Boolean)? = null,
+ filterPredicate: ((String) -> Boolean) = { true },
profileBlock: MacrobenchmarkScope.() -> Unit
) {
collectBaselineProfile(
@@ -170,7 +170,7 @@
outputFilePrefix: String? = null,
includeInStartupProfile: Boolean = false,
strictStability: Boolean = false,
- filterPredicate: ((String) -> Boolean)? = null,
+ filterPredicate: ((String) -> Boolean) = { true },
profileBlock: MacrobenchmarkScope.() -> Unit
) {
collectStableBaselineProfile(
diff --git a/benchmark/benchmark-macro/api/restricted_current.ignore b/benchmark/benchmark-macro/api/restricted_current.ignore
index 870da85..0e7f13d 100644
--- a/benchmark/benchmark-macro/api/restricted_current.ignore
+++ b/benchmark/benchmark-macro/api/restricted_current.ignore
@@ -1,6 +1,8 @@
// Baseline format: 1.0
RemovedClass: androidx.benchmark.macro.Api29Kt:
Removed class androidx.benchmark.macro.Api29Kt
+RemovedClass: androidx.benchmark.macro.BaselineProfilesKt:
+ Removed class androidx.benchmark.macro.BaselineProfilesKt
RemovedClass: androidx.benchmark.macro.FrameTimingGfxInfoMetric:
Removed class androidx.benchmark.macro.FrameTimingGfxInfoMetric
RemovedClass: androidx.benchmark.macro.IdeSummaryStringKt:
@@ -17,9 +19,5 @@
Removed class androidx.benchmark.macro.TagKt
-RemovedMethod: androidx.benchmark.macro.BaselineProfilesKt#collectBaselineProfile(String, String, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit>):
- Removed method androidx.benchmark.macro.BaselineProfilesKt.collectBaselineProfile(String,String,kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit>)
-
-
RemovedPackage: androidx.benchmark.macro.perfetto:
Removed package androidx.benchmark.macro.perfetto
diff --git a/benchmark/benchmark-macro/api/restricted_current.txt b/benchmark/benchmark-macro/api/restricted_current.txt
index a5eae3b..3954702 100644
--- a/benchmark/benchmark-macro/api/restricted_current.txt
+++ b/benchmark/benchmark-macro/api/restricted_current.txt
@@ -9,11 +9,6 @@
enum_constant public static final androidx.benchmark.macro.BaselineProfileMode UseIfAvailable;
}
- public final class BaselineProfilesKt {
- method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void collectStableBaselineProfile(String uniqueName, String packageName, int stableIterations, int maxIterations, optional boolean strictStability, boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean>? filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void collectStableBaselineProfile(String uniqueName, String packageName, int stableIterations, int maxIterations, boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean>? filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- }
-
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class BatteryCharge {
method public boolean hasMinimumCharge(optional boolean throwOnMissingMetrics);
field public static final androidx.benchmark.macro.BatteryCharge INSTANCE;
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/BaselineProfilesTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/BaselineProfilesTest.kt
index 2c4eb75..8c5199a 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/BaselineProfilesTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/BaselineProfilesTest.kt
@@ -36,21 +36,19 @@
HSPLjava/io/DataOutputStream;->writeByte(I)V+]Ljava/io/OutputStream;missing_types
""".trimIndent()
- val filtered = filterProfileRulesToTargetP(profile, sortRules = false)
+ val filtered = filterProfileRulesToTargetP(profile, sortRules = false) { true }
assertEquals(filtered.lines().size, 1)
assertEquals("Landroidx/Foo/Bar;", filtered)
}
@Test
fun filterBaselineRulesWithSorting() {
- // https://youtrack.jetbrains.com/issue/KT-2425
- val dollar = "$"
val profile = """
HPLandroidx/lifecycle/Lifecycle${dollar}Event;->downFrom(Landroidx/lifecycle/Lifecycle${dollar}State;)Landroidx/lifecycle/Lifecycle${dollar}Event;
HSPLandroidx/lifecycle/ClassesInfoCache${dollar}CallbackInfo;-><init>(Ljava/util/Map;)V
HSPLandroidx/lifecycle/ClassesInfoCache${dollar}CallbackInfo;->invokeCallbacks(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle${dollar}Event;Ljava/lang/Object;)V
""".trimIndent()
- val sorted = filterProfileRulesToTargetP(profile, sortRules = true)
+ val sorted = filterProfileRulesToTargetP(profile, sortRules = true) { true }
assertEquals(sorted.lines().size, 3)
val expected = """
HSPLandroidx/lifecycle/ClassesInfoCache${dollar}CallbackInfo;-><init>(Ljava/util/Map;)V
@@ -61,6 +59,24 @@
}
@Test
+ fun filterBaselineRulesWithSortingAndCustomFilter() {
+ val profile = """
+ HPLandroidx/lifecycle/Lifecycle${dollar}Event;->downFrom(Landroidx/lifecycle/Lifecycle${dollar}State;)Landroidx/lifecycle/Lifecycle${dollar}Event;
+ HSPLandroidx/lifecycle/ClassesInfoCache${dollar}CallbackInfo;->invokeCallbacks(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle${dollar}Event;Ljava/lang/Object;)V
+ HSPLandroidx/lifecycle/ClassesInfoCache${dollar}CallbackInfo;-><init>(Ljava/util/Map;)V
+ """.trimIndent()
+ val sorted = filterProfileRulesToTargetP(profile, sortRules = true) {
+ it.startsWith("HSPL")
+ }
+ assertEquals(sorted.lines().size, 2)
+ val expected = """
+ HSPLandroidx/lifecycle/ClassesInfoCache${dollar}CallbackInfo;-><init>(Ljava/util/Map;)V
+ HSPLandroidx/lifecycle/ClassesInfoCache${dollar}CallbackInfo;->invokeCallbacks(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle${dollar}Event;Ljava/lang/Object;)V
+ """.trimIndent()
+ assertEquals(expected, sorted)
+ }
+
+ @Test
fun deviceSpecifier() {
if (DeviceInfo.isEmulator) {
assertEquals(deviceSpecifier, "-e ")
@@ -70,4 +86,8 @@
assertNotEquals(deviceSpecifier, "-s ")
}
}
+ companion object {
+ // https://youtrack.jetbrains.com/issue/KT-2425
+ const val dollar = "$"
+ }
}
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt
index d19339e..7ce8f71 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt
@@ -16,6 +16,7 @@
package androidx.benchmark.macro
+import android.annotation.SuppressLint
import android.os.Build
import android.util.Log
import androidx.annotation.RequiresApi
@@ -37,13 +38,12 @@
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@RequiresApi(28)
-@JvmOverloads
fun collectBaselineProfile(
uniqueName: String,
packageName: String,
iterations: Int = 3,
includeInStartupProfile: Boolean,
- filterPredicate: ((String) -> Boolean)?,
+ filterPredicate: ((String) -> Boolean),
profileBlock: MacrobenchmarkScope.() -> Unit,
) {
val scope = buildMacrobenchmarkScope(packageName)
@@ -83,12 +83,13 @@
runs a non-trivial amount of code.
""".trimIndent()
}
- // Filter
- val profile = filterProfileRulesToTargetP(unfilteredProfile, sortRules = true)
- // Report
+ val profile = filterProfileRulesToTargetP(
+ profile = unfilteredProfile,
+ sortRules = true,
+ filterPredicate = filterPredicate
+ )
reportResults(
profile = profile,
- filterPredicate = filterPredicate,
uniqueFilePrefix = uniqueName,
startTime = startTime,
includeInStartupProfile = includeInStartupProfile
@@ -103,9 +104,8 @@
* waiting until they are stable.
* @suppress
*/
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@RequiresApi(28)
-@JvmOverloads
fun collectStableBaselineProfile(
uniqueName: String,
packageName: String,
@@ -113,7 +113,7 @@
maxIterations: Int,
strictStability: Boolean = false,
includeInStartupProfile: Boolean,
- filterPredicate: ((String) -> Boolean)?,
+ filterPredicate: ((String) -> Boolean),
profileBlock: MacrobenchmarkScope.() -> Unit
) {
val scope = buildMacrobenchmarkScope(packageName)
@@ -198,10 +198,13 @@
" invokes the target app, and runs a non-trivial amount of code"
}
- val profile = filterProfileRulesToTargetP(lastProfile, sortRules = true)
+ val profile = filterProfileRulesToTargetP(
+ profile = lastProfile,
+ sortRules = true,
+ filterPredicate = filterPredicate
+ )
reportResults(
profile = profile,
- filterPredicate = filterPredicate,
uniqueFilePrefix = uniqueName,
startTime = startTime,
includeInStartupProfile = includeInStartupProfile
@@ -230,6 +233,7 @@
/**
* Builds a function that can kill the target process using the provided [MacrobenchmarkScope].
*/
+@SuppressLint("BanThreadSleep")
private fun MacrobenchmarkScope.killProcessBlock(): () -> Unit {
val killProcessBlock = {
// When generating baseline profiles we want to default to using
@@ -246,14 +250,10 @@
*/
private fun reportResults(
profile: String,
- filterPredicate: ((String) -> Boolean)?,
uniqueFilePrefix: String,
startTime: Long,
includeInStartupProfile: Boolean
) {
- // Filter profile if necessary based on filters
- val filteredProfile = applyPackageFilters(profile, filterPredicate)
-
// Write a file with a timestamp to be able to disambiguate between runs with the same
// unique name.
@@ -272,10 +272,10 @@
)
}
- val absolutePath = Outputs.writeFile(fileName, reportKey) { it.writeText(filteredProfile) }
+ val absolutePath = Outputs.writeFile(fileName, reportKey) { it.writeText(profile) }
val tsAbsolutePath = Outputs.writeFile(tsFileName, "baseline-profile-ts") {
Log.d(TAG, "Pull Baseline Profile with: `adb pull \"${it.absolutePath}\" .`")
- it.writeText(filteredProfile)
+ it.writeText(profile)
}
val totalRunTime = System.nanoTime() - startTime
@@ -382,7 +382,11 @@
}
@VisibleForTesting
-internal fun filterProfileRulesToTargetP(profile: String, sortRules: Boolean = true): String {
+internal fun filterProfileRulesToTargetP(
+ profile: String,
+ sortRules: Boolean = true,
+ filterPredicate: ((String) -> Boolean)
+): String {
val rules = profile.lines()
var filteredRules = rules.filterNot { rule ->
// We want to filter out rules that are not supported on P. (b/216508418)
@@ -390,7 +394,8 @@
if (rule.startsWith("[")) { // Array qualifier
true
} else rule.contains("+") // Inline cache specifier
- }
+ }.filter(filterPredicate)
+
if (sortRules) {
filteredRules = filteredRules.mapNotNull { ProfileRule.parse(it) }
.sortedWith(ProfileRule.comparator)
@@ -399,14 +404,6 @@
return filteredRules.joinToString(separator = "\n")
}
-private fun applyPackageFilters(profile: String, filterPredicate: ((String) -> Boolean)?): String {
- return filterPredicate?.run {
- profile
- .lines()
- .filter(filterPredicate).joinToString(System.lineSeparator())
- } ?: profile
-}
-
private fun summaryRecord(record: Summary): String {
val summary = StringBuilder()
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
index 76d6330..dc9536e 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
@@ -16,6 +16,10 @@
package androidx.bluetooth.integration.testapp.ui.scanner
+// TODO(ofy) Migrate from androidx.bluetooth.integration.testapp.experimental.BluetoothLe to
+// androidx.bluetooth.BluetoothDevice once in place
+// TODO(ofy) Migrate from androidx.bluetooth.integration.testapp.experimental.BluetoothLe to
+// androidx.bluetooth.BluetoothLe once scan API is in place
import android.bluetooth.le.ScanResult
import android.bluetooth.le.ScanSettings
import android.os.Bundle
@@ -28,8 +32,6 @@
import androidx.bluetooth.integration.testapp.R
import androidx.bluetooth.integration.testapp.databinding.FragmentScannerBinding
import android.annotation.SuppressLint
-// TODO(ofy) Migrate to androidx.bluetooth.BluetoothDevice once in place
-// TODO(ofy) Migrate to androidx.bluetooth.BluetoothLe once scan API is in place
import androidx.bluetooth.integration.testapp.experimental.BluetoothLe
import androidx.bluetooth.integration.testapp.ui.common.getColor
import androidx.core.view.isVisible
diff --git a/buildSrc-tests/src/test/kotlin/androidx/build/KmpPlatformsTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/KmpPlatformsTest.kt
index c7e2ad8..c81ae66 100644
--- a/buildSrc-tests/src/test/kotlin/androidx/build/KmpPlatformsTest.kt
+++ b/buildSrc-tests/src/test/kotlin/androidx/build/KmpPlatformsTest.kt
@@ -23,63 +23,69 @@
@Test
fun withAnEmptyFlag_itReturnsTheDefaultValue() {
- assertThat(KmpFlagParser.parse("")).isEqualTo(setOf(KmpPlatform.JVM))
+ assertThat(KmpFlagParser.parse("")).isEqualTo(
+ setOf(KmpPlatform.JVM, KmpPlatform.DESKTOP)
+ )
}
@Test
fun withANullFlag_itReturnsTheDefaultValue() {
- assertThat(KmpFlagParser.parse(null)).isEqualTo(setOf(KmpPlatform.JVM))
+ assertThat(KmpFlagParser.parse(null)).isEqualTo(
+ setOf(KmpPlatform.JVM, KmpPlatform.DESKTOP)
+ )
}
@Test
fun withASingleDefaultPlatform_itParsesTheFlagCorrectly() {
- assertThat(KmpFlagParser.parse("+jvm")).isEqualTo(setOf(KmpPlatform.JVM))
+ assertThat(KmpFlagParser.parse("+jvm")).isEqualTo(
+ setOf(KmpPlatform.JVM, KmpPlatform.DESKTOP)
+ )
}
@Test
fun withNoPlatforms_itParsesTheFlagCorrectly() {
- assertThat(KmpFlagParser.parse("-jvm")).isEqualTo(emptySet<KmpPlatform>())
+ assertThat(KmpFlagParser.parse("-jvm,-desktop")).isEqualTo(emptySet<KmpPlatform>())
}
@Test
fun withASingleNonDefaultPlatform_itParsesTheFlagCorrectly() {
assertThat(KmpFlagParser.parse("+js")).isEqualTo(
- setOf(KmpPlatform.JVM, KmpPlatform.JS)
+ setOf(KmpPlatform.JVM, KmpPlatform.JS, KmpPlatform.DESKTOP)
)
}
@Test
fun withAMultiplePlatforms_itParsesTheFlagCorrectly() {
assertThat(KmpFlagParser.parse("+js,+mac")).isEqualTo(
- setOf(KmpPlatform.JVM, KmpPlatform.JS, KmpPlatform.MAC)
+ setOf(KmpPlatform.JVM, KmpPlatform.JS, KmpPlatform.MAC, KmpPlatform.DESKTOP)
)
}
@Test
fun withNegativeFlags_itParsesTheFlagCorrectly() {
assertThat(KmpFlagParser.parse("-jvm,+mac")).isEqualTo(
- setOf(KmpPlatform.MAC)
+ setOf(KmpPlatform.MAC, KmpPlatform.DESKTOP)
)
}
@Test
fun withTheNativeFlag_itParsesTheFlagCorrectly() {
assertThat(KmpFlagParser.parse("+native")).isEqualTo(
- setOf(KmpPlatform.JVM, KmpPlatform.MAC, KmpPlatform.LINUX)
+ setOf(KmpPlatform.JVM, KmpPlatform.MAC, KmpPlatform.LINUX, KmpPlatform.DESKTOP)
)
}
@Test
fun withMultipleFlagsIncludingTheNativeFlag_itParsesTheFlagCorrectly() {
assertThat(KmpFlagParser.parse("-jvm,+native,+js")).isEqualTo(
- setOf(KmpPlatform.JS, KmpPlatform.MAC, KmpPlatform.LINUX)
+ setOf(KmpPlatform.JS, KmpPlatform.MAC, KmpPlatform.LINUX, KmpPlatform.DESKTOP)
)
}
@Test
fun withRedundentFlags_itParsesTheFlagCorrectly() {
assertThat(KmpFlagParser.parse("-jvm,+native,+linux,+mac,+linux")).isEqualTo(
- setOf(KmpPlatform.MAC, KmpPlatform.LINUX)
+ setOf(KmpPlatform.MAC, KmpPlatform.LINUX, KmpPlatform.DESKTOP)
)
}
}
\ No newline at end of file
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
index 6c1b432..f6c6252 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
@@ -86,6 +86,17 @@
} else { null }
}
+ @JvmOverloads
+ fun desktop(
+ block: Action<KotlinJvmTarget>? = null
+ ): KotlinJvmTarget? {
+ return if (project.enableJvm()) {
+ kotlinExtension.jvm("desktop") {
+ block?.execute(this)
+ }
+ } else { null }
+ }
+
/**
* Configures all mac targets supported by AndroidX.
*/
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt
index e16b300..3cb172a 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt
@@ -206,6 +206,11 @@
// Don't check Hilt compile-only configurations
if (name.startsWith("hiltCompileOnly")) return false
+
+ // Don't check Desktop configurations since we don't publish them anyway
+ if (name.startsWith("desktop")) return false
+ if (name.startsWith("skiko")) return false
+
return true
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXKmpDocsImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXKmpDocsImplPlugin.kt
index b3be53b..d6a11f1 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXKmpDocsImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXKmpDocsImplPlugin.kt
@@ -23,6 +23,7 @@
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
+import org.gradle.api.attributes.Category
import org.gradle.api.attributes.LibraryElements
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.bundling.Zip
@@ -94,6 +95,10 @@
LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE,
objectFactory.named(ATTRIBUTE_NAME)
)
+ it.attribute(
+ Category.CATEGORY_ATTRIBUTE,
+ objectFactory.named(Category.DOCUMENTATION)
+ )
}
}
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/transform/ConfigureAarAsJar.kt b/buildSrc/private/src/main/kotlin/androidx/build/transform/ConfigureAarAsJar.kt
index 590be01..1b04cf7 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/transform/ConfigureAarAsJar.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/transform/ConfigureAarAsJar.kt
@@ -20,6 +20,7 @@
import org.gradle.api.Project
import org.gradle.api.attributes.Attribute
import org.gradle.api.attributes.Usage
+import org.gradle.api.attributes.java.TargetJvmEnvironment
/**
* Creates `testAarAsJar` configuration that can be used for JVM tests that need to Android library
@@ -56,4 +57,11 @@
project.configurations.getByName(configurationName).dependencies.add(
project.dependencies.create(aarAsJar)
)
+
+ // Added to allow the :external:paparazzi:paparazzi build to select the correct jar (not get
+ // confused by the mpp jars) when the mpp builds are enabled
+ project.configurations.getByName(testAarsAsJars.name).attributes.attribute(
+ TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE,
+ project.objects.named(TargetJvmEnvironment::class.java, TargetJvmEnvironment.ANDROID)
+ )
}
\ No newline at end of file
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/KmpPlatforms.kt b/buildSrc/public/src/main/kotlin/androidx/build/KmpPlatforms.kt
index 802d8ef..7961e09 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/KmpPlatforms.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/KmpPlatforms.kt
@@ -31,10 +31,11 @@
// https://blog.jetbrains.com/kotlin/2021/10/important-ua-parser-js-exploit-and-kotlin-js/
JS,
MAC,
- LINUX;
+ LINUX,
+ DESKTOP;
companion object {
val native = listOf(MAC, LINUX)
- val enabledByDefault = listOf(JVM)
+ val enabledByDefault = listOf(JVM, DESKTOP)
private const val JVM_PLATFORM = "jvm"
private const val JS_PLATFORM = "js"
private const val MAC_ARM_64 = "macosarm64"
@@ -43,6 +44,7 @@
private const val IOS_SIMULATOR_ARM_64 = "iossimulatorarm64"
private const val IOS_X_64 = "iosx64"
private const val IOS_ARM_64 = "iosarm64"
+ private const val DESKTOP_PLATFORM = "desktop"
val macPlatforms = listOf(MAC_ARM_64, MAC_OSX_64)
val linuxPlatforms = listOf(LINUX_64)
val iosPlatforms = listOf(IOS_SIMULATOR_ARM_64, IOS_ARM_64, IOS_X_64)
@@ -88,4 +90,5 @@
fun Project.enableLinux(): Boolean =
enabledKmpPlatforms().contains(KmpPlatform.LINUX) || Multiplatform.isKotlinNativeEnabled(this)
fun Project.enableJvm(): Boolean = enabledKmpPlatforms().contains(KmpPlatform.JVM)
+fun Project.enableDesktop(): Boolean = enabledKmpPlatforms().contains(KmpPlatform.DESKTOP)
fun Project.enableNative(): Boolean = enableMac() && enableLinux()
\ No newline at end of file
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/Multiplatform.kt b/buildSrc/public/src/main/kotlin/androidx/build/Multiplatform.kt
index 326c96f..554c2fdf 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/Multiplatform.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/Multiplatform.kt
@@ -40,6 +40,7 @@
@JvmStatic
fun isKotlinNativeEnabled(project: Project): Boolean {
return "KMP".equals(System.getenv()["ANDROIDX_PROJECTS"], ignoreCase = true) ||
+ "INFRAROGUE".equals(System.getenv()["ANDROIDX_PROJECTS"], ignoreCase = true) ||
ProjectLayoutType.isPlayground(project) ||
project.providers.gradleProperty("androidx.kmp.native.enabled")
.orNull?.toBoolean() == true
diff --git a/busytown/androidx.sh b/busytown/androidx.sh
index 621ff22..ef344d5 100755
--- a/busytown/androidx.sh
+++ b/busytown/androidx.sh
@@ -22,6 +22,8 @@
-Pandroidx.enableComposeCompilerMetrics=true \
-Pandroidx.enableComposeCompilerReports=true \
-Pandroidx.constraints=true \
+ # If/when we enable desktop, enable VerifyDependencyVersionsTask.kt/shouldVerifyConfiguration
+ -Pandroidx.enabled.kmp.target.platforms=-desktop \
--no-daemon \
--profile "$@"; then
EXIT_VALUE=1
diff --git a/busytown/androidx_compose_multiplatform.sh b/busytown/androidx_compose_multiplatform.sh
index 5f39449..dd31e36 100755
--- a/busytown/androidx_compose_multiplatform.sh
+++ b/busytown/androidx_compose_multiplatform.sh
@@ -9,10 +9,15 @@
# b/235340662 don't verify dependency versions because we cannot pin to multiplatform deps
-./androidx.sh \
- -Pandroidx.compose.multiplatformEnabled=true \
- compileDebugAndroidTestSources \
- compileDebugSources \
- desktopTestClasses \
- -x verifyDependencyVersions \
- -Pandroidx.enableAffectedModuleDetection=false "$@"
+impl/build.sh buildOnServer createAllArchives checkExternalLicenses listTaskOutputs \
+ -Pandroidx.compose.multiplatformEnabled=true \
+ -Pandroidx.enableComposeCompilerMetrics=true \
+ -Pandroidx.enableComposeCompilerReports=true \
+ -Pandroidx.constraints=true \
+ --no-daemon \
+ --profile \
+ compileDebugAndroidTestSources \
+ compileDebugSources \
+ desktopTestClasses \
+ -x verifyDependencyVersions \
+ -Pandroidx.enableAffectedModuleDetection=false "$@"
diff --git a/busytown/androidx_multiplatform_linux.sh b/busytown/androidx_multiplatform_linux.sh
index 3f9d518..34e9b84 100755
--- a/busytown/androidx_multiplatform_linux.sh
+++ b/busytown/androidx_multiplatform_linux.sh
@@ -3,12 +3,12 @@
cd "$(dirname $0)"
# Builds all projects that support KMP except for Compose-specific projects which are already
-# covered by androidx_compose_multiplatform.sh
+# covered by androidx_compose_multiplatform.sh.
# Must be run on Linux
-# build just KMP projects. This will also enable native targets.
-export ANDROIDX_PROJECTS=KMP
+# build just INFRAROGUE projects. This will also enable native targets.
+export ANDROIDX_PROJECTS=INFRAROGUE # TODO: Switch from `INFRAROGUE` to `KMP`
# disable cache, NS does not allow it yet: b/235227707
export USE_ANDROIDX_REMOTE_BUILD_CACHE=false
diff --git a/busytown/androidx_multiplatform_mac.sh b/busytown/androidx_multiplatform_mac.sh
index 9f2dfbd..3373b9d 100755
--- a/busytown/androidx_multiplatform_mac.sh
+++ b/busytown/androidx_multiplatform_mac.sh
@@ -7,7 +7,7 @@
# Must be run on Mac
-export ANDROIDX_PROJECTS=KMP
+export ANDROIDX_PROJECTS=INFRAROGUE # TODO: Switch from `INFRAROGUE` to `KMP`
# disable GCP cache, these machines don't have credentials.
export USE_ANDROIDX_REMOTE_BUILD_CACHE=false
diff --git a/busytown/androidx_multiplatform_mac_host_tests.sh b/busytown/androidx_multiplatform_mac_host_tests.sh
index 8da2ed5..77eb725 100755
--- a/busytown/androidx_multiplatform_mac_host_tests.sh
+++ b/busytown/androidx_multiplatform_mac_host_tests.sh
@@ -6,7 +6,7 @@
# Must be run on Mac
-export ANDROIDX_PROJECTS=KMP
+export ANDROIDX_PROJECTS=INFRAROGUE # TODO: Switch from `INFRAROGUE` to `KMP`
# disable GCP cache, these machines don't have credentials.
export USE_ANDROIDX_REMOTE_BUILD_CACHE=false
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt
index bc9620f..0cf7c6c 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraUseCaseAdapter.kt
@@ -88,7 +88,8 @@
CameraDevice.TEMPLATE_PREVIEW
)
- CaptureType.VIDEO_CAPTURE -> sessionBuilder.setTemplateType(
+ CaptureType.VIDEO_CAPTURE,
+ CaptureType.STREAM_SHARING -> sessionBuilder.setTemplateType(
CameraDevice.TEMPLATE_RECORD
)
}
@@ -103,7 +104,8 @@
CaptureType.PREVIEW,
CaptureType.IMAGE_ANALYSIS,
- CaptureType.VIDEO_CAPTURE ->
+ CaptureType.VIDEO_CAPTURE,
+ CaptureType.STREAM_SHARING ->
captureBuilder.templateType = CameraDevice.TEMPLATE_RECORD
}
mutableConfig.insertOption(
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/MeteringRepeating.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/MeteringRepeating.kt
index ddba7d3..5d79889 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/MeteringRepeating.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/MeteringRepeating.kt
@@ -229,6 +229,7 @@
override fun setZslDisabled(disabled: Boolean) = this
override fun setHighResolutionDisabled(disabled: Boolean) = this
+ override fun setCaptureType(captureType: UseCaseConfigFactory.CaptureType) = this
override fun build(): MeteringRepeating {
return MeteringRepeating(cameraProperties, useCaseConfig, displayInfoManager)
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
index 1f1834bf..505da1e 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
@@ -64,6 +64,7 @@
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
+import android.util.Range;
import android.view.Surface;
import androidx.annotation.NonNull;
@@ -232,8 +233,6 @@
@Before
public void setup() throws CameraAccessException, InterruptedException,
AssumptionViolatedException, TimeoutException, ExecutionException {
- mTestParameters0 = new CaptureSessionTestParameters("mTestParameters0");
- mTestParameters1 = new CaptureSessionTestParameters("mTestParameters1");
mHandler = new Handler(sHandlerThread.getLooper());
mExecutor = CameraXExecutors.newHandlerExecutor(mHandler);
@@ -254,6 +253,10 @@
} catch (CameraAccessExceptionCompat e) {
throw new AssumptionViolatedException("Could not retrieve camera characteristics", e);
}
+ mTestParameters0 = new CaptureSessionTestParameters("mTestParameters0",
+ mCameraCharacteristics);
+ mTestParameters1 = new CaptureSessionTestParameters("mTestParameters1",
+ mCameraCharacteristics);
mDynamicRangesCompat =
DynamicRangesCompat.fromCameraCharacteristics(mCameraCharacteristics);
@@ -684,8 +687,9 @@
// From CameraEventCallbacks option
assertThat(captureResult.getRequest().get(CaptureRequest.CONTROL_AF_MODE)).isEqualTo(
CaptureRequest.CONTROL_AF_MODE_MACRO);
- assertThat(captureResult.getRequest().get(CaptureRequest.FLASH_MODE)).isEqualTo(
- CaptureRequest.FLASH_MODE_TORCH);
+ assertThat(captureResult.getRequest().get(
+ CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION)).isEqualTo(
+ mTestParameters0.mEvRange.getLower());
// From SessionConfig option
assertThat(captureResult.getRequest().get(CaptureRequest.CONTROL_AE_MODE)).isEqualTo(
@@ -856,8 +860,9 @@
CaptureRequest.CONTROL_AF_MODE_OFF);
// From CameraEventCallbacks option
- assertThat(captureResult.getRequest().get(CaptureRequest.FLASH_MODE)).isEqualTo(
- CaptureRequest.FLASH_MODE_TORCH);
+ assertThat(captureResult.getRequest().get(
+ CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION)).isEqualTo(
+ mTestParameters0.mEvRange.getLower());
// From SessionConfig option
assertThat(captureResult.getRequest().get(CaptureRequest.CONTROL_AE_MODE)).isEqualTo(
@@ -1032,7 +1037,8 @@
assertThat(result1).isInstanceOf(Camera2CameraCaptureResult.class);
CaptureResult captureResult1 = ((Camera2CameraCaptureResult) result1).getCaptureResult();
assertThat(captureResult1.getRequest().get(
- CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION)).isEqualTo(0);
+ CaptureRequest.CONTROL_SCENE_MODE)).isEqualTo(
+ mTestParameters0.mTestCameraEventCallback.mAvailableSceneMode);
// The onDisableSession should not been invoked.
verify(mTestParameters0.mTestCameraEventCallback.mDisableCallback,
never()).onCaptureCompleted(any(CameraCaptureResult.class));
@@ -1051,7 +1057,8 @@
assertThat(result2).isInstanceOf(Camera2CameraCaptureResult.class);
CaptureResult captureResult2 = ((Camera2CameraCaptureResult) result2).getCaptureResult();
assertThat(captureResult2.getRequest().get(
- CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION)).isEqualTo(0);
+ CaptureRequest.CONTROL_SCENE_MODE)).isEqualTo(
+ mTestParameters0.mTestCameraEventCallback.mAvailableSceneMode);
// The onEnableSession should not been invoked in close().
verify(mTestParameters0.mTestCameraEventCallback.mEnableCallback,
never()).onCaptureCompleted(any(CameraCaptureResult.class));
@@ -1673,31 +1680,47 @@
*/
private static class TestCameraEventCallback extends CameraEventCallback {
+ TestCameraEventCallback(CameraCharacteristicsCompat characteristics) {
+ if (characteristics != null) {
+ int[] availableSceneModes =
+ characteristics.get(CameraCharacteristics.CONTROL_AVAILABLE_SCENE_MODES);
+ if (availableSceneModes != null && availableSceneModes.length > 0) {
+ mAvailableSceneMode = availableSceneModes[0];
+ } else {
+ mAvailableSceneMode = CameraCharacteristics.CONTROL_SCENE_MODE_DISABLED;
+ }
+ } else {
+ mAvailableSceneMode = CameraCharacteristics.CONTROL_SCENE_MODE_DISABLED;
+ }
+ }
+
private final CameraCaptureCallback mEnableCallback = Mockito.mock(
CameraCaptureCallback.class);
private final CameraCaptureCallback mDisableCallback = Mockito.mock(
CameraCaptureCallback.class);
+ private final int mAvailableSceneMode;
+
@Override
public CaptureConfig onInitSession() {
- return getCaptureConfig(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 0, null);
+ return getCaptureConfig(CaptureRequest.CONTROL_SCENE_MODE, mAvailableSceneMode, null);
}
@Override
public CaptureConfig onEnableSession() {
- return getCaptureConfig(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 0,
+ return getCaptureConfig(CaptureRequest.CONTROL_SCENE_MODE, mAvailableSceneMode,
mEnableCallback);
}
@Override
public CaptureConfig onRepeating() {
- return getCaptureConfig(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 0, null);
+ return getCaptureConfig(CaptureRequest.CONTROL_SCENE_MODE, mAvailableSceneMode, null);
}
@Override
public CaptureConfig onDisableSession() {
- return getCaptureConfig(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION,
- 0, mDisableCallback);
+ return getCaptureConfig(CaptureRequest.CONTROL_SCENE_MODE, mAvailableSceneMode,
+ mDisableCallback);
}
}
@@ -1795,8 +1818,7 @@
private final SessionConfig mSessionConfig;
private final CaptureConfig mCaptureConfig;
- private final TestCameraEventCallback mTestCameraEventCallback =
- new TestCameraEventCallback();
+ private final TestCameraEventCallback mTestCameraEventCallback;
private final CameraEventCallback mMockCameraEventCallback = Mockito.mock(
CameraEventCallback.class);
@@ -1810,6 +1832,7 @@
Mockito.mock(CameraCaptureSession.CaptureCallback.class);
private final DeferrableSurface mDeferrableSurface;
+ private final Range<Integer> mEvRange;
/**
* A composite capture callback that dispatches callbacks to both mock and real callbacks.
* The mock callback is used to verify the callback result. The real callback is used to
@@ -1825,7 +1848,7 @@
}
});
- CaptureSessionTestParameters(String name) {
+ CaptureSessionTestParameters(String name, CameraCharacteristicsCompat characteristics) {
mHandlerThread = new HandlerThread(name);
mHandlerThread.start();
mHandler = HandlerCompat.createAsync(mHandlerThread.getLooper());
@@ -1843,6 +1866,7 @@
builder.addRepeatingCameraCaptureCallback(
CaptureCallbackContainer.create(mCamera2CaptureCallback));
+ mTestCameraEventCallback = new TestCameraEventCallback(characteristics);
MutableOptionsBundle testCallbackConfig = MutableOptionsBundle.create();
testCallbackConfig.insertOption(Camera2ImplConfig.CAMERA_EVENT_CALLBACK_OPTION,
new CameraEventCallbacks(mTestCameraEventCallback));
@@ -1856,15 +1880,19 @@
// Set capture request options
// ==================================================================================
- // Priority | Component | AF_MODE | FLASH_MODE | AE_MODE
+ // Priority | Component | AF_MODE | EV MODE | AE_MODE
// ----------------------------------------------------------------------------------
// P1 | CaptureConfig | AF_MODE_OFF | |
// ----------------------------------------------------------------------------------
- // P2 | CameraEventCallbacks | AF_MODE_MACRO | FLASH_MODE_TORCH |
+ // P2 | CameraEventCallbacks | AF_MODE_MACRO | Min EV |
// ----------------------------------------------------------------------------------
- // P3 | SessionConfig | AF_MODE_AUTO | FLASH_MODE_SINGLE | AE_MODE_ON
+ // P3 | SessionConfig | AF_MODE_AUTO | Max EV | AE_MODE_ON
// ==================================================================================
+ mEvRange = characteristics != null
+ ? characteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE)
+ : new Range<>(0, 0);
+
Camera2ImplConfig.Builder camera2ConfigBuilder = new Camera2ImplConfig.Builder();
// Add capture request options for CameraEventCallbacks
@@ -1878,8 +1906,8 @@
CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_MACRO)
.setCaptureRequestOption(
- CaptureRequest.FLASH_MODE,
- CaptureRequest.FLASH_MODE_TORCH)
+ CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION,
+ mEvRange.getLower())
.build());
return builder.build();
}
@@ -1893,7 +1921,7 @@
.setCaptureRequestOption(
CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO)
.setCaptureRequestOption(
- CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE)
+ CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, mEvRange.getUpper())
.setCaptureRequestOption(
CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2UseCaseConfigFactory.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2UseCaseConfigFactory.java
index da4070a..5481b76 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2UseCaseConfigFactory.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2UseCaseConfigFactory.java
@@ -78,6 +78,7 @@
sessionBuilder.setTemplateType(CameraDevice.TEMPLATE_PREVIEW);
break;
case VIDEO_CAPTURE:
+ case STREAM_SHARING:
sessionBuilder.setTemplateType(CameraDevice.TEMPLATE_RECORD);
break;
}
@@ -101,6 +102,7 @@
captureBuilder.setTemplateType(CameraDevice.TEMPLATE_PREVIEW);
break;
case VIDEO_CAPTURE:
+ case STREAM_SHARING:
captureBuilder.setTemplateType(CameraDevice.TEMPLATE_RECORD);
break;
}
@@ -125,7 +127,7 @@
int targetRotation = mDisplayInfoManager.getMaxSizeDisplay().getRotation();
mutableConfig.insertOption(OPTION_TARGET_ROTATION, targetRotation);
- if (captureType == CaptureType.VIDEO_CAPTURE) {
+ if (captureType == CaptureType.VIDEO_CAPTURE || captureType == CaptureType.STREAM_SHARING) {
mutableConfig.insertOption(OPTION_ZSL_DISABLED, true);
}
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 8e0b364..b11b2a5a 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
@@ -2127,6 +2127,8 @@
ImageFormat.PRIVATE,
PREVIEW_SIZE,
SDR,
+ listOf(CaptureType.PREVIEW),
+ useCase.currentConfig,
/*targetFrameRate=*/null
)
val attachedAnalysis = AttachedSurfaceInfo.create(
@@ -2137,6 +2139,8 @@
ImageFormat.YUV_420_888,
RECORD_SIZE,
SDR,
+ listOf(CaptureType.IMAGE_ANALYSIS),
+ useCase.currentConfig,
/*targetFrameRate=*/null
)
@@ -2172,6 +2176,8 @@
ImageFormat.PRIVATE,
PREVIEW_SIZE,
DynamicRange(FORMAT_HDR10, BIT_DEPTH_10_BIT),
+ listOf(CaptureType.PREVIEW),
+ useCase.currentConfig,
/*targetFrameRate=*/null
)
val attachedPriv2 = AttachedSurfaceInfo.create(
@@ -2182,6 +2188,8 @@
ImageFormat.YUV_420_888,
RECORD_SIZE,
DynamicRange(FORMAT_HDR10_PLUS, BIT_DEPTH_10_BIT),
+ listOf(CaptureType.VIDEO_CAPTURE),
+ useCase.currentConfig,
/*targetFrameRate=*/null
)
@@ -2226,6 +2234,8 @@
ImageFormat.PRIVATE,
PREVIEW_SIZE,
SDR,
+ listOf(CaptureType.PREVIEW),
+ useCase.currentConfig,
/*targetFrameRate=*/null
)
val attachedPriv2 = AttachedSurfaceInfo.create(
@@ -2236,6 +2246,8 @@
ImageFormat.YUV_420_888,
RECORD_SIZE,
SDR,
+ listOf(CaptureType.IMAGE_ANALYSIS),
+ useCase.currentConfig,
/*targetFrameRate=*/null
)
@@ -2465,6 +2477,8 @@
ImageFormat.JPEG,
Size(1280, 720),
SDR,
+ listOf(CaptureType.PREVIEW),
+ useCase.currentConfig,
Range(40, 50)
)
getSuggestedSpecsAndVerify(
@@ -2492,6 +2506,8 @@
ImageFormat.JPEG,
Size(1280, 720),
SDR,
+ listOf(CaptureType.PREVIEW),
+ useCase.currentConfig,
Range(40, 50)
)
getSuggestedSpecsAndVerify(
@@ -2519,6 +2535,8 @@
ImageFormat.JPEG,
Size(1280, 720),
SDR,
+ listOf(CaptureType.PREVIEW),
+ useCase.currentConfig,
Range(40, 50)
)
getSuggestedSpecsAndVerify(
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/FakeOtherUseCaseConfig.java b/camera/camera-core/src/androidTest/java/androidx/camera/core/FakeOtherUseCaseConfig.java
index 722a214..0369ec0 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/FakeOtherUseCaseConfig.java
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/FakeOtherUseCaseConfig.java
@@ -27,6 +27,7 @@
import androidx.camera.core.impl.OptionsBundle;
import androidx.camera.core.impl.SessionConfig;
import androidx.camera.core.impl.UseCaseConfig;
+import androidx.camera.core.impl.UseCaseConfigFactory;
import java.util.UUID;
@@ -56,6 +57,12 @@
return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY);
}
+ @NonNull
+ @Override
+ public UseCaseConfigFactory.CaptureType getCaptureType() {
+ return UseCaseConfigFactory.CaptureType.PREVIEW;
+ }
+
@Override
public int getInputFormat() {
return ImageFormatConstants.INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE;
@@ -190,5 +197,12 @@
getMutableConfig().insertOption(OPTION_HIGH_RESOLUTION_DISABLED, disabled);
return this;
}
+
+ @NonNull
+ @Override
+ public Builder setCaptureType(@NonNull UseCaseConfigFactory.CaptureType captureType) {
+ getMutableConfig().insertOption(OPTION_CAPTURE_TYPE, captureType);
+ return this;
+ }
}
}
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/ImageCaptureTest.java b/camera/camera-core/src/androidTest/java/androidx/camera/core/ImageCaptureTest.java
index 32462ac..d39f3e1 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/ImageCaptureTest.java
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/ImageCaptureTest.java
@@ -33,6 +33,7 @@
import android.graphics.ImageFormat;
import android.graphics.Matrix;
import android.graphics.Rect;
+import android.os.Build;
import android.provider.MediaStore;
import android.util.Rational;
import android.util.Size;
@@ -100,6 +101,9 @@
@Before
public void setup() {
+ assumeFalse("See b/152082918, Wembley Api30 has a libjpeg issue which causes"
+ + " the test failure.",
+ Build.MODEL.equalsIgnoreCase("wembley") && Build.VERSION.SDK_INT <= 30);
FakeCamera fakeCamera = new FakeCamera("fakeCameraId");
FakeCameraDeviceSurfaceManager fakeCameraDeviceSurfaceManager =
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/DefaultSurfaceProcessorTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/DefaultSurfaceProcessorTest.kt
index 51b1536..daa23c4 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/DefaultSurfaceProcessorTest.kt
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/DefaultSurfaceProcessorTest.kt
@@ -21,10 +21,8 @@
import android.graphics.Rect
import android.graphics.SurfaceTexture
import android.hardware.camera2.CameraDevice.TEMPLATE_PREVIEW
-import android.os.Build
import android.util.Size
import android.view.Surface
-import androidx.annotation.RequiresApi
import androidx.camera.core.CameraEffect
import androidx.camera.core.ImageProxy
import androidx.camera.core.ImageReaderProxys
@@ -138,7 +136,6 @@
}
}
- @RequiresApi(Build.VERSION_CODES.M)
@Test
fun snapshotAndRelease_futureReceivesException(): Unit = runBlocking {
// Arrange: create DefaultSurfaceProcessor and setup input/output Surface.
@@ -160,7 +157,7 @@
}
}
- @RequiresApi(Build.VERSION_CODES.M)
+ @SdkSuppress(minSdkVersion = 23)
@Test
fun snapshot_JpegWrittenToSurface(): Unit = runBlocking {
// Arrange: create DefaultSurfaceProcessor and setup input/output Surface.
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageAnalysis.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageAnalysis.java
index c3c0d6e..b7268b0 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageAnalysis.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageAnalysis.java
@@ -32,6 +32,7 @@
import static androidx.camera.core.impl.ImageOutputConfig.OPTION_TARGET_ROTATION;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAMERA_SELECTOR;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAPTURE_CONFIG_UNPACKER;
+import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAPTURE_TYPE;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_DEFAULT_CAPTURE_CONFIG;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_DEFAULT_SESSION_CONFIG;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_HIGH_RESOLUTION_DISABLED;
@@ -771,7 +772,7 @@
public UseCaseConfig<?> getDefaultConfig(boolean applyDefaultConfig,
@NonNull UseCaseConfigFactory factory) {
Config captureConfig = factory.getConfig(
- UseCaseConfigFactory.CaptureType.IMAGE_ANALYSIS,
+ DEFAULT_CONFIG.getConfig().getCaptureType(),
ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY);
if (applyDefaultConfig) {
@@ -1022,7 +1023,8 @@
.setDefaultResolution(DEFAULT_TARGET_RESOLUTION)
.setSurfaceOccupancyPriority(DEFAULT_SURFACE_OCCUPANCY_PRIORITY)
.setTargetAspectRatio(DEFAULT_ASPECT_RATIO)
- .setResolutionSelector(DEFAULT_RESOLUTION_SELECTOR);
+ .setResolutionSelector(DEFAULT_RESOLUTION_SELECTOR)
+ .setCaptureType(UseCaseConfigFactory.CaptureType.IMAGE_ANALYSIS);
DEFAULT_CONFIG = builder.getUseCaseConfig();
}
@@ -1600,5 +1602,13 @@
getMutableConfig().insertOption(OPTION_HIGH_RESOLUTION_DISABLED, disabled);
return this;
}
+
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ @Override
+ public Builder setCaptureType(@NonNull UseCaseConfigFactory.CaptureType captureType) {
+ getMutableConfig().insertOption(OPTION_CAPTURE_TYPE, captureType);
+ return this;
+ }
}
}
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 4eb88f5..b547104 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
@@ -42,6 +42,7 @@
import static androidx.camera.core.impl.ImageOutputConfig.OPTION_CUSTOM_ORDERED_RESOLUTIONS;
import static androidx.camera.core.impl.ImageOutputConfig.OPTION_RESOLUTION_SELECTOR;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAMERA_SELECTOR;
+import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAPTURE_TYPE;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_HIGH_RESOLUTION_DISABLED;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_ZSL_DISABLED;
import static androidx.camera.core.impl.utils.Threads.checkMainThread;
@@ -513,7 +514,7 @@
public UseCaseConfig<?> getDefaultConfig(boolean applyDefaultConfig,
@NonNull UseCaseConfigFactory factory) {
Config captureConfig = factory.getConfig(
- UseCaseConfigFactory.CaptureType.IMAGE_CAPTURE,
+ DEFAULT_CONFIG.getConfig().getCaptureType(),
getCaptureMode());
if (applyDefaultConfig) {
@@ -2024,7 +2025,8 @@
Builder builder = new Builder()
.setSurfaceOccupancyPriority(DEFAULT_SURFACE_OCCUPANCY_PRIORITY)
.setTargetAspectRatio(DEFAULT_ASPECT_RATIO)
- .setResolutionSelector(DEFAULT_RESOLUTION_SELECTOR);
+ .setResolutionSelector(DEFAULT_RESOLUTION_SELECTOR)
+ .setCaptureType(UseCaseConfigFactory.CaptureType.IMAGE_CAPTURE);
DEFAULT_CONFIG = builder.getUseCaseConfig();
}
@@ -3077,5 +3079,16 @@
getMutableConfig().insertOption(OPTION_HIGH_RESOLUTION_DISABLED, disabled);
return this;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ @Override
+ public Builder setCaptureType(@NonNull UseCaseConfigFactory.CaptureType captureType) {
+ getMutableConfig().insertOption(OPTION_CAPTURE_TYPE, captureType);
+ return this;
+ }
}
}
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 02d7366..153f731 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
@@ -39,6 +39,7 @@
import static androidx.camera.core.impl.PreviewConfig.OPTION_TARGET_ROTATION;
import static androidx.camera.core.impl.PreviewConfig.OPTION_USE_CASE_EVENT_CALLBACK;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAMERA_SELECTOR;
+import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAPTURE_TYPE;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_HIGH_RESOLUTION_DISABLED;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_TARGET_FRAME_RATE;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_ZSL_DISABLED;
@@ -582,7 +583,7 @@
public UseCaseConfig<?> getDefaultConfig(boolean applyDefaultConfig,
@NonNull UseCaseConfigFactory factory) {
Config captureConfig = factory.getConfig(
- UseCaseConfigFactory.CaptureType.PREVIEW,
+ DEFAULT_CONFIG.getConfig().getCaptureType(),
ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY);
if (applyDefaultConfig) {
@@ -780,7 +781,8 @@
Builder builder = new Builder()
.setSurfaceOccupancyPriority(DEFAULT_SURFACE_OCCUPANCY_PRIORITY)
.setTargetAspectRatio(DEFAULT_ASPECT_RATIO)
- .setResolutionSelector(DEFAULT_RESOLUTION_SELECTOR);
+ .setResolutionSelector(DEFAULT_RESOLUTION_SELECTOR)
+ .setCaptureType(UseCaseConfigFactory.CaptureType.PREVIEW);
DEFAULT_CONFIG = builder.getUseCaseConfig();
}
@@ -1245,5 +1247,13 @@
getMutableConfig().insertOption(OPTION_HIGH_RESOLUTION_DISABLED, disabled);
return this;
}
+
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ @Override
+ public Builder setCaptureType(@NonNull UseCaseConfigFactory.CaptureType captureType) {
+ getMutableConfig().insertOption(OPTION_CAPTURE_TYPE, captureType);
+ return this;
+ }
}
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/AttachedSurfaceInfo.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/AttachedSurfaceInfo.java
index cdde2a1..8fe27de 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/AttachedSurfaceInfo.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/AttachedSurfaceInfo.java
@@ -25,6 +25,9 @@
import androidx.camera.core.DynamicRange;
import com.google.auto.value.AutoValue;
+
+import java.util.List;
+
/**
* Container object for holding {@link SurfaceConfig} and its attributed ImageFormat,
* {@link Size}, and target Frame Rate {@link Range}
@@ -45,9 +48,11 @@
int imageFormat,
@NonNull Size size,
@NonNull DynamicRange dynamicRange,
+ @NonNull List<UseCaseConfigFactory.CaptureType> captureTypes,
+ @Nullable Config implementationOptions,
@Nullable Range<Integer> targetFrameRate) {
return new AutoValue_AttachedSurfaceInfo(surfaceConfig, imageFormat, size,
- dynamicRange, targetFrameRate);
+ dynamicRange, captureTypes, implementationOptions, targetFrameRate);
}
/** Returns the SurfaceConfig. */
@@ -65,6 +70,16 @@
@NonNull
public abstract DynamicRange getDynamicRange();
+ /** Returns the capture types of this surface. Multiple capture types represent a
+ * {@link androidx.camera.core.streamsharing.StreamSharing} and its children.*/
+ @SuppressWarnings("AutoValueImmutableFields")
+ @NonNull
+ public abstract List<UseCaseConfigFactory.CaptureType> getCaptureTypes();
+
+ /** Returns the implementations of this surface. */
+ @Nullable
+ public abstract Config getImplementationOptions();
+
/** Returns the configuration target frame rate. */
@Nullable
public abstract Range<Integer> getTargetFrameRate();
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/UseCaseConfig.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/UseCaseConfig.java
index 43d3f9e..7e13965 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/UseCaseConfig.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/UseCaseConfig.java
@@ -94,6 +94,12 @@
Option<Boolean> OPTION_HIGH_RESOLUTION_DISABLED =
Option.create("camerax.core.useCase.highResolutionDisabled", boolean.class);
+ /**
+ * Option: camerax.core.useCase.highResolutionDisabled
+ */
+ Option<UseCaseConfigFactory.CaptureType> OPTION_CAPTURE_TYPE = Option.create(
+ "camerax.core.useCase.captureType", UseCaseConfigFactory.CaptureType.class);
+
// *********************************************************************************************
@@ -314,6 +320,14 @@
}
/**
+ * @return The {@link UseCaseConfigFactory.CaptureType} of this UseCaseConfig.
+ */
+ @NonNull
+ default UseCaseConfigFactory.CaptureType getCaptureType() {
+ return retrieveOption(OPTION_CAPTURE_TYPE);
+ }
+
+ /**
* Builder for a {@link UseCase}.
*
* @param <T> The type of the object which will be built by {@link #build()}.
@@ -420,6 +434,14 @@
B setHighResolutionDisabled(boolean disabled);
/**
+ * Sets the capture type for this configuration.
+ *
+ * @param captureType The capture type for this use case.
+ */
+ @NonNull
+ B setCaptureType(@NonNull UseCaseConfigFactory.CaptureType captureType);
+
+ /**
* Retrieves the configuration used by this builder.
*
* @return the configuration used by this builder.
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/UseCaseConfigFactory.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/UseCaseConfigFactory.java
index 209a9aa..480eb29 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/UseCaseConfigFactory.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/UseCaseConfigFactory.java
@@ -50,7 +50,12 @@
/**
* Capture type for video capture. A use case of this type is consuming a stream of frames.
*/
- VIDEO_CAPTURE
+ VIDEO_CAPTURE,
+
+ /**
+ * Capture type for stream sharing. A use case of this type is consuming a stream of frames.
+ */
+ STREAM_SHARING
}
/**
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 4e74b5e..2350fbc 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
@@ -609,6 +609,8 @@
existingSurfaces.add(AttachedSurfaceInfo.create(surfaceConfig,
useCase.getImageFormat(), useCase.getAttachedSurfaceResolution(),
Preconditions.checkNotNull(useCase.getAttachedStreamSpec()).getDynamicRange(),
+ getCaptureTypes(useCase),
+ useCase.getAttachedStreamSpec().getImplementationOptions(),
useCase.getCurrentConfig().getTargetFrameRate(null)));
suggestedStreamSpecs.put(useCase, useCase.getAttachedStreamSpec());
}
@@ -672,6 +674,19 @@
}
}
+ @NonNull
+ private static List<UseCaseConfigFactory.CaptureType> getCaptureTypes(UseCase useCase) {
+ List<UseCaseConfigFactory.CaptureType> result = new ArrayList<>();
+ if (isStreamSharing(useCase)) {
+ for (UseCase child : ((StreamSharing) useCase).getChildren()) {
+ result.add(child.getCurrentConfig().getCaptureType());
+ }
+ } else {
+ result.add(useCase.getCurrentConfig().getCaptureType());
+ }
+ return result;
+ }
+
/**
* Sets effects on the given {@link UseCase} list and returns unused effects.
*/
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 630d3cf..93cd629 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
@@ -20,6 +20,7 @@
import static androidx.camera.core.CameraEffect.VIDEO_CAPTURE;
import static androidx.camera.core.impl.ImageFormatConstants.INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE;
import static androidx.camera.core.impl.ImageInputConfig.OPTION_INPUT_FORMAT;
+import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAPTURE_TYPE;
import static androidx.camera.core.impl.utils.Threads.checkMainThread;
import static androidx.core.util.Preconditions.checkNotNull;
@@ -67,7 +68,6 @@
*/
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class StreamSharing extends UseCase {
-
@NonNull
private static final StreamSharingConfig DEFAULT_CONFIG;
@@ -90,6 +90,8 @@
MutableConfig mutableConfig = new StreamSharingBuilder().getMutableConfig();
mutableConfig.insertOption(OPTION_INPUT_FORMAT,
ImageFormatConstants.INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE);
+ mutableConfig.insertOption(OPTION_CAPTURE_TYPE,
+ UseCaseConfigFactory.CaptureType.STREAM_SHARING);
DEFAULT_CONFIG = new StreamSharingConfig(OptionsBundle.from(mutableConfig));
}
@@ -121,7 +123,7 @@
@NonNull UseCaseConfigFactory factory) {
// The shared stream optimizes for VideoCapture.
Config captureConfig = factory.getConfig(
- UseCaseConfigFactory.CaptureType.VIDEO_CAPTURE,
+ DEFAULT_CONFIG.getCaptureType(),
ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY);
if (applyDefaultConfig) {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharingBuilder.java b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharingBuilder.java
index 0ae8daa..d701527 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharingBuilder.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/StreamSharingBuilder.java
@@ -16,6 +16,7 @@
package androidx.camera.core.streamsharing;
+import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAPTURE_TYPE;
import static androidx.camera.core.internal.TargetConfig.OPTION_TARGET_CLASS;
import static androidx.camera.core.internal.TargetConfig.OPTION_TARGET_NAME;
@@ -23,6 +24,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.UseCase;
import androidx.camera.core.impl.CaptureConfig;
@@ -31,6 +33,7 @@
import androidx.camera.core.impl.OptionsBundle;
import androidx.camera.core.impl.SessionConfig;
import androidx.camera.core.impl.UseCaseConfig;
+import androidx.camera.core.impl.UseCaseConfigFactory;
import androidx.camera.core.internal.TargetConfig;
import java.util.UUID;
@@ -162,4 +165,13 @@
@NonNull UseCase.EventCallback eventCallback) {
throw new UnsupportedOperationException(UNSUPPORTED_MESSAGE);
}
+
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ @NonNull
+ @Override
+ public StreamSharingBuilder setCaptureType(
+ @NonNull UseCaseConfigFactory.CaptureType captureType) {
+ getMutableConfig().insertOption(OPTION_CAPTURE_TYPE, captureType);
+ return this;
+ }
}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/impl/AttachedSurfaceInfoTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/impl/AttachedSurfaceInfoTest.kt
index eab2744..8a3d600 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/impl/AttachedSurfaceInfoTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/impl/AttachedSurfaceInfoTest.kt
@@ -20,6 +20,8 @@
import android.util.Range
import android.util.Size
import androidx.camera.core.DynamicRange
+import androidx.camera.core.impl.UseCaseConfigFactory.CaptureType
+import androidx.camera.testing.fakes.FakeUseCaseConfig
import com.google.common.truth.Truth
import org.junit.Before
import org.junit.Test
@@ -40,11 +42,23 @@
private val imageFormat = ImageFormat.JPEG
private val size = Size(1920, 1080)
private val dynamicRange = DynamicRange.SDR
+ private val captureTypes = listOf(CaptureType.PREVIEW)
+ private val inputFormat = ImageFormat.PRIVATE
private val targetFramerate = Range(10, 20)
+ private val config = FakeUseCaseConfig.Builder(
+ CaptureType.PREVIEW,
+ inputFormat
+ ).useCaseConfig.config
+
@Before
fun setup() {
attachedSurfaceInfo = AttachedSurfaceInfo.create(
- surfaceConfig, imageFormat, size, dynamicRange,
+ surfaceConfig,
+ imageFormat,
+ size,
+ dynamicRange,
+ captureTypes,
+ config,
targetFramerate
)
}
@@ -74,6 +88,28 @@
}
@Test
+ fun canGetCaptureTypes() {
+ Truth.assertThat(attachedSurfaceInfo!!.captureTypes.size).isEqualTo(captureTypes.size)
+ for ((index, value) in captureTypes.withIndex()) {
+ Truth.assertThat(attachedSurfaceInfo!!.captureTypes[index]).isEqualTo(value)
+ }
+ }
+
+ @Test
+ fun canGetImplementationOption() {
+ Truth.assertThat(
+ attachedSurfaceInfo!!.implementationOptions!!
+ .containsOption(ImageInputConfig.OPTION_INPUT_FORMAT)
+ )
+ .isTrue()
+ Truth.assertThat(
+ attachedSurfaceInfo!!.implementationOptions!!
+ .retrieveOption(ImageInputConfig.OPTION_INPUT_FORMAT)
+ )
+ .isEqualTo(inputFormat)
+ }
+
+ @Test
fun canGetTargetFrameRate() {
Truth.assertThat(attachedSurfaceInfo!!.targetFrameRate).isEqualTo(targetFramerate)
}
@@ -85,6 +121,8 @@
imageFormat,
size,
dynamicRange,
+ listOf(CaptureType.PREVIEW),
+ config,
null
)
Truth.assertThat(attachedSurfaceInfo2.targetFrameRate).isNull()
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/StreamSharingTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/StreamSharingTest.kt
index 0ba6e394..969f695 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/StreamSharingTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/StreamSharingTest.kt
@@ -301,7 +301,7 @@
val config = streamSharing.getDefaultConfig(true, useCaseConfigFactory)!!
assertThat(useCaseConfigFactory.lastRequestedCaptureType)
- .isEqualTo(UseCaseConfigFactory.CaptureType.VIDEO_CAPTURE)
+ .isEqualTo(UseCaseConfigFactory.CaptureType.STREAM_SHARING)
assertThat(
config.retrieveOption(
OPTION_TARGET_CLASS,
diff --git a/camera/camera-testing/build.gradle b/camera/camera-testing/build.gradle
index b0774f2..177e3db 100644
--- a/camera/camera-testing/build.gradle
+++ b/camera/camera-testing/build.gradle
@@ -14,9 +14,8 @@
* limitations under the License.
*/
-
-import androidx.build.LibraryType
import androidx.build.Publish
+import androidx.build.RunApiTasks
plugins {
id("AndroidXPlugin")
@@ -93,8 +92,8 @@
androidx {
name = "Jetpack Camera Testing Library"
- type = LibraryType.INTERNAL_TEST_LIBRARY
- publish = Publish.SNAPSHOT_ONLY
+ publish = Publish.SNAPSHOT_AND_RELEASE
+ runApiTasks = new RunApiTasks.No("Internal testing library without any release plan yet.")
inceptionYear = "2019"
description = "Testing components for the Jetpack Camera Library, a library providing a " +
"consistent and reliable camera foundation that enables great camera driven " +"" +
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCase.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCase.java
index 6b5abe0..2e1ec2f 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCase.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCase.java
@@ -85,6 +85,7 @@
@Override
public UseCaseConfig.Builder<?, ?, ?> getUseCaseConfigBuilder(@NonNull Config config) {
return new FakeUseCaseConfig.Builder(config)
+ .setCaptureType(mCaptureType)
.setSessionOptionUnpacker((resolution, useCaseConfig, sessionConfigBuilder) -> {
});
}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCaseConfig.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCaseConfig.java
index 88ae896..12a104a 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCaseConfig.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCaseConfig.java
@@ -274,5 +274,12 @@
getMutableConfig().insertOption(OPTION_HIGH_RESOLUTION_DISABLED, disabled);
return this;
}
+
+ @NonNull
+ @Override
+ public Builder setCaptureType(@NonNull CaptureType captureType) {
+ getMutableConfig().insertOption(OPTION_CAPTURE_TYPE, captureType);
+ return this;
+ }
}
}
diff --git a/camera/camera-testing/src/test/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManagerTest.java b/camera/camera-testing/src/test/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManagerTest.java
index aafc3572..b5ba2a4 100644
--- a/camera/camera-testing/src/test/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManagerTest.java
+++ b/camera/camera-testing/src/test/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManagerTest.java
@@ -38,6 +38,7 @@
import androidx.camera.core.impl.StreamSpec;
import androidx.camera.core.impl.SurfaceConfig;
import androidx.camera.core.impl.UseCaseConfig;
+import androidx.camera.core.impl.UseCaseConfigFactory;
import org.junit.Before;
import org.junit.Test;
@@ -105,6 +106,8 @@
YUV_420_888,
new Size(1, 1),
DynamicRange.SDR,
+ singletonList(UseCaseConfigFactory.CaptureType.IMAGE_ANALYSIS),
+ preview,
new Range<>(30, 30));
mFakeCameraDeviceSurfaceManager.getSuggestedStreamSpecs(
CameraMode.DEFAULT,
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java b/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
index 0c30441..ef2fd4c 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
@@ -16,11 +16,12 @@
package androidx.camera.video;
+import static androidx.camera.core.DynamicRange.BIT_DEPTH_UNSPECIFIED;
+import static androidx.camera.core.DynamicRange.FORMAT_HDR_UNSPECIFIED;
import static androidx.camera.core.DynamicRange.FORMAT_HLG;
-import static androidx.camera.core.DynamicRange.HDR_UNSPECIFIED_10_BIT;
-import static androidx.camera.core.DynamicRange.SDR;
+import static androidx.camera.core.DynamicRange.FORMAT_SDR;
+import static androidx.camera.core.DynamicRange.FORMAT_UNSPECIFIED;
import static androidx.camera.video.internal.BackupHdrProfileEncoderProfilesProvider.DEFAULT_VALIDATOR;
-import static androidx.camera.video.internal.utils.DynamicRangeUtil.VP_TO_DR_FORMAT_MAP;
import android.util.Size;
@@ -51,7 +52,6 @@
import java.util.ArrayList;
import java.util.Deque;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -74,7 +74,17 @@
private static final String TAG = "RecorderVideoCapabilities";
- private final Map<DynamicRange, CapabilitiesByQuality> mCapabilitiesMap = new HashMap<>();
+ private final EncoderProfilesProvider mProfilesProvider;
+
+ // Mappings of DynamicRange to recording capability information. The mappings are divided
+ // into two collections based on the key's (DynamicRange) category, one for specified
+ // DynamicRange and one for others. Specified DynamicRange means that its bit depth and
+ // format are specified values, not some wildcards, such as: FORMAT_UNSPECIFIED,
+ // FORMAT_HDR_UNSPECIFIED or BIT_DEPTH_UNSPECIFIED.
+ private final Map<DynamicRange, CapabilitiesByQuality>
+ mCapabilitiesMapForFullySpecifiedDynamicRange = new HashMap<>();
+ private final Map<DynamicRange, CapabilitiesByQuality>
+ mCapabilitiesMapForNonFullySpecifiedDynamicRange = new HashMap<>();
/**
* Creates a RecorderVideoCapabilities.
@@ -106,23 +116,18 @@
Quirks deviceQuirks = DeviceQuirks.getAll();
encoderProfilesProvider = new QualityValidatedEncoderProfilesProvider(
encoderProfilesProvider, cameraInfoInternal, deviceQuirks);
+ mProfilesProvider = encoderProfilesProvider;
// Group by dynamic range.
- for (DynamicRange dynamicRange : getCandidateDynamicRanges(encoderProfilesProvider)) {
- if (!isDynamicRangeSupported(dynamicRange, cameraInfoInternal)) {
- continue;
- }
-
+ for (DynamicRange dynamicRange : cameraInfoInternal.getSupportedDynamicRanges()) {
// Filter video profiles to include only the profiles match with the target dynamic
// range.
EncoderProfilesProvider constrainedProvider =
- new DynamicRangeMatchedEncoderProfilesProvider(encoderProfilesProvider,
- dynamicRange);
- CapabilitiesByQuality capabilitiesByQuality =
- new CapabilitiesByQuality(constrainedProvider);
+ new DynamicRangeMatchedEncoderProfilesProvider(mProfilesProvider, dynamicRange);
+ CapabilitiesByQuality capabilities = new CapabilitiesByQuality(constrainedProvider);
- if (!capabilitiesByQuality.getSupportedQualities().isEmpty()) {
- mCapabilitiesMap.put(dynamicRange, capabilitiesByQuality);
+ if (!capabilities.getSupportedQualities().isEmpty()) {
+ mCapabilitiesMapForFullySpecifiedDynamicRange.put(dynamicRange, capabilities);
}
}
}
@@ -144,25 +149,20 @@
@NonNull
@Override
public Set<DynamicRange> getSupportedDynamicRanges() {
- Set<DynamicRange> dynamicRanges = mCapabilitiesMap.keySet();
-
- // Remove HDR_UNSPECIFIED_10_BIT from output, since it does not have explicit content.
- dynamicRanges.remove(HDR_UNSPECIFIED_10_BIT);
-
- return dynamicRanges;
+ return mCapabilitiesMapForFullySpecifiedDynamicRange.keySet();
}
@NonNull
@Override
public List<Quality> getSupportedQualities(@NonNull DynamicRange dynamicRange) {
- CapabilitiesByQuality capabilities = mCapabilitiesMap.get(dynamicRange);
+ CapabilitiesByQuality capabilities = getCapabilities(dynamicRange);
return capabilities == null ? new ArrayList<>() : capabilities.getSupportedQualities();
}
@Override
public boolean isQualitySupported(@NonNull Quality quality,
@NonNull DynamicRange dynamicRange) {
- CapabilitiesByQuality capabilities = mCapabilitiesMap.get(dynamicRange);
+ CapabilitiesByQuality capabilities = getCapabilities(dynamicRange);
return capabilities != null && capabilities.isQualitySupported(quality);
}
@@ -170,7 +170,7 @@
@Override
public VideoValidatedEncoderProfilesProxy getProfiles(@NonNull Quality quality,
@NonNull DynamicRange dynamicRange) {
- CapabilitiesByQuality capabilities = mCapabilitiesMap.get(dynamicRange);
+ CapabilitiesByQuality capabilities = getCapabilities(dynamicRange);
return capabilities == null ? null : capabilities.getProfiles(quality);
}
@@ -178,7 +178,7 @@
@Override
public VideoValidatedEncoderProfilesProxy findHighestSupportedEncoderProfilesFor(
@NonNull Size size, @NonNull DynamicRange dynamicRange) {
- CapabilitiesByQuality capabilities = mCapabilitiesMap.get(dynamicRange);
+ CapabilitiesByQuality capabilities = getCapabilities(dynamicRange);
return capabilities == null ? null : capabilities.findHighestSupportedEncoderProfilesFor(
size);
}
@@ -187,57 +187,28 @@
@Override
public Quality findHighestSupportedQualityFor(@NonNull Size size,
@NonNull DynamicRange dynamicRange) {
- CapabilitiesByQuality capabilities = mCapabilitiesMap.get(dynamicRange);
+ CapabilitiesByQuality capabilities = getCapabilities(dynamicRange);
return capabilities == null ? Quality.NONE : capabilities.findHighestSupportedQualityFor(
size);
}
- @NonNull
- private static Set<DynamicRange> getCandidateDynamicRanges(
- @NonNull EncoderProfilesProvider provider) {
- Set<DynamicRange> dynamicRanges = new HashSet<>();
- for (Quality quality : Quality.getSortedQualities()) {
- int qualityValue = ((Quality.ConstantQuality) quality).getValue();
- EncoderProfilesProxy encoderProfiles = provider.getAll(qualityValue);
-
- if (encoderProfiles != null) {
- for (VideoProfileProxy videoProfile : encoderProfiles.getVideoProfiles()) {
- Integer format = VP_TO_DR_FORMAT_MAP.get(videoProfile.getHdrFormat());
- if (format != null) {
- dynamicRanges.add(new DynamicRange(format, videoProfile.getBitDepth()));
- }
- }
- }
+ @Nullable
+ private CapabilitiesByQuality getCapabilities(@NonNull DynamicRange dynamicRange) {
+ if (isFullySpecified(dynamicRange)) {
+ return mCapabilitiesMapForFullySpecifiedDynamicRange.get(dynamicRange);
}
- dynamicRanges.add(SDR);
- dynamicRanges.add(HDR_UNSPECIFIED_10_BIT);
-
- return dynamicRanges;
- }
-
- private static boolean isDynamicRangeSupported(@NonNull DynamicRange dynamicRange,
- @NonNull CameraInfoInternal cameraInfoInternal) {
- Set<DynamicRange> supportedDynamicRanges = cameraInfoInternal.getSupportedDynamicRanges();
- if (supportedDynamicRanges.contains(dynamicRange)) {
- return true;
+ // Handle dynamic range that is not fully specified.
+ if (mCapabilitiesMapForNonFullySpecifiedDynamicRange.containsKey(dynamicRange)) {
+ return mCapabilitiesMapForNonFullySpecifiedDynamicRange.get(dynamicRange);
} else {
- return dynamicRange.equals(HDR_UNSPECIFIED_10_BIT) && contains10BitHdrDynamicRange(
- supportedDynamicRanges);
+ CapabilitiesByQuality capabilities =
+ generateCapabilitiesForNonFullySpecifiedDynamicRange(dynamicRange);
+ mCapabilitiesMapForNonFullySpecifiedDynamicRange.put(dynamicRange, capabilities);
+ return capabilities;
}
}
- private static boolean contains10BitHdrDynamicRange(@NonNull Set<DynamicRange> dynamicRanges) {
- for (DynamicRange dynamicRange : dynamicRanges) {
- if (dynamicRange.getFormat() != DynamicRange.FORMAT_SDR
- && dynamicRange.getBitDepth() == DynamicRange.BIT_DEPTH_10_BIT) {
- return true;
- }
- }
-
- return false;
- }
-
private static boolean isHlg10SupportedByCamera(
@NonNull CameraInfoInternal cameraInfoInternal) {
Set<DynamicRange> dynamicRanges = cameraInfoInternal.getSupportedDynamicRanges();
@@ -252,6 +223,78 @@
return false;
}
+ @Nullable
+ private CapabilitiesByQuality generateCapabilitiesForNonFullySpecifiedDynamicRange(
+ @NonNull DynamicRange dynamicRange) {
+ if (!canResolve(dynamicRange, getSupportedDynamicRanges())) {
+ return null;
+ }
+
+ // Filter video profiles to include only the profiles match with the target dynamic
+ // range.
+ EncoderProfilesProvider constrainedProvider =
+ new DynamicRangeMatchedEncoderProfilesProvider(mProfilesProvider, dynamicRange);
+ return new CapabilitiesByQuality(constrainedProvider);
+ }
+
+ /**
+ * Returns {@code true} if the test dynamic range can resolve to the fully specified dynamic
+ * range set.
+ *
+ * <p>A range can resolve if test fields are unspecified and appropriately match the fields
+ * of the fully specified dynamic range, or the test fields exactly match the fields of
+ * the fully specified dynamic range.
+ */
+ private static boolean canResolve(@NonNull DynamicRange dynamicRangeToTest,
+ @NonNull Set<DynamicRange> fullySpecifiedDynamicRanges) {
+ if (isFullySpecified(dynamicRangeToTest)) {
+ return fullySpecifiedDynamicRanges.contains(dynamicRangeToTest);
+ } else {
+ for (DynamicRange fullySpecifiedDynamicRange : fullySpecifiedDynamicRanges) {
+ if (canMatchBitDepth(dynamicRangeToTest, fullySpecifiedDynamicRange)
+ && canMatchFormat(dynamicRangeToTest, fullySpecifiedDynamicRange)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+
+ private static boolean canMatchBitDepth(@NonNull DynamicRange dynamicRangeToTest,
+ @NonNull DynamicRange fullySpecifiedDynamicRange) {
+ Preconditions.checkState(isFullySpecified(fullySpecifiedDynamicRange), "Fully specified "
+ + "range is not actually fully specified.");
+ if (dynamicRangeToTest.getBitDepth() == BIT_DEPTH_UNSPECIFIED) {
+ return true;
+ }
+
+ return dynamicRangeToTest.getBitDepth() == fullySpecifiedDynamicRange.getBitDepth();
+ }
+
+ private static boolean canMatchFormat(@NonNull DynamicRange dynamicRangeToTest,
+ @NonNull DynamicRange fullySpecifiedDynamicRange) {
+ Preconditions.checkState(isFullySpecified(fullySpecifiedDynamicRange), "Fully specified "
+ + "range is not actually fully specified.");
+ int formatToTest = dynamicRangeToTest.getFormat();
+ if (formatToTest == FORMAT_UNSPECIFIED) {
+ return true;
+ }
+
+ int fullySpecifiedFormat = fullySpecifiedDynamicRange.getFormat();
+ if (formatToTest == FORMAT_HDR_UNSPECIFIED && fullySpecifiedFormat != FORMAT_SDR) {
+ return true;
+ }
+
+ return formatToTest == fullySpecifiedFormat;
+ }
+
+ private static boolean isFullySpecified(@NonNull DynamicRange dynamicRange) {
+ return dynamicRange.getFormat() != FORMAT_UNSPECIFIED
+ && dynamicRange.getFormat() != FORMAT_HDR_UNSPECIFIED
+ && dynamicRange.getBitDepth() != BIT_DEPTH_UNSPECIFIED;
+ }
+
/**
* This class implements the video capabilities query logic related to quality and resolution.
*/
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 2ba09397e..8d75923 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
@@ -28,6 +28,7 @@
import static androidx.camera.core.impl.ImageOutputConfig.OPTION_TARGET_ROTATION;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAMERA_SELECTOR;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAPTURE_CONFIG_UNPACKER;
+import static androidx.camera.core.impl.UseCaseConfig.OPTION_CAPTURE_TYPE;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_DEFAULT_CAPTURE_CONFIG;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_DEFAULT_SESSION_CONFIG;
import static androidx.camera.core.impl.UseCaseConfig.OPTION_HIGH_RESOLUTION_DISABLED;
@@ -219,7 +220,8 @@
*/
@NonNull
public static <T extends VideoOutput> VideoCapture<T> withOutput(@NonNull T videoOutput) {
- return new VideoCapture.Builder<>(Preconditions.checkNotNull(videoOutput)).build();
+ return new VideoCapture.Builder<>(Preconditions.checkNotNull(videoOutput)).setCaptureType(
+ UseCaseConfigFactory.CaptureType.VIDEO_CAPTURE).build();
}
/**
@@ -522,7 +524,7 @@
public UseCaseConfig<?> getDefaultConfig(boolean applyDefaultConfig,
@NonNull UseCaseConfigFactory factory) {
Config captureConfig = factory.getConfig(
- UseCaseConfigFactory.CaptureType.VIDEO_CAPTURE,
+ DEFAULT_CONFIG.getConfig().getCaptureType(),
ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY);
if (applyDefaultConfig) {
@@ -805,7 +807,8 @@
Builder<?> builder = new Builder<>(DEFAULT_VIDEO_OUTPUT)
.setSurfaceOccupancyPriority(DEFAULT_SURFACE_OCCUPANCY_PRIORITY)
.setVideoEncoderInfoFinder(DEFAULT_VIDEO_ENCODER_INFO_FINDER)
- .setDynamicRange(DEFAULT_DYNAMIC_RANGE);
+ .setDynamicRange(DEFAULT_DYNAMIC_RANGE)
+ .setCaptureType(UseCaseConfigFactory.CaptureType.VIDEO_CAPTURE);
DEFAULT_CONFIG = builder.getUseCaseConfig();
}
@@ -1772,5 +1775,13 @@
getMutableConfig().insertOption(OPTION_TARGET_FRAME_RATE, targetFrameRate);
return this;
}
+
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ @Override
+ public Builder<T> setCaptureType(@NonNull UseCaseConfigFactory.CaptureType captureType) {
+ getMutableConfig().insertOption(OPTION_CAPTURE_TYPE, captureType);
+ return this;
+ }
}
}
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java
index 8057fdf..e079aba 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java
@@ -31,6 +31,7 @@
import static androidx.camera.core.DynamicRange.FORMAT_HDR_UNSPECIFIED;
import static androidx.camera.core.DynamicRange.FORMAT_HLG;
import static androidx.camera.core.DynamicRange.FORMAT_SDR;
+import static androidx.camera.core.DynamicRange.FORMAT_UNSPECIFIED;
import static androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy.BIT_DEPTH_10;
import static androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy.BIT_DEPTH_8;
@@ -65,6 +66,8 @@
new HashSet<>(asList(BIT_DEPTH_8, BIT_DEPTH_10)));
// DynamicRange format to VideoProfile HDR format.
+ DR_TO_VP_FORMAT_MAP.put(FORMAT_UNSPECIFIED, new HashSet<>(asList(HDR_NONE, HDR_HLG,
+ HDR_HDR10, HDR_HDR10PLUS, HDR_DOLBY_VISION)));
DR_TO_VP_FORMAT_MAP.put(FORMAT_SDR, new HashSet<>(singletonList(HDR_NONE)));
DR_TO_VP_FORMAT_MAP.put(FORMAT_HDR_UNSPECIFIED,
new HashSet<>(asList(HDR_HLG, HDR_HDR10, HDR_HDR10PLUS, HDR_DOLBY_VISION)));
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/RecorderVideoCapabilitiesTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/RecorderVideoCapabilitiesTest.kt
index fb598f9..f917aca 100644
--- a/camera/camera-video/src/test/java/androidx/camera/video/RecorderVideoCapabilitiesTest.kt
+++ b/camera/camera-video/src/test/java/androidx/camera/video/RecorderVideoCapabilitiesTest.kt
@@ -21,9 +21,16 @@
import android.util.Size
import androidx.camera.core.DynamicRange
import androidx.camera.core.DynamicRange.BIT_DEPTH_10_BIT
+import androidx.camera.core.DynamicRange.BIT_DEPTH_8_BIT
+import androidx.camera.core.DynamicRange.BIT_DEPTH_UNSPECIFIED
+import androidx.camera.core.DynamicRange.FORMAT_DOLBY_VISION
+import androidx.camera.core.DynamicRange.FORMAT_HDR10
+import androidx.camera.core.DynamicRange.FORMAT_HDR_UNSPECIFIED
import androidx.camera.core.DynamicRange.FORMAT_HLG
+import androidx.camera.core.DynamicRange.FORMAT_UNSPECIFIED
import androidx.camera.core.DynamicRange.HDR_UNSPECIFIED_10_BIT
import androidx.camera.core.DynamicRange.SDR
+import androidx.camera.core.DynamicRange.UNSPECIFIED
import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy
import androidx.camera.testing.EncoderProfilesUtil.PROFILES_2160P
import androidx.camera.testing.EncoderProfilesUtil.PROFILES_720P
@@ -48,6 +55,11 @@
import org.robolectric.annotation.internal.DoNotInstrument
private val HLG10 = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
+private val HDR10 = DynamicRange(FORMAT_HDR10, BIT_DEPTH_10_BIT)
+private val UNSPECIFIED_8_BIT = DynamicRange(FORMAT_UNSPECIFIED, BIT_DEPTH_8_BIT)
+private val UNSPECIFIED_10_BIT = DynamicRange(FORMAT_UNSPECIFIED, BIT_DEPTH_10_BIT)
+private val HDR_UNSPECIFIED = DynamicRange(FORMAT_HDR_UNSPECIFIED, BIT_DEPTH_UNSPECIFIED)
+private val DOLBY_VISION_UNSPECIFIED = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_UNSPECIFIED)
@RunWith(RobolectricTestRunner::class)
@DoNotInstrument
@@ -80,6 +92,55 @@
}
@Test
+ fun hasSupportedQualities_sdr() {
+ assertThat(videoCapabilities.getSupportedQualities(SDR)).containsExactly(HD, UHD)
+ }
+
+ @Test
+ fun hasSupportedQualities_hlg10() {
+ assertThat(videoCapabilities.getSupportedQualities(HLG10)).containsExactly(HD, UHD)
+ }
+
+ @Test
+ fun hasSupportedQualities_hdr10() {
+ assertThat(videoCapabilities.getSupportedQualities(HDR10)).isEmpty()
+ }
+
+ @Test
+ fun hasSupportedQualities_unspecified() {
+ assertThat(videoCapabilities.getSupportedQualities(UNSPECIFIED)).containsExactly(HD, UHD)
+ }
+
+ @Test
+ fun hasSupportedQualities_hdrUnspecified() {
+ assertThat(videoCapabilities.getSupportedQualities(HDR_UNSPECIFIED))
+ .containsExactly(HD, UHD)
+ }
+
+ @Test
+ fun hasSupportedQualities_hdrUnspecified10Bit() {
+ assertThat(videoCapabilities.getSupportedQualities(HDR_UNSPECIFIED_10_BIT))
+ .containsExactly(HD, UHD)
+ }
+
+ @Test
+ fun hasSupportedQualities_unspecified8Bit() {
+ assertThat(videoCapabilities.getSupportedQualities(UNSPECIFIED_8_BIT))
+ .containsExactly(HD, UHD)
+ }
+
+ @Test
+ fun hasSupportedQualities_unspecified10Bit() {
+ assertThat(videoCapabilities.getSupportedQualities(UNSPECIFIED_10_BIT))
+ .containsExactly(HD, UHD)
+ }
+
+ @Test
+ fun hasSupportedQualities_dolbyVisionUnspecified() {
+ assertThat(videoCapabilities.getSupportedQualities(DOLBY_VISION_UNSPECIFIED)).isEmpty()
+ }
+
+ @Test
fun isQualitySupported_sdr() {
assertThat(videoCapabilities.isQualitySupported(HIGHEST, SDR)).isTrue()
assertThat(videoCapabilities.isQualitySupported(LOWEST, SDR)).isTrue()
@@ -90,6 +151,16 @@
}
@Test
+ fun isQualitySupported_unspecified() {
+ assertThat(videoCapabilities.isQualitySupported(HIGHEST, UNSPECIFIED)).isTrue()
+ assertThat(videoCapabilities.isQualitySupported(LOWEST, UNSPECIFIED)).isTrue()
+ assertThat(videoCapabilities.isQualitySupported(UHD, UNSPECIFIED)).isTrue()
+ assertThat(videoCapabilities.isQualitySupported(FHD, UNSPECIFIED)).isFalse()
+ assertThat(videoCapabilities.isQualitySupported(HD, UNSPECIFIED)).isTrue()
+ assertThat(videoCapabilities.isQualitySupported(SD, UNSPECIFIED)).isFalse()
+ }
+
+ @Test
fun isQualitySupported_hlg10WithBackupProfile() {
assertThat(videoCapabilities.isQualitySupported(HIGHEST, HLG10)).isTrue()
assertThat(videoCapabilities.isQualitySupported(LOWEST, HLG10)).isTrue()
@@ -100,7 +171,7 @@
}
@Test
- fun isQualitySupported_hdrUnspecifiedWithBackupProfile() {
+ fun isQualitySupported_hdrUnspecified10BitWithBackupProfile() {
assertThat(videoCapabilities.isQualitySupported(HIGHEST, HDR_UNSPECIFIED_10_BIT)).isTrue()
assertThat(videoCapabilities.isQualitySupported(LOWEST, HDR_UNSPECIFIED_10_BIT)).isTrue()
assertThat(videoCapabilities.isQualitySupported(UHD, HDR_UNSPECIFIED_10_BIT)).isTrue()
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ExistingActivityLifecycleTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ExistingActivityLifecycleTest.kt
index 0c9a82a..912d748 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ExistingActivityLifecycleTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ExistingActivityLifecycleTest.kt
@@ -100,6 +100,9 @@
"Ignore Cuttlefish",
Build.MODEL.contains("Cuttlefish")
)
+ Assume.assumeFalse("See b/152082918, Wembley Api30 has a libjpeg issue which causes" +
+ " the test failure.",
+ Build.MODEL.equals("wembley", ignoreCase = true) && Build.VERSION.SDK_INT <= 30)
Assume.assumeTrue(CameraUtil.deviceHasCamera())
CoreAppTestUtil.assumeCompatibleDevice()
// Clear the device UI and check if there is no dialog or lock screen on the top of the
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt
index e6dbf12..5402bfe 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt
@@ -150,6 +150,9 @@
@Before
fun setUp(): Unit = runBlocking {
+ assumeFalse("See b/152082918, Wembley Api30 has a libjpeg issue which causes" +
+ " the test failure.",
+ Build.MODEL.equals("wembley", ignoreCase = true) && Build.VERSION.SDK_INT <= 30)
assumeTrue(CameraUtil.hasCameraWithLensFacing(BACK_LENS_FACING))
createDefaultPictureFolderIfNotExist()
ProcessCameraProvider.configureInstance(cameraXConfig)
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureOrientationConfigChangesTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureOrientationConfigChangesTest.kt
index ffc5c97..1ff8e45 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureOrientationConfigChangesTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureOrientationConfigChangesTest.kt
@@ -76,6 +76,10 @@
"redmi note 8"
).contains(Build.MODEL.lowercase(Locale.US)) && rotation == Surface.ROTATION_180
)
+ Assume.assumeFalse("See b/152082918, Wembley Api30 has a libjpeg issue which causes" +
+ " the test failure.",
+ Build.MODEL.equals("wembley", ignoreCase = true) && Build.VERSION.SDK_INT <= 30)
+
setUp(lensFacing)
}
diff --git a/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/CameraControllerFragmentTest.kt b/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/CameraControllerFragmentTest.kt
index ab39956..b7d5960 100644
--- a/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/CameraControllerFragmentTest.kt
+++ b/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/CameraControllerFragmentTest.kt
@@ -115,6 +115,9 @@
@Before
fun setup() {
+ assumeFalse("See b/152082918, Wembley Api30 has a libjpeg issue which causes" +
+ " the test failure.",
+ Build.MODEL.equals("wembley", ignoreCase = true) && Build.VERSION.SDK_INT <= 30)
// Clear the device UI and check if there is no dialog or lock screen on the top of the
// window before start the test.
CoreAppTestUtil.prepareDeviceUI(instrumentation)
diff --git a/car/app/app-automotive/api/aidlRelease/current/androidx/car/app/activity/renderer/IProxyInputConnection.aidl b/car/app/app-automotive/api/aidlRelease/current/androidx/car/app/activity/renderer/IProxyInputConnection.aidl
index a0e60d4..d33caaa 100644
--- a/car/app/app-automotive/api/aidlRelease/current/androidx/car/app/activity/renderer/IProxyInputConnection.aidl
+++ b/car/app/app-automotive/api/aidlRelease/current/androidx/car/app/activity/renderer/IProxyInputConnection.aidl
@@ -58,4 +58,5 @@
android.view.inputmethod.ExtractedText getExtractedText(in android.view.inputmethod.ExtractedTextRequest request, int flags) = 22;
void closeConnection() = 23;
android.view.inputmethod.EditorInfo getEditorInfo() = 24;
+ androidx.car.app.serialization.Bundleable getSurroundingText(int beforeLength, int afterLength, int flags) = 25;
}
diff --git a/car/app/app-automotive/src/main/java/androidx/car/app/activity/renderer/surface/RemoteProxyInputConnection.java b/car/app/app-automotive/src/main/java/androidx/car/app/activity/renderer/surface/RemoteProxyInputConnection.java
index a4a1474..2220696 100644
--- a/car/app/app-automotive/src/main/java/androidx/car/app/activity/renderer/surface/RemoteProxyInputConnection.java
+++ b/car/app/app-automotive/src/main/java/androidx/car/app/activity/renderer/surface/RemoteProxyInputConnection.java
@@ -16,21 +16,28 @@
package androidx.car.app.activity.renderer.surface;
+import static androidx.car.app.utils.LogTags.TAG;
+
import static java.util.Objects.requireNonNull;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
+import android.util.Log;
import android.view.KeyEvent;
import android.view.inputmethod.CompletionInfo;
import android.view.inputmethod.CorrectionInfo;
import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputConnectionWrapper;
+import android.view.inputmethod.SurroundingText;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.car.app.activity.ServiceDispatcher;
import androidx.car.app.activity.renderer.IProxyInputConnection;
+import androidx.car.app.serialization.Bundleable;
+import androidx.car.app.serialization.BundlerException;
/** Proxies input connection calls to the provided {@link IProxyInputConnection}. */
final class RemoteProxyInputConnection extends InputConnectionWrapper {
@@ -77,7 +84,7 @@
public ExtractedText getExtractedText(@NonNull ExtractedTextRequest request, int flags) {
requireNonNull(request);
return mServiceDispatcher.fetch("getExtractedText", null, () ->
- mProxyInputConnection.getExtractedText(request, flags));
+ mProxyInputConnection.getExtractedText(request, flags));
}
@Override
@@ -213,6 +220,24 @@
@Nullable
@Override
+ public SurroundingText getSurroundingText(int beforeLength, int afterLength, int flags) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ return mServiceDispatcher.fetch("getSurroundingText", null, () -> {
+ try {
+ Bundleable bundleable = mProxyInputConnection.getSurroundingText(beforeLength,
+ afterLength, flags);
+ return bundleable == null ? null : (SurroundingText) bundleable.get();
+ } catch (BundlerException e) {
+ Log.e(TAG, "Cannot get surrounding text", e);
+ return null;
+ }
+ });
+ }
+ return null;
+ }
+
+ @Nullable
+ @Override
public Handler getHandler() {
return null;
}
diff --git a/car/app/app-automotive/src/main/stableAidl/androidx/car/app/activity/renderer/IProxyInputConnection.aidl b/car/app/app-automotive/src/main/stableAidl/androidx/car/app/activity/renderer/IProxyInputConnection.aidl
index 9bd5d7c..430cca5 100644
--- a/car/app/app-automotive/src/main/stableAidl/androidx/car/app/activity/renderer/IProxyInputConnection.aidl
+++ b/car/app/app-automotive/src/main/stableAidl/androidx/car/app/activity/renderer/IProxyInputConnection.aidl
@@ -23,6 +23,7 @@
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest;
+import androidx.car.app.serialization.Bundleable;
/**
* Proxies the {@link InputConnection} method invocations from {@link CarAppActivity} across a
@@ -102,4 +103,12 @@
/** Returns the {@link EditorInfo} associated with the input connection. */
EditorInfo getEditorInfo() = 24;
-}
\ No newline at end of file
+
+ /**
+ * Proxies a call to {@link InputConnection#getSurroundingText}.
+ * Note that this returns a {@link Bundleable} that wraps a {@link SurroundingText} since the
+ * latter is only available on Android S+. Note that this returns {@code null} on Android R- or
+ * when an exception is thrown.
+ */
+ Bundleable getSurroundingText(int beforeLength, int afterLength, int flags) = 25;
+}
diff --git a/car/app/app-automotive/src/test/java/androidx/car/app/activity/renderer/surface/RemoteProxyInputConnectionTest.java b/car/app/app-automotive/src/test/java/androidx/car/app/activity/renderer/surface/RemoteProxyInputConnectionTest.java
new file mode 100644
index 0000000..08d969d
--- /dev/null
+++ b/car/app/app-automotive/src/test/java/androidx/car/app/activity/renderer/surface/RemoteProxyInputConnectionTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.car.app.activity.renderer.surface;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.os.RemoteException;
+import android.view.inputmethod.SurroundingText;
+
+import androidx.car.app.activity.CarAppViewModel;
+import androidx.car.app.activity.ServiceDispatcher;
+import androidx.car.app.activity.renderer.IProxyInputConnection;
+import androidx.car.app.serialization.Bundleable;
+import androidx.car.app.serialization.BundlerException;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.internal.DoNotInstrument;
+
+/** Tests for {@link RemoteProxyInputConnection} */
+@RunWith(RobolectricTestRunner.class)
+@DoNotInstrument
+public class RemoteProxyInputConnectionTest {
+ private RemoteProxyInputConnection mRemoteProxyInputConnection;
+ private final CarAppViewModel mViewModel = mock(CarAppViewModel.class);
+ private final ServiceDispatcher mServiceDispatcher = new ServiceDispatcher(mViewModel,
+ () -> true);
+ private final IProxyInputConnection mProxyInputConnection =
+ mock(IProxyInputConnection.class);
+
+
+ @Before
+ public void setUp() throws Exception {
+ mRemoteProxyInputConnection =
+ new RemoteProxyInputConnection(mServiceDispatcher, mProxyInputConnection);
+
+ }
+
+ @Config(maxSdk = 30)
+ @Test
+ public void getSurroundingText_apiLevel30Minus_returnsNull() {
+ assertThat(mRemoteProxyInputConnection.getSurroundingText(10, 10, 0)).isNull();
+ }
+
+ @Config(minSdk = 31)
+ @Test
+ public void getSurroundingText_proxyInputReturnsValidValue_returnsValidValue()
+ throws RemoteException,
+ BundlerException {
+ SurroundingText surroundingText = new SurroundingText("Test Text", 0, 0, 0);
+ when(mProxyInputConnection.getSurroundingText(10, 10, 0)).thenReturn(
+ Bundleable.create(surroundingText));
+ assertThat(mRemoteProxyInputConnection.getSurroundingText(10, 10, 0)).isEqualTo(
+ surroundingText);
+ }
+
+ @Config(minSdk = 31)
+ @Test
+ public void getSurroundingText_proxyInputReturnsNull_returnsNull() throws RemoteException,
+ BundlerException {
+ SurroundingText surroundingText = new SurroundingText("Test Text", 0, 0, 0);
+ when(mProxyInputConnection.getSurroundingText(10, 10, 0)).thenReturn(null);
+ assertThat(mRemoteProxyInputConnection.getSurroundingText(10, 10, 0)).isNull();
+ }
+
+ @Config(minSdk = 31)
+ @Test
+ public void getSurroundingText_throwsRemoteException_returnsNull() throws RemoteException,
+ BundlerException {
+ SurroundingText surroundingText = new SurroundingText("Test Text", 0, 0, 0);
+ when(mProxyInputConnection.getSurroundingText(10, 10, 0)).thenThrow(RemoteException.class);
+ assertThat(mRemoteProxyInputConnection.getSurroundingText(10, 10, 0)).isNull();
+ }
+
+ @Config(minSdk = 31)
+ @Test
+ public void getSurroundingText_throwsBundlerException_returnsNull() throws RemoteException,
+ BundlerException {
+ SurroundingText surroundingText = new SurroundingText("Test Text", 0, 0, 0);
+ when(mProxyInputConnection.getSurroundingText(10, 10, 0)).thenReturn(
+ Bundleable.create("random string"));
+ assertThat(mRemoteProxyInputConnection.getSurroundingText(10, 10, 0)).isNull();
+ }
+}
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-mk/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-mk/strings.xml
index 97ec824..c37b862 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-mk/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-mk/strings.xml
@@ -94,7 +94,7 @@
<string name="no_energy_profile_permission" msgid="4662285713731308888">"Нема дозвола за енергетски профил."</string>
<string name="fuel_types" msgid="6811375173343218212">"Типови гориво"</string>
<string name="unavailable" msgid="3636401138255192934">"Недостапно"</string>
- <string name="ev_connector_types" msgid="735458637011996125">"Типови конектори за ЕВ"</string>
+ <string name="ev_connector_types" msgid="735458637011996125">"Типови конектори за EV"</string>
<string name="example_title" msgid="530257630320010494">"Пример %d"</string>
<string name="example_1_text" msgid="8456567953748293512">"Текстов има црвена боја"</string>
<string name="example_2_text" msgid="718820705318661440">"Текстов има зелена боја"</string>
@@ -181,7 +181,7 @@
<string name="no_energy_level_permission" msgid="1684773185095107825">"Нема дозвола за EnergyLevel."</string>
<string name="no_speed_permission" msgid="5812532480922675390">"Нема дозвола за брзина."</string>
<string name="no_mileage_permission" msgid="4074779840599589847">"Нема дозвола за километража."</string>
- <string name="no_ev_status_permission" msgid="933075402821938973">"Нема дозвола за статусот на ЕВ."</string>
+ <string name="no_ev_status_permission" msgid="933075402821938973">"Нема дозвола за статусот на EV."</string>
<string name="no_accelerometer_permission" msgid="896914448469117234">"Нема дозвола за акцелерометар."</string>
<string name="no_gyroscope_permission" msgid="665293140266771569">"Нема дозвола за жироскоп."</string>
<string name="no_compass_permission" msgid="5162304489577567125">"Нема дозвола за компас."</string>
@@ -190,7 +190,7 @@
<string name="fetch_energy_level" msgid="1773415471137542832">"Се презема ниво на енергија."</string>
<string name="fetch_speed" msgid="7333830984597189627">"Се презема брзина."</string>
<string name="fetch_mileage" msgid="7490131687788025123">"Се презема километража."</string>
- <string name="fetch_ev_status" msgid="2798910410830567052">"Се презема статус на ЕВ."</string>
+ <string name="fetch_ev_status" msgid="2798910410830567052">"Се презема статус на EV."</string>
<string name="fetch_accelerometer" msgid="697750041126810911">"Се презема акцелерометар."</string>
<string name="fetch_gyroscope" msgid="7153155318827188539">"Се презема жироскоп."</string>
<string name="fetch_compass" msgid="7316188117590056717">"Се презема компас."</string>
@@ -204,8 +204,8 @@
<string name="raw_speed" msgid="7295910214088983967">"Брзина на RAW"</string>
<string name="unit" msgid="7697521583928135171">"Единица"</string>
<string name="odometer" msgid="3925174645651546591">"Броило"</string>
- <string name="ev_connected" msgid="2277845607662494696">"Поврзана е порта за полнење ЕВ"</string>
- <string name="ev_open" msgid="4916704450914519643">"Отворена е порта за полнење ЕВ"</string>
+ <string name="ev_connected" msgid="2277845607662494696">"Поврзана е порта за полнење EV"</string>
+ <string name="ev_open" msgid="4916704450914519643">"Отворена е порта за полнење EV"</string>
<string name="accelerometer" msgid="2084026313768299185">"Акцелерометар"</string>
<string name="gyroscope" msgid="3428075828014504651">"Жироскоп"</string>
<string name="compass" msgid="7037367764762441245">"Компас"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-sq/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-sq/strings.xml
index e83b300..b52261b 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-sq/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-sq/strings.xml
@@ -119,7 +119,7 @@
<string name="loading_demo_row_title" msgid="8933049915126088142">"Ngarkimi përfundoi!"</string>
<string name="pop_to_root" msgid="2078277386355064198">"Hidhu te rrënja"</string>
<string name="pop_to_marker" msgid="5007078308762725207">"Hidhu te shënuesi i demonstrimeve të ndryshme"</string>
- <string name="push_stack" msgid="2433062141810168976">"Shty më tej te stiva"</string>
+ <string name="push_stack" msgid="2433062141810168976">"Shtyj më tej te stiva"</string>
<string name="pop_to_prefix" msgid="4288884615669751608">"Hidhu te"</string>
<string name="pop_to_title" msgid="3924696281273379455">"Hidhu te demonstrimi"</string>
<string name="package_not_found_error_msg" msgid="7525619456883627939">"Paketa nuk u gjet."</string>
diff --git a/compose/animation/animation-graphics/src/commonMain/kotlin/androidx/compose/animation/graphics/vector/Animator.kt b/compose/animation/animation-graphics/src/commonMain/kotlin/androidx/compose/animation/graphics/vector/Animator.kt
index f21dbb9..c38b355 100644
--- a/compose/animation/animation-graphics/src/commonMain/kotlin/androidx/compose/animation/graphics/vector/Animator.kt
+++ b/compose/animation/animation-graphics/src/commonMain/kotlin/androidx/compose/animation/graphics/vector/Animator.kt
@@ -219,6 +219,7 @@
) { atEnd ->
if (atEnd) overallDuration.toFloat() else 0f
}
+ @Suppress("UnrememberedMutableState") // b/279909531
return derivedStateOf { interpolate(timeState.value) }
}
diff --git a/compose/compiler/OWNERS b/compose/compiler/OWNERS
index fc11d9b..e48b97d 100644
--- a/compose/compiler/OWNERS
+++ b/compose/compiler/OWNERS
@@ -2,4 +2,5 @@
jsproch@google.com
chuckj@google.com
lelandr@google.com
+anbailey@google.com
per-file settings.gradle = dustinlam@google.com, rahulrav@google.com
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
index 016b6e8..83a8184 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
@@ -22,23 +22,16 @@
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
import org.jetbrains.kotlin.backend.common.peek
import org.jetbrains.kotlin.backend.common.pop
-import org.jetbrains.kotlin.ir.IrElement
-import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
-import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
-import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrFunction
-import org.jetbrains.kotlin.ir.declarations.IrLocalDelegatedProperty
-import org.jetbrains.kotlin.ir.declarations.IrMetadataSourceOwner
import org.jetbrains.kotlin.ir.declarations.IrProperty
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
import org.jetbrains.kotlin.ir.declarations.copyAttributes
-import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
@@ -58,7 +51,6 @@
import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
import org.jetbrains.kotlin.ir.types.isClassWithFqName
import org.jetbrains.kotlin.ir.types.typeOrNull
-import org.jetbrains.kotlin.ir.util.DeepCopyIrTreeWithSymbols
import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapper
import org.jetbrains.kotlin.ir.util.SymbolRemapper
import org.jetbrains.kotlin.ir.util.SymbolRenamer
@@ -74,28 +66,12 @@
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.types.Variance
-class DeepCopyIrTreeWithSymbolsPreservingMetadata(
+internal class DeepCopyIrTreeWithRemappedComposableTypes(
private val context: IrPluginContext,
private val symbolRemapper: DeepCopySymbolRemapper,
typeRemapper: TypeRemapper,
symbolRenamer: SymbolRenamer = SymbolRenamer.DEFAULT
-) : DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper, symbolRenamer) {
-
- override fun visitClass(declaration: IrClass): IrClass {
- return super.visitClass(declaration).also { it.copyMetadataFrom(declaration) }
- }
-
- override fun visitFunction(declaration: IrFunction): IrStatement {
- return super.visitFunction(declaration).also {
- it.copyMetadataFrom(declaration)
- }
- }
-
- override fun visitConstructor(declaration: IrConstructor): IrConstructor {
- return super.visitConstructor(declaration).also {
- it.copyMetadataFrom(declaration)
- }
- }
+) : DeepCopyPreservingMetadata(symbolRemapper, typeRemapper, symbolRenamer) {
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction {
if (declaration.symbol.isRemappedAndBound()) {
@@ -106,30 +82,17 @@
}
return super.visitSimpleFunction(declaration).also {
it.correspondingPropertySymbol = declaration.correspondingPropertySymbol
- it.copyMetadataFrom(declaration)
}
}
-
- override fun visitField(declaration: IrField): IrField {
- return super.visitField(declaration).also {
- it.metadata = declaration.metadata
- }
- }
-
override fun visitProperty(declaration: IrProperty): IrProperty {
return super.visitProperty(declaration).also {
- it.copyMetadataFrom(declaration)
it.copyAttributes(declaration)
}
}
override fun visitFile(declaration: IrFile): IrFile {
includeFileNameInExceptionTrace(declaration) {
- return super.visitFile(declaration).also {
- if (it is IrFileImpl) {
- it.metadata = declaration.metadata
- }
- }
+ return super.visitFile(declaration)
}
}
@@ -188,13 +151,6 @@
return super.visitConstructorCall(expression)
}
- override fun visitLocalDelegatedProperty(
- declaration: IrLocalDelegatedProperty
- ): IrLocalDelegatedProperty =
- super.visitLocalDelegatedProperty(declaration).apply {
- metadata = declaration.metadata
- }
-
private fun IrFunction.needsComposableRemapping(): Boolean {
if (
needsComposableRemapping(dispatchReceiverParameter?.type) ||
@@ -390,14 +346,6 @@
extensionReceiver = original.extensionReceiver?.transform()
}
- private fun IrElement.copyMetadataFrom(owner: IrMetadataSourceOwner) {
- if (this is IrMetadataSourceOwner) {
- metadata = owner.metadata
- } else {
- throw IllegalArgumentException("Cannot copy metadata to $this")
- }
- }
-
private fun IrType.isComposable(): Boolean {
return annotations.hasAnnotation(ComposeFqNames.Composable)
}
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
index 5b7efce..7bb80ae 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
@@ -120,7 +120,7 @@
// for each declaration, we create a deepCopy transformer It is important here that we
// use the "preserving metadata" variant since we are using this copy to *replace* the
// originals, or else the module we would produce wouldn't have any metadata in it.
- val transformer = DeepCopyIrTreeWithSymbolsPreservingMetadata(
+ val transformer = DeepCopyIrTreeWithRemappedComposableTypes(
context,
symbolRemapper,
typeRemapper
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/DeepCopyPreservingMetadata.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/DeepCopyPreservingMetadata.kt
new file mode 100644
index 0000000..3ef6491
--- /dev/null
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/DeepCopyPreservingMetadata.kt
@@ -0,0 +1,72 @@
+/*
+ * 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.compiler.plugins.kotlin.lower
+
+import org.jetbrains.kotlin.ir.declarations.IrClass
+import org.jetbrains.kotlin.ir.declarations.IrConstructor
+import org.jetbrains.kotlin.ir.declarations.IrField
+import org.jetbrains.kotlin.ir.declarations.IrFile
+import org.jetbrains.kotlin.ir.declarations.IrLocalDelegatedProperty
+import org.jetbrains.kotlin.ir.declarations.IrProperty
+import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
+import org.jetbrains.kotlin.ir.util.DeepCopyIrTreeWithSymbols
+import org.jetbrains.kotlin.ir.util.SymbolRemapper
+import org.jetbrains.kotlin.ir.util.SymbolRenamer
+import org.jetbrains.kotlin.ir.util.TypeRemapper
+
+internal open class DeepCopyPreservingMetadata(
+ symbolRemapper: SymbolRemapper,
+ typeRemapper: TypeRemapper,
+ symbolRenamer: SymbolRenamer
+) : DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper, symbolRenamer) {
+ override fun visitFile(declaration: IrFile): IrFile =
+ super.visitFile(declaration).apply {
+ metadata = declaration.metadata
+ }
+
+ override fun visitClass(declaration: IrClass): IrClass =
+ super.visitClass(declaration).apply {
+ metadata = declaration.metadata
+ }
+
+ override fun visitConstructor(declaration: IrConstructor): IrConstructor =
+ super.visitConstructor(declaration).apply {
+ metadata = declaration.metadata
+ }
+
+ override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
+ super.visitSimpleFunction(declaration).apply {
+ metadata = declaration.metadata
+ }
+
+ override fun visitProperty(declaration: IrProperty): IrProperty =
+ super.visitProperty(declaration).apply {
+ metadata = declaration.metadata
+ }
+
+ override fun visitField(declaration: IrField): IrField =
+ super.visitField(declaration).apply {
+ metadata = declaration.metadata
+ }
+
+ override fun visitLocalDelegatedProperty(
+ declaration: IrLocalDelegatedProperty
+ ): IrLocalDelegatedProperty =
+ super.visitLocalDelegatedProperty(declaration).apply {
+ metadata = declaration.metadata
+ }
+}
\ No newline at end of file
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyTransformBase.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyTransformBase.kt
index 6143aff..632e6b00 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyTransformBase.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyTransformBase.kt
@@ -16,6 +16,7 @@
package androidx.compose.compiler.plugins.kotlin.lower.decoys
+import androidx.compose.compiler.plugins.kotlin.lower.DeepCopyPreservingMetadata
import androidx.compose.compiler.plugins.kotlin.lower.hasAnnotationSafe
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
@@ -24,16 +25,9 @@
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
-import org.jetbrains.kotlin.ir.declarations.IrClass
-import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrDeclarationContainer
-import org.jetbrains.kotlin.ir.declarations.IrField
-import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrFunction
-import org.jetbrains.kotlin.ir.declarations.IrLocalDelegatedProperty
-import org.jetbrains.kotlin.ir.declarations.IrProperty
-import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.expressions.IrConst
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrVararg
@@ -47,10 +41,8 @@
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.IrTypeArgument
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
-import org.jetbrains.kotlin.ir.util.DeepCopyIrTreeWithSymbols
import org.jetbrains.kotlin.ir.util.DeepCopyTypeRemapper
import org.jetbrains.kotlin.ir.util.IdSignature
-import org.jetbrains.kotlin.ir.util.SymbolRemapper
import org.jetbrains.kotlin.ir.util.SymbolRenamer
import org.jetbrains.kotlin.ir.util.TypeRemapper
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
@@ -217,7 +209,7 @@
return typeRemapper.remapType(type.remapTypeParameters(source, target))
}
}
- val deepCopy = DeepCopySavingMetadata(
+ val deepCopy = DeepCopyPreservingMetadata(
symbolRemapper,
typeParamRemapper,
SymbolRenamer.DEFAULT
@@ -226,46 +218,3 @@
deepCopy
}
}
-
-internal class DeepCopySavingMetadata(
- symbolRemapper: SymbolRemapper,
- typeRemapper: TypeRemapper,
- symbolRenamer: SymbolRenamer
-) : DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper, symbolRenamer) {
- override fun visitFile(declaration: IrFile): IrFile =
- super.visitFile(declaration).apply {
- metadata = declaration.metadata
- }
-
- override fun visitClass(declaration: IrClass): IrClass =
- super.visitClass(declaration).apply {
- metadata = declaration.metadata
- }
-
- override fun visitConstructor(declaration: IrConstructor): IrConstructor =
- super.visitConstructor(declaration).apply {
- metadata = declaration.metadata
- }
-
- override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
- super.visitSimpleFunction(declaration).apply {
- metadata = declaration.metadata
- }
-
- override fun visitProperty(declaration: IrProperty): IrProperty =
- super.visitProperty(declaration).apply {
- metadata = declaration.metadata
- }
-
- override fun visitField(declaration: IrField): IrField =
- super.visitField(declaration).apply {
- metadata = declaration.metadata
- }
-
- override fun visitLocalDelegatedProperty(
- declaration: IrLocalDelegatedProperty
- ): IrLocalDelegatedProperty =
- super.visitLocalDelegatedProperty(declaration).apply {
- metadata = declaration.metadata
- }
-}
\ No newline at end of file
diff --git a/compose/desktop/desktop/build.gradle b/compose/desktop/desktop/build.gradle
index a8baf7a..46e9c83 100644
--- a/compose/desktop/desktop/build.gradle
+++ b/compose/desktop/desktop/build.gradle
@@ -14,6 +14,9 @@
* limitations under the License.
*/
+
+import androidx.build.AndroidXComposePlugin
+import androidx.build.KmpPlatformsKt
import androidx.build.LibraryType
import androidx.build.RunApiTasks
import androidx.build.BuildOnServerKt
@@ -26,41 +29,55 @@
id("kotlin-multiplatform")
}
+def desktopEnabled = KmpPlatformsKt.enableDesktop(project)
+
dependencies {
}
kotlin {
- jvm() {
- withJava()
+ if (desktopEnabled) {
+ jvm() {
+ withJava()
+ }
}
- sourceSets {
- commonMain.dependencies {
- implementation(libs.kotlinStdlibCommon)
- implementation(project(":compose:ui:ui-util"))
- api(project(":compose:foundation:foundation"))
- api(project(":compose:material:material"))
- api(project(":compose:runtime:runtime"))
- api(project(":compose:ui:ui"))
- api(project(":compose:ui:ui-tooling-preview"))
- }
-
- jvmMain.dependencies {
- implementation(libs.kotlinStdlib)
- implementation(libs.kotlinStdlibJdk8)
- implementation(libs.kotlinCoroutinesCore)
- }
-
- jvmTest {
- resources.srcDirs += new File(SupportConfigKt.getExternalProjectPath(project), "noto-fonts/other/")
- resources.srcDirs += "src/jvmTest/res"
- dependencies {
- implementation(libs.kotlinCoroutinesTest)
- implementation(libs.skikoCurrentOs)
- implementation(project(":compose:ui:ui-test-junit4"))
- implementation(libs.junit)
- implementation(libs.truth)
+ if (desktopEnabled) {
+ sourceSets {
+ commonMain.dependencies {
+ implementation(libs.kotlinStdlibCommon)
+ implementation(project(":compose:ui:ui-util"))
+ api(project(":compose:foundation:foundation"))
+ api(project(":compose:material:material"))
+ api(project(":compose:runtime:runtime"))
+ api(project(":compose:ui:ui"))
+ api(project(":compose:ui:ui-tooling-preview"))
}
+
+ jvmMain.dependencies {
+ implementation(libs.kotlinStdlib)
+ implementation(libs.kotlinStdlibJdk8)
+ implementation(libs.kotlinCoroutinesCore)
+ }
+
+ jvmTest {
+ resources.srcDirs += new File(SupportConfigKt.getExternalProjectPath(project), "noto-fonts/other/")
+ resources.srcDirs += "src/jvmTest/res"
+ dependencies {
+ implementation(libs.kotlinCoroutinesTest)
+ implementation(libs.skikoCurrentOs)
+ implementation(project(":compose:ui:ui-test-junit4"))
+ implementation(libs.junit)
+ implementation(libs.truth)
+ }
+ }
+ }
+ }
+}
+
+if (!desktopEnabled) {
+ kotlin {
+ jvm("disabled") {
+ withJava()
}
}
}
@@ -74,8 +91,10 @@
}
}
-tasks.findByName("jvmTest").configure {
- systemProperties["GOLDEN_PATH"] = getGoldenPath(project).toString()
+if (desktopEnabled) {
+ tasks.findByName("jvmTest").configure {
+ systemProperties["GOLDEN_PATH"] = getGoldenPath(project).toString()
+ }
}
androidx {
@@ -127,4 +146,6 @@
}
}
-BuildOnServerKt.addToBuildOnServer(project, "${project.path}:jvmJar")
+if (desktopEnabled) {
+ BuildOnServerKt.addToBuildOnServer(project, "${project.path}:jvmJar")
+}
diff --git a/compose/desktop/desktop/samples/build.gradle b/compose/desktop/desktop/samples/build.gradle
index 76b09be..7502716 100644
--- a/compose/desktop/desktop/samples/build.gradle
+++ b/compose/desktop/desktop/samples/build.gradle
@@ -15,94 +15,105 @@
*/
import androidx.build.BuildOnServerKt
+import androidx.build.KmpPlatformsKt
import androidx.build.SupportConfigKt
plugins {
id("AndroidXPlugin")
+ id("java")
id("AndroidXComposePlugin")
id("kotlin-multiplatform")
}
-dependencies {
+def desktopEnabled = KmpPlatformsKt.enableDesktop(project)
+
+if (desktopEnabled) {
+ kotlin {
+ jvm()
+
+ sourceSets {
+ jvmMain {
+ resources.srcDirs += new File(SupportConfigKt.getExternalProjectPath(project), "noto-fonts/other/")
+ resources.srcDirs += "src/jvmMain/res"
+ }
+
+ jvmMain.dependencies {
+ implementation(libs.skikoCurrentOs)
+ implementation(project(":compose:desktop:desktop"))
+ }
+ }
+ }
+
+ task run1(type: JavaExec) {
+ dependsOn(":compose:desktop:desktop:jar")
+ main = "androidx.compose.desktop.examples.example1.Main_jvmKt"
+ systemProperty("skiko.fps.enabled", "true")
+ def compilation = kotlin.jvm().compilations["main"]
+ classpath =
+ compilation.output.allOutputs +
+ compilation.runtimeDependencyFiles
+ }
+
+ task run2(type: JavaExec) {
+ dependsOn(":compose:desktop:desktop:jar")
+ main = "androidx.compose.desktop.examples.example2.Main_jvmKt"
+ def compilation = kotlin.jvm().compilations["main"]
+ classpath =
+ compilation.output.allOutputs +
+ compilation.runtimeDependencyFiles
+ }
+
+ task run3(type: JavaExec) {
+ dependsOn(":compose:desktop:desktop:jar")
+ main = "androidx.compose.desktop.examples.popupexample.Main_jvmKt"
+ def compilation = kotlin.jvm().compilations["main"]
+ classpath =
+ compilation.output.allOutputs +
+ compilation.runtimeDependencyFiles
+ }
+
+ task run4(type: JavaExec) {
+ dependsOn(":compose:desktop:desktop:jar")
+ main = "androidx.compose.desktop.examples.swingexample.Main_jvmKt"
+ def compilation = kotlin.jvm().compilations["main"]
+ classpath =
+ compilation.output.allOutputs +
+ compilation.runtimeDependencyFiles
+ }
+
+ task runVsync(type: JavaExec) {
+ dependsOn(":compose:desktop:desktop:jar")
+ main = "androidx.compose.desktop.examples.vsynctest.Main_jvmKt"
+ jvmArgs("-verbose:gc")
+ def compilation = kotlin.jvm().compilations["main"]
+ classpath =
+ compilation.output.allOutputs +
+ compilation.runtimeDependencyFiles
+ }
+
+ task runWindowApi(type: JavaExec) {
+ dependsOn(":compose:desktop:desktop:jar")
+ main = "androidx.compose.desktop.examples.windowapi.Main_jvmKt"
+ def compilation = kotlin.jvm().compilations["main"]
+ systemProperty("skiko.rendering.laf.global", "true")
+ systemProperty("skiko.rendering.useScreenMenuBar", "true")
+ classpath =
+ compilation.output.allOutputs +
+ compilation.runtimeDependencyFiles
+ }
+
+ task run {
+ dependsOn("run1")
+ }
+
+
+ BuildOnServerKt.addToBuildOnServer(project, "${project.path}:jvmJar")
}
-kotlin {
- jvm()
-
- sourceSets {
- jvmMain {
- resources.srcDirs += new File(SupportConfigKt.getExternalProjectPath(project), "noto-fonts/other/")
- resources.srcDirs += "src/jvmMain/res"
- }
-
- jvmMain.dependencies {
- implementation(libs.skikoCurrentOs)
- implementation(project(":compose:desktop:desktop"))
+if (!desktopEnabled) {
+ kotlin {
+ jvm("disabled") {
+ withJava()
}
}
}
-
-task run1(type: JavaExec) {
- dependsOn(":compose:desktop:desktop:jar")
- main = "androidx.compose.desktop.examples.example1.Main_jvmKt"
- systemProperty("skiko.fps.enabled", "true")
- def compilation = kotlin.jvm().compilations["main"]
- classpath =
- compilation.output.allOutputs +
- compilation.runtimeDependencyFiles
-}
-
-task run2(type: JavaExec) {
- dependsOn(":compose:desktop:desktop:jar")
- main = "androidx.compose.desktop.examples.example2.Main_jvmKt"
- def compilation = kotlin.jvm().compilations["main"]
- classpath =
- compilation.output.allOutputs +
- compilation.runtimeDependencyFiles
-}
-
-task run3(type: JavaExec) {
- dependsOn(":compose:desktop:desktop:jar")
- main = "androidx.compose.desktop.examples.popupexample.Main_jvmKt"
- def compilation = kotlin.jvm().compilations["main"]
- classpath =
- compilation.output.allOutputs +
- compilation.runtimeDependencyFiles
-}
-
-task run4(type: JavaExec) {
- dependsOn(":compose:desktop:desktop:jar")
- main = "androidx.compose.desktop.examples.swingexample.Main_jvmKt"
- def compilation = kotlin.jvm().compilations["main"]
- classpath =
- compilation.output.allOutputs +
- compilation.runtimeDependencyFiles
-}
-
-task runVsync(type: JavaExec) {
- dependsOn(":compose:desktop:desktop:jar")
- main = "androidx.compose.desktop.examples.vsynctest.Main_jvmKt"
- jvmArgs("-verbose:gc")
- def compilation = kotlin.jvm().compilations["main"]
- classpath =
- compilation.output.allOutputs +
- compilation.runtimeDependencyFiles
-}
-
-task runWindowApi(type: JavaExec) {
- dependsOn(":compose:desktop:desktop:jar")
- main = "androidx.compose.desktop.examples.windowapi.Main_jvmKt"
- def compilation = kotlin.jvm().compilations["main"]
- systemProperty("skiko.rendering.laf.global", "true")
- systemProperty("skiko.rendering.useScreenMenuBar", "true")
- classpath =
- compilation.output.allOutputs +
- compilation.runtimeDependencyFiles
-}
-
-task run {
- dependsOn("run1")
-}
-
-
-BuildOnServerKt.addToBuildOnServer(project, "${project.path}:jvmJar")
diff --git a/compose/desktop/desktop/samples/src/jvmMain/disabled/Empty.kt b/compose/desktop/desktop/samples/src/jvmMain/disabled/Empty.kt
new file mode 100644
index 0000000..0c32401
--- /dev/null
+++ b/compose/desktop/desktop/samples/src/jvmMain/disabled/Empty.kt
@@ -0,0 +1 @@
+// Give Kotlin a placeholder file to compile when this project is disabled.
\ No newline at end of file
diff --git a/compose/desktop/desktop/src/disabled/Empty.kt b/compose/desktop/desktop/src/disabled/Empty.kt
new file mode 100644
index 0000000..0c32401
--- /dev/null
+++ b/compose/desktop/desktop/src/disabled/Empty.kt
@@ -0,0 +1 @@
+// Give Kotlin a placeholder file to compile when this project is disabled.
\ No newline at end of file
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/PagerSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/PagerSamples.kt
index b95aeb5..78597e0 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/PagerSamples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/PagerSamples.kt
@@ -21,25 +21,39 @@
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.PageSize
import androidx.compose.foundation.pager.VerticalPager
import androidx.compose.foundation.pager.rememberPagerState
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Button
import androidx.compose.material.Text
+import androidx.compose.material.TopAppBar
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
+import androidx.compose.ui.input.nestedscroll.NestedScrollSource
+import androidx.compose.ui.input.nestedscroll.nestedScroll
+import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import kotlin.math.roundToInt
import kotlinx.coroutines.launch
@OptIn(ExperimentalFoundationApi::class)
@@ -254,4 +268,73 @@
}
}
}
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+@Sampled
+@Composable
+fun HorizontalPagerWithScrollableContent() {
+ // This is a sample using NestedScroll and Pager.
+ // We use the toolbar offset changing example from
+ // androidx.compose.ui.samples.NestedScrollConnectionSample
+
+ val pagerState = rememberPagerState { 10 }
+
+ val toolbarHeight = 48.dp
+ val toolbarHeightPx = with(LocalDensity.current) { toolbarHeight.roundToPx().toFloat() }
+ val toolbarOffsetHeightPx = remember { mutableStateOf(0f) }
+ val nestedScrollConnection = remember {
+ object : NestedScrollConnection {
+ override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {
+ val delta = available.y
+ val newOffset = toolbarOffsetHeightPx.value + delta
+ toolbarOffsetHeightPx.value = newOffset.coerceIn(-toolbarHeightPx, 0f)
+ return Offset.Zero
+ }
+ }
+ }
+
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .nestedScroll(nestedScrollConnection)
+ ) {
+ TopAppBar(
+ modifier = Modifier
+ .height(toolbarHeight)
+ .offset { IntOffset(x = 0, y = toolbarOffsetHeightPx.value.roundToInt()) },
+ title = { Text("Toolbar offset is ${toolbarOffsetHeightPx.value}") }
+ )
+
+ val paddingOffset =
+ toolbarHeight + with(LocalDensity.current) { toolbarOffsetHeightPx.value.toDp() }
+
+ HorizontalPager(
+ modifier = Modifier.fillMaxSize(),
+ state = pagerState,
+ contentPadding = PaddingValues(top = paddingOffset)
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .verticalScroll(rememberScrollState())
+ ) {
+ repeat(20) {
+ Box(
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(64.dp)
+ .padding(4.dp)
+ .background(if (it % 2 == 0) Color.Black else Color.Yellow),
+ contentAlignment = Alignment.Center
+ ) {
+ Text(
+ text = it.toString(),
+ color = if (it % 2 != 0) Color.Black else Color.Yellow
+ )
+ }
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt
index 80cc4f9..1c1eb34 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/BasePagerTest.kt
@@ -57,6 +57,7 @@
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
+import kotlin.test.assertTrue
import kotlinx.coroutines.CoroutineScope
@OptIn(ExperimentalFoundationApi::class)
@@ -336,6 +337,20 @@
rule.onNodeWithTag("$pageToVerifyPosition")
.assertPositionInRootIsEqualTo(left + leftContentPadding, top + topContentPadding)
}
+
+ internal fun runAndWaitForPageSettling(block: () -> Unit) {
+ block()
+ rule.mainClock.advanceTimeUntil {
+ pagerState.currentPageOffsetFraction != 0.0f
+ } // wait for first move from drag
+ rule.mainClock.advanceTimeUntil {
+ pagerState.currentPageOffsetFraction == 0.0f
+ } // wait for fling settling
+ // pump the clock twice and check we're still settled.
+ rule.mainClock.advanceTimeByFrame()
+ rule.mainClock.advanceTimeByFrame()
+ assertTrue { pagerState.currentPageOffsetFraction == 0.0f }
+ }
}
class ParamConfig(
@@ -358,7 +373,7 @@
internal const val PagerTestTag = "pager"
internal const val DefaultPageCount = 20
-internal const val DefaultAnimationRepetition = 3
+internal const val DefaultAnimationRepetition = 2
internal val TestOrientation = listOf(Orientation.Vertical, Orientation.Horizontal)
internal val AllOrientationsParams = mutableListOf<ParamConfig>().apply {
for (orientation in TestOrientation) {
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PageLayoutPositionOnScrollingTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PageLayoutPositionOnScrollingTest.kt
index 6531eba..ef8e8fa 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PageLayoutPositionOnScrollingTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PageLayoutPositionOnScrollingTest.kt
@@ -24,6 +24,7 @@
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performTouchInput
import androidx.test.filters.LargeTest
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
@@ -35,6 +36,11 @@
val config: ParamConfig
) : BasePagerTest(config) {
+ @Before
+ fun setUp() {
+ rule.mainClock.autoAdvance = false
+ }
+
@Test
fun swipeForwardAndBackward_verifyPagesAreLaidOutCorrectly() {
// Arrange
@@ -45,13 +51,14 @@
repeat(DefaultAnimationRepetition) {
rule.onNodeWithTag(it.toString()).assertIsDisplayed()
confirmPageIsInCorrectPosition(it)
- rule.onNodeWithTag(it.toString()).performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 1.5f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ rule.onNodeWithTag(it.toString()).performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 1.5f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
}
// Act - backward
@@ -59,13 +66,14 @@
val countDown = DefaultAnimationRepetition - it
rule.onNodeWithTag(countDown.toString()).assertIsDisplayed()
confirmPageIsInCorrectPosition(countDown)
- rule.onNodeWithTag(countDown.toString()).performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 1.5f * MinFlingVelocityDp.toPx() },
- delta * -1f
- )
+ runAndWaitForPageSettling {
+ rule.onNodeWithTag(countDown.toString()).performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 1.5f * MinFlingVelocityDp.toPx() },
+ delta * -1f
+ )
+ }
}
- rule.waitForIdle()
}
}
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerOffscreenPageLimitPlacingTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerOffscreenPageLimitPlacingTest.kt
index aaf1a6f..5967023 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerOffscreenPageLimitPlacingTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerOffscreenPageLimitPlacingTest.kt
@@ -22,6 +22,7 @@
import androidx.compose.ui.test.performTouchInput
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
@@ -33,6 +34,11 @@
val config: ParamConfig
) : BasePagerTest(config) {
+ @Before
+ fun setUp() {
+ rule.mainClock.autoAdvance = false
+ }
+
@Test
fun offscreenPageLimitIsUsed_shouldPlaceMoreItemsThanVisibleOnesAsWeScroll() {
// Arrange
@@ -45,11 +51,12 @@
repeat(DefaultAnimationRepetition) {
// Act
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(0f, delta)
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(0f, delta)
+ }
}
- rule.waitForIdle()
// Next page was placed
rule.runOnIdle {
Truth.assertThat(placed).contains(
@@ -58,7 +65,7 @@
)
}
}
- rule.waitForIdle()
+
confirmPageIsInCorrectPosition(pagerState.currentPage)
}
@@ -102,7 +109,6 @@
)
// Assert
- rule.waitForIdle()
val firstVisible = pagerState.layoutInfo.visiblePagesInfo.first().index
val lastVisible = pagerState.layoutInfo.visiblePagesInfo.last().index
Truth.assertThat(placed).doesNotContain(firstVisible - 1)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt
index 70cc0a6..103f9c7 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerScrollingTest.kt
@@ -32,6 +32,7 @@
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.runBlocking
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
@@ -43,6 +44,11 @@
val config: ParamConfig
) : BasePagerTest(config) {
+ @Before
+ fun setUp() {
+ rule.mainClock.autoAdvance = false
+ }
+
@Test
fun swipeWithLowVelocity_positionalThresholdLessThanDefaultThreshold_shouldBounceBack() {
// Arrange
@@ -51,26 +57,28 @@
val delta = pagerSize * swipeValue * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
confirmPageIsInCorrectPosition(5)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
@@ -89,26 +97,28 @@
val delta = pagerSize * swipeValue * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
confirmPageIsInCorrectPosition(5)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
@@ -127,26 +137,28 @@
val delta = pagerSize * swipeValue * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
confirmPageIsInCorrectPosition(5)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
@@ -163,26 +175,28 @@
val delta = (2.4f * pageSize) * scrollForwardSign // 2.4 pages
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("4").assertIsDisplayed()
confirmPageIsInCorrectPosition(4)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("2").assertIsDisplayed()
@@ -197,26 +211,28 @@
val delta = pagerSize * swipeValue * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("6").assertIsDisplayed()
confirmPageIsInCorrectPosition(6)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
@@ -235,26 +251,28 @@
val delta = pagerSize * swipeValue * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("6").assertIsDisplayed()
confirmPageIsInCorrectPosition(6)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
@@ -275,26 +293,28 @@
val delta = 2.6f * pageSize * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
confirmPageIsInCorrectPosition(5)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("2").assertIsDisplayed()
@@ -313,26 +333,28 @@
val delta = pagerSize * swipeValue * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("6").assertIsDisplayed()
confirmPageIsInCorrectPosition(6)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * MinFlingVelocityDp.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
@@ -351,26 +373,28 @@
val delta = pagerSize * 0.4f * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * snapVelocityThreshold.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * snapVelocityThreshold.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
confirmPageIsInCorrectPosition(5)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 0.5f * snapVelocityThreshold.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 0.5f * snapVelocityThreshold.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
@@ -385,26 +409,28 @@
val delta = pagerSize * 0.4f * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("6").assertIsDisplayed()
confirmPageIsInCorrectPosition(6)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
@@ -424,26 +450,28 @@
val delta = pagerSize * 0.4f * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 1.1f * snapVelocityThreshold.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 1.1f * snapVelocityThreshold.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("6").assertIsDisplayed()
confirmPageIsInCorrectPosition(6)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 1.1f * snapVelocityThreshold.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 1.1f * snapVelocityThreshold.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
@@ -458,26 +486,28 @@
val delta = pagerSize * 0.8f * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("6").assertIsDisplayed()
confirmPageIsInCorrectPosition(6)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
- delta * -1
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
+ delta * -1
+ )
+ }
}
- rule.waitForIdle()
// Assert
rule.onNodeWithTag("5").assertIsDisplayed()
@@ -492,10 +522,11 @@
val delta = pagerSize * 1.4f * scrollForwardSign
// Act - forward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(0f, delta)
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(0f, delta)
+ }
}
- rule.waitForIdle()
// Assert
assertThat(pagerState.currentPage).isAtMost(7)
@@ -503,10 +534,11 @@
confirmPageIsInCorrectPosition(pagerState.currentPage)
// Act - backward
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(0f, delta * -1)
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(0f, delta * -1)
+ }
}
- rule.waitForIdle()
// Assert
assertThat(pagerState.currentPage).isAtLeast(5)
@@ -621,8 +653,8 @@
initialPage = initialPage,
initialPageOffsetFraction = 0f
) {
- 10
- }
+ 10
+ }.also { pagerState = it }
}
HorizontalOrVerticalPager(
@@ -636,39 +668,41 @@
}
}
val delta = pageSize * 0.4f * scrollForwardSign
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
-
- rule.waitForIdle()
rule.onNodeWithTag("1").assertIsDisplayed()
confirmPageIsInCorrectPosition(1)
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
rule.onNodeWithTag("2").assertIsDisplayed()
confirmPageIsInCorrectPosition(2)
rule.runOnIdle { initialPage = 1 }
rule.waitForIdle()
- onPager().performTouchInput {
- swipeWithVelocityAcrossMainAxis(
- with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
- delta
- )
+ runAndWaitForPageSettling {
+ onPager().performTouchInput {
+ swipeWithVelocityAcrossMainAxis(
+ with(rule.density) { 1.1f * MinFlingVelocityDp.toPx() },
+ delta
+ )
+ }
}
- rule.waitForIdle()
confirmPageIsInCorrectPosition(2)
}
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerStateNonGestureScrollingTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerStateNonGestureScrollingTest.kt
new file mode 100644
index 0000000..7bed3fc
--- /dev/null
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerStateNonGestureScrollingTest.kt
@@ -0,0 +1,260 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.foundation.pager
+
+import androidx.compose.foundation.AutoTestFrameClock
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.layout.onSizeChanged
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.junit4.StateRestorationTester
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.unit.dp
+import androidx.test.filters.LargeTest
+import com.google.common.truth.Truth
+import kotlin.test.assertFalse
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.withContext
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@OptIn(ExperimentalFoundationApi::class)
+@LargeTest
+@RunWith(Parameterized::class)
+class PagerStateNonGestureScrollingTest(val config: ParamConfig) : BasePagerTest(config) {
+ @Test
+ fun pagerStateNotAttached_shouldReturnDefaultValues_andChangeAfterAttached() = runBlocking {
+ // Arrange
+ val state = PagerStateImpl(5, 0.2f) { DefaultPageCount }
+
+ Truth.assertThat(state.currentPage).isEqualTo(5)
+ Truth.assertThat(state.currentPageOffsetFraction).isEqualTo(0.2f)
+
+ val currentPage = derivedStateOf { state.currentPage }
+ val currentPageOffsetFraction = derivedStateOf { state.currentPageOffsetFraction }
+
+ rule.setContent {
+ HorizontalOrVerticalPager(
+ state = state,
+ modifier = Modifier
+ .fillMaxSize()
+ .testTag(PagerTestTag)
+ .onSizeChanged { pagerSize = if (vertical) it.height else it.width },
+ pageSize = PageSize.Fill,
+ reverseLayout = config.reverseLayout,
+ pageSpacing = config.pageSpacing,
+ contentPadding = config.mainAxisContentPadding,
+ ) {
+ Page(index = it)
+ }
+ }
+
+ withContext(Dispatchers.Main + AutoTestFrameClock()) {
+ state.scrollToPage(state.currentPage + 1)
+ }
+
+ rule.runOnIdle {
+ Truth.assertThat(currentPage.value).isEqualTo(6)
+ Truth.assertThat(currentPageOffsetFraction.value).isEqualTo(0.0f)
+ }
+ }
+
+ @Test
+ fun initialPageOnPagerState_shouldDisplayThatPageFirst() {
+ // Arrange
+
+ // Act
+ createPager(initialPage = 5, modifier = Modifier.fillMaxSize())
+
+ // Assert
+ rule.onNodeWithTag("4").assertDoesNotExist()
+ rule.onNodeWithTag("5").assertIsDisplayed()
+ rule.onNodeWithTag("6").assertDoesNotExist()
+ confirmPageIsInCorrectPosition(pagerState.currentPage)
+ }
+
+ @Test
+ fun testStateRestoration() {
+ // Arrange
+ val tester = StateRestorationTester(rule)
+ lateinit var state: PagerState
+ tester.setContent {
+ state = rememberPagerState(pageCount = { DefaultPageCount })
+ scope = rememberCoroutineScope()
+ HorizontalOrVerticalPager(
+ state = state,
+ modifier = Modifier.fillMaxSize()
+ ) {
+ Page(it)
+ }
+ }
+
+ // Act
+ rule.runOnIdle {
+ scope.launch {
+ state.scrollToPage(5)
+ }
+ runBlocking {
+ state.scroll {
+ scrollBy(50f)
+ }
+ }
+ }
+
+ val previousPage = state.currentPage
+ val previousOffset = state.currentPageOffsetFraction
+ tester.emulateSavedInstanceStateRestore()
+
+ // Assert
+ rule.runOnIdle {
+ Truth.assertThat(state.currentPage).isEqualTo(previousPage)
+ Truth.assertThat(state.currentPageOffsetFraction).isEqualTo(previousOffset)
+ }
+ }
+
+ @Test
+ fun currentPageOffsetFraction_shouldNeverBeNan() {
+ rule.setContent {
+ val state = rememberPagerState(pageCount = { 10 })
+ // Read state in composition, should never be Nan
+ assertFalse { state.currentPageOffsetFraction.isNaN() }
+ HorizontalOrVerticalPager(state = state) {
+ Page(index = it)
+ }
+ }
+ }
+
+ @Test
+ fun calculatePageCountOffset_shouldBeBasedOnCurrentPage() {
+ val pageToOffsetCalculations = mutableMapOf<Int, Float>()
+ createPager(modifier = Modifier.fillMaxSize(), pageSize = { PageSize.Fixed(20.dp) }) {
+ pageToOffsetCalculations[it] = pagerState.getOffsetFractionForPage(it)
+ Page(index = it)
+ }
+
+ for ((page, offset) in pageToOffsetCalculations) {
+ val currentPage = pagerState.currentPage
+ val currentPageOffset = pagerState.currentPageOffsetFraction
+ Truth.assertThat(offset).isEqualTo((currentPage - page) + currentPageOffset)
+ }
+ }
+
+ @Test
+ fun scrollToPage_usingLaunchedEffect() {
+
+ createPager(additionalContent = {
+ LaunchedEffect(pagerState) {
+ pagerState.scrollToPage(10)
+ }
+ })
+
+ Truth.assertThat(pagerState.currentPage).isEqualTo(10)
+ confirmPageIsInCorrectPosition(10)
+ }
+
+ @Test
+ fun scrollToPageWithOffset_usingLaunchedEffect() {
+ createPager(additionalContent = {
+ LaunchedEffect(pagerState) {
+ pagerState.scrollToPage(10, 0.4f)
+ }
+ })
+
+ Truth.assertThat(pagerState.currentPage).isEqualTo(10)
+ confirmPageIsInCorrectPosition(10, pageOffset = 0.4f)
+ }
+
+ @Test
+ fun animatedScrollToPage_usingLaunchedEffect() {
+
+ createPager(additionalContent = {
+ LaunchedEffect(pagerState) {
+ pagerState.animateScrollToPage(10)
+ }
+ })
+
+ Truth.assertThat(pagerState.currentPage).isEqualTo(10)
+ confirmPageIsInCorrectPosition(10)
+ }
+
+ @Test
+ fun animatedScrollToPageWithOffset_usingLaunchedEffect() {
+
+ createPager(additionalContent = {
+ LaunchedEffect(pagerState) {
+ pagerState.animateScrollToPage(10, 0.4f)
+ }
+ })
+
+ Truth.assertThat(pagerState.currentPage).isEqualTo(10)
+ confirmPageIsInCorrectPosition(10, pageOffset = 0.4f)
+ }
+
+ @Test
+ fun animatedScrollToPage_viewPortNumberOfPages_usingLaunchedEffect_shouldNotPlaceALlPages() {
+
+ createPager(additionalContent = {
+ LaunchedEffect(pagerState) {
+ pagerState.animateScrollToPage(DefaultPageCount - 1)
+ }
+ })
+
+ // Assert
+ rule.runOnIdle {
+ Truth.assertThat(pagerState.currentPage).isEqualTo(DefaultPageCount - 1)
+ Truth.assertThat(placed).doesNotContain(DefaultPageCount / 2 - 1)
+ Truth.assertThat(placed).doesNotContain(DefaultPageCount / 2)
+ Truth.assertThat(placed).doesNotContain(DefaultPageCount / 2 + 1)
+ }
+ confirmPageIsInCorrectPosition(pagerState.currentPage)
+ }
+
+ @Test
+ fun scrollTo_beforeFirstLayout_shouldWaitForStateAndLayoutSetting() {
+ // Arrange
+
+ rule.mainClock.autoAdvance = false
+
+ // Act
+ createPager(modifier = Modifier.fillMaxSize(), additionalContent = {
+ LaunchedEffect(pagerState) {
+ pagerState.scrollToPage(5)
+ }
+ })
+
+ // Assert
+ Truth.assertThat(pagerState.currentPage).isEqualTo(5)
+ }
+
+ companion object {
+ @JvmStatic
+ @Parameterized.Parameters(name = "{0}")
+ fun params() = mutableListOf<ParamConfig>().apply {
+ for (orientation in TestOrientation) {
+ add(ParamConfig(orientation = orientation))
+ }
+ }
+ }
+}
\ No newline at end of file
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 9bf833a..fbcbe8b 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
@@ -22,21 +22,13 @@
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.derivedStateOf
-import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.layout.onSizeChanged
-import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.test.assertIsDisplayed
-import androidx.compose.ui.test.junit4.StateRestorationTester
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performTouchInput
-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.test.assertFalse
import kotlin.test.assertTrue
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -52,43 +44,6 @@
class PagerStateTest(val config: ParamConfig) : BasePagerTest(config) {
@Test
- fun pagerStateNotAttached_shouldReturnDefaultValues_andChangeAfterAttached() = runBlocking {
- // Arrange
- val state = PagerStateImpl(5, 0.2f) { DefaultPageCount }
-
- assertThat(state.currentPage).isEqualTo(5)
- assertThat(state.currentPageOffsetFraction).isEqualTo(0.2f)
-
- val currentPage = derivedStateOf { state.currentPage }
- val currentPageOffsetFraction = derivedStateOf { state.currentPageOffsetFraction }
-
- rule.setContent {
- HorizontalOrVerticalPager(
- state = state,
- modifier = Modifier
- .fillMaxSize()
- .testTag(PagerTestTag)
- .onSizeChanged { pagerSize = if (vertical) it.height else it.width },
- pageSize = PageSize.Fill,
- reverseLayout = config.reverseLayout,
- pageSpacing = config.pageSpacing,
- contentPadding = config.mainAxisContentPadding,
- ) {
- Page(index = it)
- }
- }
-
- withContext(Dispatchers.Main + AutoTestFrameClock()) {
- state.scrollToPage(state.currentPage + 1)
- }
-
- rule.runOnIdle {
- assertThat(currentPage.value).isEqualTo(6)
- assertThat(currentPageOffsetFraction.value).isEqualTo(0.0f)
- }
- }
-
- @Test
fun scrollToPage_shouldPlacePagesCorrectly() = runBlocking {
// Arrange
createPager(modifier = Modifier.fillMaxSize())
@@ -96,9 +51,11 @@
// Act and Assert
repeat(DefaultAnimationRepetition) {
assertThat(pagerState.currentPage).isEqualTo(it)
+ val nextPage = pagerState.currentPage + 1
withContext(Dispatchers.Main + AutoTestFrameClock()) {
- pagerState.scrollToPage(pagerState.currentPage + 1)
+ pagerState.scrollToPage(nextPage)
}
+ rule.mainClock.advanceTimeUntil { pagerState.currentPage == nextPage }
confirmPageIsInCorrectPosition(pagerState.currentPage)
}
}
@@ -179,9 +136,11 @@
// Act and Assert
repeat(DefaultAnimationRepetition) {
assertThat(pagerState.currentPage).isEqualTo(it)
+ val nextPage = pagerState.currentPage + 1
withContext(Dispatchers.Main + AutoTestFrameClock()) {
- pagerState.animateScrollToPage(pagerState.currentPage + 1)
+ pagerState.animateScrollToPage(nextPage)
}
+ rule.mainClock.advanceTimeUntil { pagerState.currentPage == nextPage }
confirmPageIsInCorrectPosition(pagerState.currentPage)
}
}
@@ -277,31 +236,6 @@
}
@Test
- fun scrollToPage_usingLaunchedEffect() {
-
- createPager(additionalContent = {
- LaunchedEffect(pagerState) {
- pagerState.scrollToPage(10)
- }
- })
- rule.waitForIdle()
- assertThat(pagerState.currentPage).isEqualTo(10)
- confirmPageIsInCorrectPosition(10)
- }
-
- @Test
- fun scrollToPageWithOffset_usingLaunchedEffect() {
- createPager(additionalContent = {
- LaunchedEffect(pagerState) {
- pagerState.scrollToPage(10, 0.4f)
- }
- })
- rule.waitForIdle()
- assertThat(pagerState.currentPage).isEqualTo(10)
- confirmPageIsInCorrectPosition(10, pageOffset = 0.4f)
- }
-
- @Test
fun animateScrollToPage_shouldCoerceWithinRange() = runBlocking {
// Arrange
@@ -345,69 +279,26 @@
@Test
fun animateScrollToPage_withPassedAnimation() = runBlocking {
// Arrange
-
+ rule.mainClock.autoAdvance = false
createPager(modifier = Modifier.fillMaxSize())
val differentAnimation: AnimationSpec<Float> = tween()
// Act and Assert
repeat(DefaultAnimationRepetition) {
assertThat(pagerState.currentPage).isEqualTo(it)
+ val nextPage = pagerState.currentPage + 1
withContext(Dispatchers.Main + AutoTestFrameClock()) {
pagerState.animateScrollToPage(
- pagerState.currentPage + 1,
+ nextPage,
animationSpec = differentAnimation
)
}
+ rule.mainClock.advanceTimeUntil { pagerState.currentPage == nextPage }
confirmPageIsInCorrectPosition(pagerState.currentPage)
}
}
@Test
- fun animatedScrollToPage_usingLaunchedEffect() {
-
- createPager(additionalContent = {
- LaunchedEffect(pagerState) {
- pagerState.animateScrollToPage(10)
- }
- })
- rule.waitForIdle()
- assertThat(pagerState.currentPage).isEqualTo(10)
- confirmPageIsInCorrectPosition(10)
- }
-
- @Test
- fun animatedScrollToPageWithOffset_usingLaunchedEffect() {
-
- createPager(additionalContent = {
- LaunchedEffect(pagerState) {
- pagerState.animateScrollToPage(10, 0.4f)
- }
- })
- rule.waitForIdle()
- assertThat(pagerState.currentPage).isEqualTo(10)
- confirmPageIsInCorrectPosition(10, pageOffset = 0.4f)
- }
-
- @Test
- fun animatedScrollToPage_viewPortNumberOfPages_usingLaunchedEffect_shouldNotPlaceALlPages() {
-
- createPager(additionalContent = {
- LaunchedEffect(pagerState) {
- pagerState.animateScrollToPage(DefaultPageCount - 1)
- }
- })
- rule.waitForIdle()
- // Assert
- rule.runOnIdle {
- assertThat(pagerState.currentPage).isEqualTo(DefaultPageCount - 1)
- assertThat(placed).doesNotContain(DefaultPageCount / 2 - 1)
- assertThat(placed).doesNotContain(DefaultPageCount / 2)
- assertThat(placed).doesNotContain(DefaultPageCount / 2 + 1)
- }
- confirmPageIsInCorrectPosition(pagerState.currentPage)
- }
-
- @Test
fun currentPage_shouldChangeWhenClosestPageToSnappedPositionChanges() {
// Arrange
@@ -783,103 +674,6 @@
}
}
- @Test
- fun initialPageOnPagerState_shouldDisplayThatPageFirst() {
- // Arrange
-
- // Act
- createPager(initialPage = 5, modifier = Modifier.fillMaxSize())
-
- // Assert
- rule.onNodeWithTag("4").assertDoesNotExist()
- rule.onNodeWithTag("5").assertIsDisplayed()
- rule.onNodeWithTag("6").assertDoesNotExist()
- confirmPageIsInCorrectPosition(pagerState.currentPage)
- }
-
- @Test
- fun testStateRestoration() {
- // Arrange
- val tester = StateRestorationTester(rule)
- lateinit var state: PagerState
- tester.setContent {
- state = rememberPagerState(pageCount = { DefaultPageCount })
- scope = rememberCoroutineScope()
- HorizontalOrVerticalPager(
- state = state,
- modifier = Modifier.fillMaxSize()
- ) {
- Page(it)
- }
- }
-
- // Act
- rule.runOnIdle {
- scope.launch {
- state.scrollToPage(5)
- }
- runBlocking {
- state.scroll {
- scrollBy(50f)
- }
- }
- }
-
- val previousPage = state.currentPage
- val previousOffset = state.currentPageOffsetFraction
- tester.emulateSavedInstanceStateRestore()
-
- // Assert
- rule.runOnIdle {
- assertThat(state.currentPage).isEqualTo(previousPage)
- assertThat(state.currentPageOffsetFraction).isEqualTo(previousOffset)
- }
- }
-
- @Test
- fun scrollTo_beforeFirstLayout_shouldWaitForStateAndLayoutSetting() {
- // Arrange
-
- rule.mainClock.autoAdvance = false
-
- // Act
- createPager(modifier = Modifier.fillMaxSize(), additionalContent = {
- LaunchedEffect(pagerState) {
- pagerState.scrollToPage(5)
- }
- })
-
- // Assert
- assertThat(pagerState.currentPage).isEqualTo(5)
- }
-
- @Test
- fun currentPageOffsetFraction_shouldNeverBeNan() {
- rule.setContent {
- val state = rememberPagerState(pageCount = { 10 })
- // Read state in composition, should never be Nan
- assertFalse { state.currentPageOffsetFraction.isNaN() }
- HorizontalOrVerticalPager(state = state) {
- Page(index = it)
- }
- }
- }
-
- @Test
- fun calculatePageCountOffset_shouldBeBasedOnCurrentPage() {
- val pageToOffsetCalculations = mutableMapOf<Int, Float>()
- createPager(modifier = Modifier.fillMaxSize(), pageSize = { PageSize.Fixed(20.dp) }) {
- pageToOffsetCalculations[it] = pagerState.getOffsetFractionForPage(it)
- Page(index = it)
- }
-
- for ((page, offset) in pageToOffsetCalculations) {
- val currentPage = pagerState.currentPage
- val currentPageOffset = pagerState.currentPageOffsetFraction
- assertThat(offset).isEqualTo((currentPage - page) + currentPageOffset)
- }
- }
-
companion object {
@JvmStatic
@Parameterized.Parameters(name = "{0}")
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
index 025ea33..cb376a7 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
@@ -70,8 +70,9 @@
* @see androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider for the implementation
* of a [SnapLayoutInfoProvider] that uses [androidx.compose.foundation.lazy.LazyListState].
*
- * Please refer to the sample to learn how to use this API.
+ * Please refer to the samples to learn how to use this API.
* @sample androidx.compose.foundation.samples.SimpleHorizontalPagerSample
+ * @sample androidx.compose.foundation.samples.HorizontalPagerWithScrollableContent
*
* @param state The state to control this pager
* @param modifier A modifier instance to be applied to this Pager outer layout
diff --git a/compose/material3/material3/src/androidMain/res/values-af/strings.xml b/compose/material3/material3/src/androidMain/res/values-af/strings.xml
deleted file mode 100644
index 50ba928..0000000
--- a/compose/material3/material3/src/androidMain/res/values-af/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialoog"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Maak toe"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Soek"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Voorstelle hieronder"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Kies datum"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Geselekteerde datum"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Skakel oor na kies van ’n jaar"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Swiep om ’n jaar te kies of tik om terug te skakel om ’n dag te kies"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Verander na volgende maand"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Verander na vorige maand"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Gaan na jaar %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Huidige keuse: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Geen"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Vandag"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Jaarkieser sigbaar"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Kies datum"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Datum wat ingevoer is"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Datum"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Datum wat ingevoer is: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Geen"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Datum word nie toegelaat nie: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Datum pas nie by die verwagte patroon nie: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datum val buite die omvang van die verwagte jaartal %1$s-%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Skakel oor na kalenderinvoermodus"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Skakel oor na teksinvoermodus"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Rollees om later jare te wys"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Rollees om vroeër jare te wys"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Kies datums"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Begindatum"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Einddatum"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Rollees om die volgende maand te wys"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Rollees om die vorige maand te wys"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Binne reikwydte"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Voer datums in"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Ongeldige datumreeksinvoer"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Sleephandvatsel"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Vou onderste blad in"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Maak onderste blad toe"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Vou onderste blad uit"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Nutswenk"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Wys nutswenk"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"nm."</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"vm."</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Kies vm. of nm."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Kies uur"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Kies minute"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d uur"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d uur"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minute"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuut"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Uur"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"vir minute"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"vir uur"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-am/strings.xml b/compose/material3/material3/src/androidMain/res/values-am/strings.xml
deleted file mode 100644
index 7c545ef..0000000
--- a/compose/material3/material3/src/androidMain/res/values-am/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"መገናኛ"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"አሰናብት"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"ፍለጋ"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"የአስተያየት ጥቆማዎች ከታች"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"ቀን ይምረጡ"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"የተመረጠው ቀን"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"ወደ ዓመት መምረጥ ቀይር"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"ዓመት ለመምረጥ ያንሸራትቱ ወይም ወደ ቀንን መምረጥ መልሶ ለመቀየር መታ ያድርጉ"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"ወደ የሚቀጥለው ወር ቀይር"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"ወደ ቀዳሚው ወር ቀይር"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"ወደ ዓመት %1$s ያስሱ"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"የአሁን ምርጫ፦ %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"ምንም"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"ዛሬ"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"ዓመት መራጭ ይታያል"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"ቀን ይምረጡ"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"የገባው ቀን"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"ቀን"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"የገባው ቀን፦ %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"ምንም"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"ቀን አልተፈቀደም፦ %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"ቀኑ ከተጠበቀው ስርዓተ ጥለት ጋር አይዛመድም፦ %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"ቀን ከተጠበቀው የዓመት ክልል ውጪ ነው %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ወደ የቀን መቁጠሪያ ግቤት ሁነታ ቀይር"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"ወደ የጽሁፍ ግቤት ሁነታ ቀይር"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"ከዚህ በኋላ ያሉ ዓመታትን ለማሳየት ይሸብልሉ"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"ቀደም ያሉ ዓመታትን ለማሳየት ይሸብልሉ"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"ቀናትን ይምረጡ"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"የመጀመሪያ ቀን"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"የማብቂያ ቀን"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"ቀጣዩን ወር ለማሳየት ይሸብልሉ"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"ቀዳሚውን ወር ለማሳየት ይሸብልሉ"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"በክልል ውስጥ"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"ቀናትን ያስገቡ"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"ልክ ያልሆነ የቀን ክልል ግቤት"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"መያዣ ይጎትቱ"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"የግርጌ ሉህን ይሰብስቡ"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"የግርጌ ሉህን ይሰብስቡ"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"የግርጌ ሉህ ይዘርጉ"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"የመሣሪያ ጥቆማ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"መሣሪያ ጥቆማን አሳይ"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"ከሰዓት"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"ጠዋት"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"ጠዋት ወይም ከሰዓትን ይምረጡ"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"ሰዓት ምረጥ"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"ደቂቃዎች ምረጥ"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d ሰዓት"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ሰዓታት"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d ደቂቃዎች"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"ደቂቃ"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"ሰዓት"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"ለደቂቃዎች"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"ለሰዓት"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ar/strings.xml b/compose/material3/material3/src/androidMain/res/values-ar/strings.xml
deleted file mode 100644
index 3707858..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ar/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"مربّع حوار"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"إغلاق"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"بحث"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"إليك الاقتراحات:"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"اختيار تاريخ"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"التاريخ المحدَّد"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"التبديل لاختيار سنة"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"مرِّر سريعًا لتحديد عام، أو انقر للرجوع إلى تحديد يوم."</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"التغيير إلى الشهر التالي"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"التغيير إلى الشهر السابق"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"الانتقال إلى عام %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"التحديد الحالي: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"بدون تاريخ"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"اليوم"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"أداة اختيار الأعوام مرئية"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"اختيار تاريخ"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"التاريخ الذي تم إدخاله"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"التاريخ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"التاريخ الذي تم إدخاله: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"بدون تاريخ"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"التاريخ غير مسموح به: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"لا يتوافق التاريخ مع النمط المتوقَّع: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"التاريخ خارج نطاق الأعوام المتوقَّع: %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"التبديل إلى وضع \"الإدخال في التقويم\""</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"التبديل إلى وضع \"إدخال النص\""</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"انتقِل للأسفل/للأعلى لإظهار السنوات التالية."</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"انتقِل للأسفل/للأعلى لإظهار السنوات السابقة."</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"اختيار التواريخ"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"تاريخ البدء"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"تاريخ الانتهاء"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"انتقِل للأسفل/للأعلى لإظهار الشهر التالي."</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"انتقِل للأسفل/للأعلى لإظهار الشهر السابق."</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"في النطاق"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"إدخال التواريخ"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"إدخال نطاق زمني غير صالح"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"مقبض السحب"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"تصغير البطاقة السفلية"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"إغلاق البطاقة السفلية"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"توسيع البطاقة السفلية"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"تلميح"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"إظهار التلميح"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"م"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"ص"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"يُرجى اختيار ص (صباحًا) أو م (مساءً)."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"اختيار الساعة"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"اختيار الدقائق"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"الساعة %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ساعة"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d دقيقة"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"دقيقة"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"ساعة"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"لمدة دقائق"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"لمدة ساعة"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-as/strings.xml b/compose/material3/material3/src/androidMain/res/values-as/strings.xml
deleted file mode 100644
index 8427a67..0000000
--- a/compose/material3/material3/src/androidMain/res/values-as/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"ডায়ল’গ"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"অগ্ৰাহ্য কৰক"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"সন্ধান কৰক"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"তলত পৰামৰ্শ দেখুওৱা হৈছে"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"তাৰিখ বাছনি কৰক"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"বাছনি কৰা তাৰিখ"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"বছৰ বাছনি কৰাৰ ছুইচ"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"এটা বছৰ বাছনি কৰিবলৈ ছোৱাইপ কৰক অথবা এটা দিন বাছনি কৰাৰ সুবিধাটোলৈ উভতি যাবলৈ টিপক"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"পৰৱৰ্তী মাহলৈ সলনি কৰক"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"পূৰ্বৱৰ্তী মাহলৈ সলনি কৰক"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"বৰ্ষ %1$sলৈ নেভিগে’ট কৰক"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"বৰ্তমানৰ বাছনি: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"একো নাই"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"আজি"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"বছৰ বাছনিকৰ্তা দৃশ্যমান"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"তাৰিখ বাছনি কৰক"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"দিয়া তাৰিখ"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"তাৰিখ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"দিয়া তাৰিখ: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"একো নাই"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"অনুমোদিত নোহোৱা তাৰিখ: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"তাৰিখটো এই প্ৰত্যাশিত আৰ্হিটোৰ সৈতে মিলা নাই: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"তাৰিখটো প্ৰত্যাশিত বছৰৰ পৰিসৰ %1$s - %2$sৰ বাহিৰৰ"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"কেলেণ্ডাৰ ইনপুট ম’ডলৈ সলনি কৰক"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"পাঠ ইনপুট ম’ডলৈ সলনি কৰক"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"পাছৰ বছৰবোৰ দেখুৱাবলৈ স্ক্ৰ’ল কৰক"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"আগৰ বছৰবোৰ দেখুৱাবলৈ স্ক্ৰ’ল কৰক"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"তাৰিখ বাছনি কৰক"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"আৰম্ভণিৰ তাৰিখ"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"সমাপ্তিৰ তাৰিখ"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"পৰৱৰ্তী মাহটো দেখুৱাবলৈ স্ক্ৰ’ল কৰক"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"পূৰ্বৱৰ্তী মাহটো দেখুৱাবলৈ স্ক্ৰ’ল কৰক"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"পৰিসৰৰ ভিতৰত আছে"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"তাৰিখ দিয়ক"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"অমান্য তাৰিখৰ পৰিসৰৰ ইনপুট"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ড্ৰেগ হেণ্ডেল"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"তলৰ শ্বীটখন সংকোচন কৰক"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"তলৰ শ্বীটখন অগ্ৰাহ্য কৰক"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"তলৰ শ্বীটখন বিস্তাৰ কৰক"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"টুলটিপ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"টুলটিপ দেখুৱাওক"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"পৰাহ্ন"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"পুৱা"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"পূৰ্বাহ্ন অথবা অপৰাহ্ন বাছনি কৰক"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"ঘণ্টা বাছনি কৰক"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"মিনিট বাছনি কৰক"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d বাজিছে"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%d ঘণ্টা"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%d মিনিট"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"মিনিট"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"ঘণ্টা"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"মিনিটৰ বাবে"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"ঘণ্টাৰ বাবে"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-az/strings.xml b/compose/material3/material3/src/androidMain/res/values-az/strings.xml
deleted file mode 100644
index c6d0f72..0000000
--- a/compose/material3/material3/src/androidMain/res/values-az/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialoq"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Qapadın"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Axtarış"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Təkliflər aşağıdadır"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Tarix seçin"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Seçilmiş tarix"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"İl seçiminə keçin"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"İl seçmək üçün sürüşdürün və ya gün seçiminə qayıtmaq üçün toxunun"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Növbəti aya dəyişin"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Əvvəlki aya dəyişin"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Bu ilə keçin: %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Cari seçim: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Heç biri"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Bu gün"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"İl seçicisi görünür"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Tarix seçin"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Daxil edilmiş tarix"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Tarix"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Daxil edilmiş tarix: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Heç biri"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Tarixə icazə verilmir: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Tarix gözlənilən modelə uyğun gəlmir: %1$s"</string>
- <string name="m3c_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="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Təqvim daxiletmə rejiminə keçin"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Mətn daxiletmə rejiminə keçin"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Sonrakı illəri göstərmək üçün sürüşdürün"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Əvvəlki illəri göstərmək üçün sürüşdürün"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Tarixləri seçin"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Başlama tarixi"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Bitmə tarixi"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Növbəti ayı göstərmək üçün sürüşdürün"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Əvvəlki ayı göstərmək üçün sürüşdürün"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Bu aralıqda"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Tarixləri daxil edin"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Yanlış tarix aralığı daxiletməsi"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Dəstəyi çəkin"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Aşağıdakı vərəqi yığcamlaşdırın"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Aşağıdakı vərəqi rədd edin"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Aşağıdakı vərəqi genişləndirin"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Alət izahı"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"İpucu göstərin"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Gündüz və ya axşam seçin"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Saatı seçin"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Dəqiqə seçin"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"Saat: %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d saat"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d dəqiqə"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Dəqiqə"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Saat"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"dəqiqəlik"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"saatlıq"</string>
-</resources>
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
deleted file mode 100644
index bfca44cb..0000000
--- a/compose/material3/material3/src/androidMain/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dijalog"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Odbacite"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Pretraga"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Predlozi su u nastavku"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Izaberite datum"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Izabrani datum"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Pređite na izbor godine"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Prevucite da biste izabrali godinu ili dodirnite da biste se vratili na izbor dana"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Pređite na sledeći mesec"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Pređite na prethodni mesec"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Idite na godinu: %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Aktuelni izbor: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Ništa"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Danas"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Vidljiv birač godina"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Izaberite datum"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Uneti datum"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Datum"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Uneti datum: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Ništa"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Datum nije dozvoljen: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Datum ne odgovara očekivanom šablonu: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datum je izvan očekivanog opsega godina %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Pređite na režim unosa u Kalendaru"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Pređite na režim unosa teksta"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Pomerajte da bi se prikazale kasnije godine"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Pomerajte da bi se prikazale ranije godine"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Izaberite datume"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Datum početka"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Datum završetka"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Pomerajte da bi se prikazao sledeći mesec"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Pomerajte da bi se prikazao prethodni mesec"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"U dometu"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Unesite datume"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Unos opsega datuma je nevažeći"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Identifikator za prevlačenje"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Skupi donju tabelu"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Odbaci donju tabelu"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Proširi donju tabelu"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Objašnjenje"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Prikaži objašnjenje"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"po"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"pr"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Izaberite pre podne ili po podne"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Izaberite sat"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Izaberite minute"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d č"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d č"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d min"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minut"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Sat"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"za minute"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"za sate"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-be/strings.xml b/compose/material3/material3/src/androidMain/res/values-be/strings.xml
deleted file mode 100644
index cbb9ad2..0000000
--- a/compose/material3/material3/src/androidMain/res/values-be/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Дыялогавае акно"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Закрыць"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Пошук"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Прапановы ўнізе"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Выберыце дату"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Выбраная дата"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Перайсці да выбару года"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Правядзіце пальцам, каб выбраць год, або націсніце, каб вярнуцца да выбару даты"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Перайсці да наступнага месяца"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Перайсці да папярэдняга месяца"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Перайсці ў год %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Бягучы выбар: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Не выбрана"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Сёння"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Бачны інструмент выбару года"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Выберыце дату"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Уведзеная дата"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Дата"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Уведзеная дата: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Без абмежаванняў"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Дата забаронена: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Дата не адпавядае ўзору: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Дата выходзіць за дазволены дыяпазон гадоў %1$s-%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Пераключыцца ў рэжым уводу \"Каляндар\""</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Пераключыцца ў рэжым уводу \"Тэкст\""</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Прагартайце экран, каб праглядзець пазнейшыя гады"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Прагартайце экран, каб праглядзець ранейшыя гады"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Выберыце даты"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Дата пачатку"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Дата заканчэння"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Прагартайце экран, каб праглядзець наступны месяц"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Прагартайце экран, каб праглядзець мінулы месяц"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"У зоне дасягальнасці"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Увядзіце даты"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Уведзены няправільны дыяпазон дат"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Маркер перацягвання"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Згарнуць ніжні аркуш"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Закрыць ніжні аркуш"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Разгарнуць ніжні аркуш"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Падказка"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Паказваць усплывальную падказку"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"пасля паўдня"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"да паўдня"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Выберыце AM (да паўдня) або PM (пасля паўдня)"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Выберыце гадзіны"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Выберыце хвіліны"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d гадз"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d гадз"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d хв"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Хвіліны"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Гадзіны"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"хвіліны"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"гадзіны"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-bg/strings.xml b/compose/material3/material3/src/androidMain/res/values-bg/strings.xml
deleted file mode 100644
index 557d55a..0000000
--- a/compose/material3/material3/src/androidMain/res/values-bg/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Диалогов прозорец"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Отхвърляне"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Търсене"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Предложенията са по-долу"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Избиране на дата"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Избрана дата"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Превключване към избиране на година"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Прекарайте пръст, за да изберете година, или докоснете, за да се върнете към избора на ден"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Преминаване към следващия месец"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Преминаване към предишния месец"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Навигиране до %1$s година"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Текущ избор: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Без"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Днес"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Инструментът за избор на година е видим"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Избиране на дата"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Въведена дата"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Дата"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Въведена дата: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Няма"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Датата не е разрешена: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Датата не е в очаквания формат: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Датата е извън очаквания годишен диапазон: %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Превключване към режим за въвеждане в календар"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Превключване към режим за въвеждане на текст"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Превъртете, за да видите следващите години"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Превъртете, за да видите миналите години"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Избиране на дати"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Начална дата"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Крайна дата"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Превъртете, за да видите следващия месец"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Превъртете, за да видите предишния месец"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"В диапазона"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Въведете дати"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Въведен е невалиден период от време"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Манипулатор за преместване с плъзгане"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Свиване на долния лист"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Отхвърляне на долния лист"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Разгъване на долния лист"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Подсказка"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Показване на подсказка"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Изберете AM или PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Избиране на час"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Избиране на минути"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d часа"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d часа"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d минути"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Минута"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Час"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"за минутите"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"за часа"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-bn/strings.xml b/compose/material3/material3/src/androidMain/res/values-bn/strings.xml
deleted file mode 100644
index 78f48ce..0000000
--- a/compose/material3/material3/src/androidMain/res/values-bn/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"ডায়ালগ বক্স"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"বাতিল করুন"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"সার্চ করুন"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"নিচে দেওয়া সাজেশন"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"তারিখ বেছে নিন"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"বেছে নেওয়া তারিখ"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"কোনও একটি বছর বেছে নিতে পাল্টে নিন"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"একটি বছর বেছে নিতে সোয়াইপ করুন অথবা কোনও একটি দিন বাছতে ফিরে গিয়ে সুইচে ট্যাপ করুন"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"আগামী মাসে পরিবর্তন করুন"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"আগের মাসে পরিবর্তন করুন"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"নেভিগেট করে %1$s বছরে যান"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"বর্তমানে বেছে নেওয়া হয়েছে: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"কোনওটিই নয়"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"আজ"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"বছর বেছে নেওয়ার তালিকা দেখা যাচ্ছে"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"তারিখ বেছে নিন"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"উল্লেখ করা তারিখ"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"তারিখ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"উল্লেখ করা তারিখ: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"কোনওটিই নয়"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"এই তারিখ লেখা যাবে না: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"প্রত্যাশিত প্যাটার্নের সাথে তারিখ মিলছে না: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"প্রত্যাশিত বছরের রেঞ্জের বাইরের তারিখ %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"\'ক্যালেন্ডার ইনপুট\' মোডে বদল করুন"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"\'টেক্সট ইনপুট\' মোডে বদল করুন"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"পরের বছর দেখতে স্ক্রল করুন"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"আগের বছর দেখতে স্ক্রল করুন"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"তারিখ বেছে নিন"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"শুরু হওয়ার তারিখ"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"শেষ হওয়ার তারিখ"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"পরের মাস দেখতে স্ক্রল করুন"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"আগের মাস দেখতে স্ক্রল করুন"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"সীমার মধ্যে"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"তারিখ লিখুন"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"তারিখের ব্যাপ্তি সম্পর্কিত ইনপুট ভুল দেওয়া আছে"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"টেনে আনার হ্যান্ডেল"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"স্ক্রিনের নিচে অ্যাটাচ করা শিট আড়াল করুন"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"স্ক্রিনের নিচে অ্যাটাচ করা শিট বাতিল করুন"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"স্ক্রিনের নিচে অ্যাটাচ করা শিট বড় করুন"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"টুলটিপ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"টুলটিপ দেখান"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM বা PM বেছে নিন"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"ঘণ্টা বেছে নিন"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"মিনিট বেছে নিন"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d টা"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ঘণ্টা"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d মিনিট"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"মিনিট"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"ঘণ্টা"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"এত মিনিটের জন্য"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"এত ঘণ্টার জন্য"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-bs/strings.xml b/compose/material3/material3/src/androidMain/res/values-bs/strings.xml
deleted file mode 100644
index 74b0671..0000000
--- a/compose/material3/material3/src/androidMain/res/values-bs/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dijaloški okvir"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Odbacivanje"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Pretraživanje"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Prijedlozi su u nastavku"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Odabir datuma"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Odabrani datum"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Prebaci na odabir godine"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Prevucite da odaberete godinu ili dodirnite da se vratite na odabir dana"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Promijeni na sljedeći mjesec"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Promijeni na prethodni mjesec"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Odlazak na %1$s. godinu"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Trenutni odabir: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Ništa"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Danas"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Birač godine je vidljiv"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Odaberite datum"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Unesen je datum"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Datum"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Unesen je datum: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Ništa"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Datum nije dozvoljen: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Datumi se ne podudaraju s očekivanim obrascem: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datum je izvan očekivanog raspona %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Prebacivanje na način rada unosa kalendara"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Prebacivanje na način rada unosa teksta"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Kliznite da se prikažu kasnije godine"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Kliznite da se prikažu ranije godine"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Odaberite datume"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Datum početka"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Datum završetka"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Kliznite da se prikaže sljedeći mjesec"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Kliznite da se prikaže prethodni mjesec"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"U dometu"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Unesite datume"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Nevažeći unos raspona datuma"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Ručica za prevlačenje"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Sužavanje donje tabele"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Odbacivanje donje tabele"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Proširivanje donje tabele"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Skočni opis"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Prikaži skočni opis"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"poslijepodne"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"prij."</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Odaberite prijepodne ili poslijepodne"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Odaberite sate"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Odaberite minute"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d h"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d h"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d min"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuta"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Sat"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"za minute"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"za sat"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ca/strings.xml b/compose/material3/material3/src/androidMain/res/values-ca/strings.xml
deleted file mode 100644
index fde4338..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ca/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Diàleg"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Ignora"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Cerca"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Suggeriments a continuació"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Selecciona la data"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Data seleccionada"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Canvia a la selecció de l\'any"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Llisca per seleccionar un any o toca per tornar a seleccionar un dia"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Canvia al mes següent"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Canvia al mes anterior"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navega fins a l\'any %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Selecció actual: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Cap"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Avui"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Selector d\'any visible"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Selecciona la data"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Data introduïda"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Data"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Data introduïda: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Cap"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Data no permesa: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"La data no coincideix amb el patró esperat: %1$s"</string>
- <string name="m3c_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="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Canvia al mode d\'introducció de dades del calendari"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Canvia al mode d\'introducció de text"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Desplaça\'t per mostrar els darrers anys"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Desplaça\'t per mostrar els anys anteriors"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Selecciona les dates"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Data d\'inici"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Data de finalització"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Desplaça\'t per mostrar el mes següent"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Desplaça\'t per mostrar el mes anterior"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Dins de l\'interval"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Introdueix les dates"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"S\'ha introduït un interval de dades no vàlid"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Ansa per arrossegar"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Replega el full inferior"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Ignora el full inferior"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Desplega el full inferior"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Descripció emergent"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Mostra la descripció emergent"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Selecciona AM o PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Selecciona l\'hora"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Selecciona els minuts"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d en punt"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d hores"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minuts"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minut"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hora"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"per als minuts"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"per a l\'hora"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-cs/strings.xml b/compose/material3/material3/src/androidMain/res/values-cs/strings.xml
deleted file mode 100644
index b0effce..0000000
--- a/compose/material3/material3/src/androidMain/res/values-cs/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialogové okno"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Zavřít"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Hledat"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Návrh je níže"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Vybrat datum"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Vybrané datum"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Přepnout na výběr roku"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Přejetím prstem vyberte rok nebo se klepnutím vraťte k výběru dne"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Přejít na další měsíc"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Přejít na předchozí měsíc"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Přejít na rok %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Aktuální výběr: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Žádné"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Dnes"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Je vidět výběr roku"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Vybrat datum"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Zadané datum"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Datum"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Zadané datum: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Žádné"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Nepovolené datum: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Datum neodpovídá očekávanému vzoru: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datum mimo očekávaný rozsah roků %1$s–%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Přepnout na režim zadávání do kalendáře"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Přepnout na režim zadávání textu"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Posunutím zobrazíte pozdější roky"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Posunutím zobrazíte předchozí roky"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Vyberte data"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Datum zahájení"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Datum ukončení"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Posunutím zobrazíte další měsíc"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Posunutím zobrazíte předchozí měsíc"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"V rozsahu"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Zadejte data"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Neplatné období"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Úchyt pro přetažení"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Sbalit spodní tabulku"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Zavřít spodní tabulku"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Rozbalit spodní tabulku"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Popisek"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Zobrazit popisek"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Vyberte AM nebo PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Vybrat hodinu"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Vyberte minuty"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d hodin"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d hodin"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minut"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuta"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hodina"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"pro minuty"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"pro hodinu"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-da/strings.xml b/compose/material3/material3/src/androidMain/res/values-da/strings.xml
deleted file mode 100644
index 2790036..0000000
--- a/compose/material3/material3/src/androidMain/res/values-da/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialogboks"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Afvis"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Søg"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Forslag nedenfor"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Vælg dato"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Valgt dato"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Skift til valg af år"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Stryg for at vælge et år, eller tryk for at skifte tilbage til datovælgeren"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Skift til næste måned"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Skift til forrige måned"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Naviger til år %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Aktuelt valg: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Ingen"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"I dag"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Årsvælgeren er synlig"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Vælg dato"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Angivet dato"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Dato"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Angivet dato: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Ingen"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Datoen er ikke tilladt: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Datoen svarer ikke til det forventede format: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datoen er uden for det forventede årsinterval: %1$s-%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Skift til input-tilstand for kalender"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Skift til input-tilstand for tekst"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Rul for at vise senere år"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Rul for at vise tidligere år"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Vælg datoer"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Startdato"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Slutdato"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Rul for at vise næste måned"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Rul for at vise forrige måned"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Inden for de valgte dage"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Angiv datoer"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Ugyldig angivelse af datainterval"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Håndtag"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Skjul felt i bunden"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Luk felt i bunden"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Udvid felt i bunden"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Værktøjstip"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Se værktøjstip"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Vælg AM eller PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Vælg time"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Vælg minutter"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"kl. %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d timer"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutter"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minut"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Time"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"for minutter"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"for time"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-de/strings.xml b/compose/material3/material3/src/androidMain/res/values-de/strings.xml
deleted file mode 100644
index bc43c82..0000000
--- a/compose/material3/material3/src/androidMain/res/values-de/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialogfeld"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Schließen"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Suchen"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Vorschläge unten"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Datum auswählen"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Ausgewähltes Datum"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Zur Jahresauswahl wechseln"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Wischen, um ein Jahr auszuwählen, oder tippen, um zur Tagesauswahl zurückzukehren"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Zum nächsten Monat wechseln"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Zum vorherigen Monat wechseln"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Zum Jahr %1$s wechseln"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Aktuelle Auswahl: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Keine"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Heute"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Jahresauswahl sichtbar"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Datum auswählen"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Eingabedatum:"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Datum"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Eingabedatum: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Kein Datum"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Unzulässiges Datum: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Datum entspricht nicht dem erwarteten Format: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datum liegt außerhalb des erwarteten Jahresbereichs (%1$s–%2$s)"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"In den Kalendereingabemodus wechseln"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"In den Texteingabemodus wechseln"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Zum Ansehen nachfolgender Jahre scrollen"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Zum Ansehen vorheriger Jahre scrollen"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Daten auswählen"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Startdatum"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Enddatum"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Zum Ansehen des nächsten Monats scrollen"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Zum Ansehen des vorherigen Monats scrollen"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Im Zeitraum"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Daten eingeben"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Angegebener Zeitraum ungültig"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Ziehpunkt"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Ansicht am unteren Rand minimieren"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Ansicht am unteren Rand schließen"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Ansicht am unteren Rand maximieren"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Kurzinfo"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Kurzinfo anzeigen"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM oder PM auswählen"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Stunde auswählen"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Minuten auswählen"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d Uhr"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d Stunden"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d Minuten"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minute"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Stunde"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"für Minuten"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"für Stunde"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-el/strings.xml b/compose/material3/material3/src/androidMain/res/values-el/strings.xml
deleted file mode 100644
index 544c36a..0000000
--- a/compose/material3/material3/src/androidMain/res/values-el/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Παράθυρο διαλόγου"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Παράβλεψη"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Αναζήτηση"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Προτάσεις παρακάτω"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Επιλογή ημερομηνίας"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Επιλεγμένη ημερομηνία"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Εναλλαγή σε επιλογή έτους"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Σύρετε για να επιλέξετε ένα έτος ή πατήστε για να επιστρέψετε στην επιλογή ημέρας."</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Αλλαγή στον επόμενο μήνα"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Αλλαγή στον προηγούμενο μήνα"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Μετάβαση στο έτος %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Τρέχουσα επιλογή: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Καμία"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Σήμερα"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Το εργαλείο επιλογής έτους είναι ορατό"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Επιλογή ημερομηνίας"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Εισαγωγή ημερομηνίας"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Ημερομηνία"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Εισαγωγή ημερομηνίας: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Καμία"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Η ημερομηνία δεν επιτρέπεται: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Η ημερομηνία δεν αντιστοιχεί στο αναμενόμενο μοτίβο: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Η ημερομηνία είναι εκτός του αναμενόμενου εύρους ετών %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Εναλλαγή στη λειτουργία εισαγωγής ημερολογίου"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Εναλλαγή στη λειτουργία εισαγωγής κειμένου"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Κάντε κύλιση για εμφάνιση επόμενων ετών"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Κάντε κύλιση για εμφάνιση προηγούμενων ετών"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Επιλογή ημερομηνιών"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Ημερομηνία έναρξης"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Ημερομηνία λήξης"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Κάντε κύλιση για εμφάνιση του επόμενου μήνα"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Κάντε κύλιση για εμφάνιση του προηγούμενου μήνα"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Εντός εύρους"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Εισαγωγή ημερομηνιών"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Μη έγκυρη εισαγωγή εύρους ημερομηνιών"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Λαβή μεταφοράς"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Σύμπτυξη φύλλου κάτω μέρους"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Παράβλεψη φύλλου κάτω μέρους"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Ανάπτυξη φύλλου κάτω μέρους"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Επεξήγηση εργαλείου"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Προβολή επεξήγησης"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"ΜΜ"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"ΠΜ"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Επιλέξτε π.μ. ή μ.μ."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Επιλογή ώρας"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Επιλογή λεπτών"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d η ώρα"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"Ώρα %1$d"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d λεπτά"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Λεπτό"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Ώρα"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"για λεπτά"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"για ώρα"</string>
-</resources>
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
deleted file mode 100644
index d0dfceb..0000000
--- a/compose/material3/material3/src/androidMain/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialogue"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Dismiss"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Search"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Suggestions below"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Select date"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Selected date"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Switch to selecting a year"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Swipe to select a year, or tap to switch back to selecting a day"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Change to next month"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Change to previous month"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navigate to year %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Current selection: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"None"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Today"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Year picker visible"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Select date"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Entered date"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Date"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Entered date: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"None"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Date not allowed: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Date does not match expected pattern: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Date out of expected year range %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Switch to calendar input mode"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Switch to text input mode"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Scroll to show later years"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Scroll to show earlier years"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Select dates"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Start date"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"End date"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Scroll to show the next month"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Scroll to show the previous month"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"In range"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Enter dates"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Invalid date range input"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Drag handle"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Collapse bottom sheet"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Dismiss bottom sheet"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Expand bottom sheet"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Tooltip"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Show tooltip"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Select a.m. or p.m."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Select hour"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Select minutes"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d o\'clock"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d hours"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutes"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minute"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hour"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"for minutes"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"for hour"</string>
-</resources>
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 09aad5d..e1286b7 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
@@ -17,57 +17,112 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialog"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Dismiss"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Search"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Suggestions below"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Select date"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Selected date"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Switch to selecting a year"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Swipe to select a year, or tap to switch back to selecting a day"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Change to next month"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Change to previous month"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navigate to year %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Current selection: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"None"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Today"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Year picker visible"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Select date"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Entered date"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Date"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Entered date: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"None"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Date not allowed: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Date does not match expected pattern: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Date out of expected year range %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Switch to calendar input mode"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Switch to text input mode"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Scroll to show later years"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Scroll to show earlier years"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Select dates"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Start date"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"End date"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Scroll to show the next month"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Scroll to show the previous month"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"In range"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Enter dates"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Invalid date range input"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Drag handle"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Collapse bottom sheet"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Dismiss bottom sheet"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Expand bottom sheet"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Tooltip"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Show tooltip"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Select AM or PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Select hour"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Select minutes"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d o\'clock"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d hours"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutes"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minute"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hour"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"for minutes"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"for hour"</string>
+ <!-- no translation found for m3c_dialog (7617233117134790350) -->
+ <skip />
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Expanded"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Collapsed"</string>
+ <!-- no translation found for m3c_snackbar_dismiss (6152755701819882931) -->
+ <skip />
+ <!-- no translation found for m3c_search_bar_search (6152806324422087846) -->
+ <skip />
+ <!-- no translation found for m3c_suggestions_available (7655536806087401899) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_title (7430790972741451689) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_headline (7605002211875882969) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_year_selection (791651718641787594) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_day_selection (395627960681594326) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_next_month (7142101321095356500) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_previous_month (228438865139394590) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_navigate_to_year_description (8436650776581492840) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_headline_description (3664277305226978227) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_no_selection_description (5811000998184572395) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_today_description (3199387177749801575) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_year_picker_pane_title (2068382232816991922) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_title (7306227249789210568) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_headline (8166741421776570875) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_label (2895559812010326913) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_headline_description (229313757840775812) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_no_input_description (1237013946323089826) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_invalid_not_allowed (2521768508935305279) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_invalid_for_pattern (6116910750161463197) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_invalid_year_range (7052898923934555305) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_calendar_mode (1804346892470238807) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_input_mode (2219746470065162704) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_scroll_to_later_years (5727367015496556177) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_scroll_to_earlier_years (7813882352367152251) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_title (3134165431120340385) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_start_headline (4665981448952749820) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_end_headline (4947636797751277713) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_scroll_to_next_month (602077859540990149) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_scroll_to_previous_month (4592174524846109496) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_day_in_range (2138321128465719402) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_input_title (3148384720560189467) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_input_invalid_range_input (3190049423327661366) -->
+ <skip />
+ <!-- no translation found for m3c_bottom_sheet_drag_handle_description (8403354765404029791) -->
+ <skip />
+ <!-- no translation found for m3c_bottom_sheet_collapse_description (2988463736136100848) -->
+ <skip />
+ <!-- no translation found for m3c_bottom_sheet_dismiss_description (1555567894577437024) -->
+ <skip />
+ <!-- no translation found for m3c_bottom_sheet_expand_description (6670819569745899763) -->
+ <skip />
+ <!-- no translation found for m3c_tooltip_pane_description (5460405025248574620) -->
+ <skip />
+ <!-- no translation found for m3c_tooltip_long_press_label (1805687647081129904) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_pm (6616362054113087709) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_am (2786685010796619560) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_period_toggle_description (5865171949528594571) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_hour_selection (8876759303332837035) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_minute_selection (4699133535056739733) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_hour_suffix (3458167507790628988) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_hour_24h_suffix (9179527532316922345) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_minute_suffix (5064177921781937179) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_minute (4313071914266462005) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_hour (2349193472625211372) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_minute_text_field (7661234488295443182) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_hour_text_field (6973808109666874069) -->
+ <skip />
</resources>
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
deleted file mode 100644
index d0dfceb..0000000
--- a/compose/material3/material3/src/androidMain/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialogue"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Dismiss"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Search"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Suggestions below"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Select date"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Selected date"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Switch to selecting a year"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Swipe to select a year, or tap to switch back to selecting a day"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Change to next month"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Change to previous month"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navigate to year %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Current selection: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"None"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Today"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Year picker visible"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Select date"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Entered date"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Date"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Entered date: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"None"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Date not allowed: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Date does not match expected pattern: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Date out of expected year range %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Switch to calendar input mode"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Switch to text input mode"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Scroll to show later years"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Scroll to show earlier years"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Select dates"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Start date"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"End date"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Scroll to show the next month"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Scroll to show the previous month"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"In range"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Enter dates"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Invalid date range input"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Drag handle"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Collapse bottom sheet"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Dismiss bottom sheet"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Expand bottom sheet"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Tooltip"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Show tooltip"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Select a.m. or p.m."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Select hour"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Select minutes"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d o\'clock"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d hours"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutes"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minute"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hour"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"for minutes"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"for hour"</string>
-</resources>
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
deleted file mode 100644
index d0dfceb..0000000
--- a/compose/material3/material3/src/androidMain/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialogue"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Dismiss"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Search"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Suggestions below"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Select date"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Selected date"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Switch to selecting a year"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Swipe to select a year, or tap to switch back to selecting a day"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Change to next month"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Change to previous month"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navigate to year %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Current selection: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"None"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Today"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Year picker visible"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Select date"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Entered date"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Date"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Entered date: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"None"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Date not allowed: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Date does not match expected pattern: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Date out of expected year range %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Switch to calendar input mode"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Switch to text input mode"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Scroll to show later years"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Scroll to show earlier years"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Select dates"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Start date"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"End date"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Scroll to show the next month"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Scroll to show the previous month"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"In range"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Enter dates"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Invalid date range input"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Drag handle"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Collapse bottom sheet"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Dismiss bottom sheet"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Expand bottom sheet"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Tooltip"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Show tooltip"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Select a.m. or p.m."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Select hour"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Select minutes"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d o\'clock"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d hours"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutes"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minute"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hour"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"for minutes"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"for hour"</string>
-</resources>
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 4691fe5..af84efe 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
@@ -17,57 +17,112 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialog"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Dismiss"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Search"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Suggestions below"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Select date"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Selected date"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Switch to selecting a year"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Swipe to select a year, or tap to switch back to selecting a day"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Change to next month"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Change to previous month"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navigate to year %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Current selection: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"None"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Today"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Year picker visible"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Select date"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Entered date"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Date"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Entered date: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"None"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Date not allowed: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Date does not match expected pattern: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Date out of expected year range %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Switch to calendar input mode"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Switch to text input mode"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Scroll to show later years"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Scroll to show earlier years"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Select dates"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Start date"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"End date"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Scroll to show the next month"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Scroll to show the previous month"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"In range"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Enter dates"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Invalid date range input"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Drag handle"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Collapse bottom sheet"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Dismiss bottom sheet"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Expand bottom sheet"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Tooltip"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Show tooltip"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Select AM or PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Select hour"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Select minutes"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d o\'clock"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d hours"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutes"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minute"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hour"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"for minutes"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"for hour"</string>
+ <!-- no translation found for m3c_dialog (7617233117134790350) -->
+ <skip />
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Expanded"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Collapsed"</string>
+ <!-- no translation found for m3c_snackbar_dismiss (6152755701819882931) -->
+ <skip />
+ <!-- no translation found for m3c_search_bar_search (6152806324422087846) -->
+ <skip />
+ <!-- no translation found for m3c_suggestions_available (7655536806087401899) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_title (7430790972741451689) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_headline (7605002211875882969) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_year_selection (791651718641787594) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_day_selection (395627960681594326) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_next_month (7142101321095356500) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_previous_month (228438865139394590) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_navigate_to_year_description (8436650776581492840) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_headline_description (3664277305226978227) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_no_selection_description (5811000998184572395) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_today_description (3199387177749801575) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_year_picker_pane_title (2068382232816991922) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_title (7306227249789210568) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_headline (8166741421776570875) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_label (2895559812010326913) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_headline_description (229313757840775812) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_no_input_description (1237013946323089826) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_invalid_not_allowed (2521768508935305279) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_invalid_for_pattern (6116910750161463197) -->
+ <skip />
+ <!-- no translation found for m3c_date_input_invalid_year_range (7052898923934555305) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_calendar_mode (1804346892470238807) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_switch_to_input_mode (2219746470065162704) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_scroll_to_later_years (5727367015496556177) -->
+ <skip />
+ <!-- no translation found for m3c_date_picker_scroll_to_earlier_years (7813882352367152251) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_title (3134165431120340385) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_start_headline (4665981448952749820) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_end_headline (4947636797751277713) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_scroll_to_next_month (602077859540990149) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_scroll_to_previous_month (4592174524846109496) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_picker_day_in_range (2138321128465719402) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_input_title (3148384720560189467) -->
+ <skip />
+ <!-- no translation found for m3c_date_range_input_invalid_range_input (3190049423327661366) -->
+ <skip />
+ <!-- no translation found for m3c_bottom_sheet_drag_handle_description (8403354765404029791) -->
+ <skip />
+ <!-- no translation found for m3c_bottom_sheet_collapse_description (2988463736136100848) -->
+ <skip />
+ <!-- no translation found for m3c_bottom_sheet_dismiss_description (1555567894577437024) -->
+ <skip />
+ <!-- no translation found for m3c_bottom_sheet_expand_description (6670819569745899763) -->
+ <skip />
+ <!-- no translation found for m3c_tooltip_pane_description (5460405025248574620) -->
+ <skip />
+ <!-- no translation found for m3c_tooltip_long_press_label (1805687647081129904) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_pm (6616362054113087709) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_am (2786685010796619560) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_period_toggle_description (5865171949528594571) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_hour_selection (8876759303332837035) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_minute_selection (4699133535056739733) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_hour_suffix (3458167507790628988) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_hour_24h_suffix (9179527532316922345) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_minute_suffix (5064177921781937179) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_minute (4313071914266462005) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_hour (2349193472625211372) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_minute_text_field (7661234488295443182) -->
+ <skip />
+ <!-- no translation found for m3c_time_picker_hour_text_field (6973808109666874069) -->
+ <skip />
</resources>
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
deleted file mode 100644
index e738f3e..0000000
--- a/compose/material3/material3/src/androidMain/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Diálogo"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Descartar"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Buscar"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Sugerencias a continuación"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Seleccionar fecha"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Fecha seleccionada"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Cambiar a seleccionar un año"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Desliza el dedo para elegir un año o presiona para volver a seleccionar un día"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Cambiar al mes siguiente"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Cambiar al mes anterior"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navegar al año %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Selección actual: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Nada"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Hoy"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Selector de año visible"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Seleccionar fecha"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Fecha ingresada"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Fecha"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Fecha ingresada: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Ninguna"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Fecha no permitida: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"La fecha no coincide con el patrón esperado: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"La fecha está fuera del rango de años esperado: %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Cambiar al modo de entrada de calendario"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Cambiar al modo de entrada de texto"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Desplázate para ver los últimos años"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Desplázate para ver los primeros años"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Seleccionar fechas"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Fecha de inicio"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Fecha de finalización"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Desplázate para ver el próximo mes"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Desplázate para ver el mes anterior"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"En el rango"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Ingresar fechas"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Se introdujo un período no válido"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Controlador de arrastre"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Contraer la hoja inferior"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Descartar la hoja inferior"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Expandir la hoja inferior"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Información"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Mostrar información"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"p.m."</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"a.m."</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Selecciona a.m. o p.m."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Seleccionar hora"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Seleccionar los minutos"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d en punto"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d horas"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutos"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuto"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hora"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"por minutos"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"por hora"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-es/strings.xml b/compose/material3/material3/src/androidMain/res/values-es/strings.xml
deleted file mode 100644
index 99589f9..0000000
--- a/compose/material3/material3/src/androidMain/res/values-es/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Cuadro de diálogo"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Cerrar"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Buscar"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Sugerencias a continuación"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Seleccionar fecha"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Fecha seleccionada"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Cambiar para seleccionar un año"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Desliza el dedo para seleccionar un año o toca para volver a seleccionar un día"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Cambiar al mes siguiente"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Cambiar al mes anterior"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Ir al año %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Selección: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Ninguno"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Hoy"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Selector de año visible"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Seleccionar fecha"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Fecha introducida"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Fecha"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Fecha introducida: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Ninguna"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Fecha no permitida: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"La fecha no coincide con el patrón esperado: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Fecha fuera del intervalo de años previsto: %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Cambiar al modo de introducción de calendario"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Cambiar al modo de escritura"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Desplázate para ver los últimos años"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Desplázate para ver los años anteriores"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Seleccionar fechas"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Fecha de inicio"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Fecha de finalización"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Desplázate para ver el mes siguiente"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Desplázate para ver el mes anterior"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Dentro del intervalo"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Introducir fechas"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"El intervalo de fechas no es válido"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Controlador de arrastre"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Contrae la hoja inferior"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Cierra la hoja inferior"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Despliega la hoja inferior"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Descripción emergente"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Mostrar descripción emergente"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Selecciona AM o PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Seleccionar hora"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Seleccionar minutos"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d en punto"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d horas"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutos"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minutos"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hora"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"por minutos"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"por hora"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-et/strings.xml b/compose/material3/material3/src/androidMain/res/values-et/strings.xml
deleted file mode 100644
index 6e2d1c3..0000000
--- a/compose/material3/material3/src/androidMain/res/values-et/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialoog"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Loobu"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Otsing"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Soovitused on allpool"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Valige kuupäev"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Valitud kuupäev"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Lülitu aasta valimisele"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Pühkige aasta valimiseks või puudutage, et minna tagasi päeva valimise juurde"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Vaheta järgmisele kuule"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Vaheta eelmisele kuule"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Liigu aasta %1$s juurde"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Praegune valik: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Pole"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Täna"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Aasta valija on nähtav"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Valige kuupäev"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Sisestatud kuupäev"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Kuupäev"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Sisestatud kuupäev: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Puudub"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Kuupäev pole lubatud: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Kuupäev ei ühti eeldatud mustriga: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Kuupäev on väljaspool eeldatud aastavahemikku %1$s–%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Lülitu kalendrisisestusrežiimile"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Lülitu tekstisisestusrežiimile"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Hilisemate aastate kuvamiseks kerige"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Varasemate aastate kuvamiseks kerige"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Valige kuupäevad"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Alguskuupäev"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Lõppkuupäev"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Järgmise kuu kuvamiseks kerige"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Eelmise kuu kuvamiseks kerige"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Vahemikus"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Sisestage kuupäevad"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Sisestati sobimatu kuupäevavahemik"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Lohistamispide"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Alumise lehe ahendamine"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Alumisest lehest loobumine"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Alumise lehe laiendamine"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Kohtspikker"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Kuva kohtspikker"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Valige AM või PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Tunni valimine"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Minutite valimine"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d.00"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d tundi"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutit"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minutid"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Tunnid"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"minutite jaoks"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"tundide jaoks"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-eu/strings.xml b/compose/material3/material3/src/androidMain/res/values-eu/strings.xml
deleted file mode 100644
index 6cbc678..0000000
--- a/compose/material3/material3/src/androidMain/res/values-eu/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Leihoa"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Baztertu"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Bilaketa"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Iradokizunak daude behean"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Hautatu data bat"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Hautatutako data"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Joan urte-hautatzailera"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Pasatu hatza urte bat hautatzeko. Bestela, sakatu hau eguna hautatzeko pantailara itzultzeko."</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Aldatu hurrengo hilabetera"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Aldatu aurreko hilabetera"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Joan %1$s urtera"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Oraingo hautapena: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Bat ere ez"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Gaur"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Urte-hautatzailea ikusgai dago"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Hautatu data bat"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Idatzitako data"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Data"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Idatzitako data: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Bat ere ez"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Ez da onartzen data: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Data ez dator bat espero den ereduarekin: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Espero den urte tartetik (%1$s-%2$s) kanpo dago data"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Aldatu egutegiaren idazketa-metodora"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Aldatu testua idazteko modura"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Egin gora/behera etorkizuneko urteak erakusteko"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Egin gora/behera iraganeko urteak erakusteko"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Hautatu datak"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Hasiera-data"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Amaiera-data"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Egin gora/behera hurrengo hilabetea erakusteko"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Egin gora/behera aurreko hilabetea erakusteko"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Tartean"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Idatzi datak"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Idatzitako data tarteak ez du balio"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Arrastatzeko kontrol-puntua"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Tolestu pantailaren behealdean ainguratutako orria"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Baztertu pantailaren behealdean ainguratutako orria"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Zabaldu pantailaren behealdean ainguratutako orria"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Aholkua"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Erakutsi aholkua"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Hautatu AM edo PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Hautatu ordua"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Hautatu minutuak"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutu"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minutuak"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Orduak"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"minutuetarako"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"ordurako"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-fa/strings.xml b/compose/material3/material3/src/androidMain/res/values-fa/strings.xml
deleted file mode 100644
index cde14a3..0000000
--- a/compose/material3/material3/src/androidMain/res/values-fa/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"کادر گفتگو"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"بستن"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"جستجو"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"پیشنهادهای زیر"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"انتخاب تاریخ"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"تاریخ انتخابی"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"رفتن به انتخاب سال"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"برای انتخاب سال، تند بکشید یا برای برگشتن به انتخاب روز، ضربه بزنید"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"تغییر به ماه بعدی"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"تغییر به ماه قبلی"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"پیمایش به سال %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"انتخاب فعلی: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"هیچکدام"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"امروز"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"انتخابگر سال نمایان است"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"انتخاب تاریخ"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"تاریخ واردشده"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"تاریخ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"تاریخ واردشده: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"هیچکدام"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"تاریخ مجاز نیست: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"تاریخ با الگوی موردانتظار مطابقت ندارد: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"تاریخ خارج از بازه زمانی %1$s تا %2$s است"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"رفتن به روش ورودی تقویم"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"رفتن به حالت ورودی نوشتاری"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"برای نمایش سالهای بعد پیمایش کنید"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"برای نمایش سالهای قبل پیمایش کنید"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"تاریخها را انتخاب کنید"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"تاریخ شروع"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"تاریخ پایان"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"برای نمایش ماه بعد پیمایش کنید"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"برای نمایش ماه قبل پیمایش کنید"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"در محدوده"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"تاریخها را وارد کنید"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"محدوده تاریخ واردشده نامعتبر است"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"دستگیره کشاندن"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"جمع کردن برگه زیرین"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"رد کردن برگه زیرین"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"ازهم باز کردن برگه زیرین"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"نکتهابزار"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"نمایش نکتهابزار"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"ب.ظ."</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"ق.ظ."</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"انتخاب ق.ظ. یا ب.ظ."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"انتخاب ساعت"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"انتخاب دقیقه"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"ساعت %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ساعت"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d دقیقه"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"دقیقه"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"ساعت"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"برای دقیقه"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"برای ساعت"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-fi/strings.xml b/compose/material3/material3/src/androidMain/res/values-fi/strings.xml
deleted file mode 100644
index 5424f78..0000000
--- a/compose/material3/material3/src/androidMain/res/values-fi/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Valintaikkuna"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Hylkää"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Hae"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Ehdotuksia alla"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Valitse päivämäärä"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Valittu päivämäärä"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Vaihda vuoden valintaan"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Valitse vuosi pyyhkäisemällä tai palaa päivän valintaan napauttamalla"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Vaihda seuraavaan kuukauteen"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Vaihda edelliseen kuukauteen"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Siirry vuoteen %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Nykyinen valinta: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"–"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Tänään"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Vuosivalitsin näkyvillä"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Valitse päivämäärä"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Lisätty päivämäärä"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Päivämäärä"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Lisätty päivämäärä: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"–"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Päivämäärä ei sallittu: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Päivämäärä ei vastaa odotettua mallia: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Päivämäärä ei sisälly odotettuun vuosiaikaväliin: %1$s–%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Vaihda syöttötavaksi kalenteri"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Vaihda tekstinsyöttötilaan"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Vieritä nähdäksesi myöhemmät vuodet"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Vieritä nähdäksesi aiemmat vuodet"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Valitse päivämäärät"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Alkamispäivä"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Päättymispäivä"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Vieritä nähdäksesi seuraavan kuukauden"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Vieritä nähdäksesi edellisen kuukauden"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Valitulla välillä"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Lisää päivämäärät"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Virheellinen ajanjakso"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Vetokahva"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Tiivistä alapaneeli"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Hylkää alapaneeli"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Laajenna alapaneeli"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Vihjeteksti"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Näytä vihjeteksti"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"IP"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AP"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Valitse AP tai IP"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Valitse tunti"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Valitse minuutit"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"Kello %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d h"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minuuttia"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuutti"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Tunti"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"minuuttien ajan"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"tunnin ajan"</string>
-</resources>
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
deleted file mode 100644
index fbeef28..0000000
--- a/compose/material3/material3/src/androidMain/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialogue"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Fermer"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Recherche"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Suggestions ci-dessous"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Sélectionnez une date"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Date sélectionnée"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Passer à la sélection d\'une année"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Balayez l\'écran pour sélectionner une année, ou touchez pour revenir en arrière et sélectionner un jour"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Passer au mois suivant"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Passer au mois précédent"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Naviguez jusqu\'à l\'année %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Sélection actuelle : %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Aucune"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Aujourd\'hui"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Sélecteur d\'année visible"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Sélectionnez une date"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Date entrée"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Date"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Date entrée : %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Aucune"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Date non autorisée : %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"La date ne correspond pas au schéma prévu : %1$s"</string>
- <string name="m3c_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="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Passer au mode d\'entrée de l\'Agenda"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Passer au mode d\'entrée de texte"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Faites défiler pour afficher les années suivantes"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Faites défiler pour afficher les années précédentes"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Sélectionner les dates"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Date de début"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Date de fin"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Faites défiler pour afficher le mois suivant"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Faites défiler pour afficher le mois précédent"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"À portée"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Entrer les dates"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Entrée de période incorrecte"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Poignée de déplacement"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Réduire la zone de contenu dans le bas de l\'écran"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Fermer la zone de contenu dans le bas de l\'écran"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Développer la zone de contenu dans le bas de l\'écran"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Infobulle"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Afficher une infobulle"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Sélectionner AM ou PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Sélectionner l\'heure"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Sélectionner les minutes"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d h"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d h"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutes"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minute"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Heure"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"pour les minutes"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"pour l\'heure"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-fr/strings.xml b/compose/material3/material3/src/androidMain/res/values-fr/strings.xml
deleted file mode 100644
index a4d1152..0000000
--- a/compose/material3/material3/src/androidMain/res/values-fr/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Boîte de dialogue"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Ignorer"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Rechercher"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Suggestions ci-dessous"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Sélectionner une date"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Date sélectionnée"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Passer à la sélection d\'une année"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Balayez l\'écran pour sélectionner une année ou appuyez pour revenir à la sélection d\'un jour"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Passer au mois suivant"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Passer au mois précédent"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Accéder à l\'année %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Sélection actuelle : %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Aucune"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Aujourd\'hui"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Sélecteur d\'année visible"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Sélectionner une date"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Date saisie"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Date"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Date saisie : %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Aucune"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Date non autorisée : %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"La date ne correspond pas au format attendu : %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Date hors de la plage d\'années attendue : %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Passer au mode de saisie Agenda"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Passer au mode de saisie Texte"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Faites défiler pour afficher les années suivantes"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Faites défiler pour afficher les années précédentes"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Sélectionner des dates"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Date de début"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Date de fin"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Faites défiler pour afficher le mois suivant"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Faites défiler pour afficher le mois précédent"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Dans la plage"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Saisir des dates"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Plage de dates non valide"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Poignée de déplacement"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Réduire la bottom sheet"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Fermer la bottom sheet"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Développer la bottom sheet"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Info-bulle"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Afficher l\'info-bulle"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Sélectionner le format AM ou PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Sélectionner une heure"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Sélectionner des minutes"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d heures"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d heures"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutes"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minute"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Heure"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"en minutes"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"en heures"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-gl/strings.xml b/compose/material3/material3/src/androidMain/res/values-gl/strings.xml
deleted file mode 100644
index 62a9952..0000000
--- a/compose/material3/material3/src/androidMain/res/values-gl/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Cadro de diálogo"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Pechar"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Busca"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Hai suxestións abaixo"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Selecciona a data"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Data seleccionada"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Cambiar a seleccionar un ano"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Pasa o dedo para seleccionar un ano ou toca a pantalla para volver á selección do día"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Cambiar ao mes seguinte"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Cambiar ao mes anterior"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Ir ao ano %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Selección actual: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Ningunha"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Hoxe"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Selector de ano visible"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Seleccionar data"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Data inserida"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Data"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Data inserida: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Ningunha"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Data non permitida: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"A data non coincide co padrón esperado: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"A data está fóra do intervalo de anos esperado (%1$s - %2$s)"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Cambiar ao modo de entrada de calendario"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Cambiar ao modo de introdución de texto"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Desprázate para mostrar anos posteriores"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Desprázate para mostrar anos anteriores"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Selecciona as datas"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Data de inicio"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Data de finalización"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Desprázate para mostrar o mes seguinte"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Desprázate para mostrar o mes anterior"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Dentro do intervalo"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Indica as datas"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Indicouse un intervalo de datas que non é válido"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Controlador de arrastre"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Contraer panel inferior"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Pechar panel inferior"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Despregar panel inferior"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Cadro de información"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Mostrar cadro de información"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"pm"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"am"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Seleccionar a. m. ou p. m."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Seleccionar hora"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Seleccionar minutos"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d en pto."</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d horas"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutos"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuto"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hora"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"por minuto"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"por hora"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-gu/strings.xml b/compose/material3/material3/src/androidMain/res/values-gu/strings.xml
deleted file mode 100644
index cc9f98f..0000000
--- a/compose/material3/material3/src/androidMain/res/values-gu/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"સંવાદ બૉક્સ"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"છોડી દો"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"શોધો"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"સૂચનો નીચે છે"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"તારીખ પસંદ કરો"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"પસંદ કરેલી તારીખ"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"વર્ષ પસંદ કરવાના વિકલ્પ પર સ્વિચ કરો"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"વર્ષ પસંદ કરવા માટે સ્વાઇપ કરો અથવા દિવસની પસંદગી પર પાછા સ્વિચ કરવા માટે ટૅપ કરો"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"બદલીને આગલો મહિનો પસંદ કરો"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"બદલીને પાછલો મહિનો પસંદ કરો"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"વર્ષ %1$s પર નૅવિગેટ કરો"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"હાલની પસંદગી: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"એકપણ નહીં"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"આજે"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"વર્ષ માટેનું પિકર દૃશ્યમાન છે"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"તારીખ પસંદ કરો"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"દાખલ કરેલી તારીખ"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"તારીખ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"દાખલ કરેલી તારીખ: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"એકપણ નહીં"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"આ તારીખની મંજૂરી નથી: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"તારીખ અપેક્ષિત પૅટર્ન સાથે મેળ ખાતી નથી: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"અપેક્ષિત વર્ષની શ્રેણી %1$s - %2$sની બહારની તારીખ"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"કૅલેન્ડર ઇનપુટ મોડ પર સ્વિચ કરો"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"ટેક્સ્ટ ઇનપુટ મોડ પર સ્વિચ કરો"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"પછીના વર્ષો બતાવવા માટે સ્ક્રોલ કરો"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"અગાઉના વર્ષો બતાવવા માટે સ્ક્રોલ કરો"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"તારીખો પસંદ કરો"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"પ્રારંભ તારીખ"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"સમાપ્તિ તારીખ"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"આગલો મહિનો બતાવવા માટે સ્ક્રોલ કરો"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"પાછલો મહિનો બતાવવા માટે સ્ક્રોલ કરો"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"રેન્જમાં છે"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"તારીખો દાખલ કરો"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"તારીખની શ્રેણીનું અમાન્ય ઇનપુટ"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ઑબ્જેક્ટ ખેંચવાનું હૅન્ડલ"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"બોટમ શીટ નાની કરો"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"બોટમ શીટ છોડી દો"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"બોટમ શીટ મોટી કરો"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"ટૂલટિપ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"ટૂલટિપ બતાવો"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM કે PM પસંદ કરો"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"કલાક પસંદ કરો"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"મિનિટ પસંદ કરો"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d વાગ્યે"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d કલાકે"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d મિનિટ"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"મિનિટ"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"કલાક"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"મિનિટ માટે"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"કલાક માટે"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-hi/strings.xml b/compose/material3/material3/src/androidMain/res/values-hi/strings.xml
deleted file mode 100644
index 8bf1fa4..0000000
--- a/compose/material3/material3/src/androidMain/res/values-hi/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"डायलॉग"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"खारिज करें"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"खोजें"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"सुझाव यहां मौजूद हैं"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"तारीख चुनें"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"चुनी गई तारीख"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"साल चुनने के लिए स्विच करें"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"साल चुनने के लिए स्वाइप करें या दिन चुनने पर वापस स्विच करने लिए टैप करें"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"अगले महीने पर जाएं"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"पिछले महीने पर जाएं"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"साल %1$s पर जाएं"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"फ़िलहाल, यह चुना गया है: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"कोई नहीं"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"आज"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"साल चुनने का विकल्प दिख रहा है"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"तारीख चुनें"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"डाली गई तारीख"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"तारीख"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"डाली गई तारीख: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"कोई नहीं"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"यह तारीख सही नहीं है: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"तारीख सही फ़ॉर्मैट में नहीं डाली गई है: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"तारीख को साल के सही फ़ॉर्मैट में नहीं डाला गया है %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"कैलेंडर इनपुट मोड पर स्विच करें"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"टेक्स्ट इनपुट मोड पर स्विच करें"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"बाद वाले सालों की तारीख देखने के लिए स्क्रोल करें"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"पिछले सालों की तारीख देखने के लिए स्क्रोल करें"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"तारीखें चुनें"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"शुरू होने की तारीख"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"खत्म होने की तारीख"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"अगले महीने की तारीख देखने के लिए स्क्रोल करें"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"पिछले महीने की तारीख देखने के लिए स्क्रोल करें"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"रेंज में"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"तारीखें डालें"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"तारीख की दी गई सीमा गलत है"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"खींचकर छोड़ने वाला हैंडल"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"बॉटम शीट को छोटा करें"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"बॉटम शीट को खारिज करें"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"बॉटम शीट को बड़ा करें"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"टूलटिप"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"टूलटिप देखें"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM या PM चुनें"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"घंटा चुनें"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"मिनट चुनें"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d बजे"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d घंटे"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d मिनट"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"मिनट"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"घंटा"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"मिनट के लिए"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"घंटे के लिए"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-hr/strings.xml b/compose/material3/material3/src/androidMain/res/values-hr/strings.xml
deleted file mode 100644
index 9c40743..0000000
--- a/compose/material3/material3/src/androidMain/res/values-hr/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dijaloški okvir"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Odbaci"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Pretraživanje"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Prijedlozi su u nastavku"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Odaberite datum"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Odabrani datum"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Prijelaz na odabir godine"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Pomaknite se za odabir godine ili dodirnite za povratak na odabir dana"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Pomicanje na sljedeći mjesec"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Pomicanje na prethodni mjesec"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Prelazak u godinu %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Trenutačni odabir: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Ništa"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Danas"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Vidljiv je alat za odabir godine"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Odaberite datum"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Datum unosa"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Datum"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Datum unosa: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Ništa"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Datum nije dopušten: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Datum se ne podudara s očekivanim uzorkom: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datum je izvan očekivanog raspona godine %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Prijelaz na način unosa u Kalendaru"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Prijelaz na način unosa teksta"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Pomaknite se za prikaz kasnijih godina"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Pomaknite se za prikaz ranijih godina"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Odabir datuma"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Datum početka"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Datum završetka"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Pomaknite se za prikaz sljedećeg mjeseca"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Pomaknite se za prikaz prethodnog mjeseca"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"U dometu"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Unos datuma"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Unos datumskog raspona nije važeći"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Marker za povlačenje"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Sažimanje donje tablice"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Odbacivanje donje tablice"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Proširivanje donje tablice"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Opis"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Prikaži opis"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"Poslijepodne"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"Prijepodne"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Odaberite prijepodne ili poslijepodne"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Odabir sata"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Odabir minuta"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d h"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d h"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d min"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuta"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Sat"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"minutama"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"na jedan sat"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-hu/strings.xml b/compose/material3/material3/src/androidMain/res/values-hu/strings.xml
deleted file mode 100644
index f0cc3f5..0000000
--- a/compose/material3/material3/src/androidMain/res/values-hu/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Párbeszédablak"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Elvetés"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Keresés"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Javaslatok alább"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Dátum kiválasztása"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Kiválasztott dátum"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Váltson a kívánt év kiválasztásához"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Csúsztatással kiválaszthatja a kívánt évet, vagy koppintással visszaválthat a nap kiválasztásához."</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Váltás a következő hónapra"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Váltás az előző hónapra"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navigálás a következő évhez: %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Jelenleg kiválasztva: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Nincs"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Ma"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Látható az évválasztó"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Dátum kiválasztása"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Megadott dátum"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Dátum"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Megadott dátum: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Nincs"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Nem engedélyezett dátum: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"A dátum nem felel meg a várt formátumnak: %1$s"</string>
- <string name="m3c_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="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Váltás naptárbeviteli módra"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Váltás szövegbeviteli módra"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Görgessen a későbbi évek megjelenítéséhez"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Görgessen a korábbi évek megjelenítéséhez"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Válassza ki a kívánt dátumokat"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Kezdő dátum"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Befejezés dátuma"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Görgessen a következő hónap megjelenítéséhez"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Görgessen az előző hónap megjelenítéséhez"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Hatókörön belül"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Dátumok megadása"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Érvénytelen a megadott dátum"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Fogópont"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Az alsó lap összecsukása"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Az alsó lap elvetése"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Az alsó lap kibontása"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Elemleírás"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Elemleírás megjelenítése"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"du."</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"de."</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Válassza ki, hogy délelőtt vagy délután"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Óra kiválasztása"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Perc kiválasztása"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d óra"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d óra"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d perc"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Perc"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Óra"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"percre"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"órára"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-hy/strings.xml b/compose/material3/material3/src/androidMain/res/values-hy/strings.xml
deleted file mode 100644
index ec88ab0..0000000
--- a/compose/material3/material3/src/androidMain/res/values-hy/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Երկխոսության պատուհան"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Փակել"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Որոնում"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Առաջարկները հասանելի են ստորև"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Ընտրեք ամսաթիվը"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Ընտրված ամսաթիվ"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Անցնել տարվա ընտրությանը"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Սահեցրեք՝ տարեթիվ ընտրելու համար, կամ հպեք՝ օրվա ընտրությանը վերադառնալու համար"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Անցնել հաջորդ ամսվան"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Անցնել նախորդ ամսվան"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Անցնել %1$s թվական"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Ընթացիկ ընտրությունը՝ %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Ոչ մեկը"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Այսօր"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Տարեթվի ցուցադրվող ընտրիչ"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Ընտրեք ամսաթիվը"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Մուտքագրված ամսաթիվ"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Ամսաթիվ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Մուտքագրված ամսաթիվ՝ %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Ընտրված տարրեր չկան"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Ամսաթիվը թույլատրված չէ՝ %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Ամսաթիվը չի համընկնում թույլատրելի ձևաչափի հետ՝ %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Ամսաթիվը տարեթվերի թույլատրելի միջակայքից (%1$s – %2$s) դուրս է"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Անցնել օրացույցի մուտքագրման ռեժիմ"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Անցնել տեքստի մուտքագրման ռեժիմին"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Ոլորեք՝ վերջին տարիները ցուցադրելու համար"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Ոլորեք՝ նախորդ տարիները ցուցադրելու համար"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Ընտրեք ամսաթվեր"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Սկզբի ամսաթիվ"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Ավարտի ամսաթիվ"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Ոլորեք՝ հաջորդ ամիսը ցուցադրելու համար"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Ոլորեք՝ նախորդ ամիսը ցուցադրելու համար"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Միջակայքում"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Մուտքագրեք ամսաթվերը"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Մուտքագրված ամսաթվերի միջակայքն անվավեր է"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Տեղափոխման նշիչ"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Ծալել ներքևի էկրանը"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Փակել ներքևի էկրանը"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Ծավալել ներքևի էկրանը"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Հուշակ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Ցուցադրել հուշում"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Ընտրել AM կամ PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Ընտրել ժամը"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Ընտրել րոպեն"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ժամ"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d րոպե"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Րոպե"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Ժամ"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"րոպեներ"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"ժամեր"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-in/strings.xml b/compose/material3/material3/src/androidMain/res/values-in/strings.xml
deleted file mode 100644
index 22625d0..0000000
--- a/compose/material3/material3/src/androidMain/res/values-in/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialog"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Tutup"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Telusuri"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Saran di bawah"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Pilih tanggal"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Tanggal yang dipilih"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Beralih ke memilih tahun"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Geser untuk memilih tahun, atau ketuk untuk beralih kembali ke pemilihan tanggal"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Ubah ke bulan berikutnya"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Ubah ke bulan sebelumnya"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Pilih tahun %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Pilihan saat ini: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Tidak ada"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Hari ini"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Pemilih tahun terlihat"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Pilih tanggal"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Tanggal yang dimasukkan"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Tanggal"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Tanggal yang dimasukkan: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Tidak ada"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Tanggal tidak diizinkan: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Tanggal tidak cocok dengan pola yang diharapkan: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Tanggal di luar rentang tahun yang diharapkan %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Beralih ke mode input kalender"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Beralih ke mode input teks"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Scroll untuk menampilkan tahun berikutnya"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Scroll untuk menampilkan tahun sebelumnya"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Pilih tanggal"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Tanggal mulai"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Tanggal akhir"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Scroll untuk menampilkan bulan berikutnya"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Scroll untuk menampilkan bulan sebelumnya"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Dalam rentang"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Masukkan tanggal"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Input rentang tanggal tidak valid"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Handel geser"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Menciutkan sheet bawah"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Menutup sheet bawah"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Meluaskan sheet bawah"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Tooltip"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Tampilkan tooltip"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Pilih AM atau PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Pilih jam"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Pilih menit"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"Pukul %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d jam"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d menit"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Menit"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Jam"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"untuk menit"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"untuk jam"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-is/strings.xml b/compose/material3/material3/src/androidMain/res/values-is/strings.xml
deleted file mode 100644
index 0e78deb..0000000
--- a/compose/material3/material3/src/androidMain/res/values-is/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Gluggi"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Hunsa"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Leit"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Tillögur hér fyrir neðan"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Velja dagsetningu"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Valin dagsetning"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Skipta yfir í val á ári"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Strjúktu til að velja ár eða ýttu til að skipta aftur yfir í að velja dag"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Breyta í næsta mánuð"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Breyta í fyrri mánuð"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Fletta til ársins %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Núverandi val: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Ekkert"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Í dag"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Ársval birt"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Velja dagsetningu"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Skráð dagsetning"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Dagsetning"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Skráð dagsetning: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Ekkert"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Dagsetning er ekki leyfileg: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Dagsetning passar ekki við áætlað mynstur: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Dagsetning er utan áætlaðra ára: %1$s–%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Skipta yfir í innfærsluaðferð fyrir dagatal"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Skipta yfir í textainnslátt"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Flettu til að sjá síðari ár"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Flettu til að sjá fyrri ár"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Veldu dagsetningar"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Upphafsdagur"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Lokadagur"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Flettu til að sjá næsta mánuð"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Flettu til að sjá fyrri mánuð"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Innan tímabils"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Sláðu inn dagsetningar"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Ógilt tímabil fært inn"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Dragkló"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Minnka blað neðst"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Hunsa blað neðst"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Stækka blað neðst"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Ábending"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Sýna ábendingu"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"eh"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"fh"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Velja f.h. eða e.h."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Velja klst."</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Velja mínútur"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"Kl. %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d klst."</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d mínútur"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Mínúta"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Klukkustund"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"fyrir mínútur"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"fyrir klukkustund"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-it/strings.xml b/compose/material3/material3/src/androidMain/res/values-it/strings.xml
deleted file mode 100644
index ab99079..0000000
--- a/compose/material3/material3/src/androidMain/res/values-it/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Finestra di dialogo"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Chiudi"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Cerca"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Suggerimenti sotto"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Seleziona data"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Data selezionata"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Passa alla selezione di un anno"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Scorri per selezionare un anno o tocca per tornare alla selezione di un giorno"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Passa al mese successivo"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Passa al mese precedente"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Vai all\'anno %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Selezione attuale: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Nessuna selezione"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Oggi"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Selettore dell\'anno visibile"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Seleziona data"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Data inserita"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Data"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Data inserita: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Nessuna"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Data non consentita: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"La data non corrisponde al pattern previsto: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"La data non rientra nell\'intervallo di anni previsto (%1$s-%2$s)"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Passa alla modalità di immissione Calendario"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Passa alla modalità di immissione Testo"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Scorri per visualizzare gli anni successivi"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Scorri per visualizzare gli anni precedenti"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Seleziona date"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Data di inizio"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Data di fine"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Scorri per visualizzare il mese successivo"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Scorri per visualizzare il mese precedente"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Nell\'intervallo"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Inserisci date"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Intervallo di date inserito non valido"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Punto di trascinamento"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Comprimi il riquadro inferiore"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Chiudi il riquadro inferiore"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Espandi il riquadro inferiore"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Descrizione comando"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Mostra descrizione comando"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Seleziona AM o PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Seleziona ora"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Seleziona i minuti"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ore"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minuti"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuto"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Ora"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"per minuti"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"per ora"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-iw/strings.xml b/compose/material3/material3/src/androidMain/res/values-iw/strings.xml
deleted file mode 100644
index 77b22bd..0000000
--- a/compose/material3/material3/src/androidMain/res/values-iw/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"תיבת דו-שיח"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"סגירה"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"חיפוש"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"הצעות מופיעות למטה"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"בחירת תאריך"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"התאריך הנבחר"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"החלפה לבחירה של שנה"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"יש להחליק כדי לבחור שנה, או להקיש כדי לחזור לבחירת היום"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"מעבר לחודש הבא"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"מעבר לחודש הקודם"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"ניווט לשנת %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"הבחירה הנוכחית: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"ללא"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"היום"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"בורר השנה גלוי"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"בחירת תאריך"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"התאריך שהוזן"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"תאריך"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"התאריך שהוזן: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"ללא"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"תאריך לא מורשה: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"התאריך לא תואם לקו ביטול הנעילה הצפוי: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"התאריך נמצא מחוץ לטווח השנים הצפוי %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"מעבר לשיטת קלט של יומן"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"מעבר לשיטת קלט של טקסט"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"צריך לגלול כדי להציג את השנים המאוחרות"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"צריך לגלול כדי להציג את השנים הקודמות"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"בחירת תאריכים"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"תאריך התחלה"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"תאריך סיום"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"צריך לגלול כדי להציג את החודש הבא"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"צריך לגלול כדי להציג את החודש הקודם"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"בטווח"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"הזנת תאריכים"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"קלט טווח תאריכים לא חוקי"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"נקודת אחיזה לגרירה"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"כיווץ הגיליון התחתון"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"סגירת הגיליון התחתון"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"הרחבת הגיליון התחתון"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"הסבר קצר"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"הצגת הסבר קצר"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"צריך לבחור ב-AM או ב-PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"בחירת שעה"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"בחירת דקות"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d שעות"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d דקות"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"דקות"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"שעות"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"דקות"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"שעות"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ja/strings.xml b/compose/material3/material3/src/androidMain/res/values-ja/strings.xml
deleted file mode 100644
index 416719f..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ja/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"ダイアログ"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"閉じる"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"検索"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"検索候補は次のとおりです"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"日付を選択します"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"選択した日付"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"年の選択に移行"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"スワイプして年を選択するか、タップして日付の選択に戻ります"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"翌月に変更"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"前月に変更"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"年に移動 %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"現在の選択: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"なし"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"今日"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"年の選択ツールの表示"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"日付を選択"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"入力された日付"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"日付"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"入力された日付: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"なし"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"許可されていない日付です: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"想定されるパターンと日付が一致しません: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"想定される年の範囲(%1$s~%2$s)から日付が外れています"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"カレンダー入力モードに切り替え"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"テキスト入力モードに切り替え"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"これより後の年を表示するにはスクロールしてください"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"これより前の年を表示するにはスクロールしてください"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"日付の選択"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"開始日"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"終了日"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"次の月を表示するにはスクロールしてください"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"前の月を表示するにはスクロールしてください"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"範囲内"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"日付の入力"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"入力された期間は無効です"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ドラッグ ハンドル"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"ボトムシートを折りたたみます"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"ボトムシートを閉じます"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"ボトムシートを開きます"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"ツールチップ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"ツールチップを表示します"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"午前または午後を選択"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"時刻を選択"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"分を選択"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d 時"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d 時間"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d 分"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"分"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"時間"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"(分単位)"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"(時間単位)"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ka/strings.xml b/compose/material3/material3/src/androidMain/res/values-ka/strings.xml
deleted file mode 100644
index 205cfa5..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ka/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"დიალოგი"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"დახურვა"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"ძიება"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"შემოთავაზებები იხილეთ ქვემოთ"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"აირჩიეთ თარიღი"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"არჩეული თარიღი"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"წლის არჩევაზე გადასვლა"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"გადაფურცლეთ წლის ასარჩევად, ან შეხებით აირჩიეთ ისევ დღის არჩევაზე გადართვა"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"შემდეგ თვეზე გადასვლა"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"წინა თვეზე გადასვლა"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s-ზე გადასვლა"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"ამჟამინდელი არჩევანი: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"არცერთი"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"დღეს"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"არჩეული წელი ხილულია"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"აირჩიეთ თარიღი"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"შეყვანილი სახელი"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"თარიღი"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"შეყვანილი თარიღი: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"არცერთი"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"თარიღი დაუშვებელია: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"თარიღი არ ემთხვევა მოსალოდნელ ნიმუშს: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"თარიღი არ არის წლების მოსალოდნელ დიაპაზონში %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"კალენდარში შეყვანის რეჟიმზე გადართვა"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"ტექსტის შეყვანის რეჟიმზე გადართვა"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"გადააადგილეთ შემდგომი წლების საჩვენებლად"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"გადააადგილეთ წინა წლების საჩვენებლად"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"თარიღების არჩევა"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"დაწყების თარიღი"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"დასრულების თარიღი"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"გადააადგილეთ შემდეგი თვის საჩვენებლად"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"გადააადგილეთ წინა თვის საჩვენებლად"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"არეალშია"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"თარიღების შეყვანა"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"შეყვანილია თარიღების არასწორი დიაპაზონი"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"სახელური ჩავლებისთვის"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"ქვედა ფურცლის ჩაკეცვა"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"ქვედა ფურცლის უარყოფა"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"ქვედა ფურცლის გაშლა"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"მინიშნება"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"მინიშნების ჩვენება"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"აირჩიეთ AM ან PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"აირჩიეთ საათი"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"აირჩიეთ წუთები"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d სთ"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d საათი"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d წთ"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"წუთი"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"საათი"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"რამდენიმე წუთით"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"ერთი საათით"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-kk/strings.xml b/compose/material3/material3/src/androidMain/res/values-kk/strings.xml
deleted file mode 100644
index 11ed19f..0000000
--- a/compose/material3/material3/src/androidMain/res/values-kk/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Диалогтік терезе"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Жабу"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Іздеу"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Төмендегі ұсыныстар"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Күн таңдау"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Таңдалған күн"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Жыл таңдауға өту"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Жыл таңдау үшін сырғытыңыз. Күн таңдауға ауысу үшін түртіңіз."</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Келесі айға өзгерту"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Алдыңғы айға өзгерту"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Мына жылға өту: %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Қазіргі таңдау: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Ешқандай"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Бүгін"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Көрсетілген жыл таңдағышы"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Күнді таңдаңыз"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Деректер енгізілді"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Күні"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Деректер енгізілді: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Жоқ"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Деректер рұқсат етілмейді: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Деректер болжалды өрнекке сай келмейді: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Күтілетін жыл аралығы: %1$s–%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Күнтізбенің енгізу режиміне ауысу"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Мәтін енгізу режиміне ауысу"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Кейінгі жылдарды көрсету үшін айналдырыңыз."</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Алдыңғы жылдарды көрсету үшін айналдырыңыз."</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Күндер таңдау"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Басталу күні"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Аяқталу күні"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Келесі айды көрсету үшін айналдырыңыз."</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Алдыңғы айды көрсету үшін айналдырыңыз."</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Күндер аралығында"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Күндерді енгізіңіз"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Жарамсыз күндер аралығы енгізілген."</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Сүйрейтін тетік"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Төменгі парақшаны жию"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Төменгі парақшаны жабу"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Төменгі парақшаны жаю"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Қалқыма көмек"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Қалқыма көмекті көрсету"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"түстен кейін"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"түске дейін"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"\"AM\" немесе \"PM\" форматын таңдау"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Сағатты таңдау"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Минут таңдау"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d сағат"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d сағат"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d минут"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Mинут"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Сағат"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"минут"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"сағат"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-km/strings.xml b/compose/material3/material3/src/androidMain/res/values-km/strings.xml
deleted file mode 100644
index fc671fa..0000000
--- a/compose/material3/material3/src/androidMain/res/values-km/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"ប្រអប់"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"ច្រានចោល"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"ស្វែងរក"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"ការណែនាំខាងក្រោម"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"ជ្រើសរើសកាលបរិច្ឆេទ"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"កាលបរិច្ឆេទដែលបានជ្រើសរើស"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"ប្ដូរទៅការជ្រើសរើសឆ្នាំ"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"អូសដើម្បីជ្រើសរើសឆ្នាំ ឬចុចដើម្បីប្ដូរត្រឡប់ទៅការជ្រើសរើសថ្ងៃវិញ"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"ប្ដូរទៅខែបន្ទាប់"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"ប្ដូរទៅខែមុន"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"រុករកទៅកាន់ឆ្នាំ %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"ការជ្រើសរើសបច្ចុប្បន្ន៖ %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"គ្មាន"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"ថ្ងៃនេះ"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"អាចមើលឃើញផ្ទាំងជ្រើសរើសឆ្នាំ"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"ជ្រើសរើសកាលបរិច្ឆេទ"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"កាលបរិច្ឆេទដែលបានបញ្ចូល"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"កាលបរិច្ឆេទ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"កាលបរិច្ឆេទដែលបានបញ្ចូល៖ %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"គ្មាន"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"កាលបរិច្ឆេទដែលមិនបានអនុញ្ញាត៖ %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"កាលបរិច្ឆេទមិនត្រូវគ្នានឹងលំនាំដែលរំពឹងទុកទេ៖ %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"កាលបរិច្ឆេទដែលស្ថិតនៅក្រៅចន្លោះឆ្នាំដែលរំពឹងទុក %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ប្ដូរទៅមុខងារបញ្ចូលប្រតិទិន"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"ប្ដូរទៅមុខងារបញ្ចូលអក្សរ"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"រំកិលដើម្បីបង្ហាញឆ្នាំក្រោយៗ"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"រំកិលដើម្បីបង្ហាញឆ្នាំមុនៗ"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"ជ្រើសរើសកាលបរិច្ឆេទ"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"កាលបរិច្ឆេទចាប់ផ្ដើម"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"កាលបរិច្ឆេទបញ្ចប់"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"រំកិលដើម្បីបង្ហាញខែក្រោយ"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"រំកិលដើម្បីបង្ហាញខែមុន"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"ក្នុងចន្លោះ"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"បញ្ចូលកាលបរិច្ឆេទ"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"ការបញ្ចូលចន្លោះកាលបរិច្ឆេទមិនត្រឹមត្រូវ"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ដងអូស"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"បង្រួមសន្លឹកខាងក្រោម"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"ច្រានចោលសន្លឹកខាងក្រោម"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"ពង្រីកសន្លឹកខាងក្រោម"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"កំណត់ពន្យល់"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"បង្ហាញកំណត់ពន្យល់"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"ជ្រើសរើស AM ឬ PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"ជ្រើសរើសម៉ោង"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"ជ្រើសនាទី"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"ម៉ោង %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ម៉ោង"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d នាទី"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"នាទី"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"ម៉ោង"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"រយៈពេលប៉ុន្មាននាទី"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"រយៈពេលប៉ុន្មានម៉ោង"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-kn/strings.xml b/compose/material3/material3/src/androidMain/res/values-kn/strings.xml
deleted file mode 100644
index aead7fc..0000000
--- a/compose/material3/material3/src/androidMain/res/values-kn/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"ಡೈಲಾಗ್"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"ವಜಾಗೊಳಿಸಿ"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"ಹುಡುಕಿ"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"ಸಲಹೆಗಳನ್ನು ಕೆಳಗೆ ನೀಡಲಾಗಿದೆ"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"ದಿನಾಂಕವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"ದಿನಾಂಕವನ್ನು ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"ವರ್ಷವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಬದಲಿಸಿ"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"ಒಂದು ವರ್ಷವನ್ನು ಆಯ್ಕೆಮಾಡಲು ಸ್ವೈಪ್ ಮಾಡಿ ಅಥವಾ ಒಂದು ದಿನವನ್ನು ಆಯ್ಕೆಮಾಡಲು ಹಿಂತಿರುಗಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"ಮುಂದಿನ ತಿಂಗಳಿಗೆ ಬದಲಿಸಿ"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"ಹಿಂದಿನ ತಿಂಗಳಿಗೆ ಬದಲಿಸಿ"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s ವರ್ಷಕ್ಕೆ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿ"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"ಪ್ರಸ್ತುತ ಆಯ್ಕೆ: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"ಯಾವುದೂ ಅಲ್ಲ"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"ಇಂದು"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"ವರ್ಷದ ಪಿಕರ್ ಗೋಚರಿಸುತ್ತದೆ"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"ದಿನಾಂಕವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"ನಮೂದಿಸಿದ ದಿನಾಂಕ"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"ದಿನಾಂಕ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"ನಮೂದಿಸಿದ ದಿನಾಂಕ: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"ಯಾವುದೂ ಅಲ್ಲ"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"ದಿನಾಂಕವನ್ನು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"ನಿರೀಕ್ಷಿಸಿದ ಪ್ಯಾಟರ್ನ್ನೊಂದಿಗೆ ದಿನಾಂಕ ಹೊಂದಾಣಿಕೆಯಾಗುತ್ತಿಲ್ಲ: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"ದಿನಾಂಕವು ನಿರೀಕ್ಷಿಸಿದ ವರ್ಷದ ವ್ಯಾಪ್ತಿಯನ್ನು ಮೀರಿದೆ %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ಕ್ಯಾಲೆಂಡರ್ ಇನ್ಪುಟ್ ಮೋಡ್ಗೆ ಬದಲಿಸಿ"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"ಪಠ್ಯ ಇನ್ಪುಟ್ ಮೋಡ್ಗೆ ಬದಲಿಸಿ"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"ನಂತರದ ವರ್ಷಗಳನ್ನು ತೋರಿಸಲು ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"ಹಿಂದಿನ ವರ್ಷಗಳನ್ನು ತೋರಿಸಲು ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"ದಿನಾಂಕಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"ಆರಂಭ ದಿನಾಂಕ"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"ಅಂತಿಮ ದಿನಾಂಕ"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"ಮುಂದಿನ ತಿಂಗಳನ್ನು ತೋರಿಸಲು ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"ಹಿಂದಿನ ತಿಂಗಳನ್ನು ತೋರಿಸಲು ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"ವ್ಯಾಪ್ತಿಯಲ್ಲಿದೆ"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"ದಿನಾಂಕಗಳನ್ನು ನಮೂದಿಸಿ"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"ದಿನಾಂಕ ವ್ಯಾಪ್ತಿಯ ಇನ್ಪುಟ್ ಅಮಾನ್ಯವಾಗಿದೆ"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ಹ್ಯಾಂಡಲ್ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"ಕೆಳಭಾಗದ ಶೀಟ್ ಅನ್ನು ಕುಗ್ಗಿಸಿ"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"ಕೆಳಭಾಗದ ಶೀಟ್ ಅನ್ನು ವಜಾಗೊಳಿಸಿ"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"ಕೆಳಭಾಗದ ಶೀಟ್ ಅನ್ನು ವಿಸ್ತರಿಸಿ"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"ಟೂಲ್ಟಿಪ್"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"ಟೂಲ್ಟಿಪ್ ಅನ್ನು ತೋರಿಸಿ"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM ಅಥವಾ PM ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"ಸಮಯವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"ನಿಮಿಷಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d ಓ ಕ್ಲಾಕ್"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ಗಂಟೆ"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d ನಿಮಿಷಗಳು"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"ನಿಮಿಷ"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"ಗಂಟೆ"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"ನಿಮಿಷಗಳವರೆಗೆ"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"ಗಂಟೆಯವರೆಗೆ"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ko/strings.xml b/compose/material3/material3/src/androidMain/res/values-ko/strings.xml
deleted file mode 100644
index bbe57a2..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ko/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"대화상자"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"닫기"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"검색"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"아래의 추천 검색어"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"날짜 선택"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"선택한 날짜"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"연도 선택으로 전환"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"스와이프하여 연도를 선택하거나 탭하여 날짜 선택으로 돌아가세요."</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"다음 달로 변경"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"이전 달로 변경"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s년으로 이동"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"현재 선택사항: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"없음"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"오늘"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"연도 선택 도구 표시"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"날짜 선택"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"입력한 날짜"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"날짜"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"입력한 날짜: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"없음"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"데이터 허용 안 됨: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"데이터가 예상 패턴과 일치하지 않음: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"데이터가 예상 연도 범위(%1$s~%2$s)를 벗어남"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"캘린더 입력 모드로 전환"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"텍스트 입력 모드로 전환"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"스크롤하여 이후 연도 보기"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"스크롤하여 이전 연도 보기"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"날짜 선택"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"시작일"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"종료일"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"스크롤하여 다음 달 보기"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"스크롤하여 이전 달 보기"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"범위 내"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"날짜 입력"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"잘못된 기간 입력"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"드래그 핸들"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"하단 시트 접기"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"하단 시트 닫기"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"하단 시트 펼치기"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"도움말"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"도움말 표시"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"오후"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"오전"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"오전 또는 오후를 선택하세요."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"시간 선택"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"분 선택"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d시 정각"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d시간"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d분"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"분"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"시간"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"기간(분)"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"기간(시간)"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ky/strings.xml b/compose/material3/material3/src/androidMain/res/values-ky/strings.xml
deleted file mode 100644
index 81f00bb..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ky/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Диалог"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Жабуу"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Издөө"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Сунуштар төмөндө келтирилди"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Күндү тандоо"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Тандалган күн"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Жыл тандоого которулуу"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Жылды тандоо үчүн экранды сүрүңүз же күндү тандоого кайтуу үчүн таптап коюңуз"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Кийинки айга өзгөртүү"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Мурунку айга өзгөртүү"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s-жылга өтүү"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Учурда %1$s тандалды"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Жок"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Бүгүн"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Көрсөтүлгөн жыл тандагыч"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Күндү тандоо"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Киргизилген күн"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Күнү"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Киргизилген күн: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Жок"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Күндүн мындай форматын колдонууга болбойт: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Күндүн форматы үлгүгө дал келген жок: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Күн %1$s — %2$s деп белгиленген жылдар диапазонуна кирбей калды"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Жылнаамага киргизүү режимине которулуу"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Текст киргизүү режимине которулуу"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Кийинки жылдарды көрүү үчүн сыдырыңыз"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Мурунку жылдарды көрүү үчүн сыдырыңыз"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Күндөрдү тандоо"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Башталуу күнү"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Аяктоо күнү"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Кийинки айды көрүү үчүн сыдырыңыз"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Мурунку айды көрүү үчүн сыдырыңыз"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Төмөнкү убакыт аралыгындагы күн"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Күндөрдү киргизүү"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Даталар диапазону туура эмес тандалды"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Тизменин керектүү жерине сүйрөп баруу"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Ылдыйкы экранды жыйыштыруу"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Ылдыйкы экранды жабуу"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Ылдыйкы экранды жайып көрсөтүү"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Калкып чыгуучу кеңеш"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Калкып чыгуучу кеңешти көрсөтүү"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"түштөн кийин"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"түшкө чейин"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Түшкө чейинки же түштөн кийинки убакытты тандоо"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Саат тандоо"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Мүнөттөрдү тандоо"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d саат"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d саат"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d мүнөт"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Мүнөт"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Саат"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"мүнөткө"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"саатка"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-lo/strings.xml b/compose/material3/material3/src/androidMain/res/values-lo/strings.xml
deleted file mode 100644
index f350116..0000000
--- a/compose/material3/material3/src/androidMain/res/values-lo/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"ກ່ອງໂຕ້ຕອບ"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"ປິດໄວ້"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"ຊອກຫາ"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"ການແນະນຳຢູ່ຂ້າງລຸ່ມ"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"ເລືອກວັນທີ"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"ວັນທີທີ່ເລືອກໄວ້"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"ປ່ຽນໄປເລືອກປີ"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"ປັດເພື່ອເລືອກປີ ຫຼື ແຕະເພື່ອສະຫຼັບກັບໄປຫາການເລືອກວັນ"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"ປ່ຽນເປັນເດືອນຕໍ່ໄປ"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"ປ່ຽນເປັນເດືອນຜ່ານມາ"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"ນຳທາງໄປຫາປີ %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"ການເລືອກປັດຈຸບັນ: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"ບໍ່ມີ"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"ມື້ນີ້"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"ສະແດງຕົວເລືອກປີ"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"ເລືອກວັນທີ"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"ປ້ອນວັນທີແລ້ວ"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"ວັນທີ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"ປ້ອນວັນທີແລ້ວ: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"ບໍ່ມີ"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"ວັນທີທີ່ບໍ່ອະນຸຍາດ: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"ວັນທີບໍ່ກົງກັບຮູບແບບທີ່ຄາດໄວ້: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"ວັນທີຢູ່ນອກໄລຍະປີທີ່ຄາດໄວ້ %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ສະຫຼັບໄປໃຊ້ໂໝດປ້ອນຂໍ້ມູນປະຕິທິນ"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"ສະຫຼັບໄປໃຊ້ໂໝດປ້ອນຂໍ້ຄວາມ"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"ເລື່ອນເພື່ອສະແດງປີຫຼັງຈາກນີ້"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"ເລື່ອນເພື່ອສະແດງປີກ່ອນໜ້ານີ້"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"ເລືອກວັນທີ"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"ວັນທີເລີ່ມຕົ້ນ"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"ວັນທີສິ້ນສຸດ"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"ເລື່ອນເພື່ອສະແດງເດືອນຕໍ່ໄປ"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"ເລື່ອນເພື່ອສະແດງເດືອນກ່ອນໜ້າ"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"ຢູ່ໃນໄລຍະ"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"ໃສ່ວັນທີ"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"ອິນພຸດໄລຍະວັນທີບໍ່ຖືກຕ້ອງ"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ບ່ອນຈັບລາກ"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"ຫຍໍ້ຊີດລຸ່ມສຸດລົງ"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"ປິດຊີດລຸ່ມສຸດໄວ້"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"ຂະຫຍາຍຊີດລຸ່ມສຸດ"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"ຄຳແນະນຳ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"ສະແດງຄຳແນະນຳ"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"ຫຼັງທ່ຽງ"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"ກ່ອນທ່ຽງ"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"ເລືອກກ່ອນທ່ຽງ ຫຼື ຫຼັງທ່ຽງ"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"ເລືອກຊົ່ວໂມງ"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"ເລືອກນາທີ"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d ໂມງ"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ຊົ່ວໂມງ"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d ນາທີ"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"ນາທີ"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"ຊົ່ວໂມງ"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"ສຳລັບນາທີ"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"ສຳລັບຊົ່ວໂມງ"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-lt/strings.xml b/compose/material3/material3/src/androidMain/res/values-lt/strings.xml
deleted file mode 100644
index edfbf46a..0000000
--- a/compose/material3/material3/src/androidMain/res/values-lt/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialogo langas"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Atsisakyti"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Paieška"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Pasiūlymai pateikti toliau"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Pasirinkite datą"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Pasirinkta data"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Perjungti į metų pasirinkimą"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Perbraukite, kad pasirinktumėte metus, arba palieskite, kad grįžtumėte ir vėl pasirinktumėte dieną"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Pakeisti į kitą mėnesį"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Pakeisti į ankstesnį mėnesį"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Eiti į %1$s m."</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Dabartinis pasirinkimas: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Nėra"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Šiandien"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Rodomas metų parinkiklis"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Pasirinkite datą"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Įvesta data"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Data"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Įvesta data: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Nėra"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Data neleidžiama: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Data neatitinka numatyto šablono: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Data nepatenka į numatytų metų diapazoną: %1$s–%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Perjungti į kalendoriaus įvesties režimą"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Perjungti į teksto įvesties režimą"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Slinkite, kol bus rodomi vėlesni metai"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Slinkite, kol bus rodomi ankstesni metai"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Pasirinkite datas"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Pradžios data"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Pabaigos data"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Slinkite, kol bus rodomas kitas mėnuo"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Slinkite, kol bus rodomas ankstesnis mėnuo"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Diapazone"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Įvesti datas"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Netinkama dienų sekos įvestis"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Vilkimo rankenėlė"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Sutraukti apatinį lapą"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Atsisakyti apatinio lapo"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Išskleisti apatinį lapą"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Patarimas"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Rodyti patarimą"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"popiet"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"priešpiet"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Pasirinkite „priešpiet“ arba „popiet“"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Pasirinkite valandą"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Pasirinkite minutes"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d val."</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d val."</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%d min."</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minutė"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Valanda"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"minutės"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"valandos"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-lv/strings.xml b/compose/material3/material3/src/androidMain/res/values-lv/strings.xml
deleted file mode 100644
index edb7117..0000000
--- a/compose/material3/material3/src/androidMain/res/values-lv/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialoglodziņš"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Noraidīt"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Meklēšana"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Tālāk ir sniegti ieteikumi"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Atlasīt datumu"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Atlasītais datums"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Pāriet uz gada atlasi"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Velciet, lai atlasītu gadu, vai pieskarieties, lai pārietu atpakaļ pie dienas atlases"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Mainīt uz nākamo mēnesi"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Mainīt uz iepriekšējo mēnesi"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Pāriet uz %1$s. gadu"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Pašreizējā atlase: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Nav"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Šodien"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Redzams gada atlasītājs"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Atlasīt datumu"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Ievadītais datums"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Datums"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Ievadītais datums: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Nav"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Datums nav atļauts: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Datums neatbilst paredzētajam formātam: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datums nav paredzētajā gadu diapazonā (%1$s.–%2$s. g.)"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Pārslēgties uz kalendāra ievades režīmu"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Pārslēgties uz teksta ievades režīmu"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Lai rādītu nākamos gadus, ritiniet"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Lai rādītu iepriekšējos gadus, ritiniet"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Atlasiet datumus"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Sākuma datums"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Beigu datums"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Lai rādītu nākamo mēnesi, ritiniet"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Lai rādītu iepriekšējo mēnesi, ritiniet"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Atlasītajā diapazonā"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Ievadiet datumus"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Ievadīts nederīgs datumu diapazons."</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Vilkšanas turis"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Sakļaut ekrāna apakšdaļas lapu"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Noraidīt ekrāna apakšdaļas lapu"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Izvērst ekrāna apakšdaļas lapu"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Rīka padoms"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Rādīt rīka padomu"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Atlasīt “AM” (priekšpusdienā) vai “PM” (pēcpusdienā)"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Atlasīt stundu"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Atlasīt minūtes"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"Minūtes: %1$d"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minūtes"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Stundas"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"(minūtes)"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"(stundas)"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-mk/strings.xml b/compose/material3/material3/src/androidMain/res/values-mk/strings.xml
deleted file mode 100644
index 5729b09..0000000
--- a/compose/material3/material3/src/androidMain/res/values-mk/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Дијалог"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Отфрли"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Пребарување"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Предлозите се наведени подолу"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Изберете датум"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Избран датум"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Префрли на бирање година"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Повлечете за да изберете година или допрете за да се вратите на бирање ден"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Промени на следниот месец"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Промени на претходниот месец"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Одете на годината %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Тековен избор: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Нема"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Денес"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Избирачот на година е видлив"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Изберете датум"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Внесен датум"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Датум"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Внесен датум: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Нема"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Датумот не е дозволен: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Не се совпаѓа со очекуваната шема: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Датумот не е во очекуваниот опсег на години %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Префрли на режим за внесување во календарот"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Префрли на режим за внесување текст"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Лизгајте за да ги прикажете подоцнежните години"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Лизгајте за да ги прикажете претходните години"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Изберете датуми"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Датум на започнување"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Датум на завршување"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Лизгајте за да го прикажете следниот месец"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Лизгајте за да го прикажете претходниот месец"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Во опсег"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Внесете датуми"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Внесовте неважечки временски период"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Рачка за влечење"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Собери го долниот лист"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Отфрли го долниот лист"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Прошири го долниот лист"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Совет за алатка"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Прикажи совет за алатка"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"попладне"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"претпладне"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Изберете претпладне или попладне"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Изберете час"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Изберете минути"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d часот"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d часот"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d минути"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Минута"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Час"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"за минути"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"за час"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ml/strings.xml b/compose/material3/material3/src/androidMain/res/values-ml/strings.xml
deleted file mode 100644
index 2cf84ce..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ml/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"ഡയലോഗ്"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"ഡിസ്മിസ് ചെയ്യുക"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"തിരയുക"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"നിദ്ദേശങ്ങൾ ചുവടെയുണ്ട്"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"തീയതി തിരഞ്ഞെടുക്കുക"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"തിരഞ്ഞെടുത്ത തീയതി"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"വർഷം തിരഞ്ഞെടുക്കുന്നതിലേക്ക് മാറുക"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"വർഷം തിരഞ്ഞെടുക്കാൻ സ്വൈപ്പ് ചെയ്യുക അല്ലെങ്കിൽ ദിവസം തിരഞ്ഞെടുക്കുന്നതിലേക്ക് തിരികെ പോകാൻ ടാപ്പ് ചെയ്യുക"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"അടുത്ത മാസത്തിലേക്ക് മാറ്റുക"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"മുമ്പത്തെ മാസത്തിലേക്ക് മാറ്റുക"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s എന്ന വർഷത്തിലേക്ക് പോകുക"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"നിലവിലെ തിരഞ്ഞെടുപ്പ്: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"ഒന്നുമില്ല"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"ഇന്ന്"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"വർഷ പിക്കർ ദൃശ്യമാണ്"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"തീയതി തിരഞ്ഞെടുക്കുക"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"നൽകിയ തീയതി"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"തീയതി"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"നൽകിയ തീയതി: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"ഒന്നുമില്ല"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"തീയതി അനുവദനീയമല്ല: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"പ്രതീക്ഷിച്ച പാറ്റേണുമായി തീയതി പൊരുത്തപ്പെടുന്നില്ല: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"പ്രതീക്ഷിക്കുന്ന കാലയളവിലെ വർഷമല്ല നൽകിയ തീയതിയുടേത് %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"കലണ്ടർ ഇൻപുട്ട് മോഡിലേക്ക് മാറുക"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"ടെക്സ്റ്റ് ഇൻപുട്ട് മോഡിലേക്ക് മാറുക"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"പിന്നീടുള്ള വർഷങ്ങൾ കാണിക്കാൻ സ്ക്രോൾ ചെയ്യുക"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"മുൻ വർഷങ്ങൾ കാണിക്കാൻ സ്ക്രോൾ ചെയ്യുക"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"തീയതികൾ തിരഞ്ഞെടുക്കുക"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"ആരംഭിക്കുന്ന തീയതി"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"അവസാനിക്കുന്ന തീയതി"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"\'അടുത്ത മാസം\' കാണിക്കാൻ സ്ക്രോൾ ചെയ്യുക"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"മുമ്പത്തെ മാസം കാണിക്കാൻ സ്ക്രോൾ ചെയ്യുക"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"പരിധിയിൽ"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"തീയതികൾ നൽകുക"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"തീയതി ശ്രേണി ഇൻപുട്ട് അസാധുവാണ്"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"വലിച്ചിടുന്നതിനുള്ള ഹാൻഡിൽ"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"ബോട്ടം ഷീറ്റ് ചുരുക്കുക"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"ബോട്ടം ഷീറ്റ് ഡിസ്മിസ് ചെയ്യുക"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"ബോട്ടം ഷീറ്റ് വികസിപ്പിക്കുക"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"ടൂൾടിപ്പ്"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"ടൂൾടിപ്പ് കാണിക്കുക"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM അല്ലെങ്കിൽ PM തിരഞ്ഞെടുക്കുക"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"മണിക്കൂർ തിരഞ്ഞെടുക്കുക"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"മിനിറ്റ് തിരഞ്ഞെടുക്കുക"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d മണി"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d മ."</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d മിനിറ്റ്"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"മിനിറ്റ്"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"മണിക്കൂർ"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"മിനിറ്റ് നേരത്തേക്ക്"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"മണിക്കൂർ നേരത്തേക്ക്"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-mn/strings.xml b/compose/material3/material3/src/androidMain/res/values-mn/strings.xml
deleted file mode 100644
index b1e4a85..0000000
--- a/compose/material3/material3/src/androidMain/res/values-mn/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Харилцах цонх"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Үл хэрэгсэх"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Хайх"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Доорх зөвлөмжүүд"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Огноо сонгох"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Сонгосон огноо"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Жил сонгох руу сэлгэх"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Он сонгохын тулд шудрах эсвэл өдөр сонгох руу буцааж сэлгэхийн тулд товшино уу"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Дараагийн сар луу өөрчлөх"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Өмнөх сар луу өөрчлөх"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s он руу шилжих"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Одоогийн сонголт: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Байхгүй"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Өнөөдөр"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Он сонгогч харагдаж байна"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Огноо сонгох"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Оруулсан огноо"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Огноо"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Оруулсан огноо: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Байхгүй"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Зөвшөөрөөгүй огноо: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Огноо нь тооцоолсон хээтэй таарахгүй байна: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Тооцоолсон оны %1$s - %2$s мужаас гарсан огноо"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Календарийн орох горим руу сэлгэх"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Текст оруулах горим руу сэлгэх"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Дараагийн жилүүдийг харуулахын тулд гүйлгэнэ үү"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Өмнөх жилүүдийг харуулахын тулд гүйлгэнэ үү"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Огноо сонгох"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Эхлэх огноо"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Дуусах огноо"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Дараагийн сарыг харуулахын тулд гүйлгэнэ үү"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Өмнөх сарыг харуулахын тулд гүйлгэнэ үү"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Хүрээнд байгаа"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Огноо оруулах"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Хугацааны интервалын оролт буруу байна"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Чирэх бариул"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Доод хүснэгтийг хураах"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Доод хүснэгтийг хаах"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Доод хүснэгтийг дэлгэх"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Зөвлөмж"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Зөвлөмж харуулах"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"ҮХ"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"ҮӨ"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"ҮӨ эсвэл ҮХ эсэхийг сонгоно уу"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Цаг сонгох"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Минут сонгоно уу"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d цаг"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d цаг"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d минут"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Минут"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Цаг"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"минутын турш"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"цагийн турш"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-mr/strings.xml b/compose/material3/material3/src/androidMain/res/values-mr/strings.xml
deleted file mode 100644
index 508bca8..0000000
--- a/compose/material3/material3/src/androidMain/res/values-mr/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"डायलॉग"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"डिसमिस करा"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"शोधा"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"सूचना खाली आहेत"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"तारीख निवडा"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"निवडलेली तारीख"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"वर्ष निवडणे वर स्विच करा"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"वर्ष निवडण्यासाठी स्वाइप करा, किंवा दिवस निवडण्यावर परत स्विच करण्यासाठी टॅप करा"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"पुढील महिन्यावर बदला"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"मागील महिन्यावर बदला"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s वर्षावर नेव्हिगेट करा"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"सद्य निवड: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"काहीही नाही"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"आज"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"वर्ष पिकर दृश्यमान आहे"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"तारीख निवडा"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"एंटर केलेली तारीख"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"तारीख"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"एंटर केली तारीख: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"काहीही नाही"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"अशा तारखेला अनुमती नाही: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"तारीख ही अपेक्षित पॅटर्नशी जुळत नाही: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"तारीख ही %1$s - %2$s या अपेक्षित रेंजच्या बाहेरची आहे"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"कॅलेंडर इनपुट मोडवर स्विच करा"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"टेक्स्ट इनपुट मोडवर स्विच करा"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"नंतरची वर्ष दाखवण्यासाठी स्क्रोल करा"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"पूर्वीची वर्ष दाखवण्यासाठी स्क्रोल करा"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"तारखा निवडा"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"सुरू होण्याची तारीख"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"संपण्याची तारीख"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"पुढील महिना दाखवण्यासाठी स्क्रोल करा"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"मागील महिना दाखवण्यासाठी स्क्रोल करा"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"रेंजमध्ये"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"तारखा एंटर करा"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"तारीख रेंजचे इनपुट चुकीचे आहे"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ड्रॅग हॅंडल"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"तळाशी असलेली शीट कोलॅप्स करा"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"तळाशी असलेली शीट डिसमिस करा"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"तळाशी असलेली शीट विस्तारीत करा"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"टूलटिप"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"टूलटिप दाखवा"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM किंवा PM निवडा"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"तास निवडा"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"मिनिटे निवडा"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d वाजता"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d तास"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d मिनिटे"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"मिनिट"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"तास"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"मिनिटांसाठी"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"तासासाठी"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ms/strings.xml b/compose/material3/material3/src/androidMain/res/values-ms/strings.xml
deleted file mode 100644
index 3a3a214..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ms/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialog"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Ketepikan"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Carian"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Cadangan di bawah"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Pilih tarikh"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Tarikh dipilih"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Beralih kepada pemilihan tahun"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Leret untuk memilih tahun atau ketik untuk bertukar kembali kepada pemilihan hari"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Tukar kepada bulan seterusnya"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Tukar kepada bulan sebelumnya"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navigasi ke tahun %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Pilihan semasa: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Tiada"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Hari ini"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Pemilih tahun kelihatan"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Pilih tarikh"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Tarikh yang dimasukkan"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Tarikh"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Tarikh yang dimasukkan: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Tiada"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Tarikh yang tidak dibenarkan: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Tarikh tidak sepadan dengan corak yang dijangkakan: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Tarikh di luar julat tahun yang dijangkakan %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Beralih kepada mod input kalendar"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Beralih kepada mod input teks"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Tatal untuk menunjukkan tahun kemudian"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Tatal untuk menunjukkan tahun terdahulu"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Pilih tarikh"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Tarikh mula"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Tarikh tamat"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Tatal untuk menunjukkan bulan seterusnya"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Tatal untuk menunjukkan bulan sebelumnya"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Dalam liputan"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Masukkan tarikh"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Input julat tarikh tidak sah"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Pemegang seret"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Kuncupkan helaian bawah"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Ketepikan helaian bawah"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Kembangkan helaian bawah"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Tip alat"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Tunjukkan tip alat"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"P/M"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"PG"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Pilih PG atau PTG/MLM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Pilih jam"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Pilih minit"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"Pukul %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d jam"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minit"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minit"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Jam"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"selama # minit"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"selama # jam"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-my/strings.xml b/compose/material3/material3/src/androidMain/res/values-my/strings.xml
deleted file mode 100644
index 49c9da8..0000000
--- a/compose/material3/material3/src/androidMain/res/values-my/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"ဒိုင်ယာလော့"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"ပယ်ရန်"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"ရှာဖွေရန်"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"အကြံပြုချက်များ အောက်တွင်ရှိသည်"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"ရက်စွဲရွေးရန်"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"ရွေးထားသည့် ရက်စွဲ"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"နှစ်ရွေးခြင်းသို့ ပြောင်းရန်"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"ခုနှစ်ရွေးချယ်ရန် ပွတ်ဆွဲပါ (သို့) ရက်ရွေးချယ်ခြင်းသို့ ပြန်ရန် တို့ပါ"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"နောက်လသို့ ပြောင်းရန်"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"ယခင်လသို့ ပြောင်းရန်"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s ခုနှစ်သို့ သွားရန်"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"လက်ရှိ ရွေးချယ်မှု- %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"မရှိ"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"ယနေ့"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"ခုနှစ်ရွေးချယ်ရေးစနစ်ကို မြင်ရသည်"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"ရက်စွဲရွေးရန်"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"ထည့်ထားသော ရက်စွဲ"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"ရက်စွဲ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"ထည့်ထားသော ရက်စွဲ- %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"မရှိ"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"ရက်စွဲကို ခွင့်ပြုမထားပါ- %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"ရက်စွဲသည် မျှော်မှန်းထားသော ပုံစံနှင့် မကိုက်ညီပါ- %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"ရက်စွဲသည် မျှော်မှန်းထားသော နှစ်အပိုင်းအခြား %1$s - %2$s တွင် မပါဝင်ပါ"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ပြက္ခဒိန် လက်ကွက်ထည့်သွင်းနည်းသို့ ပြောင်းရန်"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"စာရိုက်နည်းသို့ ပြောင်းရန်"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"နောက်ပိုင်းနှစ်များ ပြရန် လှိမ့်ပါ"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"ယခင်နှစ်များ ပြရန် လှိမ့်ပါ"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"ရက်စွဲများရွေးပါ"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"စတင်ရက်"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"ပြီးဆုံးရက်"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"လာမည့်လကို ပြရန် လှိမ့်ပါ"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"ယခင်လကို ပြရန် လှိမ့်ပါ"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"အပိုင်းအခြားအတွင်း"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"ရက်စွဲများထည့်ပါ"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"ဒေတာအပိုင်းအခြား ထည့်သွင်းမှု မမှန်ပါ"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ဖိဆွဲအထိန်း"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"အောက်ခြေအပိုဆောင်း စာမျက်နှာကို ချုံ့သည်"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"အောက်ခြေအပိုဆောင်း စာမျက်နှာကို ပယ်သည်"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"အောက်ခြေအပိုဆောင်း စာမျက်နှာကို ချဲ့သည်"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"အကြံပြုချက်ပြ ပေါ့အပ် ဝင်းဒိုး"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"အကြံပြုချက်ပြ ပေါ့အပ်ဝင်းဒိုး ပြရန်"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM (သို့) PM ရွေးရန်"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"နာရီ ရွေးရန်"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"မိနစ် ရွေးရန်"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d နာရီ"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d နာရီ"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d မိနစ်"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"မိနစ်"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"နာရီ"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"မိနစ်ကြာ"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"နာရီကြာ"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-nb/strings.xml b/compose/material3/material3/src/androidMain/res/values-nb/strings.xml
deleted file mode 100644
index 943ea73..0000000
--- a/compose/material3/material3/src/androidMain/res/values-nb/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialogboks"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Lukk"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Søk"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Du finner forslag nedenfor"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Velg dato"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Valgt dato"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Bytt til å velge et år"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Sveip for å velge år, eller trykk for å bytte tilbake til valg av dag"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Endre til neste måned"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Endre til forrige måned"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Gå til år %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Valgt: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Ingen"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"I dag"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Årsvelgeren er synlig"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Velg dato"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Angitt dato"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Dato"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Angitt dato: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Ingen"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Datoen er ikke tillatt: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Datoen matcher ikke det forventede mønsteret: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datoen er utenfor det forventede årsintervallet %1$s–%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Bytt til kalendermodus for inndata"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Bytt til tekstmodus for inndata"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Rull for å vise senere år"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Rull for å vise tidligere år"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Velg datoer"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Startdato"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Sluttdato"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Rull for å vise den neste måneden"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Rull for å vise den forrige måneden"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Innen rekkevidde"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Legg inn datoer"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"En ugyldig dataperiode er skrevet inn"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Håndtak"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Skjul feltet nederst"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Lukk feltet nederst"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Vis feltet nederst"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Verktøytips"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Vis verktøytips"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Velg AM eller PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Velg time"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Velg minutter"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d timer"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutter"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minutt"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Time"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"for minutter"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"for timer"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ne/strings.xml b/compose/material3/material3/src/androidMain/res/values-ne/strings.xml
deleted file mode 100644
index 5a4fec4..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ne/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"डायलग"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"हटाउनुहोस्"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"खोज्नुहोस्"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"सुझावहरू तल दिइएका छन्"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"मिति चयन गर्नुहोस्"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"चयन गरिएको मिति"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"साल चयन गर्ने फिल्डमा जानुहोस्"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"कुनै साल छनौट गर्न स्वाइप गर्नुहोस् वा दिन चयन गर्न ट्याप गर्नुहोस्"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"हाल चयन गरिएको महिना परिवर्तन गरी आगामी महिना बनाउनुहोस्"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"हाल चयन गरिएको महिना परिवर्तन गरी अघिल्लो महिना बनाउनुहोस्"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"साल %1$s मा जानुहोस्"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"हालको छनौट: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"कुनै पनि होइन"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"आज"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"साल पिकर देखिएको छ"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"मिति चयन गर्नुहोस्"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"हालिएको मिति"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"मिति"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"हालिएको मिति: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"कुनै पनि होइन"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"यो मिति हाल्न पाइँदैन: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"हालिएको मितिको ढाँचा अपेक्षित ढाँचासँग मिलेन: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"हालिएको मिति सालको अपेक्षित दायरा (%1$s - %2$s) भित्र पर्दैन"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"पात्रोको इनपुट मोड प्रयोग गर्नुहोस्"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"टेक्स्ट इनपुट मोड प्रयोग गर्नुहोस्"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"आगामी सालहरूको जानकारी हेर्न स्क्रोल गर्नुहोस्"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"विगतका सालहरूको जानकारी हेर्न स्क्रोल गर्नुहोस्"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"मितिहरू चयन गर्नुहोस्"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"सुरु हुने मिति"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"समापन हुने मिति"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"अर्को महिनाको जानकारी हेर्न स्क्रोल गर्नुहोस्"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"गत महिनाको जानकारी हेर्न स्क्रोल गर्नुहोस्"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"चयन गरिएका मितिभित्र पर्ने"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"मितिहरू हाल्नुहोस्"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"मितिको अवैध दायरा तोकियो"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ड्र्याग ह्यान्डल"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"पुछारको पाना कोल्याप्स गर्नुहोस्"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"पुछारको पाना हटाउनुहोस्"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"पुछारको पाना एक्स्पान्ड गर्नुहोस्"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"टुलटिप"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"टुलटिप देखाइयोस्"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"पूर्वाह्न वा अपराह्न चयन गर्नुहोस्"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"घण्टा चयन गर्नुहोस्"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"मिनेट चयन गर्नुहोस्"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d बजे"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d घण्टा"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d मिनेट"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"मिनेट"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"घण्टा"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"मिनेटका लागि"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"घण्टाका लागि"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-nl/strings.xml b/compose/material3/material3/src/androidMain/res/values-nl/strings.xml
deleted file mode 100644
index 1cb58a4..0000000
--- a/compose/material3/material3/src/androidMain/res/values-nl/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialoogvenster"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Sluiten"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Zoeken"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Suggesties hieronder"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Datum selecteren"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Geselecteerde datum"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Schakelaar om een jaar te selecteren"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Swipe om een jaar te selecteren of tik om terug te gaan en een dag te selecteren"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Naar volgende maand gaan"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Naar vorige maand gaan"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Ga naar jaar %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Huidige selectie: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Geen"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Vandaag"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Jaarselectie zichtbaar"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Datum selecteren"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Opgegeven datum"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Datum"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Opgegeven datum: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Geen"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Datum niet toegestaan: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"De datum komt niet overeen met het verwachte patroon: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datum buiten het verwachte jaarbereik %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Overschakelen naar agenda-invoermodus"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Overschakelen naar tekstinvoermodus"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Scroll om latere jaren te tonen"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Scroll om eerdere jaren te tonen"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Datums selecteren"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Startdatum"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Einddatum"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Scroll om de volgende maand te tonen"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Scroll om de vorige maand te tonen"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Binnen bereik"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Datums opgeven"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Ongeldige invoer voor periode"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Handgreep voor slepen"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Blad onderaan samenvouwen"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Blad onderaan sluiten"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Blad onderaan uitvouwen"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Tooltip"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Tooltip tonen"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM of PM selecteren"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Uur selecteren"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Minuten selecteren"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d uur"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d uur"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minuten"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuut"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Uur"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"voor minuten"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"voor uur"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-or/strings.xml b/compose/material3/material3/src/androidMain/res/values-or/strings.xml
deleted file mode 100644
index 2d8e870c..0000000
--- a/compose/material3/material3/src/androidMain/res/values-or/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"ଡାଏଲଗ"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"ଖାରଜ କରନ୍ତୁ"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"ସର୍ଚ୍ଚ କରନ୍ତୁ"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"ପରାମର୍ଶ ତଳେ ଦିଆଯାଇଛି"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"ତାରିଖ ଚୟନ କରନ୍ତୁ"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"ଚୟନିତ ତାରିଖ"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"ବର୍ଷ ଚୟନ କରିବାକୁ ସ୍ୱିଚ କରନ୍ତୁ"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"ଏକ ବର୍ଷ ଚୟନ କରିବା ପାଇଁ ସ୍ୱାଇପ କରନ୍ତୁ କିମ୍ବା ଏକ ଦିନ ଚୟନ କରିବା ପାଇଁ ପୁଣି ସ୍ୱିଚ କରିବାକୁ ଟାପ କରନ୍ତୁ"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"ପରବର୍ତ୍ତୀ ମାସକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"ପୂର୍ବବର୍ତ୍ତୀ ମାସକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s ବର୍ଷକୁ ନାଭିଗେଟ କରନ୍ତୁ"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"ବର୍ତ୍ତମାନର ଚୟନ: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"କିଛି ନାହିଁ"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"ଆଜି"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"ବର୍ଷ ପିକର ଦେଖାଯାଉଛି"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"ତାରିଖ ଚୟନ କରନ୍ତୁ"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"ଲେଖାଯାଇଥିବା ତାରିଖ"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"ତାରିଖ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"ଲେଖାଯାଇଥିବା ତାରିଖ: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"କିଛି ନାହିଁ"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"ତାରିଖକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"ଆଶା କରାଯାଉଥିବା ପାଟର୍ନ ସହ ତାରିଖ ମେଳ ହେଉନାହିଁ: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"ତାରିଖଟି ଆଶା କରାଯାଉଥିବା ବର୍ଷ ରେଞ୍ଜ %1$s - %2$sରୁ ବାହାରେ ଅଛି"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"କେଲେଣ୍ଡର ଇନପୁଟ ମୋଡକୁ ସ୍ୱିଚ କରନ୍ତୁ"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"ଟେକ୍ସଟ ଇନପୁଟ ମୋଡକୁ ସ୍ୱିଚ କରନ୍ତୁ"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"ପର ବର୍ଷଗୁଡ଼ିକ ଦେଖାଇବା ପାଇଁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"ପୂର୍ବ ବର୍ଷଗୁଡ଼ିକ ଦେଖାଇବା ପାଇଁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"ତାରିଖଗୁଡ଼ିକ ଚୟନ କରନ୍ତୁ"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"ଆରମ୍ଭ ତାରିଖ"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"ଶେଷ ତାରିଖ"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"ପରବର୍ତ୍ତୀ ମାସ ଦେଖାଇବା ପାଇଁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"ପୂର୍ବବର୍ତ୍ତୀ ମାସ ଦେଖାଇବା ପାଇଁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"ରେଞ୍ଜରେ ଅଛି"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"ତାରିଖଗୁଡ଼ିକ ଲେଖନ୍ତୁ"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"ଅବୈଧ ତାରିଖ ରେଞ୍ଜ ଇନପୁଟ"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ଡ୍ରାଗ ହେଣ୍ଡେଲ"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"ବଟମ ସିଟକୁ ସଙ୍କୁଚିତ କରନ୍ତୁ"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"ବଟମ ସିଟକୁ ଖାରଜ କରନ୍ତୁ"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"ବଟମ ସିଟକୁ ବିସ୍ତାର କରନ୍ତୁ"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"ଟୁଲଟିପ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"ଟୁଲଟିପ ଦେଖାନ୍ତୁ"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM କିମ୍ବା PM ଚୟନ କରନ୍ତୁ"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"ଘଣ୍ଟା ଚୟନ କରନ୍ତୁ"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"ମିନିଟ ଚୟନ କରନ୍ତୁ"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$dଟା"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ଘଣ୍ଟା"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d ମିନିଟ"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"ମିନିଟ"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"ଘଣ୍ଟା"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"ମିନିଟ ପାଇଁ"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"ଘଣ୍ଟା ପାଇଁ"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-pa/strings.xml b/compose/material3/material3/src/androidMain/res/values-pa/strings.xml
deleted file mode 100644
index fe98acf..0000000
--- a/compose/material3/material3/src/androidMain/res/values-pa/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"ਵਿੰਡੋ"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"ਖਾਰਜ ਕਰੋ"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"ਖੋਜੋ"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"ਸੁਝਾਅ ਹੇਠਾਂ ਹਨ"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"ਤਾਰੀਖ ਚੁਣੋ"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"ਚੁਣੀ ਗਈ ਤਾਰੀਖ"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"ਸਾਲ ਚੁਣਨ ਲਈ ਸਵਿੱਚ ਕਰੋ"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"ਕੋਈ ਸਾਲ ਚੁਣਨ ਲਈ ਸਵਾਈਪ ਕਰੋ ਜਾਂ ਕੋਈ ਦਿਨ ਚੁਣਨ ਲਈ ਵਾਪਸ ਜਾਣ ਵਾਸਤੇ ਟੈਪ ਕਰੋ"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"ਅਗਲੇ ਮਹੀਨੇ \'ਤੇ ਜਾਓ"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"ਪਿਛਲੇ ਮਹੀਨੇ \'ਤੇ ਜਾਓ"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"ਸਾਲ %1$s \'ਤੇ ਜਾਓ"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"ਮੌਜੂਦਾ ਚੋਣ: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"ਕੋਈ ਨਹੀਂ"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"ਅੱਜ"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"ਸਾਲ ਚੋਣਕਾਰ ਦਿਖਣਯੋਗ ਹੈ"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"ਤਾਰੀਖ ਚੁਣੋ"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"ਦਾਖਲ ਕੀਤੀ ਗਈ ਤਾਰੀਖ"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"ਤਾਰੀਖ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"ਦਾਖਲ ਕੀਤੀ ਗਈ ਤਾਰੀਖ: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"ਕੋਈ ਨਹੀਂ"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"ਇਸ ਤਾਰੀਖ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"ਤਾਰੀਖ ਸੰਭਾਵਿਤ ਪੈਟਰਨ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦੀ: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"ਤਾਰੀਖ ਸੰਭਾਵਿਤ ਸਾਲ ਦੀ ਰੇਂਜ ਤੋਂ ਬਾਹਰ ਹੈ %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"ਕੈਲੰਡਰ ਇਨਪੁੱਟ ਮੋਡ \'ਤੇ ਸਵਿੱਚ ਕਰੋ"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"ਲਿਖਤ ਇਨਪੁੱਟ ਮੋਡ \'ਤੇ ਸਵਿੱਚ ਕਰੋ"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"ਬਾਅਦ ਵਾਲੇ ਸਾਲਾਂ ਨੂੰ ਦਿਖਾਉਣ ਲਈ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"ਪਹਿਲਾਂ ਵਾਲੇ ਸਾਲਾਂ ਨੂੰ ਦਿਖਾਉਣ ਲਈ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"ਤਾਰੀਖਾਂ ਚੁਣੋ"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"ਸ਼ੁੁਰੂਆਤੀ ਤਾਰੀਖ"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"ਸਮਾਪਤੀ ਤਾਰੀਖ"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"ਅਗਲਾ ਮਹੀਨਾ ਦਿਖਾਉਣ ਲਈ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"ਪਿਛਲਾ ਮਹੀਨਾ ਦਿਖਾਉਣ ਲਈ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"ਰੇਂਜ ਵਿੱਚ"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"ਤਾਰੀਖਾਂ ਦਾਖਲ ਕਰੋ"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"ਇਨਪੁੱਟ ਕੀਤੀ ਗਈ ਤਾਰੀਖ ਦੀ ਰੇਂਜ ਅਵੈਧ ਹੈ"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ਘਸੀਟਣ ਵਾਲਾ ਹੈਂਡਲ"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"ਹੇਠਲੀ ਸ਼ੀਟ ਨੂੰ ਸਮੇਟੋ"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"ਹੇਠਲੀ ਸ਼ੀਟ ਨੂੰ ਖਾਰਜ ਕਰੋ"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"ਹੇਠਲੀ ਸ਼ੀਟ ਦਾ ਵਿਸਤਾਰ ਕਰੋ"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"ਟੂਲ-ਟਿੱਪ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"ਟੂਲ-ਟਿੱਪ ਦਿਖਾਓ"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM ਜਾਂ PM ਚੁਣੋ"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"ਘੰਟਾ ਚੁਣੋ"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"ਮਿੰਟ ਚੁਣੋ"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d ਵਜੇ"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ਘੰਟੇ"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d ਮਿੰਟ"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"ਮਿੰਟ"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"ਘੰਟੇ"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"ਮਿੰਟਾਂ ਲਈ"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"ਘੰਟੇ ਲਈ"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-pl/strings.xml b/compose/material3/material3/src/androidMain/res/values-pl/strings.xml
deleted file mode 100644
index 4307562..0000000
--- a/compose/material3/material3/src/androidMain/res/values-pl/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialog"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Zamknij"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Wyszukiwanie"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Propozycje znajdziesz poniżej"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Wybierz datę"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Wybrana data"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Przełącz na wybór roku"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Przesuń, aby wybrać rok, lub wróć do poprzedniej sekcji i wybierz dzień"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Zmień na następny miesiąc"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Zmień na poprzedni miesiąc"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Przejdź do roku %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Obecnie wybrane: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Brak"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Dzisiaj"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Widoczny selektor roku"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Wybierz datę"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Wprowadzono datę"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Data"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Wprowadzono datę: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Brak"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Data niedozwolona: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Data nie pasuje do oczekiwanego wzorca: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Data poza oczekiwanym zakresem lat %1$s–%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Włącz tryb wprowadzania danych kalendarzowych"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Włącz tryb wprowadzania tekstu"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Przewiń, aby wyświetlić późniejsze lata"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Przewiń, aby wyświetlić wcześniejsze lata"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Wybierz daty"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Data początkowa"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Data końcowa"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Przewiń, aby wyświetlić kolejny miesiąc"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Przewiń, aby wyświetlić poprzedni miesiąc"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"W zasięgu"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Wprowadź daty"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Nieprawidłowy zakres dat"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Uchwyt do przeciągania"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Zwiń planszę dolną"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Zamknij planszę dolną"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Rozwiń planszę dolną"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Etykietka"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Pokaż etykietkę"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Wybierz AM lub PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Wybierz godzinę"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Wybierz minuty"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d godziny"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minut"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuta"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Godzina"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"na minuty"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"na godzinę"</string>
-</resources>
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
deleted file mode 100644
index 12a5094..0000000
--- a/compose/material3/material3/src/androidMain/res/values-pt-rBR/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Caixa de diálogo"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Dispensar"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Pesquisa"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Sugestões abaixo"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Selecionar data"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Data selecionada"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Trocar para a seleção de ano"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Deslize para selecionar um ano ou toque para voltar à seleção de dia"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Mudar para o próximo mês"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Mudar para o mês anterior"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navegar para o ano de %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Seleção atual: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Nenhuma"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Hoje"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Seletor de dia visível"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Selecionar data"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Data inserida"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Data"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Data inserida: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Nenhuma"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Data não permitida: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"A data não está no padrão esperado: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"A data está fora do intervalo de anos esperado %1$s a %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Alternar para o modo de entrada da agenda"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Alternar para o modo de entrada de texto"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Role a tela para mostrar anos posteriores"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Role a tela para mostrar anos anteriores"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Selecionar datas"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Data de início"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Data de término"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Role a tela para mostrar o mês posterior"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Role a tela para mostrar o mês anterior"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Dentro do alcance"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Informar datas"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Período inválido"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Alça de arrastar"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Fechar página inferior"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Dispensar página inferior"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Abrir página inferior"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Dica"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Mostrar dica"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Selecione AM ou PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Selecione a hora"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Selecione os minutos"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$dh"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d horas"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutos"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuto"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hora"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"por minutos"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"por hora"</string>
-</resources>
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
deleted file mode 100644
index 9bb9a3a..0000000
--- a/compose/material3/material3/src/androidMain/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Caixa de diálogo"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Ignorar"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Pesquisar"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Sugestões abaixo"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Selecionar data"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Data selecionada"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Mude para a seleção do ano"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Deslize rapidamente para selecionar um ano ou toque para mudar novamente para a seleção do dia"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Mudar para o mês seguinte"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Mudar para o mês anterior"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navegar para o ano %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Seleção atual: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Nenhuma"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Hoje"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Selecionador de ano visível"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Selecionar data"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Data introduzida"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Data"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Data introduzida: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Nenhuma"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Data não permitida: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"A data não corresponde ao padrão esperado: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Data fora do intervalo de anos esperado: %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Mudar para o método de introdução de calendário"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Mudar para o método de introdução de texto"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Desloque a página para mostrar anos posteriores"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Desloque a página para mostrar anos anteriores"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Selecione as datas"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Data de início"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Data de fim"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Desloque a página para mostrar o mês seguinte"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Desloque a página para mostrar o mês anterior"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Dentro do alcance"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Introduza as datas"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Entrada do intervalo de datas inválida"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Indicador para arrastar"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Reduza a secção inferior"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Ignore a secção inferior"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Expanda a secção inferior"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Sugestão"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Mostrar sugestão"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Selecione AM ou PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Selecione a hora"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Selecione os minutos"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d h"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d horas"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutos"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuto"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hora"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"para minutos"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"para hora"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-pt/strings.xml b/compose/material3/material3/src/androidMain/res/values-pt/strings.xml
deleted file mode 100644
index 12a5094..0000000
--- a/compose/material3/material3/src/androidMain/res/values-pt/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Caixa de diálogo"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Dispensar"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Pesquisa"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Sugestões abaixo"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Selecionar data"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Data selecionada"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Trocar para a seleção de ano"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Deslize para selecionar um ano ou toque para voltar à seleção de dia"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Mudar para o próximo mês"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Mudar para o mês anterior"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navegar para o ano de %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Seleção atual: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Nenhuma"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Hoje"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Seletor de dia visível"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Selecionar data"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Data inserida"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Data"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Data inserida: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Nenhuma"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Data não permitida: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"A data não está no padrão esperado: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"A data está fora do intervalo de anos esperado %1$s a %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Alternar para o modo de entrada da agenda"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Alternar para o modo de entrada de texto"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Role a tela para mostrar anos posteriores"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Role a tela para mostrar anos anteriores"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Selecionar datas"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Data de início"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Data de término"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Role a tela para mostrar o mês posterior"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Role a tela para mostrar o mês anterior"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Dentro do alcance"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Informar datas"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Período inválido"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Alça de arrastar"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Fechar página inferior"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Dispensar página inferior"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Abrir página inferior"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Dica"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Mostrar dica"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Selecione AM ou PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Selecione a hora"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Selecione os minutos"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$dh"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d horas"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minutos"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuto"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hora"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"por minutos"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"por hora"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ro/strings.xml b/compose/material3/material3/src/androidMain/res/values-ro/strings.xml
deleted file mode 100644
index 4b56db4..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ro/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialog"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Respinge"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Caută"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Sugestii mai jos"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Selectează data"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Data selectată"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Comută la selectarea anului"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Glisează pentru a selecta un an sau atinge pentru a reveni la selectarea zilei"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Treci la luna următoare"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Treci la luna anterioară"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navighează la anul %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Opțiunea selectată: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Fără"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Azi"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Selectorul de an este vizibil"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Selectează data"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Data introdusă"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Dată"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Data introdusă: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Fără"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Data nu este permisă: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Data nu corespunde modelului așteptat: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Data este în afara intervalului de ani %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Comută la modul de introducere în calendar"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Comută la modul de introducere a textului"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Derulează pentru a afișa ani ulteriori"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Derulează pentru a afișa ani anteriori"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Selectează datele"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Data de începere"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Data de încheiere"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Derulează pentru a afișa luna următoare"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Derulează pentru a afișa luna anterioară"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"În interval"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Introdu datele"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Intervalul de date introdus nu este valid"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Ghidaj de tragere"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Restrânge foaia din partea de jos"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Închide foaia din partea de jos"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Extinde foaia din partea de jos"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Balon explicativ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Afișează balonul explicativ"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"p.m."</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"a.m."</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Selectează a.m. sau p.m."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Selectează ora"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Selectează minutele"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"Ora %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ore"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minute"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minut"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Oră"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"timp de câteva minute"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"timp de o oră"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ru/strings.xml b/compose/material3/material3/src/androidMain/res/values-ru/strings.xml
deleted file mode 100644
index f513d6e..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ru/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Диалоговое окно"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Закрыть"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Строка поиска"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Подсказки показаны ниже"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Выбор даты"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Выбранная дата"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Перейти к выбору года"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Проведите по экрану, чтобы выбрать год, или нажмите, чтобы вернуться к выбору дня."</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Перейти к следующему месяцу"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Перейти к предыдущему месяцу"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Переход к %1$s году"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Текущий выбор: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Не выбрано"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Сегодня"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Отображаемый выбор года"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Выберите дату"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Введенная дата"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Дата"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Введенная дата: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Нет"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Недопустимая дата: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Дата не соответствует допустимому шаблону: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Дата не входит в допустимый диапазон: %1$s–%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Перейти в режим выбора даты"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Перейти в режим ввода текста"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Прокрутите до более поздних лет"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Прокрутите до более ранних лет"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Выберите даты"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Дата начала"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Дата окончания"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Прокрутите до следующего месяца"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Прокрутите до предыдущего месяца"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"День в диапазоне дат"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Введите даты"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Указан недопустимый диапазон дат."</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Маркер перемещения"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Свернуть нижний экран"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Закрыть нижний экран"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Развернуть нижний экран"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Подсказка"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Показать подсказку"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Выбрать AM (до полудня) или PM (после полудня)"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Выбрать час"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Выбрать минуты"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d ч."</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ч."</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d мин."</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Минуты"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Часы"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"минуты"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"часы"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-si/strings.xml b/compose/material3/material3/src/androidMain/res/values-si/strings.xml
deleted file mode 100644
index 3a2f668..0000000
--- a/compose/material3/material3/src/androidMain/res/values-si/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"සංවාදය"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"අස් කරන්න"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"සෙවීම"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"පහත යෝජනා"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"දිනය තෝරන්න"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"තේරූ දිනය"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"වසරක් තේරීමට මාරු වන්න"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"වසරක් තේරීමට ස්වයිප් කරන්න, නැතහොත් දිනක් තේරීමට ආපසු මාරු වීමට තට්ටු කරන්න"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"ලබන මාසයට වෙනස් කරන්න"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"කලින් මාසයට වෙනස් කරන්න"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s වසර වෙත සංචලන කරන්න"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"වත්මන් තේරීම: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"කිසිවක් නැත"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"අද"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"වසර තෝරකය දෘශ්යමානයි"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"දිනය තෝරන්න"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"ඇතුළු කළ දිනය"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"දිනය"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"එක් කරන්න: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"කිසිවක් නැත"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"දිනය ඉඩ නොදෙයි: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"දිනය අපේක්ෂිත රටාවට නොගැළපෙයි: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"දිනය අපේක්ෂිත වසර පරාසයෙන් පිටත වේ %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"දින දර්ශන ආදාන ප්රකාරයට මාරු වන්න"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"පෙළ ආදාන ප්රකාරයට මාරු වන්න"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"පසු වසර පෙන්වීමට අනුචලන කරන්න"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"පෙර වසර පෙන්වීමට අනුචලන කරන්න"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"දින තෝරන්න"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"ආරම්භක දිනය"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"අවසාන දිනය"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"ඊළඟ මාසය පෙන්වීමට අනුචලන කරන්න"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"පෙර මාසය පෙන්වීමට අනුචලන කරන්න"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"පරාසය තුළ"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"දින ඇතුළු කරන්න"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"අවලංගු දින පරාස ආදානය"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"ඇදීම් හැඬලය"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"පහළම පත්රය හකුළන්න"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"පහළම පත්රය අස් කරන්න"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"පහළම පත්රය දිග හරින්න"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"මෙවලම් ඉඟිය"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"මෙවලම් ඉඟිය පෙන්වන්න"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"ප.ව."</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"පෙ.ව."</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"පෙ.ව. හෝ ප.ව. තෝරන්න"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"පැය තෝරන්න"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"මිනිත්තු තෝරන්න"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$dට"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"පැය %1$d"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"මිනිත්තු %1$d"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"විනාඩි"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"පැය"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"මිනිත්තු ගණනක් සඳහා"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"පැයක් සඳහා"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sk/strings.xml b/compose/material3/material3/src/androidMain/res/values-sk/strings.xml
deleted file mode 100644
index bfbc5eb..0000000
--- a/compose/material3/material3/src/androidMain/res/values-sk/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialógové okno"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Zavrieť"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Vyhľadávanie"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Návrhy sú nižšie"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Vybrať dátum"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Vybraný dátum"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Prepnúť na výber roka"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Potiahnutím vyberte rok alebo klepnutím prepnite späť na výber dňa"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Zmeniť na nasledujúci mesiac"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Zmeniť na predchádzajúci mesiac"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Prechod na rok %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Aktuálny výber: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Žiadne"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Dnes"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Výber roka je viditeľný"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Vybrať dátum"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Zadaný dátum"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Dátum"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Zadaný dátum: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Žiadny"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Nepovolený dátum: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Dátum nezodpovedá očakávanému vzoru: %1$s"</string>
- <string name="m3c_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="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Prepnúť na kalendárový režim vstupu"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Prepnúť na textový režim vstupu"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Posunutím si zobrazte neskoršie roky"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Posunutím si zobrazte skoršie roky"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Vyberte dátumy"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Dátum začatia"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Dátum ukončenia"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Posunutím si zobrazte nasledujúci mesiac"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Posunutím si zobrazte predchádzajúci mesiac"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"V rozsahu"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Zadajte dátumy"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Neplatný vstup obdobia"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Presúvadlo"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Zbaliť dolný hárok"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Zavrieť dolný hárok"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Rozbaliť dolný hárok"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Popis"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Zobraziť opis"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Vyberte AM alebo PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Vybrať hodinu"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Vybrať minúty"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d h"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d h"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d min"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minúty"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Hodina"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"minúty"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"hodina"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sl/strings.xml b/compose/material3/material3/src/androidMain/res/values-sl/strings.xml
deleted file mode 100644
index ec1c583..0000000
--- a/compose/material3/material3/src/androidMain/res/values-sl/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Pogovorno okno"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Opusti"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Iskanje"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Predlogi so spodaj"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Izbira datuma"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Izbrani datum"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Preklopi na izbiro leta"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Povlecite, da izberete leto, ali se dotaknite, da preklopite nazaj na izbiranje dneva."</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Spremeni na naslednji mesec"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Spremeni na prejšnji mesec"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Pomik na leto %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Trenutna izbira: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Brez"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Danes"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Izbirnik leta je viden"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Izbira datuma"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Vneseni datum"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Datum"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Vneseni datum: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Brez"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Oblika datuma ni dovoljena: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Datum se ne ujema s pričakovanim vzorcem: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datum je zunaj pričakovanega razpona let %1$s–%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Preklop na način vnosa v koledar"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Preklop na način vnosa besedila"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Pomaknite se za prikaz poznejših let."</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Pomaknite se za prikaz zgodnejših let."</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Izberite datume"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Začetni datum"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Končni datum"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Pomaknite se za prikaz naslednjega meseca."</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Pomaknite se za prikaz prejšnjega meseca."</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Znotraj obdobja"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Vnesite datume"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Neveljaven vnos obdobja."</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Ročica za vlečenje"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Strnitev razdelka na dnu zaslona"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Opustitev razdelka na dnu zaslona"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Razširitev razdelka na dnu zaslona"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Opis orodja"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Pokaži opis orodja"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"pop."</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"dop."</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Izberite dopoldanski ali popoldanski čas."</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Izbira ure"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Izbira minut"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d min"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minute"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Ura"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"za minute"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"za uro"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sq/strings.xml b/compose/material3/material3/src/androidMain/res/values-sq/strings.xml
deleted file mode 100644
index 61f61fe..0000000
--- a/compose/material3/material3/src/androidMain/res/values-sq/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialogu"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Hiq"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Kërko"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Sugjerimet më poshtë"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Zgjidh datën"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Data e zgjedhur"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Kalo te zgjedhja e një viti"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Rrëshqit shpejt për të zgjedhur një vit ose trokit për të kaluar sërish te zgjedhja e ditës"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Ndrysho te muaji i ardhshëm"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Ndrysho te muaji i kaluar"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navigo në vitin %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Zgjedhja aktuale: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Asnjë"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Sot"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Zgjedhësi i vitit i dukshëm"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Zgjidh datën"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Data e futur"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Data"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Data e futur: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Asnjë"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Data nuk lejohet: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Data nuk përputhet me motivin e pritur: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Data jashtë diapazonit të pritur të vitit %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Kalo te modaliteti i \"Hyrjes së kalendarit\""</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Kalo te modaliteti i \"Hyrjes së tekstit\""</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Lëviz për të shfaqur vitet e ardhshme"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Lëviz për të shfaqur vitet e mëparshme"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Zgjidh datat"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Data e fillimit"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Data e mbarimit"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Lëviz për të shfaqur muajin e ardhshëm"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Lëviz për të shfaqur muajin e mëparshëm"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Brenda rrezes"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Fut datat"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Hyrje e pavlefshme e diapazonit të datave"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Doreza e zvarritjes"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Palos fletën e poshtme"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Hiq fletën e poshtme"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Zgjero fletën e poshtme"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Këshilla për veglën"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Shfaq këshillat për veglën"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"MD"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"PD"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Zgjidh paradite ose pasdite"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Zgjidh orën"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Përzgjidh minutat"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"ora %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d orë"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minuta"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuta"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Ora"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"për minuta"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"për orë"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sr/strings.xml b/compose/material3/material3/src/androidMain/res/values-sr/strings.xml
deleted file mode 100644
index 76529ef..0000000
--- a/compose/material3/material3/src/androidMain/res/values-sr/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Дијалог"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Одбаците"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Претрага"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Предлози су у наставку"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Изаберите датум"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Изабрани датум"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Пређите на избор године"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Превуците да бисте изабрали годину или додирните да бисте се вратили на избор дана"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Пређите на следећи месец"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Пређите на претходни месец"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Идите на годину: %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Актуелни избор: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Ништа"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Данас"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Видљив бирач година"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Изаберите датум"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Унети датум"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Датум"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Унети датум: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Ништа"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Датум није дозвољен: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Датум не одговара очекиваном шаблону: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Датум је изван очекиваног опсега година %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Пређите на режим уноса у Календару"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Пређите на режим уноса текста"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Померајте да би се приказале касније године"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Померајте да би се приказале раније године"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Изаберите датуме"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Датум почетка"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Датум завршетка"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Померајте да би се приказао следећи месец"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Померајте да би се приказао претходни месец"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"У домету"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Унесите датуме"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Унос опсега датума је неважећи"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Идентификатор за превлачење"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Скупи доњу табелу"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Одбаци доњу табелу"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Прошири доњу табелу"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Објашњење"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Прикажи објашњење"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"по"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"пр"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Изаберите пре подне или по подне"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Изаберите сат"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Изаберите минуте"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d ч"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ч"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d мин"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Минут"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Сат"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"за минуте"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"за сате"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sv/strings.xml b/compose/material3/material3/src/androidMain/res/values-sv/strings.xml
deleted file mode 100644
index b265fa2..0000000
--- a/compose/material3/material3/src/androidMain/res/values-sv/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialogruta"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Stäng"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Sök"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Se förslag nedan"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Välj datum"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Valt datum"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Byt till att välja år"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Svep för att välja ett år eller tryck för att återgå till att välja en dag"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Ändra till nästa månad"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Ändra till föregående månad"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Navigera till %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Aktuellt val: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Inget"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"I dag"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Årväljaren är synlig"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Välj datum"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Angivet datum"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Datum"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Angivet datum: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Inget"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Datumet är inte tillåtet: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Datumet matchar inte det förväntade formatet: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Datumet faller utanför det förväntade årsintervallet %1$s–%2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Byt till kalender som inmatningsläge"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Byt till text som inmatningsläge"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Scrolla för att visa senare år"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Scrolla för att visa föregående år"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Välj datum"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Startdatum"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Slutdatum"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Scrolla för att visa nästa månad"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Scrolla för att visa föregående månad"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Inom intervall"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Ange datum"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Ett ogiltigt datumintervall har angetts"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Handtag"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Komprimera arket på nedre delen av skärmen"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Stäng arket på nedre delen av skärmen"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Utöka arket på nedre delen av skärmen"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Beskrivning"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Visa beskrivning"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"EM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"FM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Välj mellan FM och EM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Ange timme"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Välj minuter"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"Klockan %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d timmar"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d minuter"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minut"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Timme"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"för minuter"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"för timmar"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sw/strings.xml b/compose/material3/material3/src/androidMain/res/values-sw/strings.xml
deleted file mode 100644
index 4a415f9..0000000
--- a/compose/material3/material3/src/androidMain/res/values-sw/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Mazungumzo"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Ondoa"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Tafuta"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Mapendekezo yaliyo hapa chini"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Chagua tarehe"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Tarehe uliyochagua"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Nenda kwenye sehemu ya kuchagua mwaka"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Telezesha ili uchague mwaka au gusa ili urejee kwenye kuchagua siku"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Nenda kwenye mwezi unaofuata"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Rudi kwenye mwezi uliotangulia"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Nenda kwenye mwaka %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Iliyochaguliwa sasa: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Hamna"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Leo"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Kiteua mwaka kinaonekana"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Chagua tarehe"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Tarehe iliyowekwa"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Tarehe"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Tarehe iliyowekwa: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Hamna"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Tarehe isiyoruhusiwa: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Tarehe hailingani na mchoro uliotarajiwa: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Tarehe nje ya kipindi cha mwaka kilichotarajiwa %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Badilisha mipangilio ya kuingiza data ya kalenda"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Badilisha kwenda mipangilio ya kuingiza data ya maandishi"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Sogeza ili kuonyesha miaka ya baadaye"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Sogeza ili kuonyesha miaka iliyopita"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Chagua tarehe"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Tarehe ya kuanza"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Tarehe ya mwisho"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Sogeza ili kuonyesha mwezi ujao"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Sogeza ili kuonyesha mwezi uliopita"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Ipo karibu"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Weka tarehe"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Kipindi kilichowekwa si sahihi"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Aikoni ya buruta"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Kunja safu ya chini"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Ondoa safu ya chini"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Panua safu ya chini"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Kidirisha cha vidokezo"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Onyesha kidirisha cha vidokezo"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"Mchana"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"Asubuhi"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Chagua Asubuhi au Mchana"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Chagua saa"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Chagua dakika"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"Saa %1$d kamili"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"Saa %1$d"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"Dakika %1$d"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Dakika"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Saa"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"kwa dakika"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"kwa saa moja"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ta/strings.xml b/compose/material3/material3/src/androidMain/res/values-ta/strings.xml
deleted file mode 100644
index ab4f28f..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ta/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"உரையாடல்"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"மூடும்"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"தேடலாம்"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"பரிந்துரைகள் கீழே கிடைக்கும்"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"தேதியைத் தேர்ந்தெடுக்கவும்"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"தேர்ந்தெடுக்கப்பட்ட தேதி"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"ஆண்டைத் தேர்ந்தெடுக்கும் விருப்பத்திற்கு மாற்று"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"ஆண்டைத் தேர்வுசெய்ய ஸ்வைப் செய்யுங்கள் அல்லது தேதியைத் தேர்வுசெய்யும் பக்கத்திற்கு மீண்டும் செல்ல தட்டுங்கள்"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"அடுத்த மாதத்திற்கு மாற்று"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"முந்தைய மாதத்திற்கு மாற்று"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$sக்குச் செல்லும்"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"தற்போது %1$s தேர்வுசெய்யப்பட்டுள்ளது"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"ஏதுமில்லை"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"இன்று"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"ஆண்டைத் தேர்வுசெய்யும் பக்கம் காட்டப்படுகிறது"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"தேதியைத் தேர்வுசெய்யுங்கள்"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"உள்ளிட்ட தேதி"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"தேதி"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"உள்ளிட்ட தேதி: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"ஏதுமில்லை"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"இந்தத் தேதி அனுமதிக்கப்படவில்லை: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"எதிர்பார்க்கப்படும் பேட்டர்னுடன் தேதி பொருந்தவில்லை: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"இந்தத் தேதி %1$s - %2$s ஆண்டு வரம்பிற்குள் இல்லை"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"கேலெண்டர் உள்ளீட்டு முறைக்கு மாற்று"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"எழுத்து உள்ளீட்டு முறைக்கு மாற்று"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"பிந்தைய ஆண்டுகளைப் பார்க்க ஸ்க்ரோல் செய்யுங்கள்"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"முந்தைய ஆண்டுகளைப் பார்க்க ஸ்க்ரோல் செய்யுங்கள்"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"தேதிகளைத் தேர்ந்தெடுங்கள்"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"தொடக்கத் தேதி"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"முடிவுத் தேதி"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"அடுத்த மாதத்தைப் பார்க்க ஸ்க்ரோல் செய்யுங்கள்"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"முந்தைய மாதத்தைப் பார்க்க ஸ்க்ரோல் செய்யுங்கள்"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"வரம்பிற்குள் உள்ளது"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"தேதிகளை உள்ளிடுங்கள்"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"தவறான தேதி வரம்பை உள்ளிட்டுள்ளீர்கள்"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"இழுப்பதற்கான ஹேண்டில்"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"கீழ்ப்புறச் சீட்டைச் சுருக்கும்"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"கீழ்ப்புறச் சீட்டை நிராகரிக்கும்"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"கீழ்ப்புறச் சீட்டை விரிவாக்கும்"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"உதவிக்குறிப்பு"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"உதவிக்குறிப்பைக் காட்டு"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM/PM என்பதைத் தேர்ந்தெடுக்கலாம்"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"மணிநேரத்தைத் தேர்ந்தெடுக்கலாம்"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"நிமிடங்களைத் தேர்ந்தெடுக்கலாம்"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d மணி"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d மணிநேரம்"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d நிமிடங்கள்"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"நிமிடம்"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"மணிநேரம்"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"நிமிடங்களுக்கு"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"மணிநேரத்திற்கு"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-te/strings.xml b/compose/material3/material3/src/androidMain/res/values-te/strings.xml
deleted file mode 100644
index a80032e..0000000
--- a/compose/material3/material3/src/androidMain/res/values-te/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"డైలాగ్"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"విస్మరించండి"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"సెర్చ్ చేయండి"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"సూచనలు దిగువున ఉన్నాయి"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"తేదీని ఎంచుకోండి"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"ఎంచుకున్న తేదీ"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"ఒక సంవత్సరాన్ని ఎంచుకునే ఆప్షన్కు మారండి"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"సంవత్సరాన్ని ఎంచుకోవడానికి స్వైప్ చేయండి, లేదా రోజును ఎంచుకునేందుకు తిరిగి మారడానికి ట్యాప్ చేయండి"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"వచ్చే నెలకు మార్చండి"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"మునుపటి నెలకు మార్చండి"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s సంవత్సరానికి వెళ్లండి"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"ప్రస్తుత ఎంపిక: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"ఏదీ లేదు"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"ఈ రోజు"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"సంవత్సరం పికర్ కనిపిస్తుంది"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"తేదీ ఎంచుకోండి"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"ఎంటర్ చేసిన తేదీ"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"తేదీ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"ఎంటర్ చేసిన తేదీ: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"ఏదీ లేదు"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"చెల్లని తేదీ: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"తేదీ ఉండాల్సిన ఫార్మాట్తో మ్యాచ్ కాలేదు: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"ఉండాల్సిన సంవత్సరాల పరిధి %1$s - %2$sలో తేదీ లేదు"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"క్యాలెండర్ ఇన్పుట్ మోడ్కు స్విచ్ అవ్వండి"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"టెక్స్ట్ ఇన్పుట్ మోడ్కు స్విచ్ అవ్వండి"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"తదుపరి సంవత్సరాల డేటాను చూడటానికి స్క్రోల్ చేయండి"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"మునుపటి సంవత్సరాల డేటాను చూడటానికి స్క్రోల్ చేయండి"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"తేదీలను ఎంచుకోండి"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"ప్రారంభ తేదీ"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"ముగింపు తేదీ"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"వచ్చే నెల డేటాను చూడటానికి స్క్రోల్ చేయండి"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"మునుపటి నెల డేటాను చూడటానికి స్క్రోల్ చేయండి"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"పరిధిలో ఉంది"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"తేదీలను ఎంటర్ చేయండి"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"తేదీల పరిధి ఇన్పుట్ చెల్లదు"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"లాగే హ్యాండిల్"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"దిగువున ఉన్న షీట్ను కుదిస్తుంది"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"దిగువున ఉన్న షీట్ను విస్మరిస్తుంది"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"దిగువున ఉన్న షీట్ను విస్తరిస్తుంది"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"టూల్టిప్"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"టూల్టిప్ను చూపించు"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"AM లేదా PMను ఎంచుకోండి"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"గంటను ఎంచుకోండి"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"నిమిషాలను ఎంచుకోండి"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d గంటలు"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d గంటలు"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d నిమిషాలు"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"నిమిషం"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"గంట"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"నిమిషాలకు"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"ఒక గంట పాటు"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-th/strings.xml b/compose/material3/material3/src/androidMain/res/values-th/strings.xml
deleted file mode 100644
index 26177c8..0000000
--- a/compose/material3/material3/src/androidMain/res/values-th/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"กล่องโต้ตอบ"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"ปิด"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"ค้นหา"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"มีคำแนะนำที่ด้านล่าง"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"เลือกวันที่"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"วันที่ที่เลือก"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"เปลี่ยนไปที่การเลือกปี"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"ปัดเพื่อเลือกปีหรือแตะเพื่อเปลี่ยนกลับไปยังการเลือกวัน"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"เปลี่ยนไปที่เดือนถัดไป"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"เปลี่ยนไปที่เดือนก่อนหน้า"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"ไปยังปี %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"การเลือกปัจจุบัน: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"ไม่มี"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"วันนี้"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"แสดงตัวเลือกปี"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"เลือกวันที่"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"วันที่ป้อน"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"วันที่"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"วันที่ป้อน: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"ไม่มี"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"ไม่อนุญาตให้ใช้วันที่นี้: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"วันที่ไม่ตรงกับรูปแบบที่คาดไว้: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"วันที่อยู่นอกเหนือจากช่วงปีที่คาดไว้ %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"สลับไปใช้โหมดป้อนข้อมูลปฏิทิน"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"สลับไปใช้โหมดการป้อนข้อความ"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"เลื่อนเพื่อแสดงปีหลังจากนี้"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"เลื่อนเพื่อแสดงปีก่อนหน้านี้"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"เลือกวันที่"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"วันที่เริ่มต้น"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"วันที่สิ้นสุด"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"เลื่อนเพื่อแสดงเดือนถัดไป"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"เลื่อนเพื่อแสดงเดือนก่อนหน้า"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"อยู่ในช่วงวันที่ที่เลือก"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"ป้อนวันที่"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"การป้อนข้อมูลช่วงวันที่ไม่ถูกต้อง"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"แฮนเดิลการลาก"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"ยุบ Bottom Sheet"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"ปิด Bottom Sheet"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"ขยาย Bottom Sheet"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"เคล็ดลับเครื่องมือ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"แสดงเคล็ดลับเครื่องมือ"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"เลือก AM หรือ PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"เลือกชั่วโมง"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"เลือกนาที"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d นาฬิกา"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d ชั่วโมง"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d นาที"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"นาที"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"ชั่วโมง"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"สำหรับนาที"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"สำหรับชั่วโมง"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-tl/strings.xml b/compose/material3/material3/src/androidMain/res/values-tl/strings.xml
deleted file mode 100644
index 3fa5a78..0000000
--- a/compose/material3/material3/src/androidMain/res/values-tl/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Dialog"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"I-dismiss"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Maghanap"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Mga suhestyon sa ibaba"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Pumili ng petsa"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Piniling petsa"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Lumipat sa pagpili ng taon"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Mag-swipe para pumili ng taon, o mag-tap para bumalik sa pagpili ng araw"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Lumipat sa susunod na buwan"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Lumipat sa nakaraang buwan"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Mag-navigate papunta sa taong %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Kasalukuyang napili: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Wala"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Ngayon"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Nakikita ang picker ng taon"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Pumili ng petsa"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Inilagay na petsa"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Petsa"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Inilagay na petsa: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Wala"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Hindi pinapayagan ang petsa: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Hindi tumutugma ang petsa sa inaasahang pattern: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Wala ang petsa sa inaasahang hanay ng taon na %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Lumipat sa pamamaraan ng pag-input ng kalendaryo"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Lumipat sa pamamaraan ng pag-input ng text"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Mag-scroll para makita ang mga mas kamakailang taon"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Mag-scroll para ipakita ang mga mas naunang taon"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Pumili ng mga petsa"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Petsa ng pagsisimula"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Petsa ng pagtatapos"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Mag-scroll para ipakita ang susunod na buwan"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Mag-scroll para ipakita ang nakaraang buwan"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"May signal"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Maglagay ng mga petsa"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Invalid ang input na hanay ng petsa"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Handle sa pag-drag"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"I-collapse ang bottom sheet"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"I-dismiss ang bottom sheet"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Palawakin ang bottom sheet"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Tooltip"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Ipakita ang tooltip"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Piliin ang AM o PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Pumili ng oras"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Pumili ng mga minuto"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d o\'clock"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d oras"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d (na) minuto"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Minuto"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Oras"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"nang ilang minuto"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"nang ilang oras"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-tr/strings.xml b/compose/material3/material3/src/androidMain/res/values-tr/strings.xml
deleted file mode 100644
index 2f1342f..0000000
--- a/compose/material3/material3/src/androidMain/res/values-tr/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"İletişim kutusu"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Kapat"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Arama"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Önerileri aşağıda bulabilirsiniz"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Tarih seç"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Seçilen tarih"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Yıl seçimine geç"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Kaydırarak bir yıl seçin veya gün seçme bölümüne geri dönmek için dokunun"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Sonraki aya değiştir"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Önceki aya değiştir"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s yılına gidin"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Geçerli seçim: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Yok"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Bugün"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Yıl seçici görünür durumda"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Tarih seç"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Girilen tarih"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Tarih"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Girilen tarih: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Yok"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Tarihe izin verilmiyor: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Tarih, istenen biçimle eşleşmiyor: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Tarih, istenen %1$s - %2$s yıl aralığının dışında"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Takvim giriş moduna geç"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Metin giriş moduna geç"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Sonraki yılları göstermek için kaydırın"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Önceki yılları göstermek için kaydırın"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Tarihleri seçin"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Başlangıç tarihi"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Bitiş tarihi"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Sonraki ayı göstermek için kaydırın"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Önceki ayı göstermek için kaydırın"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Aralıkta"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Tarihleri girin"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Geçersiz tarih aralığı girişi"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Sürükleme tutamacı"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Alt sayfayı daralt"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Alt sayfayı kapat"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Alt sayfayı genişlet"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"İpucu"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Araç ipucunu göster"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"ÖS"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"ÖÖ veya ÖS\'yi seçin"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Saat seçin"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Dakikayı seçin"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"Saat %1$d"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d saat"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d dakika"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Dakika"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Saat"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"dakika"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"saat"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-uk/strings.xml b/compose/material3/material3/src/androidMain/res/values-uk/strings.xml
deleted file mode 100644
index 91aa33f..0000000
--- a/compose/material3/material3/src/androidMain/res/values-uk/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Вікно"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Закрити"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Пошук"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Підказки внизу"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Вибрати дату"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Вибрана дата"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Перейти до вибору року"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Проведіть пальцем по екрану, щоб вибрати рік, або торкніться, щоб повернутися до вибору дня"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Перейти до наступного місяця"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Перейти до попереднього місяця"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Перейти до %1$s року"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Поточний вибір: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Немає"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Сьогодні"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Показувати засіб вибору року"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Виберіть дату"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Введена дата"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Дата"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Введена дата: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Немає"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Недопустима дата: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Дата не відповідає очікуваному шаблону: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Дата за межами очікуваного діапазону років %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Перейти в режим введення в календарі"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Перейти в режим введення тексту"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Прокрутіть, щоб відобразити пізніші роки"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Прокрутіть, щоб відобразити попередні роки"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Виберіть дати"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Дата початку"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Дата завершення"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Прокрутіть, щоб відобразити наступний місяць"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Прокрутіть, щоб відобразити попередній місяць"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"У діапазоні"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Введіть дати"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Указано недійсний діапазон дат"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Маркер переміщення"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Згорнути нижній екран"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Закрити нижній екран"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Розгорнути нижній екран"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Спливаюча підказка"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Показати підказку"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"ПП"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"ДП"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Виберіть ДП чи ПП"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Вибрати годину"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Вибрати хвилини"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d год"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d год"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d хв"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Хвилина"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Година"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"для хвилин"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"для годин"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ur/strings.xml b/compose/material3/material3/src/androidMain/res/values-ur/strings.xml
deleted file mode 100644
index af45027d..0000000
--- a/compose/material3/material3/src/androidMain/res/values-ur/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"ڈائلاگ"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"برخاست کریں"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"تلاش کریں"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"تلاش کی تجاویز نیچے دستیاب ہیں"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"تاریخ منتخب کریں"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"منتخب کردہ تاریخ"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"ایک سال کا انتخاب کرنے کے لیے سوئچ کریں"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"ایک سال منتخب کرنے کے لیے سوائپ کریں یا ایک دن منتخب کرنے کی خاطر دوبارہ سوئچ کرنے کے لیے تھپتھپائیں"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"اگلے ماہ میں تبدیل کریں"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"گزشتہ ماہ میں منتقل کریں"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"سال %1$s پر نیویگیٹ کریں"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"موجودہ انتخاب: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"کوئی نہیں"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"آج"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"سال کا منتخب کنندہ مرئی ہے"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"تاریخ منتخب کریں"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"درج کردہ تاریخ"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"تاریخ"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"درج کردہ تاریخ: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"کوئی نہیں"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"تاریخ کی اجازت نہیں ہے: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"تاریخ متوقع پیٹرن سے مماثل نہیں ہے: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"متوقع سال کی حد %1$s - %2$s سے باہر کی تاریخ"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"کیلنڈر اندراج کے طرز پر سوئچ کریں"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"ٹیکسٹ اندراج کے طرز پر سوئچ کریں"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"بعد کے سالوں کا ڈیٹا دکھانے کے لیے اسکرول کریں"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"پچھلے سالوں کا ڈیٹا دکھانے کے لیے اسکرول کریں"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"تواریخ منتخب کریں"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"تاریخ آغاز"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"تاریخ اختتام"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"اگلے مہینے کا ڈیٹا دکھانے کے لیے اسکرول کریں"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"پچھلے مہینے کا ڈیٹا دکھانے کے لیے اسکرول کریں"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"رینج میں ہے"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"تواریخ درج کریں"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"تاریخ کی حد کا غلط ان پٹ"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"گھسیٹنے کا ہینڈل"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"نیچے کی شیٹ کو سکیڑیں"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"نیچے کی شیٹ کو برخاست کریں"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"نیچے کی شیٹ کو پھیلائیں"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"ٹول ٹپ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"ٹول ٹپ دکھائیں"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"بعد از دوپہر"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"قبلاز دوپہر"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"قبل از دوپہر یا بعد از دوپہر منتخب کریں"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"گھنٹہ منتخب کریں"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"منٹس منتخب کریں"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d بجے"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d گھنٹے"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d منٹس"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"منٹ"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"گھنٹہ"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"منٹ کے لیے"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"گھنٹے کے لیے"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-uz/strings.xml b/compose/material3/material3/src/androidMain/res/values-uz/strings.xml
deleted file mode 100644
index b7b6517..0000000
--- a/compose/material3/material3/src/androidMain/res/values-uz/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Muloqot oynasi"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Yopish"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Qidiruv"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Takliflar quyida"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Sanani tanlang"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Tanlangan sana"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Tanlangan yilga oʻtish"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Yilni tanlash uchun suring yoki kunni tanlashga qaytish uchun tegining"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Keyingi oyga oʻzgartirish"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Avvalgi oyga oʻzgartirish"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"%1$s-yilga oʻtish"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Joriy tanlov: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Hech biri"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Bugun"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Yil tanlagich ochiq"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Sanani tanlang"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Kiritilgan sana"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Sana"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Kiritilgan sana: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Yoʻq"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Sana xato: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Sana mavjud namunaga mos kelmaydi: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Sana kutilgan yil oraligʻida emas: %1$s – %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Taqvim kiritish rejimiga oʻtish"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Matn kiritish rejimiga oʻtish"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Keyingi yillarga varaqlang"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Avvalgi yillarga varaqlang"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Sanalarni tanlang"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Boshlanish sanasi"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Tugash sanasi"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Keyingi oyna varaqlang"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Avvalgi oyga varaqlang"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Xizmat doirasida"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Sanalarni kiriting"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Kiritilgan muddat yaroqsiz"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Surish dastagi"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Quyi ekranni yigʻish"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Quyi ekranni yopish"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Quyi ekranni yoyish"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Maslahat oynasi"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Maslahat oynasini koʻrsatish"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"TK"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"TO"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Tushdan oldin yoki keyinligini tanlang"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Soatni tanlang"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Daqiqani tanlang"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d soat"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d soat"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d daqiqa"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Daqiqa"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Soat"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"bir daqiqa"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"bir soat"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-vi/strings.xml b/compose/material3/material3/src/androidMain/res/values-vi/strings.xml
deleted file mode 100644
index 659de9d..0000000
--- a/compose/material3/material3/src/androidMain/res/values-vi/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Hộp thoại"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Đóng"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Tìm kiếm"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Các đề xuất ở bên dưới"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Chọn ngày"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Ngày đã chọn"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Chuyển sang chọn năm"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Vuốt để chọn một năm hoặc nhấn để chuyển lại về chọn một ngày"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Chuyển sang tháng tiếp theo"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Chuyển về tháng trước"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Chuyển đến năm %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Lựa chọn hiện tại: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Không có"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Hôm nay"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Bộ chọn năm hiển thị"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Chọn ngày"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Ngày đã nhập"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Ngày"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Ngày đã nhập: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Không có"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Ngày không được phép: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Ngày không khớp với định dạng dự kiến: %1$s"</string>
- <string name="m3c_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="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Chuyển sang chế độ nhập lịch"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Chuyển sang chế độ nhập văn bản"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Cuộn để hiện những năm sau"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Cuộn để hiện những năm trước"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Chọn ngày"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Ngày bắt đầu"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Ngày kết thúc"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Cuộn để hiện tháng sau"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Cuộn để hiện tháng trước"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Trong khoảng"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Nhập ngày"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Phạm vi ngày đã nhập không hợp lệ"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Nút kéo"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Thu gọn bảng dưới cùng"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Bỏ qua bảng dưới cùng"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Mở rộng bảng dưới cùng"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Chú giải công cụ"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Hiển thị chú giải công cụ"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"CH"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"SA"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Chọn SA hoặc CH"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Chọn giờ"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Chọn phút"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d giờ"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d giờ"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d phút"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Phút"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Giờ"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"về số phút"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"về số giờ"</string>
-</resources>
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
deleted file mode 100644
index 5cf5d1a..0000000
--- a/compose/material3/material3/src/androidMain/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"对话框"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"关闭"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"搜索"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"以下是搜索建议"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"选择日期"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"选定的日期"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"切换以选择年份"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"滑动可选择年份,点按可切换回选择日期"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"转到下个月"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"转到上个月"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"切换到年份:%1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"当前的选择:%1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"无"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"今天"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"年份选择器可见"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"选择日期"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"输入日期"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"日期"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"输入日期:%1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"无"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"不允许的日期:%1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"日期不符合预期格式:%1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"日期超出预期年份范围 %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"切换到日历输入模式"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"切换到文本字段输入模式"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"滚动显示之后的年份"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"滚动显示之前的年份"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"选择日期"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"开始日期"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"结束日期"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"滚动显示下个月"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"滚动显示上个月"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"在范围内"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"输入日期"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"输入的日期范围无效"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"拖动手柄"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"收起底部动作条"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"关闭底部动作条"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"展开底部动作条"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"提示"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"显示提示"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"下午"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"上午"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"选择上午或下午"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"选择小时"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"选择分钟"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d 点"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d 小时"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d 分钟"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"分"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"时"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"表示分钟"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"表示小时"</string>
-</resources>
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
deleted file mode 100644
index 4f00ddb..0000000
--- a/compose/material3/material3/src/androidMain/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"對話框"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"閂"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"搵"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"建議如下"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"選取日期"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"所選日期"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"切換為選取年份"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"滑動可選取年分,或可輕按返回選取日期"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"變更至下個月"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"變更至上個月"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"前往 %1$s 年"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"目前選項:%1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"無"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"今天"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"顯示年分挑選器"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"選取日期"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"已輸入的日期"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"日期"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"已輸入的日期:%1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"無"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"不允許的日期:%1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"日期格式不符:%1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"日期超出預期的年份範圍:%1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"切換至日曆輸入模式"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"切換至文字輸入模式"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"碌去顯示新啲嘅年份"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"碌去顯示舊啲嘅年份"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"選取日期"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"開始日期"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"結束日期"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"碌去顯示下一個月"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"碌去顯示上一個月"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"在指定日期範圍內"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"輸入日期"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"輸入的日期範圍無效"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"拖曳控點"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"收合底部功能表"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"關閉底部功能表"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"展開底部功能表"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"提示"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"顯示提示"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"下午"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"上午"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"選取上午或下午"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"選取小時"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"選取分鐘"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d 點"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d 點"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d 分鐘"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"分鐘"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"小時"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"分鐘"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"小時"</string>
-</resources>
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
deleted file mode 100644
index d586f0e..0000000
--- a/compose/material3/material3/src/androidMain/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"對話方塊"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"關閉"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"搜尋"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"建議如下"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"選取日期"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"所選日期"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"改為選取年份"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"滑動可選取年分,也可輕觸返回選取日期"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"改成下個月"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"改成上個月"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"前往 %1$s 年"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"目前選項:%1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"無"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"今天"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"顯示年份挑選器"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"選取日期"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"輸入的日期"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"日期"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"輸入的日期:%1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"無"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"不允許的日期:%1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"日期格式不符:%1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"日期超出預期的年份範圍:%1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"切換至日曆輸入模式"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"切換至文字輸入模式"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"捲動即可顯示之後的年分"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"捲動即可顯示先前的年分"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"選取日期"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"開始日期"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"結束日期"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"捲動即可顯示下一個月"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"捲動即可顯示上一個月"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"在指定日期範圍內"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"輸入日期"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"輸入的日期範圍無效"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"拖曳控點"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"收合底部功能表"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"關閉底部功能表"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"展開底部功能表"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"工具提示"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"顯示工具提示"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"下午"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"上午"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"選取上午或下午"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"選取小時"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"選取分鐘"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d 點"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"%1$d 時"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"%1$d 分鐘"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"分鐘"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"小時"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"分鐘"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"小時"</string>
-</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-zu/strings.xml b/compose/material3/material3/src/androidMain/res/values-zu/strings.xml
deleted file mode 100644
index 0d31e2a..0000000
--- a/compose/material3/material3/src/androidMain/res/values-zu/strings.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="m3c_dialog" msgid="4057925834421392736">"Ibhokisi"</string>
- <string name="m3c_snackbar_dismiss" msgid="3962933905051144957">"Chitha"</string>
- <string name="m3c_search_bar_search" msgid="6420018528474762666">"Sesha"</string>
- <string name="m3c_suggestions_available" msgid="7189888345201419934">"Iziphakamiso ngezansi"</string>
- <string name="m3c_date_picker_title" msgid="9208721003668059792">"Khetha usuku"</string>
- <string name="m3c_date_picker_headline" msgid="2846784065735639969">"Khetha usuku"</string>
- <string name="m3c_date_picker_switch_to_year_selection" msgid="3412370019845183965">"Shintshela ekukhetheni unyaka"</string>
- <string name="m3c_date_picker_switch_to_day_selection" msgid="145089358343568971">"Swayipha ukuze ukhethe unyaka, noma thepha ukuze ubuyele ekukhetheni usuku"</string>
- <string name="m3c_date_picker_switch_to_next_month" msgid="8313783187901412102">"Shintshela kunyanga elandelayo"</string>
- <string name="m3c_date_picker_switch_to_previous_month" msgid="7596294429748914881">"Shintshela kunyanga edlule"</string>
- <string name="m3c_date_picker_navigate_to_year_description" msgid="5152441868029453612">"Funa kunyaka %1$s"</string>
- <string name="m3c_date_picker_headline_description" msgid="4627306862713137085">"Ukukhetha kwamanje: %1$s"</string>
- <string name="m3c_date_picker_no_selection_description" msgid="5724377114289981899">"Lutho"</string>
- <string name="m3c_date_picker_today_description" msgid="4775802721403526937">"Namuhla"</string>
- <string name="m3c_date_picker_year_picker_pane_title" msgid="8140324713311804736">"Isikhethi sonyaka siyabonakala"</string>
- <string name="m3c_date_input_title" msgid="3010396677286327048">"Khetha usuku"</string>
- <string name="m3c_date_input_headline" msgid="3499643850558715142">"Usuku olufakiwe"</string>
- <string name="m3c_date_input_label" msgid="5194825853981987218">"Usuku"</string>
- <string name="m3c_date_input_headline_description" msgid="8562356184193964298">"Usuku olufakiwe: %1$s"</string>
- <string name="m3c_date_input_no_input_description" msgid="5722931102250207748">"Lutho"</string>
- <string name="m3c_date_input_invalid_not_allowed" msgid="6114792992433444995">"Usuku aluvunyelwe: %1$s"</string>
- <string name="m3c_date_input_invalid_for_pattern" msgid="5281836720766682161">"Usuku alufani nephethini elindelekile: %1$s"</string>
- <string name="m3c_date_input_invalid_year_range" msgid="8434112129235255568">"Usuku lungaphandle kwebanga lonyaka elilindelekile %1$s - %2$s"</string>
- <string name="m3c_date_picker_switch_to_calendar_mode" msgid="9029369254443419167">"Shintshela kwimodi yokufaka yekhalenda"</string>
- <string name="m3c_date_picker_switch_to_input_mode" msgid="1496750567914156598">"Shintshela kwimodi yokufaka yombhalo"</string>
- <string name="m3c_date_picker_scroll_to_later_years" msgid="3226341140390493774">"Skrola ukuze ubonise iminyaka yakamuva"</string>
- <string name="m3c_date_picker_scroll_to_earlier_years" msgid="8911933542023210271">"Skrola ukuze ubonise iminyaka yangaphambilini"</string>
- <string name="m3c_date_range_picker_title" msgid="690080476639943577">"Khetha izinsuku"</string>
- <string name="m3c_date_range_picker_start_headline" msgid="5759491386723090559">"Usuku lokuqala"</string>
- <string name="m3c_date_range_picker_end_headline" msgid="4766270708882012148">"Usuku lokuphela"</string>
- <string name="m3c_date_range_picker_scroll_to_next_month" msgid="51495506931835470">"Skrola ukuze ubonise inyanga elandelayo"</string>
- <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4371570854614540700">"Skrola ukuze ubonise inyanga edlule"</string>
- <string name="m3c_date_range_picker_day_in_range" msgid="9048690781645835833">"Kubanga"</string>
- <string name="m3c_date_range_input_title" msgid="2366412111888449406">"Faka izinsuku"</string>
- <string name="m3c_date_range_input_invalid_range_input" msgid="1891592555781755601">"Okokufaka kwebanga losuku okungavumelekile"</string>
- <string name="m3c_bottom_sheet_drag_handle_description" msgid="7772321844937772780">"Hudula isibambi"</string>
- <string name="m3c_bottom_sheet_collapse_description" msgid="6128938260108474660">"Goqa ishidi eliphansi"</string>
- <string name="m3c_bottom_sheet_dismiss_description" msgid="1918297411568599192">"Chitha ishidi eliphansi"</string>
- <string name="m3c_bottom_sheet_expand_description" msgid="4324434199045499117">"Nweba ishidi eliphansi"</string>
- <string name="m3c_tooltip_pane_description" msgid="8191239805703103845">"Ithulithiphu"</string>
- <string name="m3c_tooltip_long_press_label" msgid="2732804537909054941">"Bonisa ithulithiphu"</string>
- <string name="m3c_time_picker_pm" msgid="2232702812657998674">"PM"</string>
- <string name="m3c_time_picker_am" msgid="5096144640014509074">"AM"</string>
- <string name="m3c_time_picker_period_toggle_description" msgid="7352665290700284516">"Khetha u-AM noma u-PM"</string>
- <string name="m3c_time_picker_hour_selection" msgid="6081676287789101196">"Khetha ihora"</string>
- <string name="m3c_time_picker_minute_selection" msgid="8494777394375441602">"Khetha imizuzu"</string>
- <string name="m3c_time_picker_hour_suffix" msgid="6952032626122080528">"%1$d o\'clock"</string>
- <string name="m3c_time_picker_hour_24h_suffix" msgid="4149641012513526783">"Amahora angu-%1$d"</string>
- <string name="m3c_time_picker_minute_suffix" msgid="3206486707779478173">"Imizuzu engu-%1$d"</string>
- <string name="m3c_time_picker_minute" msgid="6116528647594005945">"Umzuzu"</string>
- <string name="m3c_time_picker_hour" msgid="7241191970823415723">"Ihora"</string>
- <string name="m3c_time_picker_minute_text_field" msgid="994099543833979061">"ngemizuzu"</string>
- <string name="m3c_time_picker_hour_text_field" msgid="5298761125390275834">"ngehora"</string>
-</resources>
diff --git a/compose/runtime/OWNERS b/compose/runtime/OWNERS
index 8983dbc..a9c5fa6 100644
--- a/compose/runtime/OWNERS
+++ b/compose/runtime/OWNERS
@@ -2,6 +2,7 @@
jsproch@google.com
chuckj@google.com
lelandr@google.com
+anbailey@google.com
# Per-file for Playground infra
per-file settings.gradle = yboyar@google.com, dustinlam@google.com, rahulrav@google.com
diff --git a/compose/runtime/runtime/build.gradle b/compose/runtime/runtime/build.gradle
index f7317d7..37a15fa 100644
--- a/compose/runtime/runtime/build.gradle
+++ b/compose/runtime/runtime/build.gradle
@@ -14,9 +14,8 @@
* limitations under the License.
*/
-import androidx.build.AndroidXComposePlugin
+import androidx.build.KmpPlatformsKt
import androidx.build.LibraryType
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("AndroidXPlugin")
@@ -24,87 +23,95 @@
id("com.android.library")
}
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project)
+def desktopEnabled = KmpPlatformsKt.enableDesktop(project)
-dependencies {
+androidXMultiplatform {
+ android()
+ if (desktopEnabled) desktop()
- if(!AndroidXComposePlugin.isMultiplatformEnabled(project)) {
- /*
- * When updating dependencies, make sure to make the an an analogous update in the
- * corresponding block below
- */
-
- api(libs.kotlinCoroutinesAndroid)
-
- implementation("androidx.annotation:annotation:1.1.0")
- implementation(libs.kotlinStdlib)
-
- testImplementation(libs.kotlinTestJunit)
- testImplementation(libs.junit)
- testImplementation(libs.robolectric)
- testImplementation(libs.kotlinCoroutinesTest)
-
- androidTestImplementation(libs.kotlinTestJunit)
- androidTestImplementation(libs.testExtJunit)
- androidTestImplementation(libs.testRules)
- androidTestImplementation(libs.testRunner)
- androidTestImplementation(libs.junit)
- androidTestImplementation(libs.truth)
-
- lintChecks(projectOrArtifact(":compose:runtime:runtime-lint"))
- lintPublish(projectOrArtifact(":compose:runtime:runtime-lint"))
-
- samples(projectOrArtifact(":compose:runtime:runtime:runtime-samples"))
- }
-}
-
-if(AndroidXComposePlugin.isMultiplatformEnabled(project)) {
- androidXComposeMultiplatform {
- android()
- desktop()
- }
-
- kotlin {
-
- /*
- * When updating dependencies, make sure to make the an an analogous update in the
- * corresponding block above
- */
- sourceSets {
- commonMain.dependencies {
+ sourceSets {
+ commonMain {
+ dependencies {
implementation(libs.kotlinStdlibCommon)
implementation(libs.kotlinCoroutinesCore)
}
- jvmMain.dependencies {
- implementation(libs.kotlinStdlib)
- api(libs.kotlinCoroutinesCore)
- }
- androidMain {
- dependencies {
- api(libs.kotlinCoroutinesAndroid)
- api("androidx.annotation:annotation:1.1.0")
- }
- }
+ }
- commonTest.dependencies {
+ commonTest {
+ dependencies {
implementation kotlin("test")
implementation(libs.kotlinCoroutinesTest)
}
+ }
- androidAndroidTest {
+ jvmMain {
+ dependencies {
+ implementation(libs.kotlinStdlib)
+ api(libs.kotlinCoroutinesCore)
+ }
+ }
+
+
+ androidMain {
+ dependsOn(jvmMain)
+ dependencies {
+ api(libs.kotlinCoroutinesAndroid)
+ api("androidx.annotation:annotation:1.1.0")
+ }
+ }
+
+ if (desktopEnabled) {
+ desktopMain {
+ dependsOn(jvmMain)
+ }
+ }
+
+ jvmTest {
+ dependsOn(commonTest)
+ dependencies {
+ }
+ }
+
+ nonEmulatorCommonTest {
+ dependsOn(commonTest)
+ dependencies {
+ }
+ }
+
+ nonEmulatorJvmTest {
+ dependsOn(nonEmulatorCommonTest)
+ dependencies {
+ }
+ }
+
+ androidAndroidTest {
+ dependsOn(jvmTest)
+ dependencies {
+ implementation(libs.testExtJunit)
+ implementation(libs.testRules)
+ implementation(libs.testRunner)
+ implementation(libs.truth)
+ }
+ }
+
+ androidTest {
+ dependsOn(jvmTest)
+ dependsOn(nonEmulatorJvmTest)
+ }
+
+ if (desktopEnabled) {
+ desktopTest {
dependsOn(jvmTest)
- dependencies {
- implementation(libs.testExtJunit)
- implementation(libs.testRules)
- implementation(libs.testRunner)
- implementation(libs.truth)
- }
+ dependsOn(nonEmulatorJvmTest)
}
}
}
- dependencies {
- samples(projectOrArtifact(":compose:runtime:runtime:runtime-samples"))
- }
+}
+
+dependencies {
+ lintChecks(projectOrArtifact(":compose:runtime:runtime-lint"))
+ lintPublish(projectOrArtifact(":compose:runtime:runtime-lint"))
+ samples(projectOrArtifact(":compose:runtime:runtime:runtime-samples"))
}
android {
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/DerivedState.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/DerivedState.kt
index 0d74edd..4fa3504 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/DerivedState.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/DerivedState.kt
@@ -27,9 +27,8 @@
import androidx.compose.runtime.snapshots.newWritableRecord
import androidx.compose.runtime.snapshots.sync
import androidx.compose.runtime.snapshots.withCurrent
-// Explicit imports for these needed in common source sets.
-import kotlin.jvm.JvmName
import kotlin.jvm.JvmMultifileClass
+import kotlin.jvm.JvmName
import kotlin.math.min
/**
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ProduceState.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ProduceState.kt
index 1905768..cd26a4c 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ProduceState.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ProduceState.kt
@@ -18,12 +18,11 @@
@file:JvmMultifileClass
package androidx.compose.runtime
+import kotlin.coroutines.CoroutineContext
+import kotlin.jvm.JvmMultifileClass
+import kotlin.jvm.JvmName
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.CoroutineContext
-// Explicit imports for these needed in common source sets.
-import kotlin.jvm.JvmName
-import kotlin.jvm.JvmMultifileClass
/**
* Receiver scope for use with [produceState].
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFlow.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFlow.kt
index 12250ab..3d7c842 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFlow.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFlow.kt
@@ -19,17 +19,16 @@
package androidx.compose.runtime
import androidx.compose.runtime.snapshots.Snapshot
+import kotlin.coroutines.CoroutineContext
+import kotlin.coroutines.EmptyCoroutineContext
+import kotlin.jvm.JvmMultifileClass
+import kotlin.jvm.JvmName
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.withContext
-import kotlin.coroutines.CoroutineContext
-import kotlin.coroutines.EmptyCoroutineContext
-// Explicit imports for these needed in common source sets.
-import kotlin.jvm.JvmName
-import kotlin.jvm.JvmMultifileClass
/**
* Collects values from this [StateFlow] and represents its latest value via [State].
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotMutationPolicy.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotMutationPolicy.kt
index 69f2809..5b301a9 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotMutationPolicy.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotMutationPolicy.kt
@@ -18,11 +18,10 @@
@file:JvmMultifileClass
package androidx.compose.runtime
-import androidx.compose.runtime.snapshots.MutableSnapshot
-// Explicit imports for these needed in common source sets.
-import kotlin.jvm.JvmName
-import kotlin.jvm.JvmMultifileClass
import androidx.compose.runtime.internal.JvmDefaultWithCompatibility
+import androidx.compose.runtime.snapshots.MutableSnapshot
+import kotlin.jvm.JvmMultifileClass
+import kotlin.jvm.JvmName
/**
* A policy to control how the result of [mutableStateOf] report and merge changes to
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotState.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotState.kt
index 7f1533b..d408eb3 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotState.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotState.kt
@@ -27,9 +27,8 @@
import androidx.compose.runtime.snapshots.overwritable
import androidx.compose.runtime.snapshots.readable
import androidx.compose.runtime.snapshots.withCurrent
-// Explicit imports for jvm annotations needed in common source sets.
-import kotlin.jvm.JvmName
import kotlin.jvm.JvmMultifileClass
+import kotlin.jvm.JvmName
import kotlin.reflect.KProperty
/**
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/AbstractApplierTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/AbstractApplierTest.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/AbstractApplierTest.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/AbstractApplierTest.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/BroadcastFrameClockTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/BroadcastFrameClockTest.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/BroadcastFrameClockTest.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/BroadcastFrameClockTest.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionAndDerivedStateTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionAndDerivedStateTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionAndDerivedStateTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionAndDerivedStateTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionLocalTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionLocalTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionLocalTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionLocalTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionReusingTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionReusingTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionReusingTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionReusingTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompoundHashKeyTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompoundHashKeyTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/CompoundHashKeyTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompoundHashKeyTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/EffectsTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/EffectsTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/EffectsTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/EffectsTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/GroupSizeValidationTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/GroupSizeValidationTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/GroupSizeValidationTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/GroupSizeValidationTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/LatchTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/LatchTest.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/LatchTest.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/LatchTest.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/ModelViewTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/ModelViewTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/ModelViewTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/ModelViewTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/MovableContentTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/MovableContentTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/MovableContentTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/MovableContentTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/NewCodeGenTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/NewCodeGenTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/NewCodeGenTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/NewCodeGenTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/RecomposerTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/RecomposerTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/RecomposerTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/RecomposerTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/RestartTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/RestartTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/RestartTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/RestartTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/SlotTableTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/SlotTableTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/SlotTableTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/SlotTableTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/SnapshotFlowTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/SnapshotFlowTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/SnapshotFlowTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/SnapshotFlowTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/UpdateChangedFlagsTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/UpdateChangedFlagsTest.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/UpdateChangedFlagsTest.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/UpdateChangedFlagsTest.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/collection/IdentityArrayIntMapTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityArrayIntMapTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/collection/IdentityArrayIntMapTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityArrayIntMapTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/collection/IdentityArrayMapTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityArrayMapTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/collection/IdentityArrayMapTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityArrayMapTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/collection/IdentityArraySetTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityArraySetTest.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/collection/IdentityArraySetTest.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityArraySetTest.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/collection/IdentityScopeMapTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityScopeMapTest.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/collection/IdentityScopeMapTest.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/IdentityScopeMapTest.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/collection/MutableVectorTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/MutableVectorTest.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/collection/MutableVectorTest.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/collection/MutableVectorTest.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/ComposeContact.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/ComposeContact.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/ComposeContact.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/ComposeContact.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/ComposePoints.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/ComposePoints.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/ComposePoints.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/ComposePoints.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/ComposeReport.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/ComposeReport.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/ComposeReport.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/ComposeReport.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/CompositionTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/CompositionTest.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/CompositionTest.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/CompositionTest.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Contact.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Contact.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Contact.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Contact.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/ContactModel.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/ContactModel.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/ContactModel.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/ContactModel.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/EmptyApplier.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/EmptyApplier.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/EmptyApplier.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/EmptyApplier.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Point.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Point.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Point.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Point.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Report.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Report.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Report.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Report.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/TestMonotonicFrameClock.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/TestMonotonicFrameClock.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/TestMonotonicFrameClock.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/TestMonotonicFrameClock.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/View.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/View.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/View.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/View.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/ViewApplier.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/ViewApplier.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/ViewApplier.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/ViewApplier.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Views.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Views.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/mock/Views.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Views.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/DerivedSnapshotStateTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/DerivedSnapshotStateTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/DerivedSnapshotStateTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/DerivedSnapshotStateTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/PrimitiveSnapshotStateTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/PrimitiveSnapshotStateTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/PrimitiveSnapshotStateTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/PrimitiveSnapshotStateTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotContextElementTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotContextElementTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotContextElementTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotContextElementTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotDoubleIndexHeapTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotDoubleIndexHeapTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotDoubleIndexHeapTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotDoubleIndexHeapTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotIdSetTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotIdSetTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotIdSetTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotIdSetTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateExtensionsTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateExtensionsTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateExtensionsTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateExtensionsTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserverTestsCommon.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserverTestsCommon.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserverTestsCommon.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserverTestsCommon.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotWeakSetTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotWeakSetTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotWeakSetTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotWeakSetTests.kt
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/tooling/CompositionDataTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/tooling/CompositionDataTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/tooling/CompositionDataTests.kt
rename to compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/tooling/CompositionDataTests.kt
diff --git a/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/JvmCompositionTests.kt b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/JvmCompositionTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/JvmCompositionTests.kt
rename to compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/JvmCompositionTests.kt
diff --git a/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/LiveEditTests.kt b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/LiveEditTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/LiveEditTests.kt
rename to compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/LiveEditTests.kt
diff --git a/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/MonotonicFrameClockTest.kt b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/MonotonicFrameClockTest.kt
similarity index 100%
rename from compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/MonotonicFrameClockTest.kt
rename to compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/MonotonicFrameClockTest.kt
diff --git a/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/RecomposerTests.jvm.kt b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/RecomposerTests.jvm.kt
similarity index 100%
rename from compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/RecomposerTests.jvm.kt
rename to compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/RecomposerTests.jvm.kt
diff --git a/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/reflect/ComposableMethodTest.kt b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/reflect/ComposableMethodTest.kt
similarity index 100%
rename from compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/reflect/ComposableMethodTest.kt
rename to compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/reflect/ComposableMethodTest.kt
diff --git a/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserverTestsJvm.kt b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserverTestsJvm.kt
similarity index 100%
rename from compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserverTestsJvm.kt
rename to compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserverTestsJvm.kt
diff --git a/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTestsJvm.kt b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTestsJvm.kt
similarity index 100%
rename from compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTestsJvm.kt
rename to compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTestsJvm.kt
diff --git a/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotThreadMapTests.kt b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotThreadMapTests.kt
similarity index 100%
rename from compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotThreadMapTests.kt
rename to compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/snapshots/SnapshotThreadMapTests.kt
diff --git a/compose/ui/ui-graphics/api/current.txt b/compose/ui/ui-graphics/api/current.txt
index 1107548..2042050 100644
--- a/compose/ui/ui-graphics/api/current.txt
+++ b/compose/ui/ui-graphics/api/current.txt
@@ -16,8 +16,8 @@
}
public final class AndroidColorSpace_androidKt {
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.ColorSpace toAndroidColorSpace(androidx.compose.ui.graphics.colorspace.ColorSpace);
method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.compose.ui.graphics.colorspace.ColorSpace toComposeColorSpace(android.graphics.ColorSpace);
- method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.ColorSpace toFrameworkColorSpace(androidx.compose.ui.graphics.colorspace.ColorSpace);
}
public final class AndroidImageBitmap_androidKt {
@@ -1620,5 +1620,9 @@
method public androidx.compose.ui.graphics.Path toPath(optional androidx.compose.ui.graphics.Path target);
}
+ public final class PathParserKt {
+ method public static androidx.compose.ui.graphics.Path toPath(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode>, optional androidx.compose.ui.graphics.Path target);
+ }
+
}
diff --git a/compose/ui/ui-graphics/api/public_plus_experimental_current.txt b/compose/ui/ui-graphics/api/public_plus_experimental_current.txt
index 9a11ebe..cb69cd3 100644
--- a/compose/ui/ui-graphics/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-graphics/api/public_plus_experimental_current.txt
@@ -16,8 +16,8 @@
}
public final class AndroidColorSpace_androidKt {
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.ColorSpace toAndroidColorSpace(androidx.compose.ui.graphics.colorspace.ColorSpace);
method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.compose.ui.graphics.colorspace.ColorSpace toComposeColorSpace(android.graphics.ColorSpace);
- method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.ColorSpace toFrameworkColorSpace(androidx.compose.ui.graphics.colorspace.ColorSpace);
}
public final class AndroidImageBitmap_androidKt {
@@ -1623,5 +1623,9 @@
method public androidx.compose.ui.graphics.Path toPath(optional androidx.compose.ui.graphics.Path target);
}
+ public final class PathParserKt {
+ method public static androidx.compose.ui.graphics.Path toPath(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode>, optional androidx.compose.ui.graphics.Path target);
+ }
+
}
diff --git a/compose/ui/ui-graphics/api/restricted_current.txt b/compose/ui/ui-graphics/api/restricted_current.txt
index 80bf1ea..032a956b 100644
--- a/compose/ui/ui-graphics/api/restricted_current.txt
+++ b/compose/ui/ui-graphics/api/restricted_current.txt
@@ -46,8 +46,8 @@
}
public final class AndroidColorSpace_androidKt {
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.ColorSpace toAndroidColorSpace(androidx.compose.ui.graphics.colorspace.ColorSpace);
method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.compose.ui.graphics.colorspace.ColorSpace toComposeColorSpace(android.graphics.ColorSpace);
- method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.ColorSpace toFrameworkColorSpace(androidx.compose.ui.graphics.colorspace.ColorSpace);
}
public final class AndroidImageBitmap_androidKt {
@@ -1679,5 +1679,9 @@
method public androidx.compose.ui.graphics.Path toPath(optional androidx.compose.ui.graphics.Path target);
}
+ public final class PathParserKt {
+ method public static androidx.compose.ui.graphics.Path toPath(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode>, optional androidx.compose.ui.graphics.Path target);
+ }
+
}
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidColorSpaceTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidColorSpaceTest.kt
index 25fdfe8..ca5301a 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidColorSpaceTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidColorSpaceTest.kt
@@ -212,6 +212,34 @@
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
@Test
+ fun testUnknownColorSpaceNoTransform() {
+ val name = "MyCustomColorSpace"
+ val whitePoint = floatArrayOf(1.0f, 2.0f, 3.0f)
+ val primaries = floatArrayOf(1f, 2f, 3f, 4f, 5f, 6f)
+ colorSpaceTestHelper(
+ androidx.compose.ui.graphics.colorspace.Rgb(
+ name = name,
+ primaries = primaries,
+ WhitePoint(1.0f, 2.0f, 3.0f),
+ { 1.0 },
+ { 2.0 },
+ 2f,
+ 4f,
+ ),
+ ColorSpace.Rgb(
+ name,
+ primaries,
+ whitePoint,
+ { _ -> 1.0 },
+ { _ -> 2.0 },
+ 2f,
+ 4f,
+ )
+ )
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+ @Test
fun testUnknownColorspace2WhitePointValues() {
val name = "MyCustomColorSpace"
val whitePoint = floatArrayOf(1.0f, 2.0f)
@@ -251,7 +279,11 @@
composeColorSpace: androidx.compose.ui.graphics.colorspace.ColorSpace,
frameworkColorSpace: ColorSpace
) {
- Assert.assertEquals(composeColorSpace, frameworkColorSpace.toComposeColorSpace())
+ val convertedColorSpace = frameworkColorSpace.toComposeColorSpace()
+ Assert.assertEquals(composeColorSpace, convertedColorSpace)
+
+ val frameworkConvertedColorSpace = convertedColorSpace.toAndroidColorSpace()
+ Assert.assertEquals(frameworkColorSpace, frameworkConvertedColorSpace)
}
}
}
diff --git a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidColorSpace.android.kt b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidColorSpace.android.kt
index 66041c1..37086be 100644
--- a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidColorSpace.android.kt
+++ b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidColorSpace.android.kt
@@ -16,6 +16,7 @@
package androidx.compose.ui.graphics
+import android.graphics.ColorSpace.get
import android.os.Build
import androidx.annotation.DoNotInline
import androidx.annotation.RequiresApi
@@ -29,9 +30,9 @@
* Convert the Compose [ColorSpace] into an Android framework [android.graphics.ColorSpace]
*/
@RequiresApi(Build.VERSION_CODES.O)
-fun ColorSpace.toFrameworkColorSpace(): android.graphics.ColorSpace =
+fun ColorSpace.toAndroidColorSpace(): android.graphics.ColorSpace =
with(ColorSpaceVerificationHelper) {
- frameworkColorSpace()
+ androidColorSpace()
}
/**
@@ -49,28 +50,65 @@
@DoNotInline
@JvmStatic
@RequiresApi(Build.VERSION_CODES.O)
- fun ColorSpace.frameworkColorSpace(): android.graphics.ColorSpace {
- val frameworkNamedSpace = when (this) {
- ColorSpaces.Srgb -> android.graphics.ColorSpace.Named.SRGB
- ColorSpaces.Aces -> android.graphics.ColorSpace.Named.ACES
- ColorSpaces.Acescg -> android.graphics.ColorSpace.Named.ACESCG
- ColorSpaces.AdobeRgb -> android.graphics.ColorSpace.Named.ADOBE_RGB
- ColorSpaces.Bt2020 -> android.graphics.ColorSpace.Named.BT2020
- ColorSpaces.Bt709 -> android.graphics.ColorSpace.Named.BT709
- ColorSpaces.CieLab -> android.graphics.ColorSpace.Named.CIE_LAB
- ColorSpaces.CieXyz -> android.graphics.ColorSpace.Named.CIE_XYZ
- ColorSpaces.DciP3 -> android.graphics.ColorSpace.Named.DCI_P3
- ColorSpaces.DisplayP3 -> android.graphics.ColorSpace.Named.DISPLAY_P3
- ColorSpaces.ExtendedSrgb -> android.graphics.ColorSpace.Named.EXTENDED_SRGB
+ fun ColorSpace.androidColorSpace(): android.graphics.ColorSpace {
+ return when (this) {
+ ColorSpaces.Srgb -> get(android.graphics.ColorSpace.Named.SRGB)
+ ColorSpaces.Aces -> get(android.graphics.ColorSpace.Named.ACES)
+ ColorSpaces.Acescg -> get(android.graphics.ColorSpace.Named.ACESCG)
+ ColorSpaces.AdobeRgb -> get(android.graphics.ColorSpace.Named.ADOBE_RGB)
+ ColorSpaces.Bt2020 -> get(android.graphics.ColorSpace.Named.BT2020)
+ ColorSpaces.Bt709 -> get(android.graphics.ColorSpace.Named.BT709)
+ ColorSpaces.CieLab -> get(android.graphics.ColorSpace.Named.CIE_LAB)
+ ColorSpaces.CieXyz -> get(android.graphics.ColorSpace.Named.CIE_XYZ)
+ ColorSpaces.DciP3 -> get(android.graphics.ColorSpace.Named.DCI_P3)
+ ColorSpaces.DisplayP3 -> get(android.graphics.ColorSpace.Named.DISPLAY_P3)
+ ColorSpaces.ExtendedSrgb -> get(android.graphics.ColorSpace.Named.EXTENDED_SRGB)
ColorSpaces.LinearExtendedSrgb ->
- android.graphics.ColorSpace.Named.LINEAR_EXTENDED_SRGB
- ColorSpaces.LinearSrgb -> android.graphics.ColorSpace.Named.LINEAR_SRGB
- ColorSpaces.Ntsc1953 -> android.graphics.ColorSpace.Named.NTSC_1953
- ColorSpaces.ProPhotoRgb -> android.graphics.ColorSpace.Named.PRO_PHOTO_RGB
- ColorSpaces.SmpteC -> android.graphics.ColorSpace.Named.SMPTE_C
- else -> android.graphics.ColorSpace.Named.SRGB
+ get(android.graphics.ColorSpace.Named.LINEAR_EXTENDED_SRGB)
+ ColorSpaces.LinearSrgb -> get(android.graphics.ColorSpace.Named.LINEAR_SRGB)
+ ColorSpaces.Ntsc1953 -> get(android.graphics.ColorSpace.Named.NTSC_1953)
+ ColorSpaces.ProPhotoRgb -> get(android.graphics.ColorSpace.Named.PRO_PHOTO_RGB)
+ ColorSpaces.SmpteC -> get(android.graphics.ColorSpace.Named.SMPTE_C)
+ else -> {
+ if (this is Rgb) {
+ val whitePointArray = this.whitePoint.toXyz()
+ val transferParams = this.transferParameters
+ val androidTransferParams = if (transferParams != null) {
+ android.graphics.ColorSpace.Rgb.TransferParameters(
+ transferParams.a,
+ transferParams.b,
+ transferParams.c,
+ transferParams.d,
+ transferParams.e,
+ transferParams.f,
+ transferParams.gamma
+ )
+ } else {
+ null
+ }
+ if (androidTransferParams != null) {
+ android.graphics.ColorSpace.Rgb(
+ this.name,
+ this.primaries,
+ whitePointArray,
+ androidTransferParams
+ )
+ } else {
+ android.graphics.ColorSpace.Rgb(
+ this.name,
+ this.primaries,
+ whitePointArray,
+ this.oetf,
+ this.eotf,
+ this.getMinValue(0),
+ this.getMaxValue(0)
+ )
+ }
+ } else {
+ get(android.graphics.ColorSpace.Named.SRGB)
+ }
+ }
}
- return android.graphics.ColorSpace.get(frameworkNamedSpace)
}
@DoNotInline
diff --git a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidImageBitmap.android.kt b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidImageBitmap.android.kt
index 463d8f3..93d2f9c 100644
--- a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidImageBitmap.android.kt
+++ b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidImageBitmap.android.kt
@@ -201,7 +201,7 @@
height,
bitmapConfig.toBitmapConfig(),
hasAlpha,
- colorSpace.toFrameworkColorSpace()
+ colorSpace.toAndroidColorSpace()
)
}
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt
index 66f1e24e..42cf68f 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/PathParser.kt
@@ -49,27 +49,15 @@
internal val EmptyArray = FloatArray(0)
class PathParser {
- private data class PathPoint(var x: Float = 0.0f, var y: Float = 0.0f) {
- fun reset() {
- x = 0.0f
- y = 0.0f
- }
- }
-
private val nodes = mutableListOf<PathNode>()
+ private val floatResult = FloatResult()
+ private var nodeData = FloatArray(64)
+
fun clear() {
nodes.clear()
}
- private val currentPoint = PathPoint()
- private val ctrlPoint = PathPoint()
- private val segmentPoint = PathPoint()
- private val reflectiveCtrlPoint = PathPoint()
-
- private val floatResult = FloatResult()
- private var nodeData = FloatArray(64)
-
/**
* Parses the path string to create a collection of PathNode instances with their corresponding
* arguments
@@ -153,430 +141,412 @@
fun toNodes(): List<PathNode> = nodes
- fun toPath(target: Path = Path()): Path {
- target.reset()
- currentPoint.reset()
- ctrlPoint.reset()
- segmentPoint.reset()
- reflectiveCtrlPoint.reset()
-
- var previousNode: PathNode? = null
- nodes.fastForEach { node ->
- if (previousNode == null) previousNode = node
- when (node) {
- is Close -> close(target)
- is RelativeMoveTo -> node.relativeMoveTo(target)
- is MoveTo -> node.moveTo(target)
- is RelativeLineTo -> node.relativeLineTo(target)
- is LineTo -> node.lineTo(target)
- is RelativeHorizontalTo -> node.relativeHorizontalTo(target)
- is HorizontalTo -> node.horizontalTo(target)
- is RelativeVerticalTo -> node.relativeVerticalTo(target)
- is VerticalTo -> node.verticalTo(target)
- is RelativeCurveTo -> node.relativeCurveTo(target)
- is CurveTo -> node.curveTo(target)
- is RelativeReflectiveCurveTo ->
- node.relativeReflectiveCurveTo(previousNode!!.isCurve, target)
- is ReflectiveCurveTo -> node.reflectiveCurveTo(previousNode!!.isCurve, target)
- is RelativeQuadTo -> node.relativeQuadTo(target)
- is QuadTo -> node.quadTo(target)
- is RelativeReflectiveQuadTo ->
- node.relativeReflectiveQuadTo(previousNode!!.isQuad, target)
- is ReflectiveQuadTo -> node.reflectiveQuadTo(previousNode!!.isQuad, target)
- is RelativeArcTo -> node.relativeArcTo(target)
- is ArcTo -> node.arcTo(target)
- }
- previousNode = node
- }
- return target
- }
-
- private fun close(target: Path) {
- currentPoint.x = segmentPoint.x
- currentPoint.y = segmentPoint.y
- ctrlPoint.x = segmentPoint.x
- ctrlPoint.y = segmentPoint.y
-
- target.close()
- target.moveTo(currentPoint.x, currentPoint.y)
- }
-
- private fun RelativeMoveTo.relativeMoveTo(target: Path) {
- currentPoint.x += dx
- currentPoint.y += dy
- target.relativeMoveTo(dx, dy)
- segmentPoint.x = currentPoint.x
- segmentPoint.y = currentPoint.y
- }
-
- private fun MoveTo.moveTo(target: Path) {
- currentPoint.x = x
- currentPoint.y = y
- target.moveTo(x, y)
- segmentPoint.x = currentPoint.x
- segmentPoint.y = currentPoint.y
- }
-
- private fun RelativeLineTo.relativeLineTo(target: Path) {
- target.relativeLineTo(dx, dy)
- currentPoint.x += dx
- currentPoint.y += dy
- }
-
- private fun LineTo.lineTo(target: Path) {
- target.lineTo(x, y)
- currentPoint.x = x
- currentPoint.y = y
- }
-
- private fun RelativeHorizontalTo.relativeHorizontalTo(target: Path) {
- target.relativeLineTo(dx, 0.0f)
- currentPoint.x += dx
- }
-
- private fun HorizontalTo.horizontalTo(target: Path) {
- target.lineTo(x, currentPoint.y)
- currentPoint.x = x
- }
-
- private fun RelativeVerticalTo.relativeVerticalTo(target: Path) {
- target.relativeLineTo(0.0f, dy)
- currentPoint.y += dy
- }
-
- private fun VerticalTo.verticalTo(target: Path) {
- target.lineTo(currentPoint.x, y)
- currentPoint.y = y
- }
-
- private fun RelativeCurveTo.relativeCurveTo(target: Path) {
- target.relativeCubicTo(
- dx1, dy1,
- dx2, dy2,
- dx3, dy3
- )
- ctrlPoint.x = currentPoint.x + dx2
- ctrlPoint.y = currentPoint.y + dy2
- currentPoint.x += dx3
- currentPoint.y += dy3
- }
-
- private fun CurveTo.curveTo(target: Path) {
- target.cubicTo(
- x1, y1,
- x2, y2,
- x3, y3
- )
- ctrlPoint.x = x2
- ctrlPoint.y = y2
- currentPoint.x = x3
- currentPoint.y = y3
- }
-
- private fun RelativeReflectiveCurveTo.relativeReflectiveCurveTo(
- prevIsCurve: Boolean,
- target: Path
- ) {
- if (prevIsCurve) {
- reflectiveCtrlPoint.x = currentPoint.x - ctrlPoint.x
- reflectiveCtrlPoint.y = currentPoint.y - ctrlPoint.y
- } else {
- reflectiveCtrlPoint.reset()
- }
-
- target.relativeCubicTo(
- reflectiveCtrlPoint.x, reflectiveCtrlPoint.y,
- dx1, dy1,
- dx2, dy2
- )
- ctrlPoint.x = currentPoint.x + dx1
- ctrlPoint.y = currentPoint.y + dy1
- currentPoint.x += dx2
- currentPoint.y += dy2
- }
-
- private fun ReflectiveCurveTo.reflectiveCurveTo(prevIsCurve: Boolean, target: Path) {
- if (prevIsCurve) {
- reflectiveCtrlPoint.x = 2 * currentPoint.x - ctrlPoint.x
- reflectiveCtrlPoint.y = 2 * currentPoint.y - ctrlPoint.y
- } else {
- reflectiveCtrlPoint.x = currentPoint.x
- reflectiveCtrlPoint.y = currentPoint.y
- }
-
- target.cubicTo(
- reflectiveCtrlPoint.x, reflectiveCtrlPoint.y,
- x1, y1, x2, y2
- )
- ctrlPoint.x = x1
- ctrlPoint.y = y1
- currentPoint.x = x2
- currentPoint.y = y2
- }
-
- private fun RelativeQuadTo.relativeQuadTo(target: Path) {
- target.relativeQuadraticBezierTo(dx1, dy1, dx2, dy2)
- ctrlPoint.x = currentPoint.x + dx1
- ctrlPoint.y = currentPoint.y + dy1
- currentPoint.x += dx2
- currentPoint.y += dy2
- }
-
- private fun QuadTo.quadTo(target: Path) {
- target.quadraticBezierTo(x1, y1, x2, y2)
- ctrlPoint.x = x1
- ctrlPoint.y = y1
- currentPoint.x = x2
- currentPoint.y = y2
- }
-
- private fun RelativeReflectiveQuadTo.relativeReflectiveQuadTo(
- prevIsQuad: Boolean,
- target: Path
- ) {
- if (prevIsQuad) {
- reflectiveCtrlPoint.x = currentPoint.x - ctrlPoint.x
- reflectiveCtrlPoint.y = currentPoint.y - ctrlPoint.y
- } else {
- reflectiveCtrlPoint.reset()
- }
-
- target.relativeQuadraticBezierTo(
- reflectiveCtrlPoint.x,
- reflectiveCtrlPoint.y, dx, dy
- )
- ctrlPoint.x = currentPoint.x + reflectiveCtrlPoint.x
- ctrlPoint.y = currentPoint.y + reflectiveCtrlPoint.y
- currentPoint.x += dx
- currentPoint.y += dy
- }
-
- private fun ReflectiveQuadTo.reflectiveQuadTo(prevIsQuad: Boolean, target: Path) {
- if (prevIsQuad) {
- reflectiveCtrlPoint.x = 2 * currentPoint.x - ctrlPoint.x
- reflectiveCtrlPoint.y = 2 * currentPoint.y - ctrlPoint.y
- } else {
- reflectiveCtrlPoint.x = currentPoint.x
- reflectiveCtrlPoint.y = currentPoint.y
- }
- target.quadraticBezierTo(
- reflectiveCtrlPoint.x,
- reflectiveCtrlPoint.y, x, y
- )
- ctrlPoint.x = reflectiveCtrlPoint.x
- ctrlPoint.y = reflectiveCtrlPoint.y
- currentPoint.x = x
- currentPoint.y = y
- }
-
- private fun RelativeArcTo.relativeArcTo(target: Path) {
- val arcStartX = arcStartDx + currentPoint.x
- val arcStartY = arcStartDy + currentPoint.y
-
- drawArc(
- target,
- currentPoint.x.toDouble(),
- currentPoint.y.toDouble(),
- arcStartX.toDouble(),
- arcStartY.toDouble(),
- horizontalEllipseRadius.toDouble(),
- verticalEllipseRadius.toDouble(),
- theta.toDouble(),
- isMoreThanHalf,
- isPositiveArc
- )
- currentPoint.x = arcStartX
- currentPoint.y = arcStartY
-
- ctrlPoint.x = currentPoint.x
- ctrlPoint.y = currentPoint.y
- }
-
- private fun ArcTo.arcTo(target: Path) {
- drawArc(
- target,
- currentPoint.x.toDouble(),
- currentPoint.y.toDouble(),
- arcStartX.toDouble(),
- arcStartY.toDouble(),
- horizontalEllipseRadius.toDouble(),
- verticalEllipseRadius.toDouble(),
- theta.toDouble(),
- isMoreThanHalf,
- isPositiveArc
- )
-
- currentPoint.x = arcStartX
- currentPoint.y = arcStartY
-
- ctrlPoint.x = currentPoint.x
- ctrlPoint.y = currentPoint.y
- }
-
- private fun drawArc(
- p: Path,
- x0: Double,
- y0: Double,
- x1: Double,
- y1: Double,
- a: Double,
- b: Double,
- theta: Double,
- isMoreThanHalf: Boolean,
- isPositiveArc: Boolean
- ) {
-
- /* Convert rotation angle from degrees to radians */
- val thetaD = theta.toRadians()
- /* Pre-compute rotation matrix entries */
- val cosTheta = cos(thetaD)
- val sinTheta = sin(thetaD)
- /* Transform (x0, y0) and (x1, y1) into unit space */
- /* using (inverse) rotation, followed by (inverse) scale */
- val x0p = (x0 * cosTheta + y0 * sinTheta) / a
- val y0p = (-x0 * sinTheta + y0 * cosTheta) / b
- val x1p = (x1 * cosTheta + y1 * sinTheta) / a
- val y1p = (-x1 * sinTheta + y1 * cosTheta) / b
-
- /* Compute differences and averages */
- val dx = x0p - x1p
- val dy = y0p - y1p
- val xm = (x0p + x1p) / 2
- val ym = (y0p + y1p) / 2
- /* Solve for intersecting unit circles */
- val dsq = dx * dx + dy * dy
- if (dsq == 0.0) {
- return /* Points are coincident */
- }
- val disc = 1.0 / dsq - 1.0 / 4.0
- if (disc < 0.0) {
- val adjust = (sqrt(dsq) / 1.99999).toFloat()
- drawArc(
- p, x0, y0, x1, y1, a * adjust,
- b * adjust, theta, isMoreThanHalf, isPositiveArc
- )
- return /* Points are too far apart */
- }
- val s = sqrt(disc)
- val sdx = s * dx
- val sdy = s * dy
- var cx: Double
- var cy: Double
- if (isMoreThanHalf == isPositiveArc) {
- cx = xm - sdy
- cy = ym + sdx
- } else {
- cx = xm + sdy
- cy = ym - sdx
- }
-
- val eta0 = atan2(y0p - cy, x0p - cx)
-
- val eta1 = atan2(y1p - cy, x1p - cx)
-
- var sweep = eta1 - eta0
- if (isPositiveArc != (sweep >= 0)) {
- if (sweep > 0) {
- sweep -= 2 * PI
- } else {
- sweep += 2 * PI
- }
- }
-
- cx *= a
- cy *= b
- val tcx = cx
- cx = cx * cosTheta - cy * sinTheta
- cy = tcx * sinTheta + cy * cosTheta
-
- arcToBezier(
- p, cx, cy, a, b, x0, y0, thetaD,
- eta0, sweep
- )
- }
-
- /**
- * Converts an arc to cubic Bezier segments and records them in p.
- *
- * @param p The target for the cubic Bezier segments
- * @param cx The x coordinate center of the ellipse
- * @param cy The y coordinate center of the ellipse
- * @param a The radius of the ellipse in the horizontal direction
- * @param b The radius of the ellipse in the vertical direction
- * @param e1x E(eta1) x coordinate of the starting point of the arc
- * @param e1y E(eta2) y coordinate of the starting point of the arc
- * @param theta The angle that the ellipse bounding rectangle makes with horizontal plane
- * @param start The start angle of the arc on the ellipse
- * @param sweep The angle (positive or negative) of the sweep of the arc on the ellipse
- */
- private fun arcToBezier(
- p: Path,
- cx: Double,
- cy: Double,
- a: Double,
- b: Double,
- e1x: Double,
- e1y: Double,
- theta: Double,
- start: Double,
- sweep: Double
- ) {
- var eta1x = e1x
- var eta1y = e1y
- // Taken from equations at: http://spaceroots.org/documents/ellipse/node8.html
- // and http://www.spaceroots.org/documents/ellipse/node22.html
-
- // Maximum of 45 degrees per cubic Bezier segment
- val numSegments = ceil(abs(sweep * 4 / PI)).toInt()
-
- var eta1 = start
- val cosTheta = cos(theta)
- val sinTheta = sin(theta)
- val cosEta1 = cos(eta1)
- val sinEta1 = sin(eta1)
- var ep1x = (-a * cosTheta * sinEta1) - (b * sinTheta * cosEta1)
- var ep1y = (-a * sinTheta * sinEta1) + (b * cosTheta * cosEta1)
-
- val anglePerSegment = sweep / numSegments
- for (i in 0 until numSegments) {
- val eta2 = eta1 + anglePerSegment
- val sinEta2 = sin(eta2)
- val cosEta2 = cos(eta2)
- val e2x = cx + (a * cosTheta * cosEta2) - (b * sinTheta * sinEta2)
- val e2y = cy + (a * sinTheta * cosEta2) + (b * cosTheta * sinEta2)
- val ep2x = (-a * cosTheta * sinEta2) - (b * sinTheta * cosEta2)
- val ep2y = (-a * sinTheta * sinEta2) + (b * cosTheta * cosEta2)
- val tanDiff2 = tan((eta2 - eta1) / 2)
- val alpha = sin(eta2 - eta1) * (sqrt(4 + 3.0 * tanDiff2 * tanDiff2) - 1) / 3
- val q1x = eta1x + alpha * ep1x
- val q1y = eta1y + alpha * ep1y
- val q2x = e2x - alpha * ep2x
- val q2y = e2y - alpha * ep2y
-
- // TODO (njawad) figure out if this is still necessary?
- // Adding this no-op call to workaround a proguard related issue.
- // p.relativeLineTo(0.0, 0.0)
-
- p.cubicTo(
- q1x.toFloat(),
- q1y.toFloat(),
- q2x.toFloat(),
- q2y.toFloat(),
- e2x.toFloat(),
- e2y.toFloat()
- )
- eta1 = eta2
- eta1x = e2x
- eta1y = e2y
- ep1x = ep2x
- ep1y = ep2y
- }
- }
+ fun toPath(target: Path = Path()) = nodes.toPath(target)
@Suppress("NOTHING_TO_INLINE")
private inline fun addNodes(cmd: Char, args: FloatArray, count: Int) {
cmd.addPathNodes(nodes, args, count)
}
-
- private fun Double.toRadians(): Double = this / 180 * PI
}
+
+/**
+ * Converts this list of [PathNode] into a [Path] by adding the appropriate
+ * commands to the [target] path. If [target] is not specified, a new
+ * [Path] instance is created. This method returns [target] or the newly
+ * created [Path].
+ */
+fun List<PathNode>.toPath(target: Path = Path()): Path {
+ // Rewind unsets the filltype so reset it here
+ val fillType = target.fillType
+ target.rewind()
+ target.fillType = fillType
+
+ var currentX = 0.0f
+ var currentY = 0.0f
+ var ctrlX = 0.0f
+ var ctrlY = 0.0f
+ var segmentX = 0.0f
+ var segmentY = 0.0f
+ var reflectiveCtrlX: Float
+ var reflectiveCtrlY: Float
+
+ var previousNode = if (isEmpty()) Close else this[0]
+ fastForEach { node ->
+ when (node) {
+ is Close -> {
+ currentX = segmentX
+ currentY = segmentY
+ ctrlX = segmentX
+ ctrlY = segmentY
+ target.close()
+ target.moveTo(currentX, currentY)
+ }
+
+ is RelativeMoveTo -> {
+ currentX += node.dx
+ currentY += node.dy
+ target.relativeMoveTo(node.dx, node.dy)
+ segmentX = currentX
+ segmentY = currentY
+ }
+
+ is MoveTo -> {
+ currentX = node.x
+ currentY = node.y
+ target.moveTo(node.x, node.y)
+ segmentX = currentX
+ segmentY = currentY
+ }
+
+ is RelativeLineTo -> {
+ target.relativeLineTo(node.dx, node.dy)
+ currentX += node.dx
+ currentY += node.dy
+ }
+
+ is LineTo -> {
+ target.lineTo(node.x, node.y)
+ currentX = node.x
+ currentY = node.y
+ }
+
+ is RelativeHorizontalTo -> {
+ target.relativeLineTo(node.dx, 0.0f)
+ currentX += node.dx
+ }
+
+ is HorizontalTo -> {
+ target.lineTo(node.x, currentY)
+ currentX = node.x
+ }
+
+ is RelativeVerticalTo -> {
+ target.relativeLineTo(0.0f, node.dy)
+ currentY += node.dy
+ }
+
+ is VerticalTo -> {
+ target.lineTo(currentX, node.y)
+ currentY = node.y
+ }
+
+ is RelativeCurveTo -> {
+ target.relativeCubicTo(
+ node.dx1, node.dy1,
+ node.dx2, node.dy2,
+ node.dx3, node.dy3
+ )
+ ctrlX = currentX + node.dx2
+ ctrlY = currentY + node.dy2
+ currentX += node.dx3
+ currentY += node.dy3
+ }
+
+ is CurveTo -> {
+ target.cubicTo(
+ node.x1, node.y1,
+ node.x2, node.y2,
+ node.x3, node.y3
+ )
+ ctrlX = node.x2
+ ctrlY = node.y2
+ currentX = node.x3
+ currentY = node.y3
+ }
+
+ is RelativeReflectiveCurveTo -> {
+ if (previousNode.isCurve) {
+ reflectiveCtrlX = currentX - ctrlX
+ reflectiveCtrlY = currentY - ctrlY
+ } else {
+ reflectiveCtrlX = 0.0f
+ reflectiveCtrlY = 0.0f
+ }
+ target.relativeCubicTo(
+ reflectiveCtrlX, reflectiveCtrlY,
+ node.dx1, node.dy1,
+ node.dx2, node.dy2
+ )
+ ctrlX = currentX + node.dx1
+ ctrlY = currentY + node.dy1
+ currentX += node.dx2
+ currentY += node.dy2
+ }
+
+ is ReflectiveCurveTo -> {
+ if (previousNode.isCurve) {
+ reflectiveCtrlX = 2 * currentX - ctrlX
+ reflectiveCtrlY = 2 * currentY - ctrlY
+ } else {
+ reflectiveCtrlX = currentX
+ reflectiveCtrlY = currentY
+ }
+ target.cubicTo(
+ reflectiveCtrlX, reflectiveCtrlY,
+ node.x1, node.y1, node.x2, node.y2
+ )
+ ctrlX = node.x1
+ ctrlY = node.y1
+ currentX = node.x2
+ currentY = node.y2
+ }
+
+ is RelativeQuadTo -> {
+ target.relativeQuadraticBezierTo(node.dx1, node.dy1, node.dx2, node.dy2)
+ ctrlX = currentX + node.dx1
+ ctrlY = currentY + node.dy1
+ currentX += node.dx2
+ currentY += node.dy2
+ }
+
+ is QuadTo -> {
+ target.quadraticBezierTo(node.x1, node.y1, node.x2, node.y2)
+ ctrlX = node.x1
+ ctrlY = node.y1
+ currentX = node.x2
+ currentY = node.y2
+ }
+
+ is RelativeReflectiveQuadTo -> {
+ if (previousNode.isQuad) {
+ reflectiveCtrlX = currentX - ctrlX
+ reflectiveCtrlY = currentY - ctrlY
+ } else {
+ reflectiveCtrlX = 0.0f
+ reflectiveCtrlY = 0.0f
+ }
+ target.relativeQuadraticBezierTo(
+ reflectiveCtrlX,
+ reflectiveCtrlY, node.dx, node.dy
+ )
+ ctrlX = currentX + reflectiveCtrlX
+ ctrlY = currentY + reflectiveCtrlY
+ currentX += node.dx
+ currentY += node.dy
+ }
+
+ is ReflectiveQuadTo -> {
+ if (previousNode.isQuad) {
+ reflectiveCtrlX = 2 * currentX - ctrlX
+ reflectiveCtrlY = 2 * currentY - ctrlY
+ } else {
+ reflectiveCtrlX = currentX
+ reflectiveCtrlY = currentY
+ }
+ target.quadraticBezierTo(
+ reflectiveCtrlX,
+ reflectiveCtrlY, node.x, node.y
+ )
+ ctrlX = reflectiveCtrlX
+ ctrlY = reflectiveCtrlY
+ currentX = node.x
+ currentY = node.y
+ }
+
+ is RelativeArcTo -> {
+ val arcStartX = node.arcStartDx + currentX
+ val arcStartY = node.arcStartDy + currentY
+ drawArc(
+ target,
+ currentX.toDouble(),
+ currentY.toDouble(),
+ arcStartX.toDouble(),
+ arcStartY.toDouble(),
+ node.horizontalEllipseRadius.toDouble(),
+ node.verticalEllipseRadius.toDouble(),
+ node.theta.toDouble(),
+ node.isMoreThanHalf,
+ node.isPositiveArc
+ )
+ currentX = arcStartX
+ currentY = arcStartY
+ ctrlX = currentX
+ ctrlY = currentY
+ }
+
+ is ArcTo -> {
+ drawArc(
+ target,
+ currentX.toDouble(),
+ currentY.toDouble(),
+ node.arcStartX.toDouble(),
+ node.arcStartY.toDouble(),
+ node.horizontalEllipseRadius.toDouble(),
+ node.verticalEllipseRadius.toDouble(),
+ node.theta.toDouble(),
+ node.isMoreThanHalf,
+ node.isPositiveArc
+ )
+ currentX = node.arcStartX
+ currentY = node.arcStartY
+ ctrlX = currentX
+ ctrlY = currentY
+ }
+ }
+ previousNode = node
+ }
+ return target
+}
+
+private fun drawArc(
+ p: Path,
+ x0: Double,
+ y0: Double,
+ x1: Double,
+ y1: Double,
+ a: Double,
+ b: Double,
+ theta: Double,
+ isMoreThanHalf: Boolean,
+ isPositiveArc: Boolean
+) {
+
+ /* Convert rotation angle from degrees to radians */
+ val thetaD = theta.toRadians()
+ /* Pre-compute rotation matrix entries */
+ val cosTheta = cos(thetaD)
+ val sinTheta = sin(thetaD)
+ /* Transform (x0, y0) and (x1, y1) into unit space */
+ /* using (inverse) rotation, followed by (inverse) scale */
+ val x0p = (x0 * cosTheta + y0 * sinTheta) / a
+ val y0p = (-x0 * sinTheta + y0 * cosTheta) / b
+ val x1p = (x1 * cosTheta + y1 * sinTheta) / a
+ val y1p = (-x1 * sinTheta + y1 * cosTheta) / b
+
+ /* Compute differences and averages */
+ val dx = x0p - x1p
+ val dy = y0p - y1p
+ val xm = (x0p + x1p) / 2
+ val ym = (y0p + y1p) / 2
+ /* Solve for intersecting unit circles */
+ val dsq = dx * dx + dy * dy
+ if (dsq == 0.0) {
+ return /* Points are coincident */
+ }
+ val disc = 1.0 / dsq - 1.0 / 4.0
+ if (disc < 0.0) {
+ val adjust = (sqrt(dsq) / 1.99999).toFloat()
+ drawArc(
+ p, x0, y0, x1, y1, a * adjust,
+ b * adjust, theta, isMoreThanHalf, isPositiveArc
+ )
+ return /* Points are too far apart */
+ }
+ val s = sqrt(disc)
+ val sdx = s * dx
+ val sdy = s * dy
+ var cx: Double
+ var cy: Double
+ if (isMoreThanHalf == isPositiveArc) {
+ cx = xm - sdy
+ cy = ym + sdx
+ } else {
+ cx = xm + sdy
+ cy = ym - sdx
+ }
+
+ val eta0 = atan2(y0p - cy, x0p - cx)
+
+ val eta1 = atan2(y1p - cy, x1p - cx)
+
+ var sweep = eta1 - eta0
+ if (isPositiveArc != (sweep >= 0)) {
+ if (sweep > 0) {
+ sweep -= 2 * PI
+ } else {
+ sweep += 2 * PI
+ }
+ }
+
+ cx *= a
+ cy *= b
+ val tcx = cx
+ cx = cx * cosTheta - cy * sinTheta
+ cy = tcx * sinTheta + cy * cosTheta
+
+ arcToBezier(
+ p, cx, cy, a, b, x0, y0, thetaD,
+ eta0, sweep
+ )
+}
+
+/**
+ * Converts an arc to cubic Bezier segments and records them in p.
+ *
+ * @param p The target for the cubic Bezier segments
+ * @param cx The x coordinate center of the ellipse
+ * @param cy The y coordinate center of the ellipse
+ * @param a The radius of the ellipse in the horizontal direction
+ * @param b The radius of the ellipse in the vertical direction
+ * @param e1x E(eta1) x coordinate of the starting point of the arc
+ * @param e1y E(eta2) y coordinate of the starting point of the arc
+ * @param theta The angle that the ellipse bounding rectangle makes with horizontal plane
+ * @param start The start angle of the arc on the ellipse
+ * @param sweep The angle (positive or negative) of the sweep of the arc on the ellipse
+ */
+private fun arcToBezier(
+ p: Path,
+ cx: Double,
+ cy: Double,
+ a: Double,
+ b: Double,
+ e1x: Double,
+ e1y: Double,
+ theta: Double,
+ start: Double,
+ sweep: Double
+) {
+ var eta1x = e1x
+ var eta1y = e1y
+ // Taken from equations at: http://spaceroots.org/documents/ellipse/node8.html
+ // and http://www.spaceroots.org/documents/ellipse/node22.html
+
+ // Maximum of 45 degrees per cubic Bezier segment
+ val numSegments = ceil(abs(sweep * 4 / PI)).toInt()
+
+ var eta1 = start
+ val cosTheta = cos(theta)
+ val sinTheta = sin(theta)
+ val cosEta1 = cos(eta1)
+ val sinEta1 = sin(eta1)
+ var ep1x = (-a * cosTheta * sinEta1) - (b * sinTheta * cosEta1)
+ var ep1y = (-a * sinTheta * sinEta1) + (b * cosTheta * cosEta1)
+
+ val anglePerSegment = sweep / numSegments
+ for (i in 0 until numSegments) {
+ val eta2 = eta1 + anglePerSegment
+ val sinEta2 = sin(eta2)
+ val cosEta2 = cos(eta2)
+ val e2x = cx + (a * cosTheta * cosEta2) - (b * sinTheta * sinEta2)
+ val e2y = cy + (a * sinTheta * cosEta2) + (b * cosTheta * sinEta2)
+ val ep2x = (-a * cosTheta * sinEta2) - (b * sinTheta * cosEta2)
+ val ep2y = (-a * sinTheta * sinEta2) + (b * cosTheta * cosEta2)
+ val tanDiff2 = tan((eta2 - eta1) / 2)
+ val alpha = sin(eta2 - eta1) * (sqrt(4 + 3.0 * tanDiff2 * tanDiff2) - 1) / 3
+ val q1x = eta1x + alpha * ep1x
+ val q1y = eta1y + alpha * ep1y
+ val q2x = e2x - alpha * ep2x
+ val q2y = e2y - alpha * ep2y
+
+ // TODO (njawad) figure out if this is still necessary?
+ // Adding this no-op call to workaround a proguard related issue.
+ // p.relativeLineTo(0.0, 0.0)
+
+ p.cubicTo(
+ q1x.toFloat(),
+ q1y.toFloat(),
+ q2x.toFloat(),
+ q2y.toFloat(),
+ e2x.toFloat(),
+ e2y.toFloat()
+ )
+ eta1 = eta2
+ eta1x = e2x
+ eta1y = e2y
+ ep1x = ep2x
+ ep1y = ep2y
+ }
+}
+
+@Suppress("NOTHING_TO_INLINE")
+private inline fun Double.toRadians(): Double = this / 180 * PI
diff --git a/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedCanvas.skiko.kt b/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedCanvas.skiko.kt
index 23c7e7a..0e0f06e 100644
--- a/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedCanvas.skiko.kt
+++ b/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedCanvas.skiko.kt
@@ -32,7 +32,6 @@
import org.jetbrains.skia.ClipMode as SkClipMode
import org.jetbrains.skia.RRect as SkRRect
import org.jetbrains.skia.Rect as SkRect
-// Using skiko use as it has versions for all mpp platforms
import org.jetbrains.skia.impl.use
actual typealias NativeCanvas = org.jetbrains.skia.Canvas
diff --git a/compose/ui/ui-text/api/current.txt b/compose/ui/ui-text/api/current.txt
index 1f0ad8e..09ac6ba 100644
--- a/compose/ui/ui-text/api/current.txt
+++ b/compose/ui/ui-text/api/current.txt
@@ -509,7 +509,7 @@
public final class TextRangeKt {
method public static long TextRange(int start, int end);
method public static long TextRange(int index);
- method public static long constrain(long, int minimumValue, int maximumValue);
+ method public static long coerceIn(long, int minimumValue, int maximumValue);
method public static String substring(CharSequence, long range);
}
diff --git a/compose/ui/ui-text/api/public_plus_experimental_current.txt b/compose/ui/ui-text/api/public_plus_experimental_current.txt
index 509ae13..4299328 100644
--- a/compose/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-text/api/public_plus_experimental_current.txt
@@ -522,7 +522,7 @@
public final class TextRangeKt {
method public static long TextRange(int start, int end);
method public static long TextRange(int index);
- method public static long constrain(long, int minimumValue, int maximumValue);
+ method public static long coerceIn(long, int minimumValue, int maximumValue);
method public static String substring(CharSequence, long range);
}
diff --git a/compose/ui/ui-text/api/restricted_current.txt b/compose/ui/ui-text/api/restricted_current.txt
index 1f0ad8e..09ac6ba 100644
--- a/compose/ui/ui-text/api/restricted_current.txt
+++ b/compose/ui/ui-text/api/restricted_current.txt
@@ -509,7 +509,7 @@
public final class TextRangeKt {
method public static long TextRange(int start, int end);
method public static long TextRange(int index);
- method public static long constrain(long, int minimumValue, int maximumValue);
+ method public static long coerceIn(long, int minimumValue, int maximumValue);
method public static String substring(CharSequence, long range);
}
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextPainterTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextPainterTest.kt
index af0ce0e3..b847c51 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextPainterTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextPainterTest.kt
@@ -473,7 +473,7 @@
@Test
fun textMeasurerDraw_isConstrainedTo_canvasSizeByDefault() {
val measurer = textMeasurer()
- // constrain the width, height is ignored
+ // coerceIn the width, height is ignored
val textLayoutResult = measurer.measure(
text = longText,
style = TextStyle(
@@ -499,7 +499,7 @@
@Test
fun textMeasurerDraw_usesCanvasDensity_ByDefault() {
val measurer = textMeasurer()
- // constrain the width, height is ignored
+ // coerceIn the width, height is ignored
val textLayoutResult = measurer.measure(
text = longText,
style = TextStyle(
@@ -528,7 +528,7 @@
@Test
fun drawTextClipsTheContent_ifOverflowIsClip() {
val measurer = textMeasurer()
- // constrain the width, height is ignored
+ // coerceIn the width, height is ignored
val textLayoutResult = measurer.measure(
text = longText,
style = TextStyle(
@@ -588,7 +588,7 @@
@Test
fun drawTextDoesNotClipTheContent_ifOverflowIsVisible() {
val measurer = textMeasurer()
- // constrain the width, height is ignored
+ // coerceIn the width, height is ignored
val textLayoutResult = measurer.measure(
text = longText,
style = TextStyle(
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt
index 35b572e..cc2ed1d 100644
--- a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt
@@ -50,8 +50,8 @@
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_JUSTIFICATION_MODE
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_LINESPACING_MULTIPLIER
import androidx.compose.ui.text.android.LayoutCompat.HYPHENATION_FREQUENCY_NONE
-import androidx.compose.ui.text.android.LayoutCompat.HYPHENATION_FREQUENCY_NORMAL
-import androidx.compose.ui.text.android.LayoutCompat.HYPHENATION_FREQUENCY_NORMAL_FAST
+import androidx.compose.ui.text.android.LayoutCompat.HYPHENATION_FREQUENCY_FULL
+import androidx.compose.ui.text.android.LayoutCompat.HYPHENATION_FREQUENCY_FULL_FAST
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_LINE_BREAK_STYLE
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_LINE_BREAK_WORD_STYLE
import androidx.compose.ui.text.android.LayoutCompat.JUSTIFICATION_MODE_INTER_WORD
@@ -562,9 +562,9 @@
@OptIn(InternalPlatformTextApi::class)
private fun toLayoutHyphenationFrequency(hyphens: Hyphens?): Int = when (hyphens) {
Hyphens.Auto -> if (Build.VERSION.SDK_INT <= 32) {
- HYPHENATION_FREQUENCY_NORMAL
+ HYPHENATION_FREQUENCY_FULL
} else {
- HYPHENATION_FREQUENCY_NORMAL_FAST
+ HYPHENATION_FREQUENCY_FULL_FAST
}
Hyphens.None -> HYPHENATION_FREQUENCY_NONE
else -> DEFAULT_HYPHENATION_FREQUENCY
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextRange.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextRange.kt
index fbad0c0..2fbf0a7 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextRange.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextRange.kt
@@ -108,7 +108,7 @@
* @param minimumValue the minimum value that [TextRange.start] or [TextRange.end] can be.
* @param maximumValue the exclusive maximum value that [TextRange.start] or [TextRange.end] can be.
*/
-fun TextRange.constrain(minimumValue: Int, maximumValue: Int): TextRange {
+fun TextRange.coerceIn(minimumValue: Int, maximumValue: Int): TextRange {
val newStart = start.coerceIn(minimumValue, maximumValue)
val newEnd = end.coerceIn(minimumValue, maximumValue)
if (newStart != start || newEnd != end) {
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt
index d8dbaaf..ed074ba 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt
@@ -22,7 +22,7 @@
import androidx.compose.ui.text.AnnotatedStringSaver
import androidx.compose.ui.text.Saver
import androidx.compose.ui.text.TextRange
-import androidx.compose.ui.text.constrain
+import androidx.compose.ui.text.coerceIn
import androidx.compose.ui.text.restore
import androidx.compose.ui.text.save
import kotlin.math.max
@@ -85,7 +85,7 @@
* The selection range. If the selection is collapsed, it represents cursor
* location. When selection range is out of bounds, it is constrained with the text length.
*/
- val selection: TextRange = selection.constrain(0, text.length)
+ val selection: TextRange = selection.coerceIn(0, text.length)
/**
* Composition range created by IME. If null, there is no composition range.
@@ -99,7 +99,7 @@
* composition by setting the value to null. Applying a composition will accept the changes
* that were still being composed by IME.
*/
- val composition: TextRange? = composition?.constrain(0, text.length)
+ val composition: TextRange? = composition?.coerceIn(0, text.length)
/**
* Returns a copy of the TextFieldValue.
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextRangeTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextRangeTest.kt
index 36fd1bc..9c47e02 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextRangeTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextRangeTest.kt
@@ -139,23 +139,23 @@
@Test
fun constrain_updates_start_end_if_required() {
- assertThat(TextRange(0, 4).constrain(1, 3)).isEqualTo(TextRange(1, 3))
+ assertThat(TextRange(0, 4).coerceIn(1, 3)).isEqualTo(TextRange(1, 3))
}
@Test
fun constrain_with_collapsed_min_max_returns_collapsed_values() {
- assertThat(TextRange(1, 2).constrain(2, 2)).isEqualTo(TextRange(2, 2))
- assertThat(TextRange(2, 3).constrain(2, 2)).isEqualTo(TextRange(2, 2))
+ assertThat(TextRange(1, 2).coerceIn(2, 2)).isEqualTo(TextRange(2, 2))
+ assertThat(TextRange(2, 3).coerceIn(2, 2)).isEqualTo(TextRange(2, 2))
}
@Test
fun constrain_min_max_greater_than_TextRange_values() {
- assertThat(TextRange(0, 4).constrain(5, 6)).isEqualTo(TextRange(5, 5))
+ assertThat(TextRange(0, 4).coerceIn(5, 6)).isEqualTo(TextRange(5, 5))
}
@Test
fun constrain_min_smaller_than_TextRange_values() {
- assertThat(TextRange(5, 6).constrain(0, 4)).isEqualTo(TextRange(4, 4))
+ assertThat(TextRange(5, 6).coerceIn(0, 4)).isEqualTo(TextRange(4, 4))
}
@Test
diff --git a/compose/ui/ui-tooling-preview/api/current.ignore b/compose/ui/ui-tooling-preview/api/current.ignore
new file mode 100644
index 0000000..71dfdb2
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/current.ignore
@@ -0,0 +1,7 @@
+// Baseline format: 1.0
+ChangedValue: androidx.compose.ui.tooling.preview.Devices#DESKTOP:
+ Field androidx.compose.ui.tooling.preview.Devices.DESKTOP has changed value from spec:shape=Normal,width=1920,height=1080,unit=dp,dpi=420 to spec:id=reference_desktop,shape=Normal,width=1920,height=1080,unit=dp,dpi=160
+ChangedValue: androidx.compose.ui.tooling.preview.Devices#FOLDABLE:
+ Field androidx.compose.ui.tooling.preview.Devices.FOLDABLE has changed value from spec:shape=Normal,width=673,height=841,unit=dp,dpi=480 to spec:id=reference_foldable,shape=Normal,width=673,height=841,unit=dp,dpi=420
+ChangedValue: androidx.compose.ui.tooling.preview.Devices#TABLET:
+ Field androidx.compose.ui.tooling.preview.Devices.TABLET has changed value from spec:shape=Normal,width=1280,height=800,unit=dp,dpi=420 to spec:id=reference_tablet,shape=Normal,width=1280,height=800,unit=dp,dpi=240
diff --git a/compose/ui/ui-tooling-preview/api/current.txt b/compose/ui/ui-tooling-preview/api/current.txt
index a5363d9..9d09eb2 100644
--- a/compose/ui/ui-tooling-preview/api/current.txt
+++ b/compose/ui/ui-tooling-preview/api/current.txt
@@ -4,8 +4,8 @@
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 String DESKTOP = "spec:id=reference_desktop,shape=Normal,width=1920,height=1080,unit=dp,dpi=160";
+ field public static final String FOLDABLE = "spec:id=reference_foldable,shape=Normal,width=673,height=841,unit=dp,dpi=420";
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";
@@ -27,7 +27,7 @@
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 TABLET = "spec:id=reference_tablet,shape=Normal,width=1280,height=800,unit=dp,dpi=240";
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";
diff --git a/compose/ui/ui-tooling-preview/api/public_plus_experimental_current.txt b/compose/ui/ui-tooling-preview/api/public_plus_experimental_current.txt
index a5363d9..9d09eb2 100644
--- a/compose/ui/ui-tooling-preview/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-tooling-preview/api/public_plus_experimental_current.txt
@@ -4,8 +4,8 @@
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 String DESKTOP = "spec:id=reference_desktop,shape=Normal,width=1920,height=1080,unit=dp,dpi=160";
+ field public static final String FOLDABLE = "spec:id=reference_foldable,shape=Normal,width=673,height=841,unit=dp,dpi=420";
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";
@@ -27,7 +27,7 @@
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 TABLET = "spec:id=reference_tablet,shape=Normal,width=1280,height=800,unit=dp,dpi=240";
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";
diff --git a/compose/ui/ui-tooling-preview/api/restricted_current.ignore b/compose/ui/ui-tooling-preview/api/restricted_current.ignore
new file mode 100644
index 0000000..71dfdb2
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/restricted_current.ignore
@@ -0,0 +1,7 @@
+// Baseline format: 1.0
+ChangedValue: androidx.compose.ui.tooling.preview.Devices#DESKTOP:
+ Field androidx.compose.ui.tooling.preview.Devices.DESKTOP has changed value from spec:shape=Normal,width=1920,height=1080,unit=dp,dpi=420 to spec:id=reference_desktop,shape=Normal,width=1920,height=1080,unit=dp,dpi=160
+ChangedValue: androidx.compose.ui.tooling.preview.Devices#FOLDABLE:
+ Field androidx.compose.ui.tooling.preview.Devices.FOLDABLE has changed value from spec:shape=Normal,width=673,height=841,unit=dp,dpi=480 to spec:id=reference_foldable,shape=Normal,width=673,height=841,unit=dp,dpi=420
+ChangedValue: androidx.compose.ui.tooling.preview.Devices#TABLET:
+ Field androidx.compose.ui.tooling.preview.Devices.TABLET has changed value from spec:shape=Normal,width=1280,height=800,unit=dp,dpi=420 to spec:id=reference_tablet,shape=Normal,width=1280,height=800,unit=dp,dpi=240
diff --git a/compose/ui/ui-tooling-preview/api/restricted_current.txt b/compose/ui/ui-tooling-preview/api/restricted_current.txt
index a5363d9..9d09eb2 100644
--- a/compose/ui/ui-tooling-preview/api/restricted_current.txt
+++ b/compose/ui/ui-tooling-preview/api/restricted_current.txt
@@ -4,8 +4,8 @@
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 String DESKTOP = "spec:id=reference_desktop,shape=Normal,width=1920,height=1080,unit=dp,dpi=160";
+ field public static final String FOLDABLE = "spec:id=reference_foldable,shape=Normal,width=673,height=841,unit=dp,dpi=420";
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";
@@ -27,7 +27,7 @@
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 TABLET = "spec:id=reference_tablet,shape=Normal,width=1280,height=800,unit=dp,dpi=240";
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";
diff --git a/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/Device.kt b/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/Device.kt
index c6405e4..57fa29b 100644
--- a/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/Device.kt
+++ b/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/Device.kt
@@ -53,9 +53,11 @@
// Reference devices
const val PHONE = "spec:id=reference_phone,shape=Normal,width=411,height=891,unit=dp,dpi=420"
- const val FOLDABLE = "spec:shape=Normal,width=673,height=841,unit=dp,dpi=480"
- const val TABLET = "spec:shape=Normal,width=1280,height=800,unit=dp,dpi=420"
- const val DESKTOP = "spec:shape=Normal,width=1920,height=1080,unit=dp,dpi=420"
+ const val FOLDABLE =
+ "spec:id=reference_foldable,shape=Normal,width=673,height=841,unit=dp,dpi=420"
+ const val TABLET = "spec:id=reference_tablet,shape=Normal,width=1280,height=800,unit=dp,dpi=240"
+ const val DESKTOP =
+ "spec:id=reference_desktop,shape=Normal,width=1920,height=1080,unit=dp,dpi=160"
// TV devices (not adding 4K since it will be very heavy for preview)
const val TV_720p = "spec:shape=Normal,width=1280,height=720,unit=dp,dpi=420"
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/accessibility/ComplexAccessibility.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/accessibility/ComplexAccessibility.kt
index e8aed9a..6a22a71 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/accessibility/ComplexAccessibility.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/accessibility/ComplexAccessibility.kt
@@ -21,7 +21,9 @@
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.BottomAppBar
@@ -29,12 +31,14 @@
import androidx.compose.material.FabPosition
import androidx.compose.material.FloatingActionButton
import androidx.compose.material.Icon
+import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Scaffold
import androidx.compose.material.Text
import androidx.compose.material.TopAppBar
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
+import androidx.compose.material.icons.filled.Face
import androidx.compose.material.rememberDrawerState
import androidx.compose.material.rememberScaffoldState
import androidx.compose.runtime.Composable
@@ -42,6 +46,7 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.semantics.clearAndSetSemantics
import androidx.compose.ui.semantics.isTraversalGroup
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.traversalIndex
@@ -350,3 +355,47 @@
}
}
}
+
+@Preview
+@Composable
+fun IconsInScaffoldWithListDemo() {
+ Scaffold(
+ topBar = {
+ Row(
+ horizontalArrangement = Arrangement.SpaceEvenly
+ ) {
+ IconButton(onClick = { }) {
+ Icon(Icons.Default.Face, contentDescription = "Face 1")
+ }
+ // Setting `clearAndSetSemantics` below means that Face 2 will not be sorted nor
+ // will be read by TalkBack. The final traversal order should go from Face 1 to
+ // Face 3 to the LazyColumn content.
+ IconButton(
+ onClick = { },
+ modifier = Modifier.clearAndSetSemantics { }
+ ) {
+ Icon(Icons.Default.Face, contentDescription = "Face 2")
+ }
+ IconButton(onClick = { }) {
+ Icon(Icons.Default.Face, contentDescription = "Face 3")
+ }
+ }
+ },
+ content = { innerPadding ->
+ LazyColumn(
+ contentPadding = innerPadding,
+ verticalArrangement = Arrangement.spacedBy(8.dp)
+ ) {
+ val list = (0..75).map { it.toString() }
+ items(count = list.size) {
+ Text(
+ text = list[it],
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 16.dp)
+ )
+ }
+ }
+ }
+ )
+}
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
index e2ebcd9..5d49476 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
@@ -79,6 +79,7 @@
import androidx.compose.material.TopAppBar
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
+import androidx.compose.material.icons.filled.Face
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.rememberDrawerState
import androidx.compose.material.rememberScaffoldState
@@ -141,6 +142,7 @@
import androidx.compose.ui.test.assertValueEquals
import androidx.compose.ui.test.isEnabled
import androidx.compose.ui.test.junit4.createAndroidComposeRule
+import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
@@ -1261,6 +1263,119 @@
assertThat(contentTraverseBefore).isLessThan(bottomAppBarNode.id)
}
+ @Test
+ fun testSortedAccessibilityNodeInfo_clearSemantics() {
+ val content1 = "Face 1"
+ val content2 = "Face 2"
+ val content3 = "Face 3"
+ val contentText = "Content"
+ container.setContent {
+ Scaffold(
+ topBar = {
+ Row(
+ horizontalArrangement = Arrangement.SpaceEvenly
+ ) {
+ IconButton(onClick = { }) {
+ Icon(Icons.Default.Face, contentDescription = content1)
+ }
+ IconButton(
+ onClick = { },
+ modifier = Modifier.clearAndSetSemantics { }
+ ) {
+ Icon(Icons.Default.Face, contentDescription = content2)
+ }
+ IconButton(onClick = { }) {
+ Icon(Icons.Default.Face, contentDescription = content3)
+ }
+ }
+ },
+ content = { padding -> Text(contentText, modifier = Modifier.padding(padding)) }
+ )
+ }
+ val faceNode1 = rule.onNodeWithContentDescription(content1).fetchSemanticsNode()
+ val faceNode3 = rule.onNodeWithContentDescription(content3).fetchSemanticsNode()
+ val contentNode = rule.onNodeWithText(contentText).fetchSemanticsNode()
+
+ val ANI1 = provider.createAccessibilityNodeInfo(faceNode1.id)
+ val ANI3 = provider.createAccessibilityNodeInfo(faceNode3.id)
+
+ val traverseBefore1 = ANI1?.extras?.getInt(EXTRA_DATA_TEST_TRAVERSALBEFORE_VAL)
+ val traverseBefore3 = ANI3?.extras?.getInt(EXTRA_DATA_TEST_TRAVERSALBEFORE_VAL)
+
+ // On screen we have three faces in a top app bar, and then a content node:
+ //
+ // Face1 Face2 Face3
+ // Content
+ //
+
+ // Since `clearAndSetSemantics` is set on Face2, it should not generate any semantics node.
+ rule.onNodeWithTag(content2).assertDoesNotExist()
+
+ // The traversal order for the elements on screen should then be Face1 -> Face3 -> content.
+ assertEquals(traverseBefore1, faceNode3.id)
+ assertEquals(traverseBefore3, contentNode.id)
+ }
+
+ @Test
+ fun testSortedAccessibilityNodeInfo_zOcclusion() {
+ val parentBox1Tag = "ParentForOverlappedChildren"
+ val childOneTag = "OverlappedChildOne"
+ val childTwoTag = "OverlappedChildTwo"
+ val childThreeTag = "ChildThree"
+
+ container.setContent {
+ Column {
+ Box(Modifier.testTag(parentBox1Tag)) {
+ with(LocalDensity.current) {
+ BasicText(
+ "Child One",
+ Modifier
+ // A child with larger [zIndex] will be drawn on top of all the
+ // children with smaller [zIndex]. So child 1 covers child 2.
+ .zIndex(1f)
+ .testTag(childOneTag)
+ .requiredSize(50.toDp())
+ )
+ BasicText(
+ "Child Two",
+ Modifier
+ .testTag(childTwoTag)
+ .requiredSize(50.toDp())
+ )
+ }
+ }
+ Box {
+ BasicText(
+ "Child Three",
+ Modifier
+ .testTag(childThreeTag)
+ )
+ }
+ }
+ }
+
+ val parentBox1Node = rule.onNodeWithTag(parentBox1Tag).fetchSemanticsNode()
+ val childOneNode = rule.onNodeWithTag(
+ childOneTag, useUnmergedTree = true).fetchSemanticsNode()
+ val childTwoNode = rule.onNodeWithTag(
+ childTwoTag, useUnmergedTree = true).fetchSemanticsNode()
+ val childThreeNode = rule.onNodeWithTag(
+ childThreeTag, useUnmergedTree = true).fetchSemanticsNode()
+
+ val ANI1 = provider.createAccessibilityNodeInfo(childOneNode.id)
+ val traverseBefore1 = ANI1?.extras?.getInt(EXTRA_DATA_TEST_TRAVERSALBEFORE_VAL)
+
+ // Since child 2 is completely covered, it should not generate any ANI. The first box
+ // parent should only have one child (child 1).
+ assertEquals(
+ 1, provider.createAccessibilityNodeInfo(parentBox1Node.id)!!.childCount)
+ assertNull(provider.createAccessibilityNodeInfo(childTwoNode.id))
+
+ // The traversal order for the elements on screen should then be child 1 -> child 3,
+ // completely skipping over child 2.
+ assertEquals(traverseBefore1, childThreeNode.id)
+ }
+
@Composable
fun ScrollColumn(testTag: String) {
var counter = 0
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
index 909c4a5..ad8183c 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
@@ -694,9 +694,9 @@
fun depthFirstSearch(currNode: SemanticsNode) {
// We only want to add children that are either traversalGroups or are
- // screen reader focusable.
- if (currNode.isTraversalGroup == true ||
- isScreenReaderFocusable(currNode)) {
+ // screen reader focusable. The child must also be in the current pruned semantics tree.
+ if ((currNode.isTraversalGroup == true || isScreenReaderFocusable(currNode)) &&
+ currNode.id in currentSemanticsNodes.keys) {
geometryList.add(currNode)
}
if (currNode.isTraversalGroup == true) {
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
index 7e68ef8..562f991 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
@@ -145,11 +145,7 @@
}
fun DrawScope.draw(alpha: Float, colorFilter: ColorFilter?) {
- val targetColorFilter = if (colorFilter != null) {
- colorFilter
- } else {
- intrinsicColorFilter
- }
+ val targetColorFilter = colorFilter ?: intrinsicColorFilter
// If the content of the vector has changed, or we are drawing a different size
// update the cached image to ensure we are scaling the vector appropriately
if (isDirty || previousDrawSize != size) {
@@ -293,17 +289,18 @@
private val pathMeasure: PathMeasure by lazy(LazyThreadSafetyMode.NONE) { PathMeasure() }
- private val parser = PathParser()
-
private fun updatePath() {
- parser.clear()
- path.reset()
- parser.addPathNodes(pathData).toPath(path)
+ // The call below resets the path
+ pathData.toPath(path)
updateRenderPath()
}
private fun updateRenderPath() {
- renderPath.reset()
+ // Rewind unsets the filltype so reset it here
+ val fillType = renderPath.fillType
+ renderPath.rewind()
+ renderPath.fillType = fillType
+
if (trimPathStart == DefaultTrimPathStart && trimPathEnd == DefaultTrimPathEnd) {
renderPath.addPath(path)
} else {
@@ -366,7 +363,6 @@
private var isClipPathDirty = true
private var clipPath: Path? = null
- private var parser: PathParser? = null
override var invalidateListener: (() -> Unit)? = null
set(value) {
@@ -378,23 +374,14 @@
private fun updateClipPath() {
if (willClipPath) {
- var targetParser = parser
- if (targetParser == null) {
- targetParser = PathParser()
- parser = targetParser
- } else {
- targetParser.clear()
- }
-
var targetClip = clipPath
if (targetClip == null) {
targetClip = Path()
clipPath = targetClip
- } else {
- targetClip.reset()
}
- targetParser.addPathNodes(clipPathData).toPath(targetClip)
+ // toPath() will reset the path we send
+ clipPathData.toPath(targetClip)
}
}
diff --git a/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionDragHandler.kt b/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionDragHandler.kt
index 3328406..40561ea 100644
--- a/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionDragHandler.kt
+++ b/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionDragHandler.kt
@@ -24,6 +24,7 @@
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.input.pointer.util.VelocityTracker
+import androidx.compose.ui.input.pointer.util.addPointerInputChange
import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.unit.Velocity
import kotlinx.coroutines.channels.Channel
@@ -104,7 +105,7 @@
)
}
) { change, dragAmount ->
- velocityTracker.addPosition(change.uptimeMillis, change.position)
+ velocityTracker.addPointerInputChange(change)
// As dragging is done, pass the dragAmount to update the MotionLayout progress.
dragChannel.trySend(MotionDragState.onDrag(dragAmount))
}
diff --git a/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/StopLogicEngine.java b/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/StopLogicEngine.java
index 0982b43..40f75d0 100644
--- a/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/StopLogicEngine.java
+++ b/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/StopLogicEngine.java
@@ -34,6 +34,7 @@
private boolean mBackwards = false;
private float mStartPosition;
private float mLastPosition;
+ private float mLastTime;
@SuppressWarnings("unused")
private boolean mDone = false;
private static final float EPSILON = 0.00001f;
@@ -106,14 +107,14 @@
return mStage2Velocity + (mStage3Velocity - mStage2Velocity) * x / mStage2Duration;
}
if (mNumberOfStages == 2) {
- return mStage2EndPosition;
+ return 0;
}
x -= mStage2Duration;
if (x < mStage3Duration) {
return mStage3Velocity - mStage3Velocity * x / mStage3Duration;
}
- return mStage3EndPosition;
+ return 0;
}
private float calcY(float time) {
@@ -162,13 +163,14 @@
@Override
public float getInterpolation(float v) {
float y = calcY(v);
- mLastPosition = v;
+ mLastPosition = y;
+ mLastTime = v;
return mBackwards ? mStartPosition - y : mStartPosition + y;
}
@Override
public float getVelocity() {
- return mBackwards ? -getVelocity(mLastPosition) : getVelocity(mLastPosition);
+ return mBackwards ? -getVelocity(mLastTime) : getVelocity(mLastTime);
}
@Override
diff --git a/constraintlayout/constraintlayout-core/src/test/java/androidx/constraintlayout/core/motion/MotionBasicTest.java b/constraintlayout/constraintlayout-core/src/test/java/androidx/constraintlayout/core/motion/MotionBasicTest.java
index b9dd2fd..857999a 100644
--- a/constraintlayout/constraintlayout-core/src/test/java/androidx/constraintlayout/core/motion/MotionBasicTest.java
+++ b/constraintlayout/constraintlayout-core/src/test/java/androidx/constraintlayout/core/motion/MotionBasicTest.java
@@ -16,6 +16,7 @@
package androidx.constraintlayout.core.motion;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import androidx.constraintlayout.core.motion.utils.CurveFit;
import androidx.constraintlayout.core.motion.utils.Easing;
@@ -214,6 +215,7 @@
float pos = breakLogic.getInterpolation(time);
ret[i] = pos;
}
+ assertTrue(breakLogic.isStopped());
return ret;
}
diff --git a/constraintlayout/constraintlayout-core/src/test/java/androidx/constraintlayout/core/motion/StopLogicTest.java b/constraintlayout/constraintlayout-core/src/test/java/androidx/constraintlayout/core/motion/StopLogicTest.java
index 760085c..92f6313 100644
--- a/constraintlayout/constraintlayout-core/src/test/java/androidx/constraintlayout/core/motion/StopLogicTest.java
+++ b/constraintlayout/constraintlayout-core/src/test/java/androidx/constraintlayout/core/motion/StopLogicTest.java
@@ -40,6 +40,7 @@
float damping = 50f;
float stopThreshold = 0f;
int springBoundary = 0;
+ boolean expectStopped = false; // Doesn't make it to 1.0f in the given time
stop.springConfig(position,
destination,
currentVelocity,
@@ -65,7 +66,7 @@
+ "| ************* |\n"
+ "| *| 0.885\n"
+ "0.0 0.885\n";
- assertEquals(expect, verify(stop, position, maxTime));
+ assertEquals(expect, verify(stop, position, maxTime, expectStopped));
}
@Test
@@ -78,6 +79,7 @@
float maxTime = 0.9f;
float maxAcceleration = 3.2f;
float maxVelocity = 3.2f;
+ boolean expectStopped = true;
stop.config(position, destination, currentVelocity, maxTime, maxAcceleration, maxVelocity);
System.out.println(stop.debug("check1", 0));
String expect = ""
@@ -97,7 +99,7 @@
+ "| ************************* |\n"
+ "| *********************** *| 1.0\n"
+ "0.0 0.885\n";
- assertEquals(expect, verify(stop, position, maxTime));
+ assertEquals(expect, verify(stop, position, maxTime, expectStopped));
}
@Test
@@ -110,6 +112,7 @@
float maxTime = 0.9f;
float maxAcceleration = 3.2f;
float maxVelocity = 3.2f;
+ boolean expectStopped = true;
stop.config(position, destination, currentVelocity, maxTime, maxAcceleration, maxVelocity);
System.out.println(stop.debug("check1", 0));
String expect = ""
@@ -129,7 +132,7 @@
+ "| ************** |\n"
+ "| ****************************** *| 1.0\n"
+ "0.0 0.885\n";
- assertEquals(expect, verify(stop, position, maxTime));
+ assertEquals(expect, verify(stop, position, maxTime, expectStopped));
}
@Test
@@ -141,6 +144,7 @@
float maxTime = 0.9f;
float maxAcceleration = 3.2f;
float maxVelocity = 3.2f;
+ boolean expectStopped = true;
stop.config(position, destination, currentVelocity, maxTime, maxAcceleration, maxVelocity);
System.out.println(stop.debug("check1", 0));
String expect = ""
@@ -160,7 +164,7 @@
+ "| ****** |\n"
+ "| ************************************************** *| 1.0\n"
+ "0.0 0.885\n";
- assertEquals(expect, verify(stop, position, maxTime));
+ assertEquals(expect, verify(stop, position, maxTime, expectStopped));
}
@Test
@@ -172,6 +176,7 @@
float maxTime = 0.9f;
float maxAcceleration = 3.2f;
float maxVelocity = 1.2f;
+ boolean expectStopped = false; // Doesn't make it to 1f in the given time
stop.config(position, destination, currentVelocity, maxTime, maxAcceleration, maxVelocity);
System.out.println(stop.debug("check1", 0));
String expect = ""
@@ -191,7 +196,7 @@
+ "| *********** |\n"
+ "| *| 0.997\n"
+ "0.0 0.885\n";
- assertEquals(expect, verify(stop, position, maxTime));
+ assertEquals(expect, verify(stop, position, maxTime, expectStopped));
}
@Test
@@ -203,6 +208,7 @@
float maxTime = 0.9f;
float maxAcceleration = 3.2f;
float maxVelocity = 3.2f;
+ boolean expectStopped = true;
stop.config(position, destination, currentVelocity, maxTime, maxAcceleration, maxVelocity);
System.out.println(stop.debug("check1", 0));
String expect = ""
@@ -222,7 +228,7 @@
+ "| ************** |\n"
+ "| *| 1.0\n"
+ "0.0 0.885\n";
- assertEquals(expect, verify(stop, position, maxTime));
+ assertEquals(expect, verify(stop, position, maxTime, expectStopped));
}
@Test
@@ -234,6 +240,7 @@
float maxTime = 0.9f;
float maxAcceleration = 5.2f;
float maxVelocity = 1.2f;
+ boolean expectStopped = true;
stop.config(position, destination, currentVelocity, maxTime, maxAcceleration, maxVelocity);
System.out.println(stop.debug("check1", 0));
String expect = ""
@@ -253,10 +260,13 @@
+ "| ********** |\n"
+ "| ****** *| 1.0\n"
+ "0.0 0.885\n";
- assertEquals(expect, verify(stop, position, maxTime));
+ assertEquals(expect, verify(stop, position, maxTime, expectStopped));
}
- private static String verify(StopEngine stop, float position, float maxTime) {
+ private static String verify(StopEngine stop,
+ float position,
+ float maxTime,
+ boolean expectStopped) {
float p = stop.getInterpolation(0);
assertEquals(p, position, 0.0001);
int count = 60;
@@ -272,6 +282,7 @@
}
String ret = textDraw(count, count / 4, x, y, false);
System.out.println(ret);
+ assertEquals(expectStopped, stop.isStopped());
return ret;
}
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index 4545228..569d1ac 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -30,14 +30,14 @@
docs("androidx.asynclayoutinflater:asynclayoutinflater:1.1.0-alpha01")
docs("androidx.asynclayoutinflater:asynclayoutinflater-appcompat:1.1.0-alpha01")
docs("androidx.autofill:autofill:1.2.0-beta01")
- docs("androidx.benchmark:benchmark-common:1.2.0-alpha13")
- docs("androidx.benchmark:benchmark-junit4:1.2.0-alpha13")
- docs("androidx.benchmark:benchmark-macro:1.2.0-alpha13")
- docs("androidx.benchmark:benchmark-macro-junit4:1.2.0-alpha13")
+ docs("androidx.benchmark:benchmark-common:1.2.0-alpha14")
+ docs("androidx.benchmark:benchmark-junit4:1.2.0-alpha14")
+ docs("androidx.benchmark:benchmark-macro:1.2.0-alpha14")
+ docs("androidx.benchmark:benchmark-macro-junit4:1.2.0-alpha14")
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")
+ docs("androidx.browser:browser:1.6.0-alpha01")
docs("androidx.camera:camera-camera2:1.3.0-alpha06")
docs("androidx.camera:camera-core:1.3.0-alpha06")
docs("androidx.camera:camera-extensions:1.3.0-alpha06")
@@ -252,18 +252,18 @@
docs("androidx.navigation:navigation-testing:2.6.0-beta01")
docs("androidx.navigation:navigation-ui:2.6.0-beta01")
docs("androidx.navigation:navigation-ui-ktx:2.6.0-beta01")
- 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-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.paging:paging-common:3.2.0-alpha05")
+ docs("androidx.paging:paging-common-ktx:3.2.0-alpha05")
+ docs("androidx.paging:paging-compose:1.0.0-alpha19")
+ samples("androidx.paging:paging-compose-samples:1.0.0-alpha19")
+ docs("androidx.paging:paging-guava:3.2.0-alpha05")
+ docs("androidx.paging:paging-runtime:3.2.0-alpha05")
+ docs("androidx.paging:paging-runtime-ktx:3.2.0-alpha05")
+ docs("androidx.paging:paging-rxjava2:3.2.0-alpha05")
+ docs("androidx.paging:paging-rxjava2-ktx:3.2.0-alpha05")
+ docs("androidx.paging:paging-rxjava3:3.2.0-alpha05")
+ samples("androidx.paging:paging-samples:3.2.0-alpha05")
+ docs("androidx.paging:paging-testing:3.2.0-alpha05")
docs("androidx.palette:palette:1.0.0")
docs("androidx.palette:palette-ktx:1.0.0")
docs("androidx.percentlayout:percentlayout:1.0.1")
@@ -339,10 +339,10 @@
docs("androidx.test.services:storage:1.5.0-alpha01")
docs("androidx.test.uiautomator:uiautomator:2.3.0-alpha03")
docs("androidx.textclassifier:textclassifier:1.0.0-alpha04")
- docs("androidx.tracing:tracing:1.2.0-beta03")
- docs("androidx.tracing:tracing-ktx:1.2.0-beta03")
- docs("androidx.tracing:tracing-perfetto:1.0.0-alpha14")
- docs("androidx.tracing:tracing-perfetto-common:1.0.0-alpha14")
+ docs("androidx.tracing:tracing:1.2.0-beta04")
+ docs("androidx.tracing:tracing-ktx:1.2.0-beta04")
+ docs("androidx.tracing:tracing-perfetto:1.0.0-alpha15")
+ docs("androidx.tracing:tracing-perfetto-common:1.0.0-alpha15")
docs("androidx.transition:transition:1.4.1")
docs("androidx.transition:transition-ktx:1.4.1")
docs("androidx.tv:tv-foundation:1.0.0-alpha06")
diff --git a/fragment/CHANGELOG.md b/fragment/CHANGELOG.md
new file mode 100644
index 0000000..55e45de
--- /dev/null
+++ b/fragment/CHANGELOG.md
@@ -0,0 +1,11 @@
+# Log for changes in the Fragment library
+#
+# `Added`: for new features
+# `Changed`: for changes in existing functionality
+# `Deprecated`: for soon to be removed functionality
+# `Removed`: for now removed feature
+# `Fixed`: for any bug fixes
+# `Security`: in case of vulnerabilities
+
+# Unreleased
+
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/StrictModeTest.kt b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/StrictModeTest.kt
index a4ccfdc..6a3e51f 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/StrictModeTest.kt
+++ b/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/StrictModeTest.kt
@@ -63,8 +63,10 @@
StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyListener(executor) {
+ Log.e("StrictModeTest", "Logging violation:")
+ Log.e("StrictModeTest", "$it")
+ Log.e("StrictModeTest", "Stack trace: ${it.stackTrace}", it.cause)
fail("Received violation: $it")
- Log.e("WIDGET", "$it")
}.build()
)
}
@@ -166,4 +168,4 @@
Truth.assertThat(CallbackTest.latch.await(5, TimeUnit.SECONDS)).isTrue()
Truth.assertThat(CallbackTest.received.get()).containsExactly(1, 2)
}
-}
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29Test.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29Test.kt
index 5ecc43e..60cf00d 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29Test.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29Test.kt
@@ -41,7 +41,6 @@
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
-import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
@@ -229,7 +228,11 @@
bufferReadyLatch.countDown()
drawCancelledRequestLatch?.countDown()
}
- })
+ }).apply {
+ // See: b/236394768 Workaround for ANGLE issue where FBOs with HardwareBuffer
+ // attachments are not executed until a glReadPixels call is made
+ forceFlush.set(true)
+ }
try {
renderer.render(Color.RED)
assertTrue(initialDrawLatch.await(3000, TimeUnit.MILLISECONDS))
@@ -280,7 +283,11 @@
) {
// NO-OP
}
- })
+ }).apply {
+ // See: b/236394768 Workaround for ANGLE issue where FBOs with HardwareBuffer
+ // attachments are not executed until a glReadPixels call is made
+ forceFlush.set(true)
+ }
try {
val latch = CountDownLatch(1)
renderer.release(true) {
@@ -330,7 +337,11 @@
syncFenceCompat?.awaitForever()
drawLatch?.countDown()
}
- })
+ }).apply {
+ // See: b/236394768 Workaround for ANGLE issue where FBOs with HardwareBuffer
+ // attachments are not executed until a glReadPixels call is made
+ forceFlush.set(true)
+ }
try {
renderer.isVisible = false
drawLatch = CountDownLatch(1)
@@ -353,7 +364,6 @@
}
}
- @Ignore("b/274099885")
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
@Test
fun testBatchedRenders() {
@@ -378,7 +388,11 @@
) {
// NO-OP
}
- })
+ }).apply {
+ // See: b/236394768 Workaround for ANGLE issue where FBOs with HardwareBuffer
+ // attachments are not executed until a glReadPixels call is made
+ forceFlush.set(true)
+ }
try {
renderer.render(Color.RED)
renderer.render(Color.BLUE)
@@ -431,7 +445,11 @@
buffer = hardwareBuffer
renderLatch.countDown()
}
- })
+ }).apply {
+ // See: b/236394768 Workaround for ANGLE issue where FBOs with HardwareBuffer
+ // attachments are not executed until a glReadPixels call is made
+ forceFlush.set(true)
+ }
try {
renderer.render(0)
assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
index a03d42d..43f1de6 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
@@ -987,6 +987,8 @@
width.toFloat(),
height.toFloat()
)
+ // See: b/236394768 Workaround for ANGLE issue where FBOs with HardwareBuffer
+ GLES20.glFinish()
supportsFence = eglManager.supportsNativeAndroidFence()
quadRenderer.release()
surface.release()
@@ -1125,6 +1127,8 @@
width.toFloat(),
height.toFloat()
)
+ // See: b/236394768 Workaround for ANGLE issue where FBOs with HardwareBuffer
+ GLES20.glFinish()
supportsFence = eglManager.supportsNativeAndroidFence()
quadRenderer.release()
deleteTexture(texId)
diff --git a/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/ShapeEditor.kt b/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/ShapeEditor.kt
index c739eb8..7df2d10 100644
--- a/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/ShapeEditor.kt
+++ b/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/ShapeEditor.kt
@@ -53,6 +53,7 @@
import androidx.graphics.shapes.star
import kotlin.math.cos
import kotlin.math.max
+import kotlin.math.min
import kotlin.math.roundToInt
import kotlin.math.sin
@@ -199,7 +200,7 @@
PointF(sx, sy),
PointF(-sx, sy),
),
- rounding = CornerRounding(this.roundness.value, this.smooth.value),
+ rounding = CornerRounding(min(sx, sy), this.smooth.value),
center = PointZero
)
},
diff --git a/lifecycle/lifecycle-runtime-compose/api/current.txt b/lifecycle/lifecycle-runtime-compose/api/current.txt
index 0686666..5b19f2b 100644
--- a/lifecycle/lifecycle-runtime-compose/api/current.txt
+++ b/lifecycle/lifecycle-runtime-compose/api/current.txt
@@ -8,6 +8,10 @@
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
}
+ public final class LifecycleEffectKt {
+ method @androidx.compose.runtime.Composable public static void LifecycleEventEffect(androidx.lifecycle.Lifecycle.Event event, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, kotlin.jvm.functions.Function0<kotlin.Unit> onEvent);
+ }
+
public final class LifecycleExtKt {
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.lifecycle.Lifecycle.State> currentStateAsState(androidx.lifecycle.Lifecycle);
}
diff --git a/lifecycle/lifecycle-runtime-compose/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-runtime-compose/api/public_plus_experimental_current.txt
index 0686666..5b19f2b 100644
--- a/lifecycle/lifecycle-runtime-compose/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-runtime-compose/api/public_plus_experimental_current.txt
@@ -8,6 +8,10 @@
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
}
+ public final class LifecycleEffectKt {
+ method @androidx.compose.runtime.Composable public static void LifecycleEventEffect(androidx.lifecycle.Lifecycle.Event event, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, kotlin.jvm.functions.Function0<kotlin.Unit> onEvent);
+ }
+
public final class LifecycleExtKt {
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.lifecycle.Lifecycle.State> currentStateAsState(androidx.lifecycle.Lifecycle);
}
diff --git a/lifecycle/lifecycle-runtime-compose/api/restricted_current.txt b/lifecycle/lifecycle-runtime-compose/api/restricted_current.txt
index 0686666..5b19f2b 100644
--- a/lifecycle/lifecycle-runtime-compose/api/restricted_current.txt
+++ b/lifecycle/lifecycle-runtime-compose/api/restricted_current.txt
@@ -8,6 +8,10 @@
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
}
+ public final class LifecycleEffectKt {
+ method @androidx.compose.runtime.Composable public static void LifecycleEventEffect(androidx.lifecycle.Lifecycle.Event event, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, kotlin.jvm.functions.Function0<kotlin.Unit> onEvent);
+ }
+
public final class LifecycleExtKt {
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.lifecycle.Lifecycle.State> currentStateAsState(androidx.lifecycle.Lifecycle);
}
diff --git a/lifecycle/lifecycle-runtime-compose/src/androidTest/java/androidx/lifecycle/compose/CollectAsStateWithLifecycleTests.kt b/lifecycle/lifecycle-runtime-compose/src/androidTest/java/androidx/lifecycle/compose/CollectAsStateWithLifecycleTests.kt
index 54b6553c..e9387cd 100644
--- a/lifecycle/lifecycle-runtime-compose/src/androidTest/java/androidx/lifecycle/compose/CollectAsStateWithLifecycleTests.kt
+++ b/lifecycle/lifecycle-runtime-compose/src/androidTest/java/androidx/lifecycle/compose/CollectAsStateWithLifecycleTests.kt
@@ -19,6 +19,8 @@
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.testing.TestLifecycleOwner
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -27,7 +29,10 @@
import kotlinx.coroutines.runBlocking
import org.junit.Rule
import org.junit.Test
+import org.junit.runner.RunWith
+@MediumTest
+@RunWith(AndroidJUnit4::class)
class CollectAsStateWithLifecycleTests {
@get:Rule
diff --git a/lifecycle/lifecycle-runtime-compose/src/androidTest/java/androidx/lifecycle/compose/LifecycleEffectTest.kt b/lifecycle/lifecycle-runtime-compose/src/androidTest/java/androidx/lifecycle/compose/LifecycleEffectTest.kt
new file mode 100644
index 0000000..3d7e9fe
--- /dev/null
+++ b/lifecycle/lifecycle-runtime-compose/src/androidTest/java/androidx/lifecycle/compose/LifecycleEffectTest.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.lifecycle.compose
+
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.ui.platform.LocalLifecycleOwner
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.testing.TestLifecycleOwner
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import com.google.common.truth.Truth.assertWithMessage
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.setMain
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
+@RunWith(AndroidJUnit4::class)
+class LifecycleEffectTest {
+
+ private val dispatcher = UnconfinedTestDispatcher()
+ private lateinit var lifecycleOwner: TestLifecycleOwner
+
+ @get:Rule
+ val composeTestRule = createComposeRule()
+
+ @Before
+ fun setup() {
+ lifecycleOwner = TestLifecycleOwner(coroutineDispatcher = dispatcher)
+ Dispatchers.setMain(dispatcher)
+ }
+
+ @Test
+ fun lifecycleEventEffectTest_noEvent() {
+ var stopCount = 0
+
+ composeTestRule.waitForIdle()
+ composeTestRule.setContent {
+ CompositionLocalProvider(LocalLifecycleOwner provides lifecycleOwner) {
+ LifecycleEventEffect(Lifecycle.Event.ON_STOP) {
+ stopCount++
+ }
+ }
+ }
+
+ composeTestRule.runOnIdle {
+ assertWithMessage("Lifecycle should not have been stopped")
+ .that(stopCount)
+ .isEqualTo(0)
+ }
+ }
+
+ @Test
+ fun lifecycleEventEffectTest_localLifecycleOwner() {
+ val expectedEvent = Lifecycle.Event.ON_STOP
+ var stopCount = 0
+
+ composeTestRule.waitForIdle()
+ composeTestRule.setContent {
+ CompositionLocalProvider(LocalLifecycleOwner provides lifecycleOwner) {
+ LifecycleEventEffect(expectedEvent) {
+ stopCount++
+ }
+ }
+ }
+
+ composeTestRule.runOnIdle {
+ lifecycleOwner.handleLifecycleEvent(expectedEvent)
+ assertWithMessage("Lifecycle should have been stopped")
+ .that(stopCount)
+ .isEqualTo(1)
+ }
+ }
+
+ @Test
+ fun lifecycleEventEffectTest_customLifecycleOwner() {
+ val expectedEvent = Lifecycle.Event.ON_STOP
+ var stopCount = 0
+
+ composeTestRule.waitForIdle()
+ composeTestRule.setContent {
+ LifecycleEventEffect(expectedEvent, lifecycleOwner) {
+ stopCount++
+ }
+ }
+
+ composeTestRule.runOnIdle {
+ lifecycleOwner.handleLifecycleEvent(expectedEvent)
+ assertWithMessage("Lifecycle should have been stopped")
+ .that(stopCount)
+ .isEqualTo(1)
+ }
+ }
+}
\ No newline at end of file
diff --git a/lifecycle/lifecycle-runtime-compose/src/androidTest/java/androidx/lifecycle/compose/LifecycleExtTest.kt b/lifecycle/lifecycle-runtime-compose/src/androidTest/java/androidx/lifecycle/compose/LifecycleExtTest.kt
index 255d06a..a9e7d4e 100644
--- a/lifecycle/lifecycle-runtime-compose/src/androidTest/java/androidx/lifecycle/compose/LifecycleExtTest.kt
+++ b/lifecycle/lifecycle-runtime-compose/src/androidTest/java/androidx/lifecycle/compose/LifecycleExtTest.kt
@@ -19,14 +19,16 @@
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.testing.TestLifecycleOwner
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-@RunWith(JUnit4::class)
+@MediumTest
+@RunWith(AndroidJUnit4::class)
class LifecycleExtTest {
@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
@@ -52,9 +54,12 @@
assertThat(realStateValue).isEqualTo(Lifecycle.State.INITIALIZED)
}
+ // TODO(b/280362188): commenting this portion out until bug is fixed
+ /*
lifecycleOwner.currentState = Lifecycle.State.RESUMED
rule.runOnIdle {
assertThat(realStateValue).isEqualTo(Lifecycle.State.RESUMED)
}
+ */
}
}
\ No newline at end of file
diff --git a/lifecycle/lifecycle-runtime-compose/src/main/java/androidx/lifecycle/compose/LifecycleEffect.kt b/lifecycle/lifecycle-runtime-compose/src/main/java/androidx/lifecycle/compose/LifecycleEffect.kt
new file mode 100644
index 0000000..c9e47ae
--- /dev/null
+++ b/lifecycle/lifecycle-runtime-compose/src/main/java/androidx/lifecycle/compose/LifecycleEffect.kt
@@ -0,0 +1,78 @@
+/*
+ * 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.lifecycle.compose
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.DisposableEffect
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.State
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.ui.platform.LocalLifecycleOwner
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleEventObserver
+import androidx.lifecycle.LifecycleOwner
+
+/**
+ * Schedule an effect to run when the [Lifecycle] receives a specific [Lifecycle.Event].
+ *
+ * Using a [LifecycleEventObserver] to listen for when [LifecycleEventEffect] enters
+ * the composition, [onEvent] will be launched when receiving the specified [event].
+ *
+ * This function should **not** be used to listen for [Lifecycle.Event.ON_DESTROY] because
+ * Compose stops recomposing after receiving a [Lifecycle.Event.ON_STOP] and will never be
+ * aware of an ON_DESTROY to launch [onEvent].
+ *
+ * This function should also **not** be used to launch tasks in response to callback
+ * events by way of storing callback data as a [Lifecycle.State] in a [MutableState].
+ * Instead, see [currentStateAsState] to obtain a [State<Lifecycle.State>][State]
+ * that may be used to launch jobs in response to state changes.
+ *
+ * @param event The [Lifecycle.Event] to listen for
+ * @param lifecycleOwner The lifecycle owner to attach an observer
+ * @param onEvent The effect to be launched when we receive an [event] callback
+ *
+ * @throws IllegalArgumentException if attempting to listen for [Lifecycle.Event.ON_DESTROY]
+ */
+@Composable
+fun LifecycleEventEffect(
+ event: Lifecycle.Event,
+ lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
+ onEvent: () -> Unit
+) {
+ if (event == Lifecycle.Event.ON_DESTROY) {
+ throw IllegalArgumentException("LifecycleEventEffect cannot be used to " +
+ "listen for Lifecycle.Event.ON_DESTROY, since Compose disposes of the " +
+ "composition before ON_DESTROY observers are invoked.")
+ }
+
+ // Safely update the current `onEvent` lambda when a new one is provided
+ val currentOnEvent by rememberUpdatedState(onEvent)
+ DisposableEffect(lifecycleOwner) {
+ val observer = LifecycleEventObserver { _, e ->
+ if (e == event) {
+ currentOnEvent()
+ }
+ }
+
+ lifecycleOwner.lifecycle.addObserver(observer)
+
+ onDispose {
+ lifecycleOwner.lifecycle.removeObserver(observer)
+ }
+ }
+}
\ No newline at end of file
diff --git a/lint-checks/src/main/java/androidx/com/android/tools/idea/lang/aidl/AidlLanguage.java b/lint-checks/src/main/java/androidx/com/android/tools/idea/lang/aidl/AidlLanguage.java
index 7c2d47d..0a10e27 100644
--- a/lint-checks/src/main/java/androidx/com/android/tools/idea/lang/aidl/AidlLanguage.java
+++ b/lint-checks/src/main/java/androidx/com/android/tools/idea/lang/aidl/AidlLanguage.java
@@ -22,14 +22,20 @@
* Android IDL Language.
*/
public class AidlLanguage extends Language {
+ private static final Object INSTANCE_LOCK = new Object();
+
public static final Language INSTANCE = getOrCreate();
private static Language getOrCreate() {
- Language lang = Language.findLanguageByID(ID);
- if (lang != null) {
- return lang;
+ // The Language class is not thread-safe, so this is a best-effort to avoid a race condition
+ // during our own access across multiple lint worker threads.
+ synchronized (INSTANCE_LOCK) {
+ Language lang = Language.findLanguageByID(ID);
+ if (lang != null) {
+ return lang;
+ }
+ return new AidlLanguage();
}
- return new AidlLanguage();
}
@NonNls private static final String ID = "AIDL";
diff --git a/navigation/CHANGELOG.md b/navigation/CHANGELOG.md
new file mode 100644
index 0000000..0f9c1e1
--- /dev/null
+++ b/navigation/CHANGELOG.md
@@ -0,0 +1,11 @@
+# Log for changes in the Navigation library
+#
+# `Added`: for new features
+# `Changed`: for changes in existing functionality
+# `Deprecated`: for soon to be removed functionality
+# `Removed`: for now removed feature
+# `Fixed`: for any bug fixes
+# `Security`: in case of vulnerabilities
+
+# Unreleased
+
diff --git a/navigation/navigation-dynamic-features-runtime/src/androidTest/java/androidx/navigation/dynamicfeatures/DynamicActivityNavigatorTest.kt b/navigation/navigation-dynamic-features-runtime/src/androidTest/java/androidx/navigation/dynamicfeatures/DynamicActivityNavigatorTest.kt
index 4dc1246..a8e6f2d 100644
--- a/navigation/navigation-dynamic-features-runtime/src/androidTest/java/androidx/navigation/dynamicfeatures/DynamicActivityNavigatorTest.kt
+++ b/navigation/navigation-dynamic-features-runtime/src/androidTest/java/androidx/navigation/dynamicfeatures/DynamicActivityNavigatorTest.kt
@@ -31,7 +31,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.mock
-/* ktlint-disable no-unused-imports */ // https://github.com/pinterest/ktlint/issues/937
import org.mockito.Mockito.`when` as mockWhen
/* ktlint-enable unused-imports */
diff --git a/navigation/navigation-dynamic-features-runtime/src/test/java/androidx/navigation/dynamicfeatures/DynamicInstallManagerTest.kt b/navigation/navigation-dynamic-features-runtime/src/test/java/androidx/navigation/dynamicfeatures/DynamicInstallManagerTest.kt
index deda0ab..9e0ac66 100644
--- a/navigation/navigation-dynamic-features-runtime/src/test/java/androidx/navigation/dynamicfeatures/DynamicInstallManagerTest.kt
+++ b/navigation/navigation-dynamic-features-runtime/src/test/java/androidx/navigation/dynamicfeatures/DynamicInstallManagerTest.kt
@@ -22,11 +22,9 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-/* ktlint-disable no-unused-imports */ // https://github.com/pinterest/ktlint/issues/937
-import org.mockito.Mockito.`when` as mockWhen
-/* ktlint-enable unused-imports */
import org.mockito.Mockito.mock
import org.mockito.Mockito.spy
+import org.mockito.Mockito.`when` as mockWhen
@RunWith(JUnit4::class)
public class DynamicInstallManagerTest {
diff --git a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
index dcc0f5c..8b35f7b 100644
--- a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
+++ b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
@@ -610,6 +610,23 @@
@UiThreadTest
@Test
+ fun testNavigateNullGraph() {
+ val navController = createNavController()
+ val deepLinkRequest = NavDeepLinkRequest.Builder.fromUri(
+ Uri.parse("android-app://androidx.navigation.test/destination")
+ ).build()
+
+ val expected = assertFailsWith<IllegalArgumentException> {
+ navController.navigate(deepLinkRequest)
+ }
+ assertThat(expected.message).isEqualTo(
+ "Cannot navigate to $deepLinkRequest. Navigation graph has not " +
+ "been set for NavController $navController."
+ )
+ }
+
+ @UiThreadTest
+ @Test
fun testInvalidNavigateViaDeepLink() {
val navController = createNavController()
navController.setGraph(R.navigation.nav_simple)
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 8486793..be6eafb 100644
--- a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
+++ b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
@@ -1772,6 +1772,10 @@
navOptions: NavOptions?,
navigatorExtras: Navigator.Extras?
) {
+ requireNotNull(_graph) {
+ "Cannot navigate to $request. Navigation graph has not been set for " +
+ "NavController $this."
+ }
val deepLinkMatch = _graph!!.matchDeepLink(request)
if (deepLinkMatch != null) {
val destination = deepLinkMatch.destination
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/PagingData.kt b/paging/paging-common/src/main/kotlin/androidx/paging/PagingData.kt
index c14bb57..8ff3d51 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/PagingData.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/PagingData.kt
@@ -115,6 +115,15 @@
),
uiReceiver = NOOP_UI_RECEIVER,
hintReceiver = NOOP_HINT_RECEIVER,
+ cachedPageEvent = {
+ PageEvent.Insert.Refresh(
+ pages = listOf(TransformablePage(0, data)),
+ placeholdersBefore = 0,
+ placeholdersAfter = 0,
+ sourceLoadStates = LoadStates.IDLE,
+ mediatorLoadStates = null
+ )
+ }
)
/**
@@ -143,6 +152,15 @@
),
uiReceiver = NOOP_UI_RECEIVER,
hintReceiver = NOOP_HINT_RECEIVER,
+ cachedPageEvent = {
+ PageEvent.Insert.Refresh(
+ pages = listOf(TransformablePage(0, data)),
+ placeholdersBefore = 0,
+ placeholdersAfter = 0,
+ sourceLoadStates = sourceLoadStates,
+ mediatorLoadStates = mediatorLoadStates
+ )
+ }
)
}
diff --git a/paging/paging-compose/build.gradle b/paging/paging-compose/build.gradle
index 918280d..d31e914 100644
--- a/paging/paging-compose/build.gradle
+++ b/paging/paging-compose/build.gradle
@@ -32,6 +32,7 @@
api("androidx.compose.runtime:runtime:1.2.1")
androidTestImplementation(projectOrArtifact(":compose:ui:ui-test-junit4"))
+ androidTestImplementation projectOrArtifact(":compose:ui:ui-tooling")
androidTestImplementation(project(":compose:test-utils"))
androidTestImplementation(projectOrArtifact(":internal-testutils-paging"))
androidTestImplementation(libs.testRunner)
diff --git a/paging/paging-compose/samples/build.gradle b/paging/paging-compose/samples/build.gradle
index 243f2c3..6fd15b4 100644
--- a/paging/paging-compose/samples/build.gradle
+++ b/paging/paging-compose/samples/build.gradle
@@ -29,6 +29,7 @@
compileOnly(projectOrArtifact(":annotation:annotation-sampled"))
implementation(projectOrArtifact(":compose:foundation:foundation"))
implementation(projectOrArtifact(":compose:material:material"))
+ implementation projectOrArtifact(":compose:ui:ui-tooling")
implementation(project(":paging:paging-compose"))
}
diff --git a/paging/paging-compose/samples/src/main/java/androidx/paging/compose/samples/PagingPreviewSample.kt b/paging/paging-compose/samples/src/main/java/androidx/paging/compose/samples/PagingPreviewSample.kt
new file mode 100644
index 0000000..c05f075
--- /dev/null
+++ b/paging/paging-compose/samples/src/main/java/androidx/paging/compose/samples/PagingPreviewSample.kt
@@ -0,0 +1,70 @@
+/*
+ * 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.paging.compose.samples
+
+import androidx.annotation.Sampled
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.sp
+import androidx.paging.PagingData
+import androidx.paging.compose.collectAsLazyPagingItems
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
+
+@Sampled
+@Preview
+@Composable
+fun PagingPreview() {
+ /**
+ * The composable that displays data from LazyPagingItems.
+ *
+ * This composable is inlined only for the purposes of this sample. In production code,
+ * this function should be its own top-level function.
+ */
+ @Composable
+ fun DisplayPaging(flow: Flow<PagingData<String>>) {
+ // Flow of real data i.e. flow from a ViewModel, or flow of fake data i.e. from a Preview.
+ val lazyPagingItems = flow.collectAsLazyPagingItems()
+ LazyColumn(modifier = Modifier
+ .fillMaxSize()
+ .background(Color.Red)) {
+ items(count = lazyPagingItems.itemCount) { index ->
+ val item = lazyPagingItems[index]
+ Text(text = "$item", fontSize = 35.sp, color = Color.Black)
+ }
+ }
+ }
+
+ /**
+ * The preview function should be responsible for creating the fake data and passing it to the
+ * function that displays it.
+ */
+ // create list of fake data for preview
+ val fakeData = List(10) { "preview item $it" }
+ // create pagingData from a list of fake data
+ val pagingData = PagingData.from(fakeData)
+ // pass pagingData containing fake data to a MutableStateFlow
+ val fakeDataFlow = MutableStateFlow(pagingData)
+ // pass flow to composable
+ DisplayPaging(flow = fakeDataFlow)
+}
\ No newline at end of file
diff --git a/paging/paging-compose/src/androidTest/java/androidx/paging/compose/LazyPagingItemsPreviewTest.kt b/paging/paging-compose/src/androidTest/java/androidx/paging/compose/LazyPagingItemsPreviewTest.kt
new file mode 100644
index 0000000..7cfba6e
--- /dev/null
+++ b/paging/paging-compose/src/androidTest/java/androidx/paging/compose/LazyPagingItemsPreviewTest.kt
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.paging.compose
+
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalInspectionMode
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.junit4.createAndroidComposeRule
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.tooling.PreviewActivity
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.paging.PagingData
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.test.StandardTestDispatcher
+import org.junit.Rule
+import org.junit.Test
+
+class LazyPagingItemsPreviewTest {
+
+ @get:Rule
+ val composeTestRule = createAndroidComposeRule<PreviewActivity>()
+
+ @Test
+ fun pagingPreviewTest() {
+ composeTestRule.setContent {
+ PagingPreview()
+ }
+ for (i in 0..9) {
+ composeTestRule.onNodeWithTag("$i")
+ .assertIsDisplayed()
+ }
+ }
+
+ @Test
+ fun emptyPreview() {
+ composeTestRule.setContent {
+ EmptyPreview()
+ }
+ composeTestRule.onNodeWithTag("0")
+ .assertDoesNotExist()
+ }
+}
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@Preview
+@Composable
+fun PagingPreview() {
+ val data = List(50) { it }
+ val flow = MutableStateFlow(PagingData.from(data))
+ CompositionLocalProvider(
+ LocalInspectionMode provides true,
+ ) {
+ // Use StandardTestDispatcher so we don't start collecting on PagingData
+ val lazyPagingItems = flow.collectAsLazyPagingItems(StandardTestDispatcher())
+ LazyColumn(Modifier.height(500.dp)) {
+ items(count = lazyPagingItems.itemCount) { index ->
+ val item = lazyPagingItems[index]
+ Spacer(Modifier.height(50.dp).fillParentMaxWidth().testTag("$item"))
+ }
+ }
+ }
+}
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@Preview
+@Composable
+fun EmptyPreview() {
+ val data = emptyList<Int>()
+ val flow = MutableStateFlow(PagingData.from(data))
+ CompositionLocalProvider(
+ LocalInspectionMode provides true,
+ ) {
+ // Use StandardTestDispatcher so we don't start collecting on PagingData
+ val lazyPagingItems = flow.collectAsLazyPagingItems(StandardTestDispatcher())
+ LazyColumn(Modifier.height(500.dp)) {
+ items(count = lazyPagingItems.itemCount) { index ->
+ val item = lazyPagingItems[index]
+ Spacer(Modifier.height(50.dp).fillParentMaxWidth().testTag("$item"))
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/paging/paging-compose/src/main/java/androidx/paging/compose/LazyPagingItems.kt b/paging/paging-compose/src/main/java/androidx/paging/compose/LazyPagingItems.kt
index 81a6901..0c0082d 100644
--- a/paging/paging-compose/src/main/java/androidx/paging/compose/LazyPagingItems.kt
+++ b/paging/paging-compose/src/main/java/androidx/paging/compose/LazyPagingItems.kt
@@ -52,6 +52,11 @@
* This instance can be used for Lazy foundations such as [LazyListScope.items] to display data
* received from the [Flow] of [PagingData].
*
+ * Previewing [LazyPagingItems] is supported on a list of mock data. See sample for how to preview
+ * mock data.
+ *
+ * @sample androidx.paging.compose.samples.PagingPreview
+ *
* @param T the type of value used by [PagingData].
*/
public class LazyPagingItems<T : Any> internal constructor(
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt
index 3c40caa0..4c4c071 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt
@@ -225,7 +225,7 @@
class NonAnnotatedClass
"""
), Source.java(
- "com/mysdk/NonAnnotatedJavaClass.java", """
+ "com/mysdk/NonAnnotatedJavaClass", """
package com.mysdk;
class NonAnnotatedJavaClass {}
"""
@@ -265,7 +265,7 @@
@Test
fun nonKotlinAnnotatedInterface_throws() {
val source = Source.java(
- "com/mysdk/MySdk.java", """
+ "com/mysdk/MySdk", """
package com.mysdk;
import androidx.privacysandbox.tools.PrivacySandboxService;
@PrivacySandboxService
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/Source.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/Source.kt
index c62cfab..4860763 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/Source.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/Source.kt
@@ -79,6 +79,9 @@
@Language("java")
code: String
): Source {
+ require(!qName.endsWith(".java")) {
+ "Please exclude extension `.java` for Java sources."
+ }
return JavaSource(
qName,
code
@@ -90,6 +93,9 @@
@Language("kotlin")
code: String
): Source {
+ require(filePath.endsWith(".kt")) {
+ "Please include extension `.kt` for Kotlin sources."
+ }
return KotlinSource(
filePath,
code
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/TestKotlinCompiler.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/TestKotlinCompiler.kt
index 81e443e..8287cfd 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/TestKotlinCompiler.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/TestKotlinCompiler.kt
@@ -101,7 +101,7 @@
if (hasKotlinSource) return this
return copy(
sources = sources + Source.kotlin(
- "SyntheticSource",
+ "SyntheticSource.kt",
code = """
package xprocessing.generated
class SyntheticKotlinSource
diff --git a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticsTest.kt b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticsTest.kt
index 7ded92a..cf0ef44 100644
--- a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticsTest.kt
+++ b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticsTest.kt
@@ -185,7 +185,7 @@
@Test
fun cleanKotlinCompilationHasNoWarnings() {
val kotlinSource = Source.kotlin(
- "Subject",
+ "Subject.kt",
"""
package foo.bar
class Subject {
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/KspClassFileUtilityTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/KspClassFileUtilityTest.kt
index 21395f6..a2b2895 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/KspClassFileUtilityTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/KspClassFileUtilityTest.kt
@@ -66,8 +66,8 @@
@Test
fun outOfOrderJava_fields() {
- val libSource = Source.kotlin(
- "JavaClass.java",
+ val libSource = Source.java(
+ "JavaClass",
"""
class JavaClass {
String b;
@@ -116,8 +116,8 @@
@Test
fun outOfOrderJava_methods() {
- val libSource = Source.kotlin(
- "JavaClass.java",
+ val libSource = Source.java(
+ "JavaClass",
"""
class JavaClass {
String b() { return ""; }
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationBoxTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationBoxTest.kt
index ad37a87..7a761a0 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationBoxTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationBoxTest.kt
@@ -436,7 +436,7 @@
""".trimIndent()
)
val javaSrc = Source.java(
- "JavaClass.java",
+ "JavaClass",
"""
import androidx.room.compiler.processing.testcode.JavaAnnotationWithDefaults;
@JavaAnnotationWithDefaults
@@ -499,7 +499,7 @@
@Test
fun javaPrimitiveArray() {
val javaSrc = Source.java(
- "JavaSubject.java",
+ "JavaSubject",
"""
import androidx.room.compiler.processing.testcode.*;
class JavaSubject {
@@ -592,7 +592,7 @@
@Test
fun javaEnum() {
val javaSrc = Source.java(
- "JavaSubject.java",
+ "JavaSubject",
"""
import androidx.room.compiler.processing.testcode.*;
class JavaSubject {
@@ -632,7 +632,7 @@
@Test
fun javaEnumArray() {
val javaSrc = Source.java(
- "JavaSubject.java",
+ "JavaSubject",
"""
import androidx.room.compiler.processing.testcode.*;
class JavaSubject {
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationTest.kt
index 973e82a..976ab4f 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationTest.kt
@@ -598,7 +598,7 @@
""".trimIndent()
)
val javaSrc = Source.java(
- "JavaClass.java",
+ "JavaClass",
"""
import androidx.room.compiler.processing.testcode.JavaAnnotationWithDefaults;
@JavaAnnotationWithDefaults
@@ -681,7 +681,7 @@
fun javaPrimitiveArray() {
// TODO: expand this test for other primitive types: 179081610
val javaSrc = Source.java(
- "JavaSubject.java",
+ "JavaSubject",
"""
import androidx.room.compiler.processing.testcode.*;
class JavaSubject {
@@ -720,7 +720,7 @@
@Test
fun javaEnum() {
val javaSrc = Source.java(
- "JavaSubject.java",
+ "JavaSubject",
"""
import androidx.room.compiler.processing.testcode.*;
class JavaSubject {
@@ -759,7 +759,7 @@
@Test
fun javaEnumArray() {
val javaSrc = Source.java(
- "JavaSubject.java",
+ "JavaSubject",
"""
import androidx.room.compiler.processing.testcode.*;
class JavaSubject {
@@ -1151,7 +1151,7 @@
""".trimIndent()
)
val javaSource = Source.java(
- "foo.bar.Subject.java",
+ "foo.bar.Subject",
"""
package foo.bar;
import java.lang.annotation.ElementType;
@@ -1232,7 +1232,7 @@
""".trimIndent()
)
val javaSource = Source.java(
- "foo.bar.Subject.java",
+ "foo.bar.Subject",
"""
package foo.bar;
import java.lang.annotation.ElementType;
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt
index bc037bc..4c88042 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt
@@ -44,7 +44,7 @@
""".trimIndent()
),
Source.java(
- "JavaClass.java",
+ "JavaClass",
"""
abstract class JavaClass<T> {
JavaClass(T t) {}
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XMessagerTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XMessagerTest.kt
index 4091a00..c540af4 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XMessagerTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XMessagerTest.kt
@@ -31,7 +31,7 @@
runProcessorTest(
sources = listOf(
Source.java(
- "Foo.java",
+ "Foo",
"""
class Foo {}
""".trimIndent()
@@ -56,7 +56,7 @@
runProcessorTest(
sources = listOf(
Source.java(
- "Foo.java",
+ "Foo",
"""
class Foo {}
""".trimIndent()
@@ -80,7 +80,7 @@
runProcessorTest(
sources = listOf(
Source.java(
- "Foo.java",
+ "Foo",
"""
class Foo {}
""".trimIndent()
@@ -104,7 +104,7 @@
runProcessorTest(
sources = listOf(
Source.java(
- "Foo.java",
+ "Foo",
"""
class Foo {}
""".trimIndent()
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XNullabilityTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XNullabilityTest.kt
index 4786cff..313e735c 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XNullabilityTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XNullabilityTest.kt
@@ -385,7 +385,7 @@
@Test
fun makeNullable_void() {
val src = Source.java(
- "Foo.java",
+ "Foo",
"""
class Foo {
void subject() {}
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XProcessingEnvTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XProcessingEnvTest.kt
index 0d60682..33ff8fc 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XProcessingEnvTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XProcessingEnvTest.kt
@@ -223,7 +223,7 @@
@Test
fun errorLogFailsCompilation() {
val src = Source.java(
- "Foo.java",
+ "Foo",
"""
class Foo {}
""".trimIndent()
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XTypeElementTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XTypeElementTest.kt
index 134a9c2..0e44884 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XTypeElementTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XTypeElementTest.kt
@@ -426,7 +426,7 @@
""".trimIndent()
)
val javaSrc = Source.java(
- "Bar.java",
+ "Bar",
"""
class JavaClass {}
interface JavaInterface {}
@@ -728,7 +728,7 @@
runTest(
listOf(
Source.java(
- "JavaSubject.java",
+ "JavaSubject",
"""
class JavaSubject {
int myField;
@@ -752,7 +752,7 @@
)
),
) { invocation ->
- listOf("JavaSubject", "KotlinSubject",).map {
+ listOf("JavaSubject", "KotlinSubject").map {
invocation.processingEnv.requireTypeElement(it)
}.forEach { subject ->
val methods = subject.getDeclaredMethods()
@@ -2075,6 +2075,272 @@
}
}
+ @Test
+ fun javaFieldDescriptors() {
+ runTest(
+ sources = listOf(
+ Source.java(
+ "TestClassA",
+ """
+ import java.util.List;
+ class TestClassA<T> {
+ int field1;
+ String field2;
+ T field3;
+ List<String> field4;
+ }
+ """.trimIndent()
+ )
+ )
+ ) { invocation ->
+ val foo = invocation.processingEnv.requireTypeElement("TestClassA")
+ assertThat(foo.getDeclaredFields().map { it.jvmDescriptor }.toList())
+ .containsExactly(
+ "field1:I",
+ "field2:Ljava/lang/String;",
+ "field3:Ljava/lang/Object;",
+ "field4:Ljava/util/List;"
+ )
+ }
+ }
+
+ @Test
+ fun javaMethodDescriptorsPrimitives() {
+ runTest(
+ sources = listOf(
+ Source.java(
+ "TestClassB",
+ """
+ class TestClassB<T> {
+ void method1(boolean yesOrNo, int number) {}
+
+ byte method2(char letter) {
+ return 0;
+ }
+
+ void method3(double realNumber1, float realNummber2) {}
+
+ void method4(long bigNumber, short littlerNumber) {}
+ }
+ """.trimIndent()
+ )
+ )
+ ) { invocation ->
+ val foo = invocation.processingEnv.requireTypeElement("TestClassB")
+ assertThat(foo.getDeclaredMethods().map { it.jvmDescriptor }.toList())
+ .containsExactly(
+ "method1(ZI)V", "method2(C)B", "method3(DF)V", "method4(JS)V"
+ )
+ }
+ }
+
+ @Test
+ fun javaMethodDescriptorsJavaTypes() {
+ runTest(
+ sources = listOf(
+ Source.java(
+ "TestClassC",
+ """
+ import java.util.*;
+ class TestClassC<T> {
+ void method1(Object something) {}
+
+ Object method2() {
+ return null;
+ }
+
+ List<String> method3(ArrayList<Integer> list) {
+ return null;
+ }
+
+ Map<String, Object> method4() {
+ return null;
+ }
+ }
+ """.trimIndent()
+ )
+ )
+ ) { invocation ->
+ val foo = invocation.processingEnv.requireTypeElement("TestClassC")
+ assertThat(foo.getDeclaredMethods().map { it.jvmDescriptor }.toList())
+ .containsExactly(
+ "method1(Ljava/lang/Object;)V",
+ "method2()Ljava/lang/Object;",
+ "method3(Ljava/util/ArrayList;)Ljava/util/List;",
+ "method4()Ljava/util/Map;"
+ )
+ }
+ }
+
+ @Test
+ fun javaMethodDescriptorsTestTypes() {
+ runTest(
+ sources = listOf(
+ Source.java(
+ "TestClassD",
+ """
+ class TestDataClass {}
+ class TestClassD<T> {
+ void method1(TestDataClass data) {}
+
+ TestDataClass method2() {
+ return null;
+ }
+ }
+ """.trimIndent()
+ )
+ )
+ ) { invocation ->
+ val foo = invocation.processingEnv.requireTypeElement("TestClassD")
+ assertThat(foo.getDeclaredMethods().map { it.jvmDescriptor }.toList())
+ .containsExactly(
+ "method1(LTestDataClass;)V",
+ "method2()LTestDataClass;"
+ )
+ }
+ }
+
+ @Test
+ fun javaMethodDescriptorsArrays() {
+ runTest(
+ sources = listOf(
+ Source.java(
+ "TestClassE",
+ """
+ class TestDataClass {}
+ class TestClassE<T> {
+ void method1(TestDataClass[] data) {}
+
+ TestDataClass[] method2() {
+ return null;
+ }
+
+ void method3(int[] array) {}
+
+ void method4(int... array) {}
+ }
+ """.trimIndent()
+ )
+ )
+ ) { invocation ->
+ val foo = invocation.processingEnv.requireTypeElement("TestClassE")
+ assertThat(foo.getDeclaredMethods().map { it.jvmDescriptor }.toList())
+ .containsExactly(
+ "method1([LTestDataClass;)V",
+ "method2()[LTestDataClass;",
+ "method3([I)V",
+ "method4([I)V"
+ )
+ }
+ }
+
+ @Test
+ fun javaMethodDescriptorsInnerTestType() {
+ runTest(
+ // KSP can't see nested types if the filename does not match the name of the
+ // enclosing class.
+ sources = listOf(
+ Source.java(
+ "TestDataClass",
+ """
+ public class TestDataClass {
+ class MemberInnerData {}
+
+ static class StaticInnerData {}
+
+ enum EnumData {
+ VALUE1,
+ VALUE2
+ }
+ }
+ """.trimIndent()
+ ),
+ Source.java(
+ "TestClassF",
+ """
+ class TestClassF<T> {
+ void method1(TestDataClass.MemberInnerData data) {}
+
+ void method2(TestDataClass.StaticInnerData data) {}
+
+ void method3(TestDataClass.EnumData enumData) {}
+
+ TestDataClass.StaticInnerData method4() {
+ return null;
+ }
+ }
+ """.trimIndent()
+ )
+ )
+ ) { invocation ->
+ val foo = invocation.processingEnv.requireTypeElement("TestClassF")
+ assertThat(foo.getDeclaredMethods().map { it.jvmDescriptor }.toList())
+ .containsExactly(
+ "method1(LTestDataClass\$MemberInnerData;)V",
+ "method2(LTestDataClass\$StaticInnerData;)V",
+ "method3(LTestDataClass\$EnumData;)V",
+ "method4()LTestDataClass\$StaticInnerData;"
+ )
+ }
+ }
+
+ @Test
+ fun methodDescriptorsErasure() {
+ runTest(
+ sources = listOf(
+ Source.java(
+ "TestClassG",
+ """
+ import java.util.*;
+ class TestClassG<T> {
+ void method1(T something) {}
+ T method2() {
+ return null;
+ }
+ List<? extends String> method3() {
+ return null;
+ }
+ Map<T, String> method4() {
+ return null;
+ }
+ ArrayList<Map<T, String>> method5() {
+ return null;
+ }
+ static <I, O extends I> O method6(I input) {
+ return null;
+ }
+ static <I, O extends String> O method7(I input) {
+ return null;
+ }
+ static <P extends Collection<String> & Comparable<String>> P method8() {
+ return null;
+ }
+ static <P extends String & List<Character>> P method9() {
+ return null;
+ }
+ }
+ """.trimIndent()
+ )
+ )
+ ) { invocation ->
+ val foo = invocation.processingEnv.requireTypeElement("TestClassG")
+ if (!invocation.isKsp) {
+ assertThat(foo.getDeclaredMethods().map { it.jvmDescriptor }.toList())
+ .containsExactly(
+ "method1(Ljava/lang/Object;)V",
+ "method2()Ljava/lang/Object;",
+ "method3()Ljava/util/List;",
+ "method4()Ljava/util/Map;",
+ "method5()Ljava/util/ArrayList;",
+ "method6(Ljava/lang/Object;)Ljava/lang/Object;",
+ "method7(Ljava/lang/Object;)Ljava/lang/String;",
+ "method8()Ljava/util/Collection;",
+ "method9()Ljava/lang/String;"
+ )
+ }
+ }
+ }
+
/**
* it is good to exclude methods coming from Object when testing as they differ between KSP
* and KAPT but irrelevant for Room.
diff --git a/settings.gradle b/settings.gradle
index aa1e705..9abd3a2 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -195,7 +195,8 @@
WEAR,
GLANCE,
TOOLS,
- KMP,
+ KMP, // All projects built as Kotlin Multi Platform (compose, datastore, collections, etc).
+ INFRAROGUE, // Projects built by playground team, mostly non-compose kmp.
CAMERA,
NATIVE,
WINDOW,
@@ -255,6 +256,9 @@
case "KMP":
filter.add(BuildType.KMP)
break
+ case "INFRAROGUE":
+ filter.add(BuildType.INFRAROGUE)
+ break
case "CAMERA":
filter.add(BuildType.CAMERA)
break
@@ -449,10 +453,10 @@
includeProject(":autofill:autofill", [BuildType.MAIN])
includeProject(":benchmark:benchmark-benchmark", "benchmark/benchmark", [BuildType.MAIN, BuildType.COMPOSE])
includeProject(":benchmark:benchmark-common")
-includeProject(":benchmark:benchmark-darwin", [BuildType.KMP])
-includeProject(":benchmark:benchmark-darwin-core", [BuildType.KMP])
-includeProject(":benchmark:benchmark-darwin-samples", [BuildType.KMP])
-includeProject(":benchmark:benchmark-darwin-gradle-plugin", [BuildType.KMP])
+includeProject(":benchmark:benchmark-darwin", [BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":benchmark:benchmark-darwin-core", [BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":benchmark:benchmark-darwin-samples", [BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":benchmark:benchmark-darwin-gradle-plugin", [BuildType.INFRAROGUE, BuildType.KMP])
includeProject(":benchmark:benchmark-gradle-plugin", "benchmark/gradle-plugin", [BuildType.MAIN])
includeProject(":benchmark:benchmark-baseline-profile-gradle-plugin", "benchmark/baseline-profile-gradle-plugin",[BuildType.MAIN])
includeProject(":benchmark:benchmark-junit4")
@@ -521,11 +525,11 @@
includeProject(":car:app:app-samples:showcase-mobile", "car/app/app-samples/showcase/mobile", [BuildType.MAIN])
includeProject(":car:app:app-testing", [BuildType.MAIN])
includeProject(":cardview:cardview", [BuildType.MAIN])
-includeProject(":collection:collection", [BuildType.MAIN, BuildType.KMP])
-includeProject(":collection:collection-benchmark", [BuildType.MAIN, BuildType.KMP])
-includeProject(":collection:collection-benchmark-kmp", [BuildType.MAIN, BuildType.KMP])
-includeProject(":collection:collection-ktx", [BuildType.MAIN, BuildType.KMP])
-includeProject(":collection:integration-tests:testapp", [BuildType.MAIN, BuildType.KMP])
+includeProject(":collection:collection", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":collection:collection-benchmark", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":collection:collection-benchmark-kmp", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":collection:collection-ktx", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":collection:integration-tests:testapp", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
includeProject(":compose:animation", [BuildType.COMPOSE])
includeProject(":compose:animation:animation", [BuildType.COMPOSE])
includeProject(":compose:animation:animation-lint", [BuildType.COMPOSE])
@@ -549,9 +553,9 @@
includeProject(":compose:compiler:compiler-daemon:integration-tests", [BuildType.COMPOSE])
if (isMultiplatformEnabled()) {
- includeProject(":compose:desktop", [BuildType.COMPOSE])
- includeProject(":compose:desktop:desktop", [BuildType.COMPOSE])
- includeProject(":compose:desktop:desktop:desktop-samples", "compose/desktop/desktop/samples", [BuildType.COMPOSE])
+ includeProject(":compose:desktop", [BuildType.COMPOSE, BuildType.KMP])
+ includeProject(":compose:desktop:desktop", [BuildType.COMPOSE, BuildType.KMP])
+ includeProject(":compose:desktop:desktop:desktop-samples", "compose/desktop/desktop/samples", [BuildType.COMPOSE, BuildType.KMP])
}
includeProject(":compose:foundation", [BuildType.COMPOSE])
includeProject(":compose:foundation:foundation", [BuildType.COMPOSE])
@@ -601,7 +605,7 @@
includeProject(":compose:material:material:material-samples", "compose/material/material/samples", [BuildType.COMPOSE])
includeProject(":compose:material3:material3:material3-samples", "compose/material3/material3/samples", [BuildType.COMPOSE])
includeProject(":compose:runtime", [BuildType.COMPOSE])
-includeProject(":compose:runtime:runtime", [BuildType.COMPOSE])
+includeProject(":compose:runtime:runtime", [BuildType.COMPOSE, BuildType.KMP])
includeProject(":compose:runtime:runtime-lint", [BuildType.COMPOSE])
includeProject(":compose:runtime:runtime-livedata", [BuildType.COMPOSE])
includeProject(":compose:runtime:runtime-livedata:runtime-livedata-samples", "compose/runtime/runtime-livedata/samples", [BuildType.COMPOSE])
@@ -687,20 +691,20 @@
includeProject(":cursoradapter:cursoradapter", [BuildType.MAIN])
includeProject(":customview:customview", [BuildType.MAIN])
includeProject(":customview:customview-poolingcontainer", [BuildType.MAIN, BuildType.COMPOSE])
-includeProject(":datastore:datastore", [BuildType.MAIN, BuildType.KMP])
-includeProject(":datastore:datastore-benchmark", [BuildType.MAIN, BuildType.KMP])
-includeProject(":datastore:datastore-core", [BuildType.MAIN, BuildType.KMP])
-includeProject(":datastore:datastore-core-okio", [BuildType.MAIN, BuildType.KMP])
+includeProject(":datastore:datastore", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":datastore:datastore-benchmark", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":datastore:datastore-core", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":datastore:datastore-core-okio", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
includeProject(":datastore:datastore-compose-samples", [BuildType.COMPOSE])
-includeProject(":datastore:datastore-preferences", [BuildType.MAIN, BuildType.KMP])
-includeProject(":datastore:datastore-preferences-core", [BuildType.MAIN, BuildType.KMP])
-includeProject(":datastore:datastore-preferences-proto", [BuildType.MAIN, BuildType.KMP])
-includeProject(":datastore:datastore-preferences-rxjava2", [BuildType.MAIN, BuildType.KMP])
-includeProject(":datastore:datastore-preferences-rxjava3", [BuildType.MAIN, BuildType.KMP])
-includeProject(":datastore:datastore-proto", [BuildType.MAIN, BuildType.KMP])
-includeProject(":datastore:datastore-rxjava2", [BuildType.MAIN, BuildType.KMP])
-includeProject(":datastore:datastore-rxjava3", [BuildType.MAIN, BuildType.KMP])
-includeProject(":datastore:datastore-sampleapp", [BuildType.MAIN, BuildType.KMP])
+includeProject(":datastore:datastore-preferences", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":datastore:datastore-preferences-core", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":datastore:datastore-preferences-proto", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":datastore:datastore-preferences-rxjava2", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":datastore:datastore-preferences-rxjava3", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":datastore:datastore-proto", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":datastore:datastore-rxjava2", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":datastore:datastore-rxjava3", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":datastore:datastore-sampleapp", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
includeProject(":documentfile:documentfile", [BuildType.MAIN])
includeProject(":draganddrop:draganddrop", [BuildType.MAIN])
includeProject(":draganddrop:integration-tests:sampleapp", [BuildType.MAIN])
@@ -1119,14 +1123,14 @@
/////////////////////////////
includeProject(":internal-testutils-common", "testutils/testutils-common", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN])
-includeProject(":internal-testutils-datastore", "testutils/testutils-datastore", [BuildType.MAIN, BuildType.KMP])
-includeProject(":internal-testutils-runtime", "testutils/testutils-runtime", [BuildType.MAIN, BuildType.FLAN, BuildType.COMPOSE, BuildType.MEDIA])
+includeProject(":internal-testutils-datastore", "testutils/testutils-datastore", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP])
+includeProject(":internal-testutils-runtime", "testutils/testutils-runtime", [BuildType.MAIN, BuildType.FLAN, BuildType.COMPOSE, BuildType.MEDIA, BuildType.WEAR])
includeProject(":internal-testutils-appcompat", "testutils/testutils-appcompat", [BuildType.MAIN])
includeProject(":internal-testutils-espresso", "testutils/testutils-espresso", [BuildType.MAIN, BuildType.COMPOSE])
includeProject(":internal-testutils-fonts", "testutils/testutils-fonts", [BuildType.MAIN, BuildType.GLANCE, BuildType.MEDIA, BuildType.FLAN, BuildType.COMPOSE])
includeProject(":internal-testutils-truth", "testutils/testutils-truth")
includeProject(":internal-testutils-ktx", "testutils/testutils-ktx")
-includeProject(":internal-testutils-kmp", "testutils/testutils-kmp", [BuildType.MAIN, BuildType.KMP, BuildType.COMPOSE])
+includeProject(":internal-testutils-kmp", "testutils/testutils-kmp", [BuildType.MAIN, BuildType.INFRAROGUE, BuildType.KMP, BuildType.COMPOSE])
includeProject(":internal-testutils-macrobenchmark", "testutils/testutils-macrobenchmark", [BuildType.MAIN, BuildType.COMPOSE])
includeProject(":internal-testutils-navigation", "testutils/testutils-navigation", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN])
includeProject(":internal-testutils-paging", "testutils/testutils-paging", [BuildType.MAIN, BuildType.COMPOSE])
@@ -1180,7 +1184,7 @@
includeProject(":docs-public")
}
-includeProject(":docs-kmp", [BuildType.KMP])
+includeProject(":docs-kmp", [BuildType.KMP, BuildType.INFRAROGUE])
// placeholder test project that has a test for each size to ensure that at least one test is run
// for each size and test runner is happy when there is nothing to test.
includeProject(":placeholder-tests")
diff --git a/slice/slice-view/src/main/res/values-da/strings.xml b/slice/slice-view/src/main/res/values-da/strings.xml
index 1491d22..379bfdb 100644
--- a/slice/slice-view/src/main/res/values-da/strings.xml
+++ b/slice/slice-view/src/main/res/values-da/strings.xml
@@ -30,8 +30,8 @@
<item quantity="other">For <xliff:g id="ID_2">%d</xliff:g> år siden</item>
</plurals>
<plurals name="abc_slice_duration_days" formatted="false" msgid="8356547162075064530">
- <item quantity="one">For <xliff:g id="ID_2">%d</xliff:g> dag siden</item>
- <item quantity="other">For <xliff:g id="ID_2">%d</xliff:g> dage siden</item>
+ <item quantity="one"><xliff:g id="ID_2">%d</xliff:g> dag siden</item>
+ <item quantity="other"><xliff:g id="ID_2">%d</xliff:g> dage siden</item>
</plurals>
<string name="abc_slice_error" msgid="1794214973158263497">"Der kunne ikke oprettes forbindelse"</string>
</resources>
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt
index 02496f3..fc177b9 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt
@@ -59,12 +59,17 @@
const val HYPHENATION_FREQUENCY_NONE = Layout.HYPHENATION_FREQUENCY_NONE
const val HYPHENATION_FREQUENCY_NORMAL = Layout.HYPHENATION_FREQUENCY_NORMAL
const val HYPHENATION_FREQUENCY_NORMAL_FAST = Layout.HYPHENATION_FREQUENCY_NORMAL_FAST
+ const val HYPHENATION_FREQUENCY_FULL = Layout.HYPHENATION_FREQUENCY_FULL
+ const val HYPHENATION_FREQUENCY_FULL_FAST = Layout.HYPHENATION_FREQUENCY_FULL_FAST
@Retention(AnnotationRetention.SOURCE)
@IntDef(
+ HYPHENATION_FREQUENCY_NONE,
HYPHENATION_FREQUENCY_NORMAL,
HYPHENATION_FREQUENCY_NORMAL_FAST,
- HYPHENATION_FREQUENCY_NONE
+ HYPHENATION_FREQUENCY_FULL,
+ HYPHENATION_FREQUENCY_FULL_FAST
+
)
internal annotation class HyphenationFrequency
diff --git a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FeaturedCarousel.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FeaturedCarousel.kt
index 6f6d535..855ac02 100644
--- a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FeaturedCarousel.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/FeaturedCarousel.kt
@@ -16,6 +16,13 @@
package androidx.tv.integration.playground
+import androidx.compose.animation.ExperimentalAnimationApi
+import androidx.compose.animation.core.tween
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
+import androidx.compose.animation.slideInVertically
+import androidx.compose.animation.slideOutHorizontally
+import androidx.compose.animation.togetherWith
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.focusable
@@ -88,7 +95,7 @@
}
}
-@OptIn(ExperimentalTvMaterial3Api::class)
+@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalAnimationApi::class)
@Composable
internal fun FeaturedCarousel(modifier: Modifier = Modifier) {
val backgrounds = listOf(
@@ -117,33 +124,31 @@
.align(Alignment.BottomEnd)
.padding(16.dp),
)
- }
+ },
+ contentTransformStartToEnd =
+ fadeIn(tween(1000)).togetherWith(fadeOut(tween(1000))),
+ contentTransformEndToStart =
+ fadeIn(tween(1000)).togetherWith(fadeOut(tween(1000)))
) { itemIndex ->
- CarouselItem(
- modifier = Modifier.semantics {
- contentDescription = "Featured Content"
- },
- background = {
- Box(
- modifier = Modifier
- .background(backgrounds[itemIndex])
- .fillMaxSize()
- )
- },
+ Box(
+ modifier = Modifier
+ .background(backgrounds[itemIndex])
+ .fillMaxSize()
+ .semantics { contentDescription = "Featured Content" }
) {
- Box(
+ Column(
modifier = Modifier
- .fillMaxSize()
- .padding(20.dp),
- contentAlignment = Alignment.BottomStart
+ .padding(start = 50.dp, top = 100.dp)
+ .animateEnterExit(
+ enter = slideInVertically(animationSpec = tween(1000)),
+ exit = slideOutHorizontally(animationSpec = tween(1000))
+ )
) {
- Column {
- Text(text = "This is sample text content.", color = Color.Yellow)
- Text(text = "Sample description.", color = Color.Yellow)
- Row {
- OverlayButton(text = "Play")
- OverlayButton(text = "Add to Watchlist")
- }
+ Text(text = "This is sample text content.", color = Color.Yellow)
+ Text(text = "Sample description of slide ${itemIndex + 1}.", color = Color.Yellow)
+ Row {
+ OverlayButton(text = "Play")
+ OverlayButton(text = "Add to Watchlist")
}
}
}
diff --git a/tv/integration-tests/presentation/README.md b/tv/integration-tests/presentation/README.md
index eb86b24..9c46867 100644
--- a/tv/integration-tests/presentation/README.md
+++ b/tv/integration-tests/presentation/README.md
@@ -3,12 +3,11 @@
## Setup
* Uncomment the `coil` and `gson` libraries dependency additions from the `build.gradle` file.
+* Uncomment the function content and imports from
+ `presentation/src/main/java/androidx/tv/integration/presentation/ExternalLibs.kt` file
* Create the `data.json` file in `presentation/src/main/assets` directory and add the content from
this link: go/compose-tv-presentation-app-data
> If you are not a Googler and want to use this app for
> testing, you will have to create the `data.json` file by following the schema mentioned in the
`Data.kt` file
-
-* Uncomment the function content and imports from
- `presentation/src/main/java/androidx/tv/integration/presentation/ExternalLibs.kt` file
diff --git a/tv/integration-tests/presentation/src/main/java/androidx/tv/integration/presentation/FeaturedCarousel.kt b/tv/integration-tests/presentation/src/main/java/androidx/tv/integration/presentation/FeaturedCarousel.kt
index 33e5b16..94df400 100644
--- a/tv/integration-tests/presentation/src/main/java/androidx/tv/integration/presentation/FeaturedCarousel.kt
+++ b/tv/integration-tests/presentation/src/main/java/androidx/tv/integration/presentation/FeaturedCarousel.kt
@@ -16,6 +16,15 @@
package androidx.tv.integration.presentation
+import androidx.compose.animation.AnimatedContentScope
+import androidx.compose.animation.ExperimentalAnimationApi
+import androidx.compose.animation.core.tween
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
+import androidx.compose.animation.slideInHorizontally
+import androidx.compose.animation.slideOutHorizontally
+import androidx.compose.animation.togetherWith
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
@@ -32,7 +41,6 @@
import androidx.compose.ui.unit.sp
import androidx.tv.material3.Carousel
import androidx.tv.material3.CarouselDefaults
-import androidx.tv.material3.CarouselScope
import androidx.tv.material3.CarouselState
import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.Text
@@ -60,7 +68,11 @@
.align(Alignment.BottomEnd)
.padding(end = 58.dp, bottom = 16.dp),
)
- }
+ },
+ contentTransformEndToStart =
+ fadeIn(tween(1000)).togetherWith(fadeOut(tween(1000))),
+ contentTransformStartToEnd =
+ fadeIn(tween(1000)).togetherWith(fadeOut(tween(1000)))
) { itemIndex ->
val movie = movies[itemIndex]
@@ -80,22 +92,23 @@
}
}
-@OptIn(ExperimentalTvMaterial3Api::class)
+@OptIn(ExperimentalAnimationApi::class)
@Composable
-private fun CarouselScope.CarouselSlide(
+private fun AnimatedContentScope.CarouselSlide(
title: String,
description: String,
background: @Composable () -> Unit,
actions: @Composable () -> Unit
) {
- CarouselItem(
- background = {
- background()
- },
- modifier = Modifier
- ) {
+ Box {
+ background()
Column(
- modifier = Modifier.padding(start = 58.dp, top = 150.dp)
+ modifier = Modifier
+ .padding(start = 58.dp, top = 150.dp)
+ .animateEnterExit(
+ enter = slideInHorizontally(animationSpec = tween(1000)) { it / 2 },
+ exit = slideOutHorizontally(animationSpec = tween(1000))
+ )
) {
Text(
text = title,
diff --git a/tv/samples/src/main/java/androidx/tv/samples/CarouselSamples.kt b/tv/samples/src/main/java/androidx/tv/samples/CarouselSamples.kt
index aba7109..b356829 100644
--- a/tv/samples/src/main/java/androidx/tv/samples/CarouselSamples.kt
+++ b/tv/samples/src/main/java/androidx/tv/samples/CarouselSamples.kt
@@ -17,6 +17,13 @@
package androidx.tv.samples
import androidx.annotation.Sampled
+import androidx.compose.animation.ExperimentalAnimationApi
+import androidx.compose.animation.core.tween
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
+import androidx.compose.animation.slideInHorizontally
+import androidx.compose.animation.slideOutHorizontally
+import androidx.compose.animation.togetherWith
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Box
@@ -44,7 +51,7 @@
import androidx.tv.material3.CarouselState
import androidx.tv.material3.ExperimentalTvMaterial3Api
-@OptIn(ExperimentalTvMaterial3Api::class)
+@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalAnimationApi::class)
@Sampled
@Composable
fun SimpleCarousel() {
@@ -59,16 +66,16 @@
modifier = Modifier
.height(300.dp)
.fillMaxWidth(),
+ contentTransformEndToStart =
+ fadeIn(tween(1000)).togetherWith(fadeOut(tween(1000))),
+ contentTransformStartToEnd =
+ fadeIn(tween(1000)).togetherWith(fadeOut(tween(1000)))
) { itemIndex ->
- CarouselItem(
- background = {
- Box(
- modifier = Modifier
- .background(backgrounds[itemIndex])
- .border(2.dp, Color.White.copy(alpha = 0.5f))
- .fillMaxSize()
- )
- }
+ Box(
+ modifier = Modifier
+ .background(backgrounds[itemIndex])
+ .border(2.dp, Color.White.copy(alpha = 0.5f))
+ .fillMaxSize()
) {
var isFocused by remember { mutableStateOf(false) }
@@ -82,6 +89,13 @@
color = if (isFocused) Color.Red else Color.Transparent,
shape = RoundedCornerShape(50)
)
+ // Duration of animation here should be less than or equal to carousel's
+ // contentTransform duration to ensure the item below does not disappear
+ // abruptly.
+ .animateEnterExit(
+ enter = slideInHorizontally(animationSpec = tween(1000)) { it / 2 },
+ exit = slideOutHorizontally(animationSpec = tween(1000))
+ )
.padding(vertical = 2.dp, horizontal = 5.dp)
) {
Text(text = "Play")
@@ -90,7 +104,7 @@
}
}
-@OptIn(ExperimentalTvMaterial3Api::class)
+@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalAnimationApi::class)
@Sampled
@Composable
fun CarouselIndicatorWithRectangleShape() {
@@ -127,24 +141,30 @@
)
}
)
- }
+ },
+ contentTransformEndToStart =
+ fadeIn(tween(1000)).togetherWith(fadeOut(tween(1000))),
+ contentTransformStartToEnd =
+ fadeIn(tween(1000)).togetherWith(fadeOut(tween(1000)))
) { itemIndex ->
- CarouselItem(
- background = {
- Box(
- modifier = Modifier
- .background(backgrounds[itemIndex])
- .border(2.dp, Color.White.copy(alpha = 0.5f))
- .fillMaxSize()
- )
- }
+ Box(
+ modifier = Modifier
+ .background(backgrounds[itemIndex])
+ .border(2.dp, Color.White.copy(alpha = 0.5f))
+ .fillMaxSize()
) {
var isFocused by remember { mutableStateOf(false) }
-
Button(
onClick = { },
modifier = Modifier
.onFocusChanged { isFocused = it.isFocused }
+ // Duration of animation here should be less than or equal to carousel's
+ // contentTransform duration to ensure the item below does not disappear
+ // abruptly.
+ .animateEnterExit(
+ enter = slideInHorizontally(animationSpec = tween(1000)) { it / 2 },
+ exit = slideOutHorizontally(animationSpec = tween(1000))
+ )
.padding(40.dp)
.border(
width = 2.dp,
diff --git a/tv/tv-foundation/build.gradle b/tv/tv-foundation/build.gradle
index c193d0d..a53a44ee 100644
--- a/tv/tv-foundation/build.gradle
+++ b/tv/tv-foundation/build.gradle
@@ -30,7 +30,7 @@
dependencies {
api(libs.kotlinStdlib)
- def composeVersion = '1.4.0-rc01'
+ def composeVersion = '1.4.2'
implementation(libs.kotlinStdlibCommon)
implementation("androidx.profileinstaller:profileinstaller:1.3.0")
diff --git a/tv/tv-material/api/public_plus_experimental_current.txt b/tv/tv-material/api/public_plus_experimental_current.txt
index 12488a4..093044e 100644
--- a/tv/tv-material/api/public_plus_experimental_current.txt
+++ b/tv/tv-material/api/public_plus_experimental_current.txt
@@ -114,24 +114,8 @@
field public static final long TimeToDisplayItemMillis = 5000L; // 0x1388L
}
- @androidx.tv.material3.ExperimentalTvMaterial3Api public final class CarouselItemDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.animation.ContentTransform getContentTransformEndToStart();
- method @androidx.compose.runtime.Composable public androidx.compose.animation.ContentTransform getContentTransformLeftToRight();
- method @androidx.compose.runtime.Composable public androidx.compose.animation.ContentTransform getContentTransformRightToLeft();
- method @androidx.compose.runtime.Composable public androidx.compose.animation.ContentTransform getContentTransformStartToEnd();
- property @androidx.compose.runtime.Composable public final androidx.compose.animation.ContentTransform contentTransformEndToStart;
- property @androidx.compose.runtime.Composable public final androidx.compose.animation.ContentTransform contentTransformLeftToRight;
- property @androidx.compose.runtime.Composable public final androidx.compose.animation.ContentTransform contentTransformRightToLeft;
- property @androidx.compose.runtime.Composable public final androidx.compose.animation.ContentTransform contentTransformStartToEnd;
- field public static final androidx.tv.material3.CarouselItemDefaults INSTANCE;
- }
-
public final class CarouselKt {
- method @androidx.compose.runtime.Composable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Carousel(int itemCount, optional androidx.compose.ui.Modifier modifier, optional androidx.tv.material3.CarouselState carouselState, optional long autoScrollDurationMillis, optional androidx.compose.animation.ContentTransform contentTransformStartToEnd, optional androidx.compose.animation.ContentTransform contentTransformEndToStart, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> carouselIndicator, kotlin.jvm.functions.Function2<? super androidx.tv.material3.CarouselScope,? super java.lang.Integer,kotlin.Unit> content);
- }
-
- @androidx.tv.material3.ExperimentalTvMaterial3Api public final class CarouselScope {
- method @androidx.compose.runtime.Composable @androidx.tv.material3.ExperimentalTvMaterial3Api public void CarouselItem(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit> background, optional androidx.compose.animation.ContentTransform contentTransformStartToEnd, optional androidx.compose.animation.ContentTransform contentTransformEndToStart, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Carousel(int itemCount, optional androidx.compose.ui.Modifier modifier, optional androidx.tv.material3.CarouselState carouselState, optional long autoScrollDurationMillis, optional androidx.compose.animation.ContentTransform contentTransformStartToEnd, optional androidx.compose.animation.ContentTransform contentTransformEndToStart, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> carouselIndicator, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super java.lang.Integer,kotlin.Unit> content);
}
@androidx.compose.runtime.Stable @androidx.tv.material3.ExperimentalTvMaterial3Api public final class CarouselState {
diff --git a/tv/tv-material/build.gradle b/tv/tv-material/build.gradle
index 0b86754..334a3f1 100644
--- a/tv/tv-material/build.gradle
+++ b/tv/tv-material/build.gradle
@@ -27,19 +27,10 @@
dependencies {
api(libs.kotlinStdlib)
- def composeVersion = '1.4.0-rc01'
-
- api("androidx.annotation:annotation:1.5.0")
- api("androidx.compose.runtime:runtime:$composeVersion")
+ def composeVersion = '1.4.2'
api(project(":compose:animation:animation"))
- api("androidx.compose.ui:ui:$composeVersion")
- api("androidx.compose.foundation:foundation:$composeVersion")
- api("androidx.compose.foundation:foundation-layout:$composeVersion")
api("androidx.compose.material:material-icons-core:$composeVersion")
- api("androidx.compose.ui:ui-graphics:$composeVersion")
- api(project(":compose:ui:ui-text"))
- api("androidx.compose.ui:ui-util:$composeVersion")
api(project(":tv:tv-foundation"))
implementation(libs.kotlinStdlibCommon)
diff --git a/tv/tv-material/src/androidTest/java/androidx/tv/material3/CarouselScopeTest.kt b/tv/tv-material/src/androidTest/java/androidx/tv/material3/CarouselScopeTest.kt
deleted file mode 100644
index 2f80311..0000000
--- a/tv/tv-material/src/androidTest/java/androidx/tv/material3/CarouselScopeTest.kt
+++ /dev/null
@@ -1,121 +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.tv.material3
-
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.focusable
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.text.BasicText
-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.focus.onFocusChanged
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.input.key.NativeKeyEvent
-import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.semantics.SemanticsActions
-import androidx.compose.ui.test.assertIsFocused
-import androidx.compose.ui.test.junit4.createComposeRule
-import androidx.compose.ui.test.onNodeWithTag
-import androidx.compose.ui.test.performSemanticsAction
-import androidx.compose.ui.unit.dp
-import androidx.test.platform.app.InstrumentationRegistry
-import org.junit.Rule
-import org.junit.Test
-
-const val sampleButtonTag = "sample-button"
-
-class CarouselScopeTest {
- @get:Rule
- val rule = createComposeRule()
-
- @OptIn(ExperimentalTvMaterial3Api::class)
- @Test
- fun carouselItem_parentContainerGainsFocused_onBackPress() {
- val containerBoxTag = "container-box"
- val carouselItemTag = "carousel-item"
-
- rule.setContent {
- val carouselState = remember { CarouselState() }
- var isContainerBoxFocused by remember { mutableStateOf(false) }
- Box(
- modifier = Modifier
- .testTag(containerBoxTag)
- .fillMaxSize()
- .onFocusChanged { isContainerBoxFocused = it.isFocused }
- .border(10.dp, if (isContainerBoxFocused) Color.Green else Color.Transparent)
- .focusable()
- ) {
- CarouselScope(carouselState = carouselState)
- .CarouselItem(
- modifier = Modifier
- .testTag(carouselItemTag),
- background = {
- Box(
- modifier = Modifier
- .size(300.dp)
- .background(Color.Cyan))
- },
- content = { SampleButton() },
- )
- }
- }
-
- // Request focus for Carousel Item on start
- rule.onNodeWithTag(carouselItemTag)
- .performSemanticsAction(SemanticsActions.RequestFocus)
- rule.waitForIdle()
-
- // Check if overlay button in carousel item is focused
- rule.onNodeWithTag(sampleButtonTag, useUnmergedTree = true)
- .assertIsFocused()
-
- // Trigger back press
- performKeyPress(NativeKeyEvent.KEYCODE_BACK)
- rule.waitForIdle()
-
- // Check if carousel item loses focus and parent container gains focus
- rule.onNodeWithTag(containerBoxTag).assertIsFocused()
- }
-
- private fun performKeyPress(keyCode: Int, count: Int = 1) {
- repeat(count) {
- InstrumentationRegistry.getInstrumentation().sendKeyDownUpSync(keyCode)
- }
- }
-}
-
-@Composable
-private fun SampleButton(text: String = sampleButtonTag) {
- var isFocused by remember { mutableStateOf(false) }
- BasicText(
- text = text,
- modifier = Modifier
- .testTag(text)
- .size(100.dp, 20.dp)
- .background(Color.Yellow)
- .onFocusChanged { isFocused = it.isFocused }
- .border(2.dp, if (isFocused) Color.Green else Color.Transparent)
- .focusable()
- )
-}
diff --git a/tv/tv-material/src/androidTest/java/androidx/tv/material3/CarouselTest.kt b/tv/tv-material/src/androidTest/java/androidx/tv/material3/CarouselTest.kt
index 1c863ef..b6c31ca8 100644
--- a/tv/tv-material/src/androidTest/java/androidx/tv/material3/CarouselTest.kt
+++ b/tv/tv-material/src/androidTest/java/androidx/tv/material3/CarouselTest.kt
@@ -18,8 +18,10 @@
import android.os.SystemClock
import android.view.KeyEvent
-import androidx.compose.animation.ContentTransform
+import androidx.compose.animation.AnimatedContentScope
import androidx.compose.animation.ExperimentalAnimationApi
+import androidx.compose.animation.slideInHorizontally
+import androidx.compose.animation.slideOutHorizontally
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.focusable
@@ -75,7 +77,7 @@
private const val delayBetweenItems = 2500L
private const val animationTime = 900L
-@OptIn(ExperimentalTvMaterial3Api::class)
+@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalAnimationApi::class)
class CarouselTest {
@get:Rule
val rule = createComposeRule()
@@ -433,7 +435,13 @@
autoScrollDurationMillis = delayBetweenItems
) {
SampleCarouselItem(index = it) {
- Box {
+ Box(
+ modifier = Modifier
+ .animateEnterExit(
+ enter = slideInHorizontally(),
+ exit = slideOutHorizontally()
+ )
+ ) {
Column(modifier = Modifier.align(Alignment.BottomStart)) {
BasicText(text = "carousel-frame")
Row {
@@ -829,7 +837,7 @@
carouselState: CarouselState = remember { CarouselState() },
itemCount: Int = 3,
timeToDisplayItemMillis: Long = delayBetweenItems,
- content: @Composable CarouselScope.(index: Int) -> Unit
+ content: @Composable AnimatedContentScope.(index: Int) -> Unit
) {
Carousel(
modifier = Modifier
@@ -856,24 +864,16 @@
@OptIn(ExperimentalTvMaterial3Api::class, ExperimentalAnimationApi::class)
@Composable
-private fun CarouselScope.SampleCarouselItem(
+private fun AnimatedContentScope.SampleCarouselItem(
index: Int,
modifier: Modifier = Modifier,
- contentTransformStartToEnd: ContentTransform =
- CarouselItemDefaults.contentTransformStartToEnd,
- content: (@Composable () -> Unit) = { SampleButton("Play $index") },
+ content: (@Composable AnimatedContentScope.() -> Unit) = { SampleButton("Play $index") },
) {
- CarouselItem(
- modifier = modifier,
- contentTransformStartToEnd = contentTransformStartToEnd,
- background = {
- Box(
- modifier = Modifier
- .fillMaxSize()
- .background(Color.Red)
- .border(2.dp, Color.Blue)
- )
- }
+ Box(
+ modifier = modifier
+ .fillMaxSize()
+ .background(Color.Red)
+ .border(2.dp, Color.Blue)
) {
content()
}
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/Carousel.kt b/tv/tv-material/src/main/java/androidx/tv/material3/Carousel.kt
index c8b28a0..001aed4 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/Carousel.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/Carousel.kt
@@ -17,6 +17,7 @@
package androidx.tv.material3
import androidx.compose.animation.AnimatedContent
+import androidx.compose.animation.AnimatedContentScope
import androidx.compose.animation.AnimatedVisibilityScope
import androidx.compose.animation.ContentTransform
import androidx.compose.animation.ExperimentalAnimationApi
@@ -113,7 +114,7 @@
.padding(16.dp),
)
},
- content: @Composable CarouselScope.(index: Int) -> Unit
+ content: @Composable AnimatedContentScope.(index: Int) -> Unit
) {
CarouselStateUpdater(carouselState, itemCount)
var focusState: FocusState? by remember { mutableStateOf(null) }
@@ -176,8 +177,7 @@
// IndexOutOfBoundsException. Guarding against this by checking against itemCount
// before invoking.
if (itemCount > 0) {
- CarouselScope(carouselState = carouselState)
- .content(if (activeItemIndex < itemCount) activeItemIndex else 0)
+ content(if (activeItemIndex < itemCount) activeItemIndex else 0)
}
}
this.carouselIndicator()
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/CarouselItem.kt b/tv/tv-material/src/main/java/androidx/tv/material3/CarouselItem.kt
deleted file mode 100644
index d0b896a..0000000
--- a/tv/tv-material/src/main/java/androidx/tv/material3/CarouselItem.kt
+++ /dev/null
@@ -1,189 +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.tv.material3
-
-import android.content.Context
-import android.view.accessibility.AccessibilityManager
-import androidx.compose.animation.AnimatedVisibility
-import androidx.compose.animation.ContentTransform
-import androidx.compose.animation.ExperimentalAnimationApi
-import androidx.compose.animation.slideInHorizontally
-import androidx.compose.animation.slideOutHorizontally
-import androidx.compose.animation.togetherWith
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.focusable
-import androidx.compose.foundation.layout.Box
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.DisposableEffect
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.ExperimentalComposeUiApi
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.focus.FocusDirection
-import androidx.compose.ui.focus.FocusState
-import androidx.compose.ui.focus.onFocusChanged
-import androidx.compose.ui.input.key.onKeyEvent
-import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalFocusManager
-import androidx.compose.ui.platform.LocalLayoutDirection
-import androidx.compose.ui.semantics.CollectionItemInfo
-import androidx.compose.ui.semantics.collectionItemInfo
-import androidx.compose.ui.semantics.isContainer
-import androidx.compose.ui.semantics.semantics
-import androidx.compose.ui.unit.LayoutDirection
-import androidx.tv.material3.KeyEventPropagation.ContinuePropagation
-
-/**
- * This composable is intended for use in Carousel.
- * A composable that has
- * - a [background] layer that is rendered as soon as the composable is visible.
- * - a [content] layer that is rendered on top of the [background]
- *
- * @param background composable defining the background of the item
- * @param itemIndex current active item index of the carousel
- * @param modifier modifier applied to the CarouselItem
- * @param contentTransform content transform to be applied to the content of the item when
- * scrolling
- * @param content composable defining the content displayed on top of the background
- */
-@Suppress("IllegalExperimentalApiUsage")
-@OptIn(ExperimentalAnimationApi::class, ExperimentalComposeUiApi::class)
-@ExperimentalTvMaterial3Api
-@Composable
-internal fun CarouselItem(
- itemIndex: Int,
- modifier: Modifier = Modifier,
- background: @Composable () -> Unit = {},
- contentTransform: ContentTransform =
- CarouselItemDefaults.contentTransformStartToEnd,
- content: @Composable () -> Unit,
-) {
- val context = LocalContext.current
- val accessibilityManager = remember {
- context.getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager
- }
- var containerBoxFocusState: FocusState? by remember { mutableStateOf(null) }
- val focusManager = LocalFocusManager.current
- var exitFocus by remember { mutableStateOf(false) }
-
- var isVisible by remember { mutableStateOf(false) }
-
- DisposableEffect(itemIndex) {
- isVisible = true
- onDispose { isVisible = false }
- }
-
- // This box holds the focus until the overlay animation completes
- Box(
- modifier = modifier
- .semantics(mergeDescendants = true) {
- @Suppress("DEPRECATION")
- isContainer = true
- collectionItemInfo =
- CollectionItemInfo(
- rowIndex = 0,
- rowSpan = 1,
- columnIndex = itemIndex,
- columnSpan = 1
- )
- }
- .onKeyEvent {
- exitFocus = it.isBackPress() && it.isTypeKeyDown()
- ContinuePropagation
- }
- .onFocusChanged {
- containerBoxFocusState = it
- if (it.isFocused && exitFocus) {
- focusManager.moveFocus(FocusDirection.Exit)
- exitFocus = false
- }
- }
- .then(
- if (accessibilityManager.isEnabled)
- Modifier.clickable {
- focusManager.moveFocus(FocusDirection.Enter)
- }
- else
- Modifier.focusable()
- )
- ) {
- background()
-
- AnimatedVisibility(
- visible = isVisible,
- enter = contentTransform.targetContentEnter,
- exit = contentTransform.initialContentExit,
- ) {
- LaunchedEffect(transition.isRunning, containerBoxFocusState?.isFocused) {
- if (!transition.isRunning &&
- containerBoxFocusState?.isFocused == true &&
- !accessibilityManager.isEnabled
- ) {
- focusManager.moveFocus(FocusDirection.Enter)
- }
- }
- content.invoke()
- }
- }
-}
-
-@ExperimentalTvMaterial3Api
-object CarouselItemDefaults {
- /**
- * Transform the content from right to left
- */
- // Keeping this as public so that users can access it directly without the isLTR helper
- val contentTransformRightToLeft: ContentTransform
- @Composable get() =
- slideInHorizontally { it * 4 }
- .togetherWith(slideOutHorizontally { it * 4 })
-
- /**
- * Transform the content from left to right
- */
- // Keeping this as public so that users can access it directly without the isLTR helper
- val contentTransformLeftToRight: ContentTransform
- @Composable get() =
- slideInHorizontally()
- .togetherWith(slideOutHorizontally())
-
- /**
- * Content transform applied when moving forward taking isLTR into account
- */
- val contentTransformStartToEnd
- @Composable get() =
- if (isLtr())
- contentTransformRightToLeft
- else
- contentTransformLeftToRight
-
- /**
- * Content transform applied when moving backward taking isLTR into account
- */
- val contentTransformEndToStart
- @Composable get() =
- if (isLtr())
- contentTransformLeftToRight
- else
- contentTransformRightToLeft
-}
-
-@Composable
-private fun isLtr() = LocalLayoutDirection.current == LayoutDirection.Ltr
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/CarouselScope.kt b/tv/tv-material/src/main/java/androidx/tv/material3/CarouselScope.kt
deleted file mode 100644
index 665ceb9..0000000
--- a/tv/tv-material/src/main/java/androidx/tv/material3/CarouselScope.kt
+++ /dev/null
@@ -1,66 +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.tv.material3
-
-import androidx.compose.animation.ContentTransform
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-
-/**
- * CarouselScope provides a [CarouselScope.CarouselItem] function which you can use to
- * provide the carousel item's animation, background and the inner content.
- */
-@ExperimentalTvMaterial3Api
-class CarouselScope @OptIn(ExperimentalTvMaterial3Api::class)
-internal constructor(private val carouselState: CarouselState) {
- /**
- * [CarouselScope.CarouselItem] can be used to define a item's animation, background, and
- * content. Using this is optional and you can choose to define your own CarouselItem from
- * scratch
- *
- * @param modifier modifier applied to the CarouselItem
- * @param background composable defining the background of the item
- * @param contentTransformStartToEnd content transform to be applied to the content of the item
- * when scrolling forward in the carousel
- * @param contentTransformEndToStart content transform to be applied to the content of the item
- * when scrolling backward in the carousel
- * @param content composable defining the content displayed on top of the background
- */
- @Composable
- @ExperimentalTvMaterial3Api
- fun CarouselItem(
- modifier: Modifier = Modifier,
- background: @Composable () -> Unit = {},
- contentTransformStartToEnd: ContentTransform =
- CarouselItemDefaults.contentTransformStartToEnd,
- contentTransformEndToStart: ContentTransform =
- CarouselItemDefaults.contentTransformEndToStart,
- content: @Composable () -> Unit
- ) {
- CarouselItem(
- background = background,
- itemIndex = carouselState.activeItemIndex,
- contentTransform =
- if (carouselState.isMovingBackward)
- contentTransformEndToStart
- else
- contentTransformStartToEnd,
- modifier = modifier,
- content = content,
- )
- }
-}
diff --git a/wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Text.kt b/wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Text.kt
index c258ffa..2b96e52 100644
--- a/wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Text.kt
+++ b/wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Text.kt
@@ -99,23 +99,20 @@
onTextLayout: (TextLayoutResult) -> Unit,
style: TextStyle
) {
- val mergedStyle = style.merge(
- TextStyle(
- color = color,
- fontSize = fontSize,
- fontWeight = fontWeight,
- textAlign = textAlign,
- lineHeight = lineHeight,
- fontFamily = fontFamily,
- textDecoration = textDecoration,
- fontStyle = fontStyle,
- letterSpacing = letterSpacing
- )
- )
BasicText(
text = text,
modifier = modifier,
- style = mergedStyle,
+ style = style.merge(
+ color = color,
+ fontSize = fontSize,
+ fontWeight = fontWeight,
+ textAlign = textAlign,
+ lineHeight = lineHeight,
+ fontFamily = fontFamily,
+ textDecoration = textDecoration,
+ fontStyle = fontStyle,
+ letterSpacing = letterSpacing
+ ),
onTextLayout = onTextLayout,
overflow = overflow,
softWrap = softWrap,
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoolNodes.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoolNodes.java
index afe4be6..c95560c 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoolNodes.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoolNodes.java
@@ -35,8 +35,7 @@
private final DynamicTypeValueReceiverWithPreUpdate<Boolean> mDownstream;
FixedBoolNode(
- FixedBool protoNode,
- DynamicTypeValueReceiverWithPreUpdate<Boolean> downstream) {
+ FixedBool protoNode, DynamicTypeValueReceiverWithPreUpdate<Boolean> downstream) {
mValue = protoNode.getValue();
mDownstream = downstream;
}
@@ -171,6 +170,10 @@
return a && b;
case LOGICAL_OP_TYPE_OR:
return a || b;
+ case LOGICAL_OP_TYPE_EQUAL:
+ return a.equals(b);
+ case LOGICAL_OP_TYPE_NOT_EQUAL:
+ return !a.equals(b);
default:
Log.e(TAG, "Unknown operation type in LogicalBoolOp");
return false;
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/BoolNodesTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/BoolNodesTest.java
new file mode 100644
index 0000000..e5f987c
--- /dev/null
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/BoolNodesTest.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.wear.protolayout.expression.pipeline;
+
+import static androidx.wear.protolayout.expression.proto.DynamicProto.LogicalOpType.LOGICAL_OP_TYPE_AND;
+import static androidx.wear.protolayout.expression.proto.DynamicProto.LogicalOpType.LOGICAL_OP_TYPE_EQUAL;
+import static androidx.wear.protolayout.expression.proto.DynamicProto.LogicalOpType.LOGICAL_OP_TYPE_NOT_EQUAL;
+import static androidx.wear.protolayout.expression.proto.DynamicProto.LogicalOpType.LOGICAL_OP_TYPE_OR;
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.wear.protolayout.expression.pipeline.BoolNodes.FixedBoolNode;
+import androidx.wear.protolayout.expression.pipeline.BoolNodes.StateBoolNode;
+import androidx.wear.protolayout.expression.proto.DynamicProto;
+import androidx.wear.protolayout.expression.proto.DynamicProto.LogicalBoolOp;
+import androidx.wear.protolayout.expression.proto.DynamicProto.StateBoolSource;
+import androidx.wear.protolayout.expression.proto.FixedProto.FixedBool;
+import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import com.google.common.collect.ImmutableMap;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class BoolNodesTest {
+ @Test
+ public void fixedBoolNodeTest() {
+ List<Boolean> results = new ArrayList<>();
+
+ FixedBool protoNode = FixedBool.newBuilder().setValue(false).build();
+ FixedBoolNode node = new FixedBoolNode(protoNode, new AddToListCallback<>(results));
+
+ node.preInit();
+ node.init();
+
+ assertThat(results).containsExactly(false);
+ }
+
+ @Test
+ public void stateBoolNodeTest() {
+ List<Boolean> results = new ArrayList<>();
+ StateStore oss =
+ new StateStore(
+ ImmutableMap.of(
+ "foo",
+ StateEntryValue.newBuilder()
+ .setBoolVal(FixedBool.newBuilder().setValue(true))
+ .build()));
+
+ StateBoolSource protoNode = StateBoolSource.newBuilder().setSourceKey("foo").build();
+ StateBoolNode node = new StateBoolNode(oss, protoNode, new AddToListCallback<>(results));
+
+ node.preInit();
+ node.init();
+
+ assertThat(results).containsExactly(true);
+ }
+
+ @Test
+ public void stateBoolUpdatesWithStateChanges() {
+ List<Boolean> results = new ArrayList<>();
+ StateStore oss =
+ new StateStore(
+ ImmutableMap.of(
+ "foo",
+ StateEntryValue.newBuilder()
+ .setBoolVal(FixedBool.newBuilder().setValue(true))
+ .build()));
+
+ StateBoolSource protoNode = StateBoolSource.newBuilder().setSourceKey("foo").build();
+ StateBoolNode node = new StateBoolNode(oss, protoNode, new AddToListCallback<>(results));
+
+ node.preInit();
+ node.init();
+
+ results.clear();
+
+ oss.setStateEntryValuesProto(
+ ImmutableMap.of(
+ "foo",
+ StateEntryValue.newBuilder()
+ .setBoolVal(FixedBool.newBuilder().setValue(false))
+ .build()));
+
+ assertThat(results).containsExactly(false);
+ }
+
+ @Test
+ public void stateBoolNoUpdatesAfterDestroy() {
+ List<Boolean> results = new ArrayList<>();
+ StateStore oss =
+ new StateStore(
+ ImmutableMap.of(
+ "foo",
+ StateEntryValue.newBuilder()
+ .setBoolVal(FixedBool.newBuilder().setValue(false))
+ .build()));
+
+ StateBoolSource protoNode = StateBoolSource.newBuilder().setSourceKey("foo").build();
+ StateBoolNode node = new StateBoolNode(oss, protoNode, new AddToListCallback<>(results));
+
+ node.preInit();
+ node.init();
+ assertThat(results).containsExactly(false);
+
+ results.clear();
+ node.destroy();
+ oss.setStateEntryValuesProto(
+ ImmutableMap.of(
+ "foo",
+ StateEntryValue.newBuilder()
+ .setBoolVal(FixedBool.newBuilder().setValue(true))
+ .build()));
+ assertThat(results).isEmpty();
+ }
+
+ @Test
+ public void logicalBoolOpTest() {
+ assertThat(evaluateLogicalOperation(LOGICAL_OP_TYPE_AND, true, true)).isTrue();
+ assertThat(evaluateLogicalOperation(LOGICAL_OP_TYPE_AND, true, false)).isFalse();
+
+ assertThat(evaluateLogicalOperation(LOGICAL_OP_TYPE_OR, true, false)).isTrue();
+ assertThat(evaluateLogicalOperation(LOGICAL_OP_TYPE_OR, false, false)).isFalse();
+
+ assertThat(evaluateLogicalOperation(LOGICAL_OP_TYPE_EQUAL, true, true)).isTrue();
+ assertThat(evaluateLogicalOperation(LOGICAL_OP_TYPE_EQUAL, true, false)).isFalse();
+
+ assertThat(evaluateLogicalOperation(LOGICAL_OP_TYPE_NOT_EQUAL, true, false)).isTrue();
+ assertThat(evaluateLogicalOperation(LOGICAL_OP_TYPE_NOT_EQUAL, false, false)).isFalse();
+ }
+
+ private static boolean evaluateLogicalOperation(
+ DynamicProto.LogicalOpType logicalOpType, boolean lhs, boolean rhs) {
+ List<Boolean> results = new ArrayList<>();
+
+ LogicalBoolOp protoNode = LogicalBoolOp.newBuilder().setOperationType(logicalOpType).build();
+ BoolNodes.LogicalBoolOp node =
+ new BoolNodes.LogicalBoolOp(protoNode, new AddToListCallback<>(results));
+
+ FixedBool lhsProtoNode = FixedBool.newBuilder().setValue(lhs).build();
+ FixedBoolNode lhsNode = new FixedBoolNode(lhsProtoNode, node.getLhsIncomingCallback());
+ lhsNode.init();
+
+ FixedBool rhsProtoNode = FixedBool.newBuilder().setValue(rhs).build();
+ FixedBoolNode rhsNode = new FixedBoolNode(rhsProtoNode, node.getRhsIncomingCallback());
+ rhsNode.init();
+
+ return results.get(0);
+ }
+}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ParametrizedDynamicTypeEvaluatorTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ParametrizedDynamicTypeEvaluatorTest.java
index 7632f30..2f62ea9 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ParametrizedDynamicTypeEvaluatorTest.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ParametrizedDynamicTypeEvaluatorTest.java
@@ -132,6 +132,10 @@
test(DynamicFloat.constant(0.6f).gte(0.4f), true),
test(DynamicFloat.constant(0.1234568f).gte(0.1234562f), true),
test(DynamicBool.constant(true), true),
+ test(DynamicBool.constant(true).eq(DynamicBool.constant(true)), true),
+ test(DynamicBool.constant(true).eq(DynamicBool.constant(false)), false),
+ test(DynamicBool.constant(true).ne(DynamicBool.constant(true)), false),
+ test(DynamicBool.constant(true).ne(DynamicBool.constant(false)), true),
test(DynamicBool.constant(true).negate(), false),
test(DynamicBool.constant(false).negate(), true),
test(DynamicBool.constant(true).and(DynamicBool.constant(true)), true),
diff --git a/wear/protolayout/protolayout-expression/api/current.txt b/wear/protolayout/protolayout-expression/api/current.txt
index 973a583..b4f26d0 100644
--- a/wear/protolayout/protolayout-expression/api/current.txt
+++ b/wear/protolayout/protolayout-expression/api/current.txt
@@ -97,8 +97,10 @@
public static interface DynamicBuilders.DynamicBool extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool and(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool constant(boolean);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[]);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromState(String);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool negate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool or(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicBoolByteArray();
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 0864423..adf05da 100644
--- a/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt
@@ -97,8 +97,10 @@
public static interface DynamicBuilders.DynamicBool extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool and(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool constant(boolean);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[]);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromState(String);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool negate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool or(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicBoolByteArray();
diff --git a/wear/protolayout/protolayout-expression/api/restricted_current.txt b/wear/protolayout/protolayout-expression/api/restricted_current.txt
index 973a583..b4f26d0 100644
--- a/wear/protolayout/protolayout-expression/api/restricted_current.txt
+++ b/wear/protolayout/protolayout-expression/api/restricted_current.txt
@@ -97,8 +97,10 @@
public static interface DynamicBuilders.DynamicBool extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool and(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool constant(boolean);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[]);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromState(String);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool negate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool or(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicBoolByteArray();
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 debe91bc..9374277 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
@@ -265,7 +265,13 @@
* @since 1.2
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
- @IntDef({LOGICAL_OP_TYPE_UNDEFINED, LOGICAL_OP_TYPE_AND, LOGICAL_OP_TYPE_OR})
+ @IntDef({
+ LOGICAL_OP_TYPE_UNDEFINED,
+ LOGICAL_OP_TYPE_AND,
+ LOGICAL_OP_TYPE_OR,
+ LOGICAL_OP_TYPE_EQUAL,
+ LOGICAL_OP_TYPE_NOT_EQUAL
+ })
@Retention(RetentionPolicy.SOURCE)
@interface LogicalOpType {}
@@ -291,6 +297,20 @@
static final int LOGICAL_OP_TYPE_OR = 2;
/**
+ * Equal check.
+ *
+ * @since 1.2
+ */
+ static final int LOGICAL_OP_TYPE_EQUAL = 3;
+
+ /**
+ * Not Equal check.
+ *
+ * @since 1.2
+ */
+ static final int LOGICAL_OP_TYPE_NOT_EQUAL = 4;
+
+ /**
* The duration part to retrieve using {@link GetDurationPartOp}.
*
* @since 1.2
@@ -2334,8 +2354,8 @@
/**
* Sets minimum number of integer digits for the formatter. Defaults to one if not
- * specified. If minIntegerDigits is zero and the -1 < input < 1, the Integer
- * part will not appear.
+ * specified. If minIntegerDigits is zero and the -1 < input < 1, the Integer part
+ * will not appear.
*/
@NonNull
public Builder setMinIntegerDigits(@IntRange(from = 0) int minIntegerDigits) {
@@ -2643,7 +2663,6 @@
return fromProto(proto, null);
}
-
@NonNull
DynamicProto.StateStringSource toProto() {
return mImpl;
@@ -4780,8 +4799,8 @@
/**
* Sets minimum number of integer digits for the formatter. Defaults to one if not
- * specified. If minIntegerDigits is zero and the -1 < input < 1, the Integer
- * part will not appear.
+ * specified. If minIntegerDigits is zero and the -1 < input < 1, the Integer part
+ * will not appear.
*/
@NonNull
public Builder setMinIntegerDigits(@IntRange(from = 0) int minIntegerDigits) {
@@ -5607,6 +5626,32 @@
.build();
}
+ /**
+ * Returns a {@link DynamicBool} that is true if the value of this {@link DynamicBool} and
+ * {@code other} are equal, otherwise it's false.
+ */
+ @NonNull
+ default DynamicBool eq(@NonNull DynamicBool other) {
+ return new LogicalBoolOp.Builder()
+ .setInputLhs(this)
+ .setInputRhs(other)
+ .setOperationType(DynamicBuilders.LOGICAL_OP_TYPE_EQUAL)
+ .build();
+ }
+
+ /**
+ * Returns a {@link DynamicBool} that is true if the value of this {@link DynamicBool} and
+ * {@code other} are not equal, otherwise it's false.
+ */
+ @NonNull
+ default DynamicBool ne(@NonNull DynamicBool other) {
+ return new LogicalBoolOp.Builder()
+ .setInputLhs(this)
+ .setInputRhs(other)
+ .setOperationType(DynamicBuilders.LOGICAL_OP_TYPE_NOT_EQUAL)
+ .build();
+ }
+
/** Get the fingerprint for this object or null if unknown. */
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
@@ -5622,7 +5667,6 @@
}
}
-
/** Creates a new wrapper instance from the proto. */
@RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
@@ -6366,7 +6410,6 @@
}
}
-
/** Creates a new wrapper instance from the proto. */
@RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicBoolTest.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicBoolTest.java
index b9bf7e3..beb1207 100644
--- a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicBoolTest.java
+++ b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicBoolTest.java
@@ -17,107 +17,143 @@
package androidx.wear.protolayout.expression;
import static androidx.wear.protolayout.expression.proto.DynamicProto.LogicalOpType.LOGICAL_OP_TYPE_AND;
+import static androidx.wear.protolayout.expression.proto.DynamicProto.LogicalOpType.LOGICAL_OP_TYPE_EQUAL;
+import static androidx.wear.protolayout.expression.proto.DynamicProto.LogicalOpType.LOGICAL_OP_TYPE_NOT_EQUAL;
import static androidx.wear.protolayout.expression.proto.DynamicProto.LogicalOpType.LOGICAL_OP_TYPE_OR;
+
import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.assertThrows;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool;
+
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public final class DynamicBoolTest {
- private static final String STATE_KEY = "state-key";
+ private static final String STATE_KEY = "state-key";
- @Test
- public void constantBool() {
- DynamicBool falseBool = DynamicBool.constant(false);
- DynamicBool trueBool = DynamicBool.constant(true);
+ @Test
+ public void constantBool() {
+ DynamicBool falseBool = DynamicBool.constant(false);
+ DynamicBool trueBool = DynamicBool.constant(true);
- assertThat(falseBool.toDynamicBoolProto().getFixed().getValue()).isFalse();
- assertThat(trueBool.toDynamicBoolProto().getFixed().getValue()).isTrue();
- }
+ assertThat(falseBool.toDynamicBoolProto().getFixed().getValue()).isFalse();
+ assertThat(trueBool.toDynamicBoolProto().getFixed().getValue()).isTrue();
+ }
- @Test
- public void constantToString() {
- assertThat(DynamicBool.constant(true).toString()).isEqualTo("FixedBool{value=true}");
- }
+ @Test
+ public void constantToString() {
+ assertThat(DynamicBool.constant(true).toString()).isEqualTo("FixedBool{value=true}");
+ }
- @Test
- public void stateEntryValueBool() {
- DynamicBool stateBool = DynamicBool.fromState(STATE_KEY);
+ @Test
+ public void stateEntryValueBool() {
+ DynamicBool stateBool = DynamicBool.fromState(STATE_KEY);
- assertThat(stateBool.toDynamicBoolProto().getStateSource().getSourceKey()).isEqualTo(STATE_KEY);
- }
+ assertThat(stateBool.toDynamicBoolProto().getStateSource().getSourceKey())
+ .isEqualTo(STATE_KEY);
+ }
- @Test
- public void stateToString() {
- assertThat(DynamicBool.fromState("key").toString()).isEqualTo("StateBoolSource{sourceKey=key}");
- }
+ @Test
+ public void stateToString() {
+ assertThat(DynamicBool.fromState("key").toString())
+ .isEqualTo("StateBoolSource{sourceKey=key}");
+ }
- @Test
- public void andOpBool() {
- DynamicBool firstBool = DynamicBool.constant(false);
- DynamicBool secondBool = DynamicBool.constant(true);
+ @Test
+ public void andOpBool() {
+ DynamicBool firstBool = DynamicBool.constant(false);
+ DynamicBool secondBool = DynamicBool.constant(true);
- DynamicBool result = firstBool.and(secondBool);
- assertThat(result.toDynamicBoolProto().getLogicalOp().getOperationType())
- .isEqualTo(LOGICAL_OP_TYPE_AND);
- assertThat(result.toDynamicBoolProto().getLogicalOp().getInputLhs())
- .isEqualTo(firstBool.toDynamicBoolProto());
- assertThat(result.toDynamicBoolProto().getLogicalOp().getInputRhs())
- .isEqualTo(secondBool.toDynamicBoolProto());
- }
+ DynamicBool result = firstBool.and(secondBool);
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getOperationType())
+ .isEqualTo(LOGICAL_OP_TYPE_AND);
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getInputLhs())
+ .isEqualTo(firstBool.toDynamicBoolProto());
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getInputRhs())
+ .isEqualTo(secondBool.toDynamicBoolProto());
+ }
- @Test
- public void orOpBool() {
- DynamicBool firstBool = DynamicBool.constant(false);
- DynamicBool secondBool = DynamicBool.constant(true);
+ @Test
+ public void orOpBool() {
+ DynamicBool firstBool = DynamicBool.constant(false);
+ DynamicBool secondBool = DynamicBool.constant(true);
- DynamicBool result = firstBool.or(secondBool);
- assertThat(result.toDynamicBoolProto().getLogicalOp().getOperationType())
- .isEqualTo(LOGICAL_OP_TYPE_OR);
- assertThat(result.toDynamicBoolProto().getLogicalOp().getInputLhs())
- .isEqualTo(firstBool.toDynamicBoolProto());
- assertThat(result.toDynamicBoolProto().getLogicalOp().getInputRhs())
- .isEqualTo(secondBool.toDynamicBoolProto());
- }
+ DynamicBool result = firstBool.or(secondBool);
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getOperationType())
+ .isEqualTo(LOGICAL_OP_TYPE_OR);
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getInputLhs())
+ .isEqualTo(firstBool.toDynamicBoolProto());
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getInputRhs())
+ .isEqualTo(secondBool.toDynamicBoolProto());
+ }
- @Test
- public void logicalOpToString() {
- assertThat(DynamicBool.constant(true).and(DynamicBool.constant(false)).toString())
- .isEqualTo(
- "LogicalBoolOp{"
- + "inputLhs=FixedBool{value=true}, "
- + "inputRhs=FixedBool{value=false}, "
- + "operationType=1}");
- }
+ @Test
+ public void boolComparison_equalOp() {
+ DynamicBool firstBool = DynamicBool.constant(false);
+ DynamicBool secondBool = DynamicBool.constant(true);
- @Test
- public void negateOpBool() {
- DynamicBool firstBool = DynamicBool.constant(true);
+ DynamicBool result = firstBool.eq(secondBool);
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getOperationType())
+ .isEqualTo(LOGICAL_OP_TYPE_EQUAL);
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getInputLhs())
+ .isEqualTo(firstBool.toDynamicBoolProto());
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getInputRhs())
+ .isEqualTo(secondBool.toDynamicBoolProto());
+ }
- assertThat(firstBool.negate().toDynamicBoolProto().getNotOp().getInput())
- .isEqualTo(firstBool.toDynamicBoolProto());
- }
+ @Test
+ public void boolComparison_notEqualOp() {
+ DynamicBool firstBool = DynamicBool.constant(false);
+ DynamicBool secondBool = DynamicBool.constant(true);
- @Test
- public void logicalToString() {
- assertThat(DynamicBool.constant(true).negate().toString())
- .isEqualTo("NotBoolOp{input=FixedBool{value=true}}");
- }
+ DynamicBool result = firstBool.ne(secondBool);
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getOperationType())
+ .isEqualTo(LOGICAL_OP_TYPE_NOT_EQUAL);
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getInputLhs())
+ .isEqualTo(firstBool.toDynamicBoolProto());
+ assertThat(result.toDynamicBoolProto().getLogicalOp().getInputRhs())
+ .isEqualTo(secondBool.toDynamicBoolProto());
+ }
- @Test
- public void validProto() {
- DynamicBool from = DynamicBool.constant(true);
- DynamicBool to = DynamicBool.fromByteArray(from.toDynamicBoolByteArray());
+ @Test
+ public void logicalOpToString() {
+ assertThat(DynamicBool.constant(true).and(DynamicBool.constant(false)).toString())
+ .isEqualTo(
+ "LogicalBoolOp{"
+ + "inputLhs=FixedBool{value=true}, "
+ + "inputRhs=FixedBool{value=false}, "
+ + "operationType=1}");
+ }
- assertThat(to.toDynamicBoolProto().getFixed().getValue()).isTrue();
- }
+ @Test
+ public void negateOpBool() {
+ DynamicBool firstBool = DynamicBool.constant(true);
- @Test
- public void invalidProto() {
- assertThrows(IllegalArgumentException.class, () -> DynamicBool.fromByteArray(new byte[] {1}));
- }
+ assertThat(firstBool.negate().toDynamicBoolProto().getNotOp().getInput())
+ .isEqualTo(firstBool.toDynamicBoolProto());
+ }
+
+ @Test
+ public void logicalToString() {
+ assertThat(DynamicBool.constant(true).negate().toString())
+ .isEqualTo("NotBoolOp{input=FixedBool{value=true}}");
+ }
+
+ @Test
+ public void validProto() {
+ DynamicBool from = DynamicBool.constant(true);
+ DynamicBool to = DynamicBool.fromByteArray(from.toDynamicBoolByteArray());
+
+ assertThat(to.toDynamicBoolProto().getFixed().getValue()).isTrue();
+ }
+
+ @Test
+ public void invalidProto() {
+ assertThrows(
+ IllegalArgumentException.class, () -> DynamicBool.fromByteArray(new byte[] {1}));
+ }
}
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto b/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto
index b12923b..b0729ce 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto
@@ -446,6 +446,12 @@
// Logical OR.
LOGICAL_OP_TYPE_OR = 2;
+
+ // Equal check
+ LOGICAL_OP_TYPE_EQUAL = 3;
+
+ // Not Equal check.
+ LOGICAL_OP_TYPE_NOT_EQUAL = 4;
}
// A logical boolean operator, implementing "boolean result = LHS <op> RHS",
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/trigger.proto b/wear/protolayout/protolayout-proto/src/main/proto/trigger.proto
index f9cc1c5..24e5132 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/trigger.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/trigger.proto
@@ -23,7 +23,7 @@
// condition is true initially, that will fire the trigger on load.
message OnConditionMetTrigger {
// Dynamic boolean used as trigger.
- androidx.wear.protolayout.expression.proto.DynamicBool trigger = 1;
+ androidx.wear.protolayout.expression.proto.DynamicBool condition = 1;
}
// The triggers that can be fired.
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
index a50e95d..cc1b1a1 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
@@ -2446,7 +2446,7 @@
pipelineMaker
.get()
.addResolvedAnimatedImageWithBoolTrigger(
- avd, trigger, posId, conditionTrigger.getTrigger());
+ avd, trigger, posId, conditionTrigger.getCondition());
} else {
// Use default trigger if it's not set.
if (trigger == null
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
index f8c0a3d..9b7d7ac 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
@@ -1041,7 +1041,7 @@
private static Trigger conditionTrigger(DynamicBool dynamicBool) {
return Trigger.newBuilder()
.setOnConditionMetTrigger(
- OnConditionMetTrigger.newBuilder().setTrigger(dynamicBool).build())
+ OnConditionMetTrigger.newBuilder().setCondition(dynamicBool).build())
.build();
}
diff --git a/wear/protolayout/protolayout/api/current.txt b/wear/protolayout/protolayout/api/current.txt
index 208a7d4..506910e9 100644
--- a/wear/protolayout/protolayout/api/current.txt
+++ b/wear/protolayout/protolayout/api/current.txt
@@ -939,20 +939,6 @@
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();
}
@@ -963,33 +949,15 @@
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);
}
@@ -1075,26 +1043,8 @@
}
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();
+ method public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnConditionMetTrigger(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ method public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnLoadTrigger();
}
public static interface TriggerBuilders.Trigger {
diff --git a/wear/protolayout/protolayout/api/public_plus_experimental_current.txt b/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
index 4a1e57f..ce4acaa 100644
--- a/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
@@ -1125,7 +1125,7 @@
field public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
}
- public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId {
+ @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId {
method public int getAnimatedImageFormat();
method @DrawableRes public int getResourceId();
method public androidx.wear.protolayout.TriggerBuilders.Trigger? getStartTrigger();
@@ -1149,7 +1149,7 @@
method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId.Builder setResourceId(@DrawableRes int);
}
- public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId {
+ @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId {
method public int getAnimatedImageFormat();
method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getProgress();
method @DrawableRes public int getResourceId();
@@ -1164,18 +1164,18 @@
}
public static final class ResourceBuilders.ImageResource {
- method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId? getAndroidAnimatedResourceByResId();
+ method @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId? getAndroidAnimatedResourceByResId();
method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId? getAndroidResourceByResId();
- method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId? getAndroidSeekableAnimatedResourceByResId();
+ method @androidx.wear.protolayout.expression.ProtoLayoutExperimental 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 @androidx.wear.protolayout.expression.ProtoLayoutExperimental 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 @androidx.wear.protolayout.expression.ProtoLayoutExperimental 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);
}
@@ -1261,26 +1261,8 @@
}
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();
+ method public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnConditionMetTrigger(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ method public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnLoadTrigger();
}
public static interface TriggerBuilders.Trigger {
diff --git a/wear/protolayout/protolayout/api/restricted_current.txt b/wear/protolayout/protolayout/api/restricted_current.txt
index 208a7d4..506910e9 100644
--- a/wear/protolayout/protolayout/api/restricted_current.txt
+++ b/wear/protolayout/protolayout/api/restricted_current.txt
@@ -939,20 +939,6 @@
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();
}
@@ -963,33 +949,15 @@
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);
}
@@ -1075,26 +1043,8 @@
}
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();
+ method public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnConditionMetTrigger(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ method public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnLoadTrigger();
}
public static interface TriggerBuilders.Trigger {
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 f552d96..2fa280a 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
@@ -25,11 +25,13 @@
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
import androidx.wear.protolayout.TriggerBuilders.Trigger;
import androidx.wear.protolayout.expression.DynamicBuilders;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat;
+import androidx.wear.protolayout.expression.ProtoLayoutExperimental;
import androidx.wear.protolayout.proto.ResourceProto;
import androidx.wear.protolayout.protobuf.ByteString;
@@ -333,6 +335,7 @@
*
* @since 1.2
*/
+ @ProtoLayoutExperimental
public static final class AndroidAnimatedImageResourceByResId {
private final ResourceProto.AndroidAnimatedImageResourceByResId mImpl;
@@ -463,6 +466,7 @@
*
* @since 1.2
*/
+ @ProtoLayoutExperimental
public static final class AndroidSeekableAnimatedImageResourceByResId {
private final ResourceProto.AndroidSeekableAnimatedImageResourceByResId mImpl;
@@ -649,6 +653,7 @@
* @since 1.2
*/
@Nullable
+ @ProtoLayoutExperimental
public AndroidAnimatedImageResourceByResId getAndroidAnimatedResourceByResId() {
if (mImpl.hasAndroidAnimatedResourceByResId()) {
return AndroidAnimatedImageResourceByResId.fromProto(
@@ -665,6 +670,7 @@
* @since 1.2
*/
@Nullable
+ @ProtoLayoutExperimental
public AndroidSeekableAnimatedImageResourceByResId
getAndroidSeekableAnimatedResourceByResId() {
if (mImpl.hasAndroidSeekableAnimatedResourceByResId()) {
@@ -696,6 +702,7 @@
@Override
@NonNull
+ @OptIn(markerClass = ProtoLayoutExperimental.class)
public String toString() {
return "ImageResource{"
+ "androidResourceByResId="
@@ -746,6 +753,7 @@
* @since 1.2
*/
@NonNull
+ @ProtoLayoutExperimental
public Builder setAndroidAnimatedResourceByResId(
@NonNull AndroidAnimatedImageResourceByResId androidAnimatedResourceByResId) {
mImpl.setAndroidAnimatedResourceByResId(androidAnimatedResourceByResId.toProto());
@@ -759,6 +767,7 @@
* @since 1.2
*/
@NonNull
+ @ProtoLayoutExperimental
public Builder setAndroidSeekableAnimatedResourceByResId(
@NonNull
AndroidSeekableAnimatedImageResourceByResId
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
index 4f544da..f5cb3c8 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TriggerBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/TriggerBuilders.java
@@ -31,17 +31,20 @@
public final class TriggerBuilders {
private TriggerBuilders() {}
- /** Shortcut for building an {@link OnLoadTrigger}. */
+ /** Creates a {@link Trigger} that fires immediately when the layout is loaded / reloaded.. */
@NonNull
- public static OnLoadTrigger createOnLoadTrigger() {
+ public static Trigger createOnLoadTrigger() {
return new OnLoadTrigger.Builder().build();
}
- /** Shortcut for building an {@link OnConditionMetTrigger}. */
+ /**
+ * Creates a {@link Trigger} that fires *every time* the condition switches from false to true.
+ * If the condition is true initially, that will fire the trigger on load.
+ */
@NonNull
- public static OnConditionMetTrigger createOnConditionMetTrigger(
+ public static Trigger createOnConditionMetTrigger(
@NonNull DynamicBool dynamicBool) {
- return new OnConditionMetTrigger.Builder().setTrigger(dynamicBool).build();
+ return new OnConditionMetTrigger.Builder().setCondition(dynamicBool).build();
}
/**
@@ -49,7 +52,7 @@
*
* @since 1.2
*/
- public static final class OnLoadTrigger implements Trigger {
+ static final class OnLoadTrigger implements Trigger {
private final TriggerProto.OnLoadTrigger mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -104,7 +107,7 @@
*
* @since 1.2
*/
- public static final class OnConditionMetTrigger implements Trigger {
+ static final class OnConditionMetTrigger implements Trigger {
private final TriggerProto.OnConditionMetTrigger mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -119,9 +122,9 @@
* @since 1.2
*/
@Nullable
- public DynamicBool getTrigger() {
- if (mImpl.hasTrigger()) {
- return DynamicBuilders.dynamicBoolFromProto(mImpl.getTrigger());
+ public DynamicBool getCondition() {
+ if (mImpl.hasCondition()) {
+ return DynamicBuilders.dynamicBoolFromProto(mImpl.getCondition());
} else {
return null;
}
@@ -165,8 +168,8 @@
* @since 1.2
*/
@NonNull
- public Builder setTrigger(@NonNull DynamicBool dynamicBool) {
- mImpl.setTrigger(dynamicBool.toDynamicBoolProto());
+ public Builder setCondition(@NonNull DynamicBool dynamicBool) {
+ mImpl.setCondition(dynamicBool.toDynamicBoolProto());
mFingerprint.recordPropertyUpdate(
1, checkNotNull(dynamicBool.getFingerprint()).aggregateValueAsInt());
return this;
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
index cf36e4f..6230a66 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java
@@ -29,7 +29,7 @@
@Test
public void onLoadTrigger() {
- TriggerBuilders.OnLoadTrigger onLoadTrigger = TriggerBuilders.createOnLoadTrigger();
+ TriggerBuilders.Trigger onLoadTrigger = TriggerBuilders.createOnLoadTrigger();
assertThat(onLoadTrigger.toTriggerProto().hasOnLoadTrigger()).isTrue();
}
@@ -39,12 +39,12 @@
public void onConditionTrigger() {
DynamicBuilders.DynamicBool condition = DynamicBuilders.DynamicBool.fromState("state");
- TriggerBuilders.OnConditionMetTrigger onConditionMetTrigger =
+ TriggerBuilders.Trigger onConditionMetTrigger =
TriggerBuilders.createOnConditionMetTrigger(
condition);
assertThat(
- onConditionMetTrigger.toTriggerProto().getOnConditionMetTrigger().getTrigger())
+ onConditionMetTrigger.toTriggerProto().getOnConditionMetTrigger().getCondition())
.isEqualTo(condition.toDynamicBoolProto());
}
}
diff --git a/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/HeadlessWatchFaceClient.kt b/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/HeadlessWatchFaceClient.kt
index 8a04d54..307c757 100644
--- a/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/HeadlessWatchFaceClient.kt
+++ b/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/HeadlessWatchFaceClient.kt
@@ -118,8 +118,7 @@
/** Whether or not the watch face supports [renderWatchFaceToSurface]. */
public val isRenderWatchFaceToSurfaceSupported: Boolean
- @get:JvmName("isRenderWatchFaceToSurfaceSupported")
- get() = false
+ @get:JvmName("isRenderWatchFaceToSurfaceSupported") get() = false
/**
* Renders the [androidx.wear.watchface.ComplicationSlot] to a shared memory backed [Bitmap]
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 17261be..93d8ddca 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
@@ -88,10 +88,10 @@
}
/**
- * Intended for use by watch face editors, a RemoteWatchFaceViewHost allows the watch face to send
- * a [SurfaceControlViewHost.SurfacePackage] to the client, which the client can attach to a
- * [SurfaceView] with [SurfaceView.setChildSurfacePackage]. The client can request an updated
- * screen shot by calling [renderWatchFace].
+ * Intended for use by watch face editors, a RemoteWatchFaceViewHost allows the watch face to send a
+ * [SurfaceControlViewHost.SurfacePackage] to the client, which the client can attach to a
+ * [SurfaceView] with [SurfaceView.setChildSurfacePackage]. The client can request an updated screen
+ * shot by calling [renderWatchFace].
*/
public interface RemoteWatchFaceViewHost : AutoCloseable {
/**
@@ -161,8 +161,7 @@
/** Whether or not the watch face supports [RemoteWatchFaceViewHost]. */
public val isRemoteWatchFaceViewHostSupported: Boolean
- @get:JvmName("isRemoteWatchFaceViewHostSupported")
- get() = false
+ @get:JvmName("isRemoteWatchFaceViewHostSupported") get() = false
/**
* Constructs a [RemoteWatchFaceViewHost] whose [RemoteWatchFaceViewHost.surfacePackage] can be
@@ -180,7 +179,7 @@
* @param width The width of the view in pixels
* @param height The height of the view in pixels
* @return The [RemoteWatchFaceViewHost] or null if the client has already been closed or if the
- * watch face is not compatible.
+ * watch face is not compatible.
*/
@Throws(RemoteException::class)
@RequiresApi(Build.VERSION_CODES.R)
@@ -217,9 +216,7 @@
/**
* Renames this instance to [newInstanceId] (must be unique, usually this would be different
* from the old ID but that's not a requirement). Sets the current [UserStyle] represented as a
- * [UserStyleData> and clears any complication data. Setting the new UserStyle may have a side
- * effect of enabling or disabling complicationSlots, which will be visible via
- * [ComplicationSlotState.isEnabled].
+ * [UserStyleData> and clears any complication data. Setting the new UserStyle may have a side effect of enabling or disabling complicationSlots, which will be visible via [ComplicationSlotState.isEnabled].
*/
@Throws(RemoteException::class)
public fun updateWatchFaceInstance(newInstanceId: String, userStyle: UserStyleData)
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 aba23ca..32d97b9 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,9 +23,9 @@
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.core.util.Consumer
import androidx.wear.watchface.Renderer
import androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy
import androidx.wear.watchface.complications.data.ComplicationData
diff --git a/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/WatchUiState.kt b/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/WatchUiState.kt
index 3fdeefa..9a1f229 100644
--- a/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/WatchUiState.kt
+++ b/wear/watchface/watchface-client/src/main/java/androidx/wear/watchface/client/WatchUiState.kt
@@ -20,10 +20,7 @@
import androidx.annotation.IntDef
import androidx.annotation.RestrictTo
-/**
- * The InterruptionFilter.
- *
- */
+/** The InterruptionFilter. */
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef(
value =
diff --git a/wear/watchface/watchface-client/src/test/java/androidx/wear/watchface/client/HeadlessWatchFaceClientTest.kt b/wear/watchface/watchface-client/src/test/java/androidx/wear/watchface/client/HeadlessWatchFaceClientTest.kt
index 663fb70..11e4d9c 100644
--- a/wear/watchface/watchface-client/src/test/java/androidx/wear/watchface/client/HeadlessWatchFaceClientTest.kt
+++ b/wear/watchface/watchface-client/src/test/java/androidx/wear/watchface/client/HeadlessWatchFaceClientTest.kt
@@ -47,4 +47,4 @@
Assert.assertTrue(client.isRenderWatchFaceToSurfaceSupported)
}
-}
\ No newline at end of file
+}
diff --git a/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/ImmediateDataSourceService.kt b/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/ImmediateDataSourceService.kt
index 5194d6f..eb96145 100644
--- a/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/ImmediateDataSourceService.kt
+++ b/wear/watchface/watchface-complications-data-source-samples/src/main/java/androidx/wear/watchface/complications/datasource/samples/ImmediateDataSourceService.kt
@@ -48,12 +48,15 @@
ComplicationText.EMPTY
)
.build()
- ComplicationType.MONOCHROMATIC_IMAGE -> MonochromaticImageComplicationData.Builder(
- MonochromaticImage.Builder(
- Icon.createWithResource(this, R.drawable.heart)
- ).build(),
- ComplicationText.EMPTY
- ).build()
+ ComplicationType.MONOCHROMATIC_IMAGE ->
+ MonochromaticImageComplicationData.Builder(
+ MonochromaticImage.Builder(
+ Icon.createWithResource(this, R.drawable.heart)
+ )
+ .build(),
+ ComplicationText.EMPTY
+ )
+ .build()
else -> null
}
)
@@ -67,12 +70,13 @@
ComplicationType.LONG_TEXT ->
LongTextComplicationData.Builder(plainText("hello 123"), ComplicationText.EMPTY)
.build()
- ComplicationType.MONOCHROMATIC_IMAGE -> MonochromaticImageComplicationData.Builder(
- MonochromaticImage.Builder(
- Icon.createWithResource(this, R.drawable.heart)
- ).build(),
- ComplicationText.EMPTY
- ).build()
+ ComplicationType.MONOCHROMATIC_IMAGE ->
+ MonochromaticImageComplicationData.Builder(
+ MonochromaticImage.Builder(Icon.createWithResource(this, R.drawable.heart))
+ .build(),
+ ComplicationText.EMPTY
+ )
+ .build()
else -> null
}
}
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 daae481..8adf5fc 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
@@ -184,17 +184,13 @@
* android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST.
* - A ComplicationDataSourceService must include a `meta-data` tag with
* android.support.wearable.complications.SUPPORTED_TYPES in its manifest entry. The value of this
- * tag should be a comma separated list of types supported by the data source, from this table:
- * | Androidx class | Tag name |
- * |--------------------------------------|-------------------|
- * | [GoalProgressComplicationData] | GOAL_PROGRESS |
- * | [LongTextComplicationData] | LONG_TEXT |
- * | [MonochromaticImageComplicationData] | ICON |
- * | [PhotoImageComplicationData] | LARGE_IMAGE |
- * | [RangedValueComplicationData] | RANGED_TEXT |
- * | [ShortTextComplicationData] | SHORT_TEXT |
- * | [SmallImageComplicationData] | SMALL_IMAGE |
- * | [WeightedElementsComplicationData] | WEIGHTED_ELEMENTS |
+ * tag should be a comma separated list of types supported by the data source, from this table: |
+ * Androidx class | Tag name | |--------------------------------------|-------------------| |
+ * [GoalProgressComplicationData] | GOAL_PROGRESS | | [LongTextComplicationData] | LONG_TEXT | |
+ * [MonochromaticImageComplicationData] | ICON | | [PhotoImageComplicationData] | LARGE_IMAGE | |
+ * [RangedValueComplicationData] | RANGED_TEXT | | [ShortTextComplicationData] | SHORT_TEXT | |
+ * [SmallImageComplicationData] | SMALL_IMAGE | | [WeightedElementsComplicationData] |
+ * WEIGHTED_ELEMENTS |
*
* The order in which types are listed has no significance. In the case where a watch face supports
* multiple types in a single complication slot, the watch face will determine which types it
diff --git a/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceUpdateRequester.kt b/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceUpdateRequester.kt
index 6188e69..13b3f52 100644
--- a/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceUpdateRequester.kt
+++ b/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceUpdateRequester.kt
@@ -53,10 +53,7 @@
public fun requestUpdate(vararg complicationInstanceIds: Int)
public companion object {
- /**
- * The package of the service that accepts complication data source requests.
- *
- */
+ /** The package of the service that accepts complication data source requests. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public const val UPDATE_REQUEST_RECEIVER_PACKAGE = "com.google.android.wearable.app"
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 f16d472..720ff58 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.Bundle
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
diff --git a/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.kt b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.kt
index 2e5e3c8..8887171d 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.kt
@@ -435,6 +435,7 @@
companion object {
private const val VERSION_NUMBER = 20
+
internal fun putIfNotNull(fields: Bundle, field: String, value: Parcelable?) {
if (value != null) {
fields.putParcelable(field, value)
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 89fbc08..94db677 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
@@ -16,10 +16,10 @@
package androidx.wear.watchface.complications.data
-import android.support.wearable.complications.ComplicationData as WireComplicationData
-import android.support.wearable.complications.ComplicationText as WireComplicationText
import android.icu.util.ULocale
+import android.support.wearable.complications.ComplicationData as WireComplicationData
import android.support.wearable.complications.ComplicationData
+import android.support.wearable.complications.ComplicationText as WireComplicationText
import androidx.annotation.MainThread
import androidx.annotation.RestrictTo
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Data.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Data.kt
index e34d53c..1215a97 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Data.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Data.kt
@@ -907,6 +907,20 @@
displayPolicy = displayPolicy,
fallback = fallback,
) {
+
+ init {
+ require(min <= max) { "min must be lower than or equal to max" }
+ require(value == PLACEHOLDER || value in min..max) { "value must be between min and max" }
+ require(max != Float.MAX_VALUE) { "Float.MAX_VALUE is reserved and can't be used for max" }
+ require(monochromaticImage != null || smallImage != null || text != null || title != null) {
+ "At least one of monochromaticImage, smallImage, text or title must be set"
+ }
+ if (valueType == TYPE_PERCENTAGE) {
+ require(min == 0f)
+ require(max == 100f)
+ }
+ }
+
/**
* The [DynamicFloat] optionally set by the data source. If present the system will dynamically
* evaluate this and store the result in [value]. Watch faces can typically ignore this field.
@@ -988,16 +1002,6 @@
@RangedValueType private var valueType: Int = TYPE_UNDEFINED
- init {
- require(min <= max) { "min must be lower than or equal to max" }
- require(value == PLACEHOLDER || value in min..max) {
- "value must be between min and max"
- }
- require(max != Float.MAX_VALUE) {
- "Float.MAX_VALUE is reserved and can't be used for max"
- }
- }
-
/** Sets optional pending intent to be invoked when the complication is tapped. */
public fun setTapAction(tapAction: PendingIntent?): Builder = apply {
this.tapAction = tapAction
@@ -1043,17 +1047,8 @@
}
/** Builds the [RangedValueComplicationData]. */
- public override fun build(): RangedValueComplicationData {
- require(
- monochromaticImage != null || smallImage != null || text != null || title != null
- ) {
- "At least one of monochromaticImage, smallImage, text or title must be set"
- }
- if (valueType == TYPE_PERCENTAGE) {
- require(min == 0f)
- require(max == 100f)
- }
- return RangedValueComplicationData(
+ public override fun build() =
+ RangedValueComplicationData(
value,
valueExpression,
min,
@@ -1073,7 +1068,6 @@
displayPolicy,
fallback,
)
- }
}
override fun fillWireComplicationDataBuilder(builder: WireComplicationDataBuilder) {
@@ -1273,6 +1267,16 @@
displayPolicy = displayPolicy,
fallback = fallback,
) {
+
+ init {
+ require(targetValue != Float.MAX_VALUE) {
+ "Float.MAX_VALUE is reserved and can't be used for target"
+ }
+ require(monochromaticImage != null || smallImage != null || text != null || title != null) {
+ "At least one of monochromaticImage, smallImage, text or title must be set"
+ }
+ }
+
/**
* The [DynamicFloat] optionally set by the data source. If present the system will dynamically
* evaluate this and store the result in [value]. Watch faces can typically ignore this field.
@@ -1345,12 +1349,6 @@
private var text: ComplicationText? = null
private var colorRamp: ColorRamp? = null
- init {
- require(targetValue != Float.MAX_VALUE) {
- "Float.MAX_VALUE is reserved and can't be used for target"
- }
- }
-
/** Sets optional pending intent to be invoked when the complication is tapped. */
public fun setTapAction(tapAction: PendingIntent?): Builder = apply {
this.tapAction = tapAction
@@ -1387,13 +1385,8 @@
}
/** Builds the [GoalProgressComplicationData]. */
- public override fun build(): GoalProgressComplicationData {
- require(
- monochromaticImage != null || smallImage != null || text != null || title != null
- ) {
- "At least one of monochromaticImage, smallImage, text or title must be set"
- }
- return GoalProgressComplicationData(
+ public override fun build() =
+ GoalProgressComplicationData(
value,
valueExpression,
targetValue,
@@ -1411,7 +1404,6 @@
displayPolicy,
fallback = fallback,
)
- }
}
override fun fillWireComplicationDataBuilder(builder: WireComplicationDataBuilder) {
@@ -1585,6 +1577,12 @@
displayPolicy = displayPolicy,
fallback = fallback,
) {
+
+ init {
+ require(monochromaticImage != null || smallImage != null || text != null || title != null) {
+ "At least one of monochromaticImage, smallImage, text or title must be set"
+ }
+ }
/**
* Describes a single value within a [WeightedElementsComplicationData].
*
@@ -1710,13 +1708,8 @@
public fun setText(text: ComplicationText?): Builder = apply { this.text = text }
/** Builds the [GoalProgressComplicationData]. */
- public override fun build(): WeightedElementsComplicationData {
- require(
- monochromaticImage != null || smallImage != null || text != null || title != null
- ) {
- "At least one of monochromaticImage, smallImage, text or title must be set"
- }
- return WeightedElementsComplicationData(
+ public override fun build() =
+ WeightedElementsComplicationData(
elements,
elementBackgroundColor,
monochromaticImage,
@@ -1732,7 +1725,6 @@
displayPolicy,
fallback,
)
- }
}
override fun fillWireComplicationDataBuilder(builder: WireComplicationDataBuilder) {
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt
index de0c253..9d2d48f 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt
@@ -516,6 +516,7 @@
override fun isPlaceholder(): Boolean = delegate.isPlaceholder()
override fun isAlwaysEmpty() = delegate.isAlwaysEmpty
+
override fun getTimeDependentText(): TimeDependentText = delegate.timeDependentText
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) override fun toWireComplicationText() = delegate
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Type.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Type.kt
index 2ed2aba..86183f0 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Type.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Type.kt
@@ -48,7 +48,6 @@
* Converts this value to the integer value used for serialization.
*
* This is only needed internally to convert to the underlying communication protocol.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY) public fun toWireComplicationType(): Int = wireType
@@ -59,7 +58,6 @@
* Converts the integer value used for serialization into a [ComplicationType].
*
* This is only needed internally to convert to the underlying communication protocol.
- *
*/
@OptIn(ComplicationExperimental::class)
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -89,7 +87,6 @@
* This is only needed internally to convert to the underlying communication protocol.
*
* Needed to access this conveniently in Java.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@JvmStatic
@@ -102,7 +99,6 @@
* This is only needed internally to convert to the underlying communication protocol.
*
* Needed to access this conveniently in Java.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@JvmStatic
@@ -112,7 +108,6 @@
/**
* Converts an array of integer values used for serialization into the corresponding list of
* [ComplicationType].
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@JvmStatic
@@ -126,7 +121,6 @@
* types.
*
* This is only needed internally to convert to the underlying communication protocol.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public fun Collection<ComplicationType>.toWireTypes(): IntArray =
@@ -137,7 +131,6 @@
* [ComplicationType] to .
*
* This is only needed internally to convert to the underlying communication protocol.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public fun IntArray.toApiComplicationTypes(): Array<ComplicationType> =
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/utility/IconKt.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/utility/IconKt.kt
index b55837b..88d4d32 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/utility/IconKt.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/utility/IconKt.kt
@@ -24,10 +24,7 @@
import androidx.annotation.RestrictTo
import java.util.Objects
-/**
- * Returns true if the [Icon]s are equal.
- *
- */
+/** Returns true if the [Icon]s are equal. */
infix fun Icon?.iconEquals(other: Icon?): Boolean =
this === other ||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
@@ -36,10 +33,7 @@
this == other
}
-/**
- * Creates a hash code for the [Icon].
- *
- */
+/** Creates a hash code for the [Icon]. */
fun Icon.iconHashCode(): Int =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
IconP.hashCode(this)
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/utility/TraceEvent.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/utility/TraceEvent.kt
index 7239b5e..18e1f0f 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/utility/TraceEvent.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/utility/TraceEvent.kt
@@ -29,7 +29,6 @@
/**
* Wrapper around [Trace.beginSection] and [Trace.endSection] which helps reduce boilerplate by
* taking advantage of RAII like [Closeable] in a try block.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class TraceEvent(traceName: String) : Closeable {
@@ -45,7 +44,6 @@
/**
* Wrapper around [Trace.beginAsyncSection] which helps reduce boilerplate by taking advantage of
* RAII like [Trace.endAsyncSection] in a try block, and by dealing with API version support.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class AsyncTraceEvent(private val traceName: String) : Closeable {
@@ -86,10 +84,7 @@
}
}
-/**
- * Wrapper around [CoroutineScope.launch] with an async trace event.
- *
- */
+/** Wrapper around [CoroutineScope.launch] with an async trace event. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public fun CoroutineScope.launchWithTracing(
traceEventName: String,
diff --git a/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationStyle.kt b/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationStyle.kt
index b771fdb..95542cf 100644
--- a/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationStyle.kt
+++ b/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationStyle.kt
@@ -27,10 +27,7 @@
/** Defines attributes to customize appearance of rendered [ ]. */
public class ComplicationStyle {
- /**
- * Constants used to define border styles for complicationSlots.
- *
- */
+ /** Constants used to define border styles for complicationSlots. */
@Retention(AnnotationRetention.SOURCE)
@IntDef(BORDER_STYLE_NONE, BORDER_STYLE_SOLID, BORDER_STYLE_DASHED)
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -194,6 +191,7 @@
}
isDirty = true
}
+
/** The dash width to be used when drawing borders of type [.BORDER_STYLE_DASHED]. */
public var borderDashWidth: Int
@Px get() = mBorderDashWidth
@@ -209,6 +207,7 @@
mBorderDashGap = borderDashGap
isDirty = true
}
+
/**
* The border radius to be applied to the corners of the bounds of the complication in active
* mode. Border radius will be limited to the half of width or height, depending on which one is
@@ -282,10 +281,7 @@
isDirty = true
}
- /**
- * Returns a copy of the ComplicationStyle [tint]ed by [tintColor].
- *
- */
+ /** Returns a copy of the ComplicationStyle [tint]ed by [tintColor]. */
@RestrictTo(RestrictTo.Scope.LIBRARY)
fun asTinted(tintColor: Int): ComplicationStyle =
ComplicationStyle(this).apply {
diff --git a/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetriever.kt b/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetriever.kt
index 873ef14..af4e203 100644
--- a/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetriever.kt
+++ b/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetriever.kt
@@ -397,10 +397,7 @@
return result
}
- /**
- * Converts this value to [WireComplicationProviderInfo] object used for serialization.
- *
- */
+ /** Converts this value to [WireComplicationProviderInfo] object used for serialization. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public fun toWireComplicationProviderInfo(): WireComplicationProviderInfo =
WireComplicationProviderInfo(
diff --git a/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationSlotBounds.kt b/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationSlotBounds.kt
index ec9b539..d3770b2 100644
--- a/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationSlotBounds.kt
+++ b/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationSlotBounds.kt
@@ -129,7 +129,6 @@
* RectF>, backfilling with empty [RectF]s. This method is necessary because there can be a
* skew between the version of the library between the watch face and the system which would
* otherwise be problematic if new complication types have been introduced.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
fun createFromPartialMap(
diff --git a/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/SystemDataSources.kt b/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/SystemDataSources.kt
index a50594f..b3d620f 100644
--- a/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/SystemDataSources.kt
+++ b/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/SystemDataSources.kt
@@ -179,10 +179,7 @@
public const val DATA_SOURCE_DAY_AND_DATE: Int = 16
}
- /**
- * System complication data source id as defined in [SystemDataSources].
- *
- */
+ /** System complication data source id as defined in [SystemDataSources]. */
@IntDef(
NO_DATA_SOURCE,
DATA_SOURCE_WATCH_BATTERY,
diff --git a/wear/watchface/watchface-complications/src/test/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetrieverTest.kt b/wear/watchface/watchface-complications/src/test/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetrieverTest.kt
index 4108ebf..f40e087 100644
--- a/wear/watchface/watchface-complications/src/test/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetrieverTest.kt
+++ b/wear/watchface/watchface-complications/src/test/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetrieverTest.kt
@@ -33,11 +33,11 @@
import androidx.wear.watchface.complications.data.SmallImageComplicationData
import com.google.common.truth.Truth.assertThat
import kotlin.jvm.java
-import org.mockito.Mockito
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.eq
+import org.mockito.Mockito
@RunWith(SharedRobolectricTestRunner::class)
public class ComplicationDataSourceInfoRetrieverTest {
@@ -58,16 +58,16 @@
val testData: ComplicationData =
LongTextComplicationData.Builder(
- PlainComplicationText.Builder("Test Text").build(),
- ComplicationText.Companion.EMPTY
- )
+ PlainComplicationText.Builder("Test Text").build(),
+ ComplicationText.Companion.EMPTY
+ )
.build()
Mockito.doAnswer {
- val callback = it.arguments[2] as IPreviewComplicationDataCallback
- callback.updateComplicationData(testData.asWireComplicationData())
- true
- }
+ val callback = it.arguments[2] as IPreviewComplicationDataCallback
+ callback.updateComplicationData(testData.asWireComplicationData())
+ true
+ }
.`when`(mockService)
.requestPreviewComplicationData(
eq(component),
@@ -82,13 +82,13 @@
)!!
assertThat(previewData.type).isEqualTo(type)
assertThat(
- (previewData as LongTextComplicationData)
- .text
- .getTextAt(
- ApplicationProvider.getApplicationContext<Context>().resources,
- java.time.Instant.EPOCH
- )
- )
+ (previewData as LongTextComplicationData)
+ .text
+ .getTextAt(
+ ApplicationProvider.getApplicationContext<Context>().resources,
+ java.time.Instant.EPOCH
+ )
+ )
.isEqualTo("Test Text")
}
}
@@ -103,10 +103,10 @@
Mockito.`when`(mockService.asBinder()).thenReturn(mockBinder)
Mockito.doAnswer {
- val callback = it.arguments[2] as IPreviewComplicationDataCallback
- callback.updateComplicationData(null)
- true
- }
+ val callback = it.arguments[2] as IPreviewComplicationDataCallback
+ callback.updateComplicationData(null)
+ true
+ }
.`when`(mockService)
.requestPreviewComplicationData(
eq(component),
@@ -115,11 +115,11 @@
)
assertThat(
- complicationDataSourceInfoRetriever.retrievePreviewComplicationData(
- component,
- type
+ complicationDataSourceInfoRetriever.retrievePreviewComplicationData(
+ component,
+ type
+ )
)
- )
.isNull()
}
}
@@ -134,11 +134,11 @@
Mockito.`when`(mockService.asBinder()).thenReturn(mockBinder)
assertThat(
- complicationDataSourceInfoRetriever.retrievePreviewComplicationData(
- component,
- type
+ complicationDataSourceInfoRetriever.retrievePreviewComplicationData(
+ component,
+ type
+ )
)
- )
.isNull()
}
}
@@ -160,11 +160,11 @@
)
assertThat(
- complicationDataSourceInfoRetriever.retrievePreviewComplicationData(
- component,
- type
+ complicationDataSourceInfoRetriever.retrievePreviewComplicationData(
+ component,
+ type
+ )
)
- )
.isNull()
}
}
@@ -192,21 +192,21 @@
val icon = android.graphics.drawable.Icon.createWithContentUri("icon")
val shortTextPreviewData =
ComplicationDataSourceInfo(
- "applicationName",
- "complicationName",
- icon,
- ComplicationType.SHORT_TEXT,
- componentName = null
- )
+ "applicationName",
+ "complicationName",
+ icon,
+ ComplicationType.SHORT_TEXT,
+ componentName = null
+ )
.fallbackPreviewData as ShortTextComplicationData
assertThat(shortTextPreviewData.text.getTextAt(resources, java.time.Instant.EPOCH))
.isEqualTo("complic")
assertThat(
- shortTextPreviewData.contentDescription!!.getTextAt(
- resources,
- java.time.Instant.EPOCH
+ shortTextPreviewData.contentDescription!!.getTextAt(
+ resources,
+ java.time.Instant.EPOCH
+ )
)
- )
.isEqualTo("complicationName")
assertThat(shortTextPreviewData.monochromaticImage!!.image).isEqualTo(icon)
}
@@ -216,21 +216,21 @@
val icon = android.graphics.drawable.Icon.createWithContentUri("icon")
val longTextPreviewData =
ComplicationDataSourceInfo(
- "applicationName",
- "complicationName",
- icon,
- ComplicationType.LONG_TEXT,
- componentName = null
- )
+ "applicationName",
+ "complicationName",
+ icon,
+ ComplicationType.LONG_TEXT,
+ componentName = null
+ )
.fallbackPreviewData as LongTextComplicationData
assertThat(longTextPreviewData.text.getTextAt(resources, java.time.Instant.EPOCH))
.isEqualTo("complicationName")
assertThat(
- longTextPreviewData.contentDescription!!.getTextAt(
- resources,
- java.time.Instant.EPOCH
+ longTextPreviewData.contentDescription!!.getTextAt(
+ resources,
+ java.time.Instant.EPOCH
+ )
)
- )
.isEqualTo("complicationName")
assertThat(longTextPreviewData.monochromaticImage!!.image).isEqualTo(icon)
}
@@ -240,20 +240,20 @@
val icon = android.graphics.drawable.Icon.createWithContentUri("icon")
val smallImagePreviewData =
ComplicationDataSourceInfo(
- "applicationName",
- "complicationName",
- icon,
- ComplicationType.SMALL_IMAGE,
- componentName = null
- )
+ "applicationName",
+ "complicationName",
+ icon,
+ ComplicationType.SMALL_IMAGE,
+ componentName = null
+ )
.fallbackPreviewData as SmallImageComplicationData
assertThat(smallImagePreviewData.smallImage.image).isEqualTo(icon)
assertThat(
- smallImagePreviewData.contentDescription!!.getTextAt(
- resources,
- java.time.Instant.EPOCH
+ smallImagePreviewData.contentDescription!!.getTextAt(
+ resources,
+ java.time.Instant.EPOCH
+ )
)
- )
.isEqualTo("complicationName")
}
@@ -262,20 +262,20 @@
val icon = android.graphics.drawable.Icon.createWithContentUri("icon")
val photoImagePreviewData =
ComplicationDataSourceInfo(
- "applicationName",
- "complicationName",
- icon,
- ComplicationType.PHOTO_IMAGE,
- componentName = null
- )
+ "applicationName",
+ "complicationName",
+ icon,
+ ComplicationType.PHOTO_IMAGE,
+ componentName = null
+ )
.fallbackPreviewData as PhotoImageComplicationData
assertThat(photoImagePreviewData.photoImage).isEqualTo(icon)
assertThat(
- photoImagePreviewData.contentDescription!!.getTextAt(
- resources,
- java.time.Instant.EPOCH
+ photoImagePreviewData.contentDescription!!.getTextAt(
+ resources,
+ java.time.Instant.EPOCH
+ )
)
- )
.isEqualTo("complicationName")
}
@@ -284,20 +284,20 @@
val icon = android.graphics.drawable.Icon.createWithContentUri("icon")
val monochromaticImagePreviewData =
ComplicationDataSourceInfo(
- "applicationName",
- "complicationName",
- icon,
- ComplicationType.MONOCHROMATIC_IMAGE,
- componentName = null
- )
+ "applicationName",
+ "complicationName",
+ icon,
+ ComplicationType.MONOCHROMATIC_IMAGE,
+ componentName = null
+ )
.fallbackPreviewData as MonochromaticImageComplicationData
assertThat(monochromaticImagePreviewData.monochromaticImage.image).isEqualTo(icon)
assertThat(
- monochromaticImagePreviewData.contentDescription!!.getTextAt(
- resources,
- java.time.Instant.EPOCH
+ monochromaticImagePreviewData.contentDescription!!.getTextAt(
+ resources,
+ java.time.Instant.EPOCH
+ )
)
- )
.isEqualTo("complicationName")
}
@@ -306,12 +306,12 @@
val icon = android.graphics.drawable.Icon.createWithContentUri("icon")
val rangedValuePreviewData =
ComplicationDataSourceInfo(
- "applicationName",
- "complicationName",
- icon,
- ComplicationType.RANGED_VALUE,
- componentName = null
- )
+ "applicationName",
+ "complicationName",
+ icon,
+ ComplicationType.RANGED_VALUE,
+ componentName = null
+ )
.fallbackPreviewData as RangedValueComplicationData
assertThat(rangedValuePreviewData.min).isEqualTo(0.0f)
assertThat(rangedValuePreviewData.max).isEqualTo(100.0f)
@@ -320,11 +320,11 @@
.isEqualTo("complicationName")
assertThat(rangedValuePreviewData.monochromaticImage!!.image).isEqualTo(icon)
assertThat(
- rangedValuePreviewData.contentDescription!!.getTextAt(
- resources,
- java.time.Instant.EPOCH
+ rangedValuePreviewData.contentDescription!!.getTextAt(
+ resources,
+ java.time.Instant.EPOCH
+ )
)
- )
.isEqualTo("complicationName")
}
@@ -332,27 +332,30 @@
public fun complicationDataSourceInfo_equals() {
val icon = android.graphics.drawable.Icon.createWithContentUri("icon")
val icon2 = android.graphics.drawable.Icon.createWithContentUri("icon")
- val a = ComplicationDataSourceInfo(
+ val a =
+ ComplicationDataSourceInfo(
"applicationName",
"complicationName",
icon,
ComplicationType.RANGED_VALUE,
componentName = null
)
- val b = ComplicationDataSourceInfo(
+ val b =
+ ComplicationDataSourceInfo(
"applicationName",
"complicationName",
icon2,
ComplicationType.RANGED_VALUE,
componentName = null
)
- val c = ComplicationDataSourceInfo(
- "applicationName2",
- "complicationName2",
- icon,
- ComplicationType.RANGED_VALUE,
- componentName = null
- )
+ val c =
+ ComplicationDataSourceInfo(
+ "applicationName2",
+ "complicationName2",
+ icon,
+ ComplicationType.RANGED_VALUE,
+ componentName = null
+ )
// Test two identical ComplicationDataSourceInfo with different references.
assertThat(a).isEqualTo(b)
diff --git a/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/Constants.kt b/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/Constants.kt
index d4422b0..217353a 100644
--- a/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/Constants.kt
+++ b/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/Constants.kt
@@ -19,10 +19,7 @@
import android.app.WallpaperManager
import androidx.annotation.RestrictTo
-/**
- * Shared constants between client and implementation.
- *
- */
+/** Shared constants between client and implementation. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class Constants {
// Not instantiable.
diff --git a/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/ParcelableWrapper.kt b/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/ParcelableWrapper.kt
index db2f239..16c2957 100644
--- a/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/ParcelableWrapper.kt
+++ b/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/ParcelableWrapper.kt
@@ -21,10 +21,7 @@
import android.os.Parcelable
import androidx.annotation.RestrictTo
-/**
- * Wraps a Parcelable.
- *
- */
+/** Wraps a Parcelable. */
@SuppressLint("BanParcelableUsage")
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
class ParcelableWrapper(val parcelable: Parcelable) : Parcelable {
diff --git a/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/SharedMemoryImage.kt b/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/SharedMemoryImage.kt
index ad83ad4..4252e0b 100644
--- a/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/SharedMemoryImage.kt
+++ b/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/SharedMemoryImage.kt
@@ -27,7 +27,6 @@
/**
* This class requires API level 27 and is only intended for use in conjunction with
* wear-watchface-client which also requires API level 27.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class SharedMemoryImage {
diff --git a/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/WatchFaceStyle.kt b/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/WatchFaceStyle.kt
index ce40b16..a29c0ce 100644
--- a/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/WatchFaceStyle.kt
+++ b/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/WatchFaceStyle.kt
@@ -32,7 +32,6 @@
* of your [WatchFaceService.Engine.onCreate] override.
*
* <p>To construct a WatchFaceStyle use [WatchFaceStyle.Builder].
- *
*/
@SuppressWarnings("BanParcelableUsage")
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
diff --git a/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/ComplicationConfigFragment.kt b/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/ComplicationConfigFragment.kt
index 8f354ad..cebcf7b 100644
--- a/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/ComplicationConfigFragment.kt
+++ b/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/ComplicationConfigFragment.kt
@@ -59,10 +59,7 @@
}
}
-/**
- * Configuration view for watch faces with multiple complicationSlots.
- *
- */
+/** Configuration view for watch faces with multiple complicationSlots. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@SuppressWarnings(
"ViewConstructor", // Internal view, not intended for use by tools.
@@ -82,8 +79,8 @@
// TODO(alexclarke): This button is a Rect which makes the tap animation look bad.
if (
entry.value.fixedComplicationDataSource ||
- !entry.value.isEnabled ||
- entry.key == watchFaceConfigActivity.editorSession.backgroundComplicationSlotId
+ !entry.value.isEnabled ||
+ entry.key == watchFaceConfigActivity.editorSession.backgroundComplicationSlotId
) {
// Do not create a button for fixed complicationSlots, disabled complicationSlots,
// or background complicationSlots.
diff --git a/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/StyleConfigFragment.kt b/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/StyleConfigFragment.kt
index 9d0825c..e66ab3b 100644
--- a/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/StyleConfigFragment.kt
+++ b/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/StyleConfigFragment.kt
@@ -40,9 +40,9 @@
import androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting
import androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption
import androidx.wear.watchface.style.UserStyleSetting.CustomValueUserStyleSetting
-import androidx.wear.watchface.style.UserStyleSetting.LargeCustomValueUserStyleSetting
import androidx.wear.watchface.style.UserStyleSetting.DoubleRangeUserStyleSetting
import androidx.wear.watchface.style.UserStyleSetting.DoubleRangeUserStyleSetting.DoubleRangeOption
+import androidx.wear.watchface.style.UserStyleSetting.LargeCustomValueUserStyleSetting
import androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting
import androidx.wear.watchface.style.UserStyleSetting.LongRangeUserStyleSetting
import androidx.wear.watchface.style.UserStyleSetting.LongRangeUserStyleSetting.LongRangeOption
diff --git a/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt b/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt
index 32cdbdc..f99c2d7 100644
--- a/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt
+++ b/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt
@@ -600,24 +600,24 @@
val mockSurfaceHolder = `mock`(SurfaceHolder::class.java)
`when`(mockSurfaceHolder.surfaceFrame).thenReturn(screenBounds)
@Suppress("Deprecation")
- val fakeRenderer = object : Renderer.CanvasRenderer(
- mockSurfaceHolder,
- userStyleRepository,
- MutableWatchState().asWatchState(),
- CanvasType.HARDWARE,
- interactiveDrawModeUpdateDelayMillis = 16,
- clearWithBackgroundTintBeforeRenderingHighlightLayer = false
- ) {
- override fun render(canvas: Canvas, bounds: Rect, zonedDateTime: ZonedDateTime) {
- }
+ val fakeRenderer =
+ object :
+ Renderer.CanvasRenderer(
+ mockSurfaceHolder,
+ userStyleRepository,
+ MutableWatchState().asWatchState(),
+ CanvasType.HARDWARE,
+ interactiveDrawModeUpdateDelayMillis = 16,
+ clearWithBackgroundTintBeforeRenderingHighlightLayer = false
+ ) {
+ override fun render(canvas: Canvas, bounds: Rect, zonedDateTime: ZonedDateTime) {}
- override fun renderHighlightLayer(
- canvas: Canvas,
- bounds: Rect,
- zonedDateTime: ZonedDateTime
- ) {
+ override fun renderHighlightLayer(
+ canvas: Canvas,
+ bounds: Rect,
+ zonedDateTime: ZonedDateTime
+ ) {}
}
- }
val complicationSlotsManager =
ComplicationSlotsManager(complicationSlots, userStyleRepository, fakeRenderer)
@@ -1835,7 +1835,6 @@
EditorService.globalEditorService.unregisterObserver(observerId)
}
- @SdkSuppress(maxSdkVersion = 32) // b/275361339
@Test
@Suppress("Deprecation") // userStyleSettings
public fun commit_headless() {
@@ -1887,7 +1886,6 @@
EditorService.globalEditorService.unregisterObserver(observerId)
}
- @SdkSuppress(maxSdkVersion = 32) // b/275361339
@SuppressLint("NewApi")
@Suppress("Deprecation") // userStyleSettings
@Test
diff --git a/wear/watchface/watchface-style/src/main/java/androidx/wear/watchface/style/CurrentUserStyleRepository.kt b/wear/watchface/watchface-style/src/main/java/androidx/wear/watchface/style/CurrentUserStyleRepository.kt
index 6fd3d02..1eacf82 100644
--- a/wear/watchface/watchface-style/src/main/java/androidx/wear/watchface/style/CurrentUserStyleRepository.kt
+++ b/wear/watchface/watchface-style/src/main/java/androidx/wear/watchface/style/CurrentUserStyleRepository.kt
@@ -716,10 +716,7 @@
*/
public val userStyle: StateFlow<UserStyle> by CurrentUserStyleRepository::mutableUserStyle
- /**
- * The UserStyle options must be from the supplied [UserStyleSchema].
- *
- */
+ /** The UserStyle options must be from the supplied [UserStyleSchema]. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public fun updateUserStyle(newUserStyle: UserStyle) {
validateUserStyle(newUserStyle)
diff --git a/wear/watchface/watchface-style/src/main/java/androidx/wear/watchface/style/UserStyleSetting.kt b/wear/watchface/watchface-style/src/main/java/androidx/wear/watchface/style/UserStyleSetting.kt
index 8ce3c6c..a79956a 100644
--- a/wear/watchface/watchface-style/src/main/java/androidx/wear/watchface/style/UserStyleSetting.kt
+++ b/wear/watchface/watchface-style/src/main/java/androidx/wear/watchface/style/UserStyleSetting.kt
@@ -242,7 +242,6 @@
* used.
*
* Note this method can be slow.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public fun estimateWireSizeInBytesAndValidateIconDimensions(
@@ -1028,6 +1027,7 @@
nameResourceId?.let { dos.writeInt(it) }
screenReaderNameResourceId?.let { dos.writeInt(it) }
}
+
/**
* Constructs a [ComplicationSlotOverlay].Builder.
*
diff --git a/wear/watchface/watchface-style/src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt b/wear/watchface/watchface-style/src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt
index 1a449b9..c98331c 100644
--- a/wear/watchface/watchface-style/src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt
+++ b/wear/watchface/watchface-style/src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt
@@ -26,8 +26,8 @@
import androidx.wear.watchface.style.UserStyleSetting.BooleanUserStyleSetting
import androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting
import androidx.wear.watchface.style.UserStyleSetting.CustomValueUserStyleSetting
-import androidx.wear.watchface.style.UserStyleSetting.LargeCustomValueUserStyleSetting
import androidx.wear.watchface.style.UserStyleSetting.DoubleRangeUserStyleSetting
+import androidx.wear.watchface.style.UserStyleSetting.LargeCustomValueUserStyleSetting
import androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting
import androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption
import androidx.wear.watchface.style.UserStyleSetting.LongRangeUserStyleSetting
@@ -194,10 +194,11 @@
listOf(WatchFaceLayer.BASE),
true
)
- val styleSetting4 = LargeCustomValueUserStyleSetting(
- listOf(WatchFaceLayer.BASE),
- "default".encodeToByteArray()
- )
+ val styleSetting4 =
+ LargeCustomValueUserStyleSetting(
+ listOf(WatchFaceLayer.BASE),
+ "default".encodeToByteArray()
+ )
val srcSchema =
UserStyleSchema(listOf(styleSetting1, styleSetting2, styleSetting3, styleSetting4))
diff --git a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt
index 6550522..dcc2146 100644
--- a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt
+++ b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt
@@ -29,14 +29,14 @@
import androidx.wear.watchface.complications.data.ComplicationType.MONOCHROMATIC_IMAGE
import androidx.wear.watchface.complications.data.ComplicationType.SHORT_TEXT
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.doReturn
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.never
-import org.mockito.kotlin.verify
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.never
+import org.mockito.kotlin.verify
const val TIME_OUT_MILLIS = 500L
diff --git a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/WatchFaceServiceAndroidTest.kt b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/WatchFaceServiceAndroidTest.kt
index eafefe5..8c7e17e 100644
--- a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/WatchFaceServiceAndroidTest.kt
+++ b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/WatchFaceServiceAndroidTest.kt
@@ -21,7 +21,6 @@
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
-import androidx.test.filters.SdkSuppress
import androidx.wear.watchface.control.InteractiveInstanceManager
import androidx.wear.watchface.style.UserStyleSchema
import androidx.wear.watchface.style.UserStyleSetting
@@ -39,7 +38,6 @@
InteractiveInstanceManager.setParameterlessEngine(null)
}
- @SdkSuppress(maxSdkVersion = 32) // b/275361339
@Test
fun measuresWatchFaceIconsFromCustomContext() {
val context: Context = ApplicationProvider.getApplicationContext()
diff --git a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt
index 53f13686..7bb5522 100644
--- a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt
+++ b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt
@@ -543,12 +543,15 @@
@Test
public fun createWatchFaceService_throwsOnInvalidClass() {
- assertThat(WatchFaceControlService()
- .createWatchFaceService(
- ComponentName(
- ApplicationProvider.getApplicationContext(),
- WatchFaceControlServiceTest::class.java
- )
- )).isNull()
+ assertThat(
+ WatchFaceControlService()
+ .createWatchFaceService(
+ ComponentName(
+ ApplicationProvider.getApplicationContext(),
+ WatchFaceControlServiceTest::class.java
+ )
+ )
+ )
+ .isNull()
}
}
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/BroadcastsReceiver.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/BroadcastsReceiver.kt
index 644a68a..a7130b9 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/BroadcastsReceiver.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/BroadcastsReceiver.kt
@@ -28,7 +28,6 @@
/**
* This class decouples [BroadcastEventObserver]s from the actual broadcast event receivers to make
* testing easier.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class BroadcastsReceiver
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlot.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlot.kt
index 0def254..41de246 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlot.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlot.kt
@@ -633,8 +633,7 @@
supportedTypes: List<ComplicationType>,
defaultDataSourcePolicy: DefaultComplicationDataSourcePolicy,
bounds: ComplicationSlotBounds,
- @Suppress("HiddenTypeParameter")
- boundingArc: BoundingArc,
+ @Suppress("HiddenTypeParameter") boundingArc: BoundingArc,
complicationTapFilter: ComplicationTapFilter =
object : ComplicationTapFilter {
override fun hitTest(
@@ -808,25 +807,28 @@
/** Constructs the [ComplicationSlot]. */
public fun build(): ComplicationSlot {
- require(defaultDataSourcePolicy.primaryDataSourceDefaultType == null ||
- defaultDataSourcePolicy.primaryDataSourceDefaultType in supportedTypes
+ require(
+ defaultDataSourcePolicy.primaryDataSourceDefaultType == null ||
+ defaultDataSourcePolicy.primaryDataSourceDefaultType in supportedTypes
) {
"defaultDataSourcePolicy.primaryDataSourceDefaultType " +
"${defaultDataSourcePolicy.primaryDataSourceDefaultType} must be in the" +
" supportedTypes list: $supportedTypes"
}
- require(defaultDataSourcePolicy.secondaryDataSourceDefaultType == null ||
- defaultDataSourcePolicy.secondaryDataSourceDefaultType in supportedTypes
+ require(
+ defaultDataSourcePolicy.secondaryDataSourceDefaultType == null ||
+ defaultDataSourcePolicy.secondaryDataSourceDefaultType in supportedTypes
) {
"defaultDataSourcePolicy.secondaryDataSourceDefaultType " +
"${defaultDataSourcePolicy.secondaryDataSourceDefaultType} must be in the" +
" supportedTypes list: $supportedTypes"
}
- require(defaultDataSourcePolicy.systemDataSourceFallbackDefaultType ==
- ComplicationType.NOT_CONFIGURED ||
- defaultDataSourcePolicy.systemDataSourceFallbackDefaultType in supportedTypes
+ require(
+ defaultDataSourcePolicy.systemDataSourceFallbackDefaultType ==
+ ComplicationType.NOT_CONFIGURED ||
+ defaultDataSourcePolicy.systemDataSourceFallbackDefaultType in supportedTypes
) {
"defaultDataSourcePolicy.systemDataSourceFallbackDefaultType " +
"${defaultDataSourcePolicy.systemDataSourceFallbackDefaultType} must be in " +
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
index f996759..28a76f1 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
@@ -175,7 +175,7 @@
) {
/** The [SurfaceHolder] that [renderInternal] will draw into. */
public var surfaceHolder: SurfaceHolder = surfaceHolder
- protected set
+ protected set
@OptIn(WatchFaceExperimental::class) private var pendingWatchFaceColors: WatchFaceColors? = null
private var pendingWatchFaceColorsSet = false
@@ -379,7 +379,7 @@
* @param zonedDateTime The [ZonedDateTime] to use when rendering the watch face
* @param renderParameters The [RenderParameters] to use when rendering the watch face
* @param screenShotSurfaceHolder The [SurfaceHolder] containing the [Surface] to render into.
- * This is assumed to have the same dimensions as the screen.
+ * This is assumed to have the same dimensions as the screen.
*/
@Suppress("HiddenAbstractMethod")
@UiThread
@@ -1448,13 +1448,14 @@
runBlocking {
glContextLock.withLock {
- val tempEglSurface = EGL14.eglCreateWindowSurface(
- eglDisplay,
- eglConfig,
- surfaceHolder.surface,
- eglSurfaceAttribList,
- 0
- )
+ val tempEglSurface =
+ EGL14.eglCreateWindowSurface(
+ eglDisplay,
+ eglConfig,
+ surfaceHolder.surface,
+ eglSurfaceAttribList,
+ 0
+ )
if (
!EGL14.eglMakeCurrent(
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFace.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFace.kt
index c0cb13a..edb9c49 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFace.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFace.kt
@@ -84,7 +84,6 @@
/**
* The type of watch face, whether it's digital or analog. This influences the time displayed for
* remote previews.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef(value = [WatchFaceType.DIGITAL, WatchFaceType.ANALOG])
@@ -158,10 +157,7 @@
componentNameToEditorDelegate.clear()
}
- /**
- * For use by on watch face editors.
- *
- */
+ /** For use by on watch face editors. */
@JvmStatic
@UiThread
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -180,9 +176,7 @@
}
@UiThread
- internal fun createWatchFaceServiceOld(
- componentName: ComponentName
- ): WatchFaceService {
+ internal fun createWatchFaceServiceOld(componentName: ComponentName): WatchFaceService {
// Attempt to construct the class for the specified watchFaceName, failing if it either
// doesn't exist or isn't a [WatchFaceService].
val watchFaceServiceClass =
@@ -205,10 +199,13 @@
context: Context
): WatchFaceService {
// Resolve the WatchFaceControlService and construct WatchFaceService using its API
- val services = context.packageManager.queryIntentServices(Intent(
- WatchFaceControlService.ACTION_WATCHFACE_CONTROL_SERVICE).apply {
- setPackage(context.packageName)
- }, 0)
+ val services =
+ context.packageManager.queryIntentServices(
+ Intent(WatchFaceControlService.ACTION_WATCHFACE_CONTROL_SERVICE).apply {
+ setPackage(context.packageName)
+ },
+ 0
+ )
if (services.size != 1)
throw IllegalArgumentException(
@@ -218,9 +215,7 @@
val watchFaceControlServiceClass =
Class.forName(services[0].serviceInfo.name)
- ?: throw IllegalArgumentException(
- "Can't find ${services[0].serviceInfo.name}"
- )
+ ?: throw IllegalArgumentException("Can't find ${services[0].serviceInfo.name}")
val watchFaceControlService =
watchFaceControlServiceClass.getConstructor().newInstance()
@@ -230,10 +225,7 @@
?: throw IllegalArgumentException("Can't create ${componentName.className}")
}
- /**
- * For use by on watch face editors.
- *
- */
+ /** For use by on watch face editors. */
@SuppressLint("NewApi")
@JvmStatic
@UiThread
@@ -243,25 +235,21 @@
params: HeadlessWatchFaceInstanceParams,
context: Context
): EditorDelegate {
- val watchFaceService = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
- createWatchFaceService(componentName, context)
- } else {
- createWatchFaceServiceOld(componentName)
- }.apply {
- setContext(context)
- }
+ val watchFaceService =
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ createWatchFaceService(componentName, context)
+ } else {
+ createWatchFaceServiceOld(componentName)
+ }
+ .apply { setContext(context) }
- val engine =
- watchFaceService.createHeadlessEngine() as WatchFaceService.EngineWrapper
+ val engine = watchFaceService.createHeadlessEngine() as WatchFaceService.EngineWrapper
val headlessWatchFaceImpl = engine.createHeadlessInstance(params)
return engine.deferredWatchFaceImpl.await().WFEditorDelegate(headlessWatchFaceImpl)
}
}
- /**
- * Delegate used by on watch face editors.
- *
- */
+ /** Delegate used by on watch face editors. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public interface EditorDelegate {
/** The [WatchFace]'s [UserStyleSchema]. */
@@ -306,10 +294,7 @@
)
}
- /**
- * Used to inform EditorSession about changes to [ComplicationSlot.configExtras].
- *
- */
+ /** Used to inform EditorSession about changes to [ComplicationSlot.configExtras]. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public interface ComplicationSlotConfigExtrasChangeCallback {
public fun onComplicationSlotConfigExtrasChanged()
@@ -557,8 +542,7 @@
private val watchFaceHostApi: WatchFaceHostApi,
private val watchState: WatchState,
internal val currentUserStyleRepository: CurrentUserStyleRepository,
- @get:VisibleForTesting
- public var complicationSlotsManager: ComplicationSlotsManager,
+ @get:VisibleForTesting public var complicationSlotsManager: ComplicationSlotsManager,
internal val broadcastsObserver: BroadcastsObserver,
internal var broadcastsReceiver: BroadcastsReceiver?
) {
@@ -1176,19 +1160,20 @@
hostToken: IBinder,
width: Int,
height: Int
- ): RemoteWatchFaceView? = TraceEvent("WatchFaceImpl.createRemoteWatchFaceView").use {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
- return CreateRemoteWatchFaceViewHelper.createRemoteWatchFaceView(
- watchFaceHostApi,
- this,
- hostToken,
- width,
- height
- )
- } else {
- return null
+ ): RemoteWatchFaceView? =
+ TraceEvent("WatchFaceImpl.createRemoteWatchFaceView").use {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ return CreateRemoteWatchFaceViewHelper.createRemoteWatchFaceView(
+ watchFaceHostApi,
+ this,
+ hostToken,
+ width,
+ height
+ )
+ } else {
+ return null
+ }
}
- }
@UiThread
@RequiresApi(27)
@@ -1286,27 +1271,26 @@
height: Int
): RemoteWatchFaceView {
val context = watchFaceHostApi.getContext()
- val host = SurfaceControlViewHost(
- context,
- context.getSystemService(WindowManager::class.java).defaultDisplay,
- hostToken
- )
+ val host =
+ SurfaceControlViewHost(
+ context,
+ context.getSystemService(WindowManager::class.java).defaultDisplay,
+ hostToken
+ )
val view = SurfaceView(context)
- view.layoutParams = WindowManager.LayoutParams(
- WindowManager.LayoutParams.WRAP_CONTENT,
- WindowManager.LayoutParams.WRAP_CONTENT,
- WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
- WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
- PixelFormat.TRANSLUCENT
- ).apply {
- title = "RemoteWatchFaceView"
- }
+ view.layoutParams =
+ WindowManager.LayoutParams(
+ WindowManager.LayoutParams.WRAP_CONTENT,
+ WindowManager.LayoutParams.WRAP_CONTENT,
+ WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
+ WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
+ PixelFormat.TRANSLUCENT
+ )
+ .apply { title = "RemoteWatchFaceView" }
host.setView(view, width, height)
- return RemoteWatchFaceView(
- view,
- host,
- watchFaceHostApi.getUiThreadCoroutineScope()
- ) { surfaceHolder, params ->
+ return RemoteWatchFaceView(view, host, watchFaceHostApi.getUiThreadCoroutineScope()) {
+ surfaceHolder,
+ params ->
val oldStyle = watchFaceImpl.currentUserStyleRepository.userStyle.value
val instant = Instant.ofEpochMilli(params.calendarTimeMillis)
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt
index fce93a2..3f160d0 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt
@@ -28,10 +28,7 @@
import java.time.Duration
import kotlinx.coroutines.CoroutineScope
-/**
- * The API [WatchFaceImpl] uses to communicate with the system.
- *
- */
+/** The API [WatchFaceImpl] uses to communicate with the system. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public interface WatchFaceHostApi {
/** The [WatchFaceService.SystemTimeProvider]. */
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
index 4cf18b94..0f9a4ba 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
@@ -429,17 +429,13 @@
}
}
- /**
- * The context used to resolve resources. Unlocks future work.
- *
- */
+ /** The context used to resolve resources. Unlocks future work. */
protected open val resourcesContext: Context
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) get() = this
/**
* Returns the id of the XmlSchemaAndComplicationSlotsDefinition XML resource or 0 if it can't
* be found.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@Suppress("DEPRECATION")
@@ -618,7 +614,6 @@
/**
* Override to force the watchface to be regarded as being visible. This must not be used in
* production code or significant battery life regressions may occur.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) open fun forceIsVisibleForTesting() = false
@@ -653,10 +648,7 @@
internal var backgroundThread: HandlerThread? = null
- /**
- * Interface for getting the current system time.
- *
- */
+ /** Interface for getting the current system time. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public interface SystemTimeProvider {
/** Returns the current system time in milliseconds. */
@@ -719,6 +711,7 @@
/** [Choreographer] isn't supposed to be mocked, so we use a thin wrapper. */
internal interface ChoreographerWrapper {
fun postFrameCallback(callback: Choreographer.FrameCallback)
+
fun removeFrameCallback(callback: Choreographer.FrameCallback)
}
@@ -744,10 +737,7 @@
internal open fun cancelCoroutineScopesInOnDestroy() = true
- /**
- * This is open for use by tests, it allows them to inject a custom [SurfaceHolder].
- *
- */
+ /** This is open for use by tests, it allows them to inject a custom [SurfaceHolder]. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public open fun getWallpaperSurfaceHolderOverride(): SurfaceHolder? = null
@@ -1402,10 +1392,11 @@
// probably will connect at a later time. In the latter case we should
// register a parameterless engine to allow the subsequent connection to
// succeed.
- pendingWallpaperInstance = InteractiveInstanceManager
- .setParameterlessEngineOrTakePendingWallpaperInteractiveWatchFaceInstance(
- this
- )
+ pendingWallpaperInstance =
+ InteractiveInstanceManager
+ .setParameterlessEngineOrTakePendingWallpaperInteractiveWatchFaceInstance( // ktlint-disable max-line-length
+ this
+ )
}
// If there's a pending WallpaperInteractiveWatchFaceInstance then create it.
@@ -1460,7 +1451,7 @@
@SuppressWarnings("NewApi")
internal fun attachToParameterlessEngine(
pendingWallpaperInstance:
- InteractiveInstanceManager.PendingWallpaperInteractiveWatchFaceInstance
+ InteractiveInstanceManager.PendingWallpaperInteractiveWatchFaceInstance
) {
uiThreadCoroutineScope.launch {
try {
@@ -2241,12 +2232,7 @@
watchState: WatchState
) {
val broadcastsObserver =
- BroadcastsObserver(
- watchState,
- this,
- deferredWatchFaceImpl,
- uiThreadCoroutineScope
- )
+ BroadcastsObserver(watchState, this, deferredWatchFaceImpl, uiThreadCoroutineScope)
// There's no point creating BroadcastsReceiver or listening for Accessibility state
// changes if this is a headless instance.
@@ -2881,7 +2867,6 @@
/**
* If the instance ID for [MutableWatchState.watchFaceInstanceId] begin with this prefix, then the
* system sends consistent IDs for interactive, headless and editor sessions.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
const val SYSTEM_SUPPORTS_CONSISTENT_IDS_PREFIX = "wfId-"
@@ -2889,14 +2874,12 @@
/**
* Instance ID to use when either there's no system id or it doesn't start with
* [SYSTEM_SUPPORTS_CONSISTENT_IDS_PREFIX].
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) const val DEFAULT_INSTANCE_ID = "defaultInstance"
/**
* This is needed to make the instance id consistent between Interactive, Headless and EditorSession
* for old versions of the system.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
fun sanitizeWatchFaceId(instanceId: String?) =
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchState.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchState.kt
index b2ef214..29ebfde 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchState.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchState.kt
@@ -175,6 +175,7 @@
set(@Px value) {
field = value
}
+
public var isHeadless: Boolean = false
public fun asWatchState(): WatchState =
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt
index 1dbbc9a..d6e5cdc 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt
@@ -73,10 +73,10 @@
}
/**
- * We either return the pendingWallpaperInteractiveWatchFaceInstance if there is one or
- * set parameterlessEngine. A parameterless engine, is one that's been created without any
- * start up params. Typically this can only happen if a WSL watchface is upgraded to an
- * androidx one, so WallpaperManager knows about it but WearServices/WSL does not.
+ * We either return the pendingWallpaperInteractiveWatchFaceInstance if there is one or set
+ * parameterlessEngine. A parameterless engine, is one that's been created without any start
+ * up params. Typically this can only happen if a WSL watchface is upgraded to an androidx
+ * one, so WallpaperManager knows about it but WearServices/WSL does not.
*/
@SuppressLint("SyntheticAccessor")
fun setParameterlessEngineOrTakePendingWallpaperInteractiveWatchFaceInstance(
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/RemoteWatchFaceView.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/RemoteWatchFaceView.kt
index e3abf0a..f2312e1e 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/RemoteWatchFaceView.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/RemoteWatchFaceView.kt
@@ -82,4 +82,4 @@
override fun close() {
host.release()
}
-}
\ No newline at end of file
+}
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/WatchFaceControlService.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/WatchFaceControlService.kt
index b41c5d19..92a7cf0 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/WatchFaceControlService.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/WatchFaceControlService.kt
@@ -49,10 +49,7 @@
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
-/**
- * A service for creating and controlling watch face instances.
- *
- */
+/** A service for creating and controlling watch face instances. */
@RequiresApi(27)
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public open class WatchFaceControlService : Service() {
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/editor/EditorService.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/editor/EditorService.kt
index 71b0d50..0755492 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/editor/EditorService.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/editor/EditorService.kt
@@ -22,10 +22,7 @@
import androidx.wear.watchface.IndentingPrintWriter
import androidx.wear.watchface.editor.data.EditorStateWireFormat
-/**
- * Implementation of [IEditorService], intended for use by EditorSession only.
- *
- */
+/** Implementation of [IEditorService], intended for use by EditorSession only. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class EditorService : IEditorService.Stub() {
private val lock = Any()
diff --git a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt
index fa8a2c8..7296865 100644
--- a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt
+++ b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt
@@ -71,6 +71,7 @@
/** The ids of the [ComplicationSlot]s that have been tapped. */
val tappedComplicationSlotIds: List<Int>
get() = mutableTappedComplicationIds
+
var complicationSelected: Int? = null
var mockZoneId: ZoneId = ZoneId.of("UTC")
var renderer: Renderer? = null
diff --git a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt
index e7f10f7..bba42d55 100644
--- a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt
+++ b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt
@@ -23,6 +23,8 @@
import android.content.ComponentName
import android.content.Context
import android.content.Intent
+import android.content.IntentFilter
+import android.content.pm.ServiceInfo
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
@@ -39,8 +41,6 @@
import android.provider.Settings
import android.support.wearable.complications.ComplicationData as WireComplicationData
import android.support.wearable.complications.ComplicationText as WireComplicationText
-import android.content.IntentFilter
-import android.content.pm.ServiceInfo
import android.support.wearable.watchface.Constants
import android.support.wearable.watchface.IWatchFaceService
import android.support.wearable.watchface.WatchFaceStyle
@@ -3760,21 +3760,22 @@
@Config(sdk = [Build.VERSION_CODES.R])
public fun directBoot() {
val instanceId = "DirectBootInstance"
- val params = WallpaperInteractiveWatchFaceInstanceParams(
- instanceId,
- DeviceConfig(false, false, 0, 0),
- WatchUiState(false, 0),
- UserStyle(
- hashMapOf(
- colorStyleSetting to blueStyleOption,
- watchHandStyleSetting to gothicStyleOption
- )
+ val params =
+ WallpaperInteractiveWatchFaceInstanceParams(
+ instanceId,
+ DeviceConfig(false, false, 0, 0),
+ WatchUiState(false, 0),
+ UserStyle(
+ hashMapOf(
+ colorStyleSetting to blueStyleOption,
+ watchHandStyleSetting to gothicStyleOption
+ )
+ )
+ .toWireFormat(),
+ null,
+ null,
+ null
)
- .toWireFormat(),
- null,
- null,
- null
- )
testWatchFaceService =
TestWatchFaceService(
WatchFaceType.ANALOG,
@@ -5215,19 +5216,19 @@
complicationSlotsManager.selectComplicationDataForInstant(Instant.ofEpochSecond(999))
assertThat(getLeftShortTextComplicationDataText()).isEqualTo("A")
assertThat(
- engineWrapper.contentDescriptionLabels[1]
- .text
- .getTextAt(ApplicationProvider.getApplicationContext<Context>().resources, 0)
- )
+ engineWrapper.contentDescriptionLabels[1]
+ .text
+ .getTextAt(ApplicationProvider.getApplicationContext<Context>().resources, 0)
+ )
.isEqualTo("A")
complicationSlotsManager.selectComplicationDataForInstant(Instant.ofEpochSecond(1000))
assertThat(getLeftShortTextComplicationDataText()).isEqualTo("B")
assertThat(
- engineWrapper.contentDescriptionLabels[1]
- .text
- .getTextAt(ApplicationProvider.getApplicationContext<Context>().resources, 0)
- )
+ engineWrapper.contentDescriptionLabels[1]
+ .text
+ .getTextAt(ApplicationProvider.getApplicationContext<Context>().resources, 0)
+ )
.isEqualTo("B")
complicationSlotsManager.selectComplicationDataForInstant(Instant.ofEpochSecond(1999))
@@ -5236,10 +5237,10 @@
complicationSlotsManager.selectComplicationDataForInstant(Instant.ofEpochSecond(2000))
assertThat(getLeftShortTextComplicationDataText()).isEqualTo("C")
assertThat(
- engineWrapper.contentDescriptionLabels[1]
- .text
- .getTextAt(ApplicationProvider.getApplicationContext<Context>().resources, 0)
- )
+ engineWrapper.contentDescriptionLabels[1]
+ .text
+ .getTextAt(ApplicationProvider.getApplicationContext<Context>().resources, 0)
+ )
.isEqualTo("C")
complicationSlotsManager.selectComplicationDataForInstant(Instant.ofEpochSecond(2999))
@@ -5248,10 +5249,10 @@
complicationSlotsManager.selectComplicationDataForInstant(Instant.ofEpochSecond(3000))
assertThat(getLeftShortTextComplicationDataText()).isEqualTo("B")
assertThat(
- engineWrapper.contentDescriptionLabels[1]
- .text
- .getTextAt(ApplicationProvider.getApplicationContext<Context>().resources, 0)
- )
+ engineWrapper.contentDescriptionLabels[1]
+ .text
+ .getTextAt(ApplicationProvider.getApplicationContext<Context>().resources, 0)
+ )
.isEqualTo("B")
complicationSlotsManager.selectComplicationDataForInstant(Instant.ofEpochSecond(3999))
@@ -5260,10 +5261,10 @@
complicationSlotsManager.selectComplicationDataForInstant(Instant.ofEpochSecond(4000))
assertThat(getLeftShortTextComplicationDataText()).isEqualTo("A")
assertThat(
- engineWrapper.contentDescriptionLabels[1]
- .text
- .getTextAt(ApplicationProvider.getApplicationContext<Context>().resources, 0)
- )
+ engineWrapper.contentDescriptionLabels[1]
+ .text
+ .getTextAt(ApplicationProvider.getApplicationContext<Context>().resources, 0)
+ )
.isEqualTo("A")
}
@@ -6556,13 +6557,14 @@
lateinit var delegate: WatchFace.EditorDelegate
val shadowPackageManager = shadowOf(context.packageManager)
- val controlServiceComponent = ComponentName(
- context, TestWatchFaceControlService::class.java
+ val controlServiceComponent =
+ ComponentName(context, TestWatchFaceControlService::class.java)
+ shadowPackageManager.addOrUpdateService(
+ ServiceInfo().apply {
+ packageName = controlServiceComponent.packageName
+ name = controlServiceComponent.className
+ }
)
- shadowPackageManager.addOrUpdateService(ServiceInfo().apply {
- packageName = controlServiceComponent.packageName
- name = controlServiceComponent.className
- })
shadowPackageManager.addIntentFilterForService(
controlServiceComponent,
IntentFilter(WatchFaceControlService.ACTION_WATCHFACE_CONTROL_SERVICE)
@@ -6632,19 +6634,20 @@
engineWrapper.onSurfaceChanged(surfaceHolder, 0, 100, 100)
engineWrapper.onVisibilityChanged(true)
- val callback = object : IPendingInteractiveWatchFace.Stub() {
- override fun getApiVersion() = IPendingInteractiveWatchFace.API_VERSION
+ val callback =
+ object : IPendingInteractiveWatchFace.Stub() {
+ override fun getApiVersion() = IPendingInteractiveWatchFace.API_VERSION
- override fun onInteractiveWatchFaceCreated(
- iInteractiveWatchFace: IInteractiveWatchFace
- ) {
- interactiveWatchFaceInstance = iInteractiveWatchFace
- }
+ override fun onInteractiveWatchFaceCreated(
+ iInteractiveWatchFace: IInteractiveWatchFace
+ ) {
+ interactiveWatchFaceInstance = iInteractiveWatchFace
+ }
- override fun onInteractiveWatchFaceCrashed(exception: CrashInfoParcel?) {
- fail("WatchFace crashed: $exception")
+ override fun onInteractiveWatchFaceCrashed(exception: CrashInfoParcel?) {
+ fail("WatchFace crashed: $exception")
+ }
}
- }
InteractiveInstanceManager
.getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance(
diff --git a/webkit/OWNERS b/webkit/OWNERS
index 3852064..93f399a 100644
--- a/webkit/OWNERS
+++ b/webkit/OWNERS
@@ -1,4 +1,5 @@
# Bug component: 461230
+elabadysayed@google.com
ntfschr@google.com
pbirk@google.com
swestphal@google.com
diff --git a/window/window-testing/api/api_lint.ignore b/window/window-testing/api/api_lint.ignore
index 1789662..f64ca92 100644
--- a/window/window-testing/api/api_lint.ignore
+++ b/window/window-testing/api/api_lint.ignore
@@ -1,9 +1,9 @@
// Baseline format: 1.0
-InvalidNullabilityOverride: androidx.window.testing.layout.StubWindowMetricsCalculatorRule#apply(org.junit.runners.model.Statement, org.junit.runner.Description) parameter #0:
- Invalid nullability on parameter `base` in method `apply`. Parameters of overrides cannot be NonNull if the super parameter is unannotated.
-InvalidNullabilityOverride: androidx.window.testing.layout.StubWindowMetricsCalculatorRule#apply(org.junit.runners.model.Statement, org.junit.runner.Description) parameter #1:
- Invalid nullability on parameter `description` in method `apply`. Parameters of overrides cannot be NonNull if the super parameter is unannotated.
InvalidNullabilityOverride: androidx.window.testing.layout.WindowLayoutInfoPublisherRule#apply(org.junit.runners.model.Statement, org.junit.runner.Description) parameter #0:
Invalid nullability on parameter `base` in method `apply`. Parameters of overrides cannot be NonNull if the super parameter is unannotated.
InvalidNullabilityOverride: androidx.window.testing.layout.WindowLayoutInfoPublisherRule#apply(org.junit.runners.model.Statement, org.junit.runner.Description) parameter #1:
Invalid nullability on parameter `description` in method `apply`. Parameters of overrides cannot be NonNull if the super parameter is unannotated.
+InvalidNullabilityOverride: androidx.window.testing.layout.WindowMetricsCalculatorRule#apply(org.junit.runners.model.Statement, org.junit.runner.Description) parameter #0:
+ Invalid nullability on parameter `base` in method `apply`. Parameters of overrides cannot be NonNull if the super parameter is unannotated.
+InvalidNullabilityOverride: androidx.window.testing.layout.WindowMetricsCalculatorRule#apply(org.junit.runners.model.Statement, org.junit.runner.Description) parameter #1:
+ Invalid nullability on parameter `description` in method `apply`. Parameters of overrides cannot be NonNull if the super parameter is unannotated.
diff --git a/window/window-testing/api/current.txt b/window/window-testing/api/current.txt
index 12a7d20..0c67563 100644
--- a/window/window-testing/api/current.txt
+++ b/window/window-testing/api/current.txt
@@ -7,6 +7,11 @@
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds);
}
public final class WindowLayoutInfoPublisherRule implements org.junit.rules.TestRule {
@@ -20,5 +25,10 @@
method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo();
}
+ public final class WindowMetricsCalculatorRule implements org.junit.rules.TestRule {
+ ctor public WindowMetricsCalculatorRule();
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ }
+
}
diff --git a/window/window-testing/api/public_plus_experimental_current.txt b/window/window-testing/api/public_plus_experimental_current.txt
index 16174f8..bd1d758 100644
--- a/window/window-testing/api/public_plus_experimental_current.txt
+++ b/window/window-testing/api/public_plus_experimental_current.txt
@@ -41,16 +41,11 @@
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds);
- }
-
- @androidx.window.core.ExperimentalWindowApi public final class StubWindowMetricsCalculatorRule implements org.junit.rules.TestRule {
- ctor public StubWindowMetricsCalculatorRule();
- method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds);
}
public final class WindowLayoutInfoPublisherRule implements org.junit.rules.TestRule {
@@ -64,5 +59,10 @@
method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo();
}
+ public final class WindowMetricsCalculatorRule implements org.junit.rules.TestRule {
+ ctor public WindowMetricsCalculatorRule();
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ }
+
}
diff --git a/window/window-testing/api/restricted_current.txt b/window/window-testing/api/restricted_current.txt
index 12a7d20..0c67563 100644
--- a/window/window-testing/api/restricted_current.txt
+++ b/window/window-testing/api/restricted_current.txt
@@ -7,6 +7,11 @@
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds);
}
public final class WindowLayoutInfoPublisherRule implements org.junit.rules.TestRule {
@@ -20,5 +25,10 @@
method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo();
}
+ public final class WindowMetricsCalculatorRule implements org.junit.rules.TestRule {
+ ctor public WindowMetricsCalculatorRule();
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ }
+
}
diff --git a/window/window-testing/src/androidTest/java/androidx/window/testing/layout/StubWindowMetricsCalculatorRuleTest.kt b/window/window-testing/src/androidTest/java/androidx/window/testing/layout/WindowMetricsCalculatorRuleTest.kt
similarity index 94%
rename from window/window-testing/src/androidTest/java/androidx/window/testing/layout/StubWindowMetricsCalculatorRuleTest.kt
rename to window/window-testing/src/androidTest/java/androidx/window/testing/layout/WindowMetricsCalculatorRuleTest.kt
index 3e6544d..a663eaf 100644
--- a/window/window-testing/src/androidTest/java/androidx/window/testing/layout/StubWindowMetricsCalculatorRuleTest.kt
+++ b/window/window-testing/src/androidTest/java/androidx/window/testing/layout/WindowMetricsCalculatorRuleTest.kt
@@ -23,7 +23,6 @@
import androidx.annotation.RequiresApi
import androidx.test.core.app.ActivityScenario
import androidx.test.ext.junit.rules.ActivityScenarioRule
-import androidx.window.core.ExperimentalWindowApi
import androidx.window.layout.WindowMetricsCalculator
import androidx.window.testing.TestActivity
import org.junit.Assert.assertEquals
@@ -35,19 +34,18 @@
import org.junit.runners.model.Statement
/**
- * A test class for [StubWindowMetricsCalculatorRule] that tests using
+ * A test class for [WindowMetricsCalculatorRule] that tests using
* [StubWindowMetricsCalculator] instead of the actual implementation.
*/
-@OptIn(ExperimentalWindowApi::class)
-class StubWindowMetricsCalculatorRuleTest {
+class WindowMetricsCalculatorRuleTest {
private val activityRule = ActivityScenarioRule(TestActivity::class.java)
- private val stubWindowMetricsCalculatorRule = StubWindowMetricsCalculatorRule()
+ private val mWindowMetricsCalculatorRule = WindowMetricsCalculatorRule()
@get:Rule
val testRule: TestRule
init {
- testRule = RuleChain.outerRule(stubWindowMetricsCalculatorRule).around(activityRule)
+ testRule = RuleChain.outerRule(mWindowMetricsCalculatorRule).around(activityRule)
}
@Test
@@ -166,7 +164,7 @@
WindowMetricsCalculator.reset()
val expected = WindowMetricsCalculator.getOrCreate()
try {
- StubWindowMetricsCalculatorRule().apply(
+ WindowMetricsCalculatorRule().apply(
object : Statement() {
override fun evaluate() {
throw TestException
diff --git a/window/window-testing/src/main/java/androidx/window/testing/layout/DisplayFeatureTesting.kt b/window/window-testing/src/main/java/androidx/window/testing/layout/DisplayFeatureTesting.kt
index b6aa95e..2a065cb 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/layout/DisplayFeatureTesting.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/layout/DisplayFeatureTesting.kt
@@ -19,7 +19,6 @@
import android.app.Activity
import android.graphics.Rect
-import androidx.window.core.ExperimentalWindowApi
import androidx.window.layout.FoldingFeature
import androidx.window.layout.FoldingFeature.OcclusionType.Companion.FULL
import androidx.window.layout.FoldingFeature.OcclusionType.Companion.NONE
@@ -96,7 +95,6 @@
*/
@JvmOverloads
@JvmName("createFoldingFeature")
-@ExperimentalWindowApi
fun FoldingFeature(
windowBounds: Rect,
center: Int = -1,
diff --git a/window/window-testing/src/main/java/androidx/window/testing/layout/StubMetricDecorator.kt b/window/window-testing/src/main/java/androidx/window/testing/layout/StubMetricDecorator.kt
index 14bf0c7..7a8eeb2 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/layout/StubMetricDecorator.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/layout/StubMetricDecorator.kt
@@ -16,14 +16,12 @@
package androidx.window.testing.layout
-import androidx.window.core.ExperimentalWindowApi
import androidx.window.layout.WindowMetricsCalculator
import androidx.window.layout.WindowMetricsCalculatorDecorator
/**
* A decorator to return [StubWindowMetricsCalculator] instead of the actual implementation.
*/
-@ExperimentalWindowApi
internal object StubMetricDecorator : WindowMetricsCalculatorDecorator {
override fun decorate(calculator: WindowMetricsCalculator): WindowMetricsCalculator {
return StubWindowMetricsCalculator()
diff --git a/window/window-testing/src/main/java/androidx/window/testing/layout/WindowLayoutInfoPublisherRule.kt b/window/window-testing/src/main/java/androidx/window/testing/layout/WindowLayoutInfoPublisherRule.kt
index c9c7aeb..b8d4b070 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/layout/WindowLayoutInfoPublisherRule.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/layout/WindowLayoutInfoPublisherRule.kt
@@ -45,7 +45,7 @@
* <li>A fold in the middle and has horizontal orientation.</li>
* </ul>
*/
-public class WindowLayoutInfoPublisherRule() : TestRule {
+class WindowLayoutInfoPublisherRule : TestRule {
private val flow = MutableSharedFlow<WindowLayoutInfo>(
extraBufferCapacity = 1,
@@ -70,7 +70,7 @@
* Send an arbitrary [WindowLayoutInfo] through
* [androidx.window.layout.WindowInfoTracker.windowLayoutInfo]. Each event is sent only once.
*/
- public fun overrideWindowLayoutInfo(info: WindowLayoutInfo) {
+ fun overrideWindowLayoutInfo(info: WindowLayoutInfo) {
flow.tryEmit(info)
}
}
\ No newline at end of file
diff --git a/window/window-testing/src/main/java/androidx/window/testing/layout/StubWindowMetricsCalculatorRule.kt b/window/window-testing/src/main/java/androidx/window/testing/layout/WindowMetricsCalculatorRule.kt
similarity index 93%
rename from window/window-testing/src/main/java/androidx/window/testing/layout/StubWindowMetricsCalculatorRule.kt
rename to window/window-testing/src/main/java/androidx/window/testing/layout/WindowMetricsCalculatorRule.kt
index bfb7c48..10e68f1 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/layout/StubWindowMetricsCalculatorRule.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/layout/WindowMetricsCalculatorRule.kt
@@ -17,7 +17,6 @@
package androidx.window.testing.layout
import android.app.Activity
-import androidx.window.core.ExperimentalWindowApi
import androidx.window.layout.WindowMetricsCalculator
import org.junit.rules.TestRule
import org.junit.runner.Description
@@ -32,8 +31,7 @@
* the Espresso Test framework with an actual [Activity] and use the actual
* [WindowMetricsCalculator].
*/
-@ExperimentalWindowApi
-class StubWindowMetricsCalculatorRule : TestRule {
+class WindowMetricsCalculatorRule : TestRule {
override fun apply(base: Statement, description: Description): Statement {
return object : Statement() {
diff --git a/window/window/api/current.txt b/window/window/api/current.txt
index 5617dbb..8fbbb45 100644
--- a/window/window/api/current.txt
+++ b/window/window/api/current.txt
@@ -302,6 +302,7 @@
public interface WindowInfoTracker {
method public default static androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
+ method public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
method public kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(android.app.Activity activity);
field public static final androidx.window.layout.WindowInfoTracker.Companion Companion;
}
diff --git a/window/window/api/public_plus_experimental_current.txt b/window/window/api/public_plus_experimental_current.txt
index 0ac0175..0c1d735 100644
--- a/window/window/api/public_plus_experimental_current.txt
+++ b/window/window/api/public_plus_experimental_current.txt
@@ -330,7 +330,7 @@
public interface WindowInfoTracker {
method public default static androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
- method @androidx.window.core.ExperimentalWindowApi public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
+ method public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
method public kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(android.app.Activity activity);
field public static final androidx.window.layout.WindowInfoTracker.Companion Companion;
}
diff --git a/window/window/api/restricted_current.txt b/window/window/api/restricted_current.txt
index 5617dbb..8fbbb45 100644
--- a/window/window/api/restricted_current.txt
+++ b/window/window/api/restricted_current.txt
@@ -302,6 +302,7 @@
public interface WindowInfoTracker {
method public default static androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
+ method public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
method public kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(android.app.Activity activity);
field public static final androidx.window.layout.WindowInfoTracker.Companion Companion;
}
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/SafeActivityEmbeddingComponentProviderTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/SafeActivityEmbeddingComponentProviderTest.kt
index 3b93a9a..1eab9d0 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/SafeActivityEmbeddingComponentProviderTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/SafeActivityEmbeddingComponentProviderTest.kt
@@ -18,9 +18,13 @@
import android.util.Log
import androidx.window.core.ConsumerAdapter
+import androidx.window.core.ExtensionsUtil
import androidx.window.extensions.WindowExtensions
+import androidx.window.extensions.WindowExtensions.VENDOR_API_LEVEL_1
import androidx.window.extensions.WindowExtensionsProvider
+import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
import org.junit.Test
/**
@@ -31,14 +35,13 @@
*/
class SafeActivityEmbeddingComponentProviderTest {
+ // TODO(b/267708462) : add a more reliable test
/**
* 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() {
@@ -50,12 +53,12 @@
Log.d(TAG, "Device doesn't have WindowExtensions available")
return
}
- val safeComponent = SafeActivityEmbeddingComponentProvider(
+ val safeProvider = SafeActivityEmbeddingComponentProvider(
loader,
consumerAdapter,
windowExtensions
)
- .activityEmbeddingComponent
+ val safeComponent = safeProvider.activityEmbeddingComponent
try {
val actualComponent = windowExtensions.activityEmbeddingComponent
if (actualComponent == null) {
@@ -63,8 +66,11 @@
} 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")
+ assertNotNull(safeComponent)
+ assertTrue(safeProvider.isActivityEmbeddingComponentAccessible())
+ when (ExtensionsUtil.safeVendorApiLevel) {
+ VENDOR_API_LEVEL_1 -> assertTrue(safeProvider.hasValidVendorApiLevel1())
+ else -> assertTrue(safeProvider.hasValidVendorApiLevel2())
}
}
} catch (e: UnsupportedOperationException) {
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 bc78a38..9855ce8 100644
--- a/window/window/src/androidTest/java/androidx/window/layout/SafeWindowLayoutComponentProviderTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/layout/SafeWindowLayoutComponentProviderTest.kt
@@ -16,10 +16,13 @@
package androidx.window.layout
-import android.util.Log
import androidx.window.core.ConsumerAdapter
+import androidx.window.core.ExtensionsUtil
+import androidx.window.extensions.WindowExtensions.VENDOR_API_LEVEL_1
import androidx.window.extensions.WindowExtensionsProvider
+import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
import org.junit.Test
/**
@@ -37,8 +40,8 @@
fun windowLayoutComponentIsAvailable_ifProviderIsAvailable() {
val loader = SafeWindowLayoutComponentProviderTest::class.java.classLoader!!
val consumerAdapter = ConsumerAdapter(loader)
- val safeComponent = SafeWindowLayoutComponentProvider(loader, consumerAdapter)
- .windowLayoutComponent
+ val safeProvider = SafeWindowLayoutComponentProvider(loader, consumerAdapter)
+ val safeComponent = safeProvider.windowLayoutComponent
try {
val extensions = WindowExtensionsProvider.getWindowExtensions()
@@ -48,15 +51,16 @@
} else {
// 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")
+ assertNotNull(safeComponent)
+ assertTrue(safeProvider.isWindowLayoutComponentAccessible())
+ when (ExtensionsUtil.safeVendorApiLevel) {
+ VENDOR_API_LEVEL_1 -> assertTrue(safeProvider.hasValidVendorApiLevel1())
+ else -> assertTrue(safeProvider.hasValidVendorApiLevel2())
+ }
}
} 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/SafeWindowExtensionsProvider.kt b/window/window/src/main/java/androidx/window/SafeWindowExtensionsProvider.kt
new file mode 100644
index 0000000..2aa82f4
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/SafeWindowExtensionsProvider.kt
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window
+
+import androidx.window.reflection.ReflectionUtils
+import androidx.window.reflection.ReflectionUtils.doesReturn
+import androidx.window.reflection.ReflectionUtils.isPublic
+import androidx.window.reflection.WindowExtensionsConstants
+
+internal class SafeWindowExtensionsProvider(private val loader: ClassLoader) {
+ internal val windowExtensionsClass: Class<*>
+ get() {
+ return loader.loadClass(WindowExtensionsConstants.WINDOW_EXTENSIONS_CLASS)
+ }
+
+ internal fun isWindowExtensionsValid(): Boolean {
+ return isWindowExtensionsPresent() &&
+ ReflectionUtils.validateReflection(
+ "WindowExtensionsProvider#getWindowExtensions is not valid"
+ ) {
+ val providerClass = windowExtensionsProviderClass
+ val getWindowExtensionsMethod = providerClass
+ .getDeclaredMethod("getWindowExtensions")
+ val windowExtensionsClass = windowExtensionsClass
+ getWindowExtensionsMethod.doesReturn(windowExtensionsClass) &&
+ getWindowExtensionsMethod.isPublic
+ }
+ }
+
+ private fun isWindowExtensionsPresent(): Boolean {
+ return ReflectionUtils.checkIsPresent {
+ loader.loadClass(WindowExtensionsConstants.WINDOW_EXTENSIONS_PROVIDER_CLASS)
+ }
+ }
+ private val windowExtensionsProviderClass: Class<*>
+ get() {
+ return loader.loadClass(WindowExtensionsConstants.WINDOW_EXTENSIONS_PROVIDER_CLASS)
+ }
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt b/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt
index 44699d8..92965c3 100644
--- a/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt
@@ -17,6 +17,7 @@
package androidx.window.embedding
import android.app.Activity
+import androidx.annotation.VisibleForTesting
import androidx.window.core.ConsumerAdapter
import androidx.window.core.ExtensionsUtil
import androidx.window.extensions.WindowExtensions
@@ -26,9 +27,8 @@
import androidx.window.reflection.ReflectionUtils.doesReturn
import androidx.window.reflection.ReflectionUtils.isPublic
import androidx.window.reflection.ReflectionUtils.validateReflection
+import androidx.window.SafeWindowExtensionsProvider
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].
@@ -40,6 +40,8 @@
private val consumerAdapter: ConsumerAdapter,
private val windowExtensions: WindowExtensions
) {
+ private val safeWindowExtensionsProvider = SafeWindowExtensionsProvider(loader)
+
val activityEmbeddingComponent: ActivityEmbeddingComponent?
get() {
return if (canUseActivityEmbeddingComponent()) {
@@ -54,7 +56,7 @@
}
private fun canUseActivityEmbeddingComponent(): Boolean {
- if (!isWindowExtensionsValid() || !isActivityEmbeddingComponentValid()) {
+ if (!isActivityEmbeddingComponentAccessible()) {
return false
}
// TODO(b/267573854) : update logic to fallback to lower version
@@ -67,6 +69,11 @@
}
}
+ @VisibleForTesting
+ internal fun isActivityEmbeddingComponentAccessible(): Boolean =
+ safeWindowExtensionsProvider.isWindowExtensionsValid() &&
+ isActivityEmbeddingComponentValid()
+
/**
* [WindowExtensions.VENDOR_API_LEVEL_1] includes the following methods:
* - [ActivityEmbeddingComponent.setEmbeddingRules]
@@ -78,7 +85,8 @@
* - [androidx.window.extensions.embedding.SplitPlaceholderRule]
* - [androidx.window.extensions.embedding.SplitInfo]
*/
- private fun hasValidVendorApiLevel1(): Boolean {
+ @VisibleForTesting
+ internal fun hasValidVendorApiLevel1(): Boolean {
return isMethodSetEmbeddingRulesValid() &&
isMethodIsActivityEmbeddedValid() &&
isMethodSetSplitInfoCallbackJavaConsumerValid()
@@ -93,7 +101,8 @@
* and following classes: TODO(b/268583307) : add guard function for those classes
* - [androidx.window.extensions.embedding.SplitAttributes]
*/
- private fun hasValidVendorApiLevel2(): Boolean {
+ @VisibleForTesting
+ internal fun hasValidVendorApiLevel2(): Boolean {
return hasValidVendorApiLevel1() &&
isMethodSetSplitInfoCallbackWindowConsumerValid() &&
isMethodClearSplitInfoCallbackValid() &&
@@ -166,20 +175,9 @@
}
}
- 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 extensionsClass = safeWindowExtensionsProvider.windowExtensionsClass
val getActivityEmbeddingComponentMethod =
extensionsClass.getMethod("getActivityEmbeddingComponent")
val activityEmbeddingComponentClass = activityEmbeddingComponentClass
@@ -188,16 +186,6 @@
}
}
- 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)
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 bc0dac5..b9dcbef 100644
--- a/window/window/src/main/java/androidx/window/layout/SafeWindowLayoutComponentProvider.kt
+++ b/window/window/src/main/java/androidx/window/layout/SafeWindowLayoutComponentProvider.kt
@@ -19,21 +19,20 @@
import android.app.Activity
import android.content.Context
import android.graphics.Rect
+import androidx.annotation.VisibleForTesting
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 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.SafeWindowExtensionsProvider
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
/**
@@ -45,6 +44,7 @@
private val loader: ClassLoader,
private val consumerAdapter: ConsumerAdapter
) {
+ private val safeWindowExtensionsProvider = SafeWindowExtensionsProvider(loader)
val windowLayoutComponent: WindowLayoutComponent?
get() {
@@ -60,10 +60,7 @@
}
private fun canUseWindowLayoutComponent(): Boolean {
- if (!isWindowExtensionsPresent() || !isWindowExtensionsValid() ||
- !isWindowLayoutProviderValid() ||
- !isFoldingFeatureValid()
- ) {
+ if (!isWindowLayoutComponentAccessible()) {
return false
}
// TODO(b/267831038): can fallback to VendorApiLevel1 when level2 is not match
@@ -76,11 +73,11 @@
}
}
- private fun isWindowExtensionsPresent(): Boolean {
- return checkIsPresent {
- loader.loadClass(WINDOW_EXTENSIONS_PROVIDER_CLASS)
- }
- }
+ @VisibleForTesting
+ internal fun isWindowLayoutComponentAccessible(): Boolean =
+ safeWindowExtensionsProvider.isWindowExtensionsValid() &&
+ isWindowLayoutProviderValid() &&
+ isFoldingFeatureValid()
/**
* [WindowExtensions.VENDOR_API_LEVEL_1] includes the following methods
@@ -88,35 +85,24 @@
* [java.util.function.Consumer]
* - [WindowLayoutComponent.removeWindowLayoutInfoListener] with [java.util.function.Consumer]
*/
- private fun hasValidVendorApiLevel1(): Boolean {
+ @VisibleForTesting
+ internal 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() &&
- isMethodWindowLayoutInfoListenerWindowConsumerValid()
- }
-
- private fun isWindowExtensionsValid(): Boolean {
- return validateReflection("WindowExtensionsProvider#getWindowExtensions is not valid") {
- val providerClass = windowExtensionsProviderClass
- val getWindowExtensionsMethod = providerClass.getDeclaredMethod("getWindowExtensions")
- val windowExtensionsClass = windowExtensionsClass
- getWindowExtensionsMethod.doesReturn(windowExtensionsClass) &&
- getWindowExtensionsMethod.isPublic
- }
+ @VisibleForTesting
+ internal fun hasValidVendorApiLevel2(): Boolean {
+ return hasValidVendorApiLevel1() && isMethodWindowLayoutInfoListenerWindowConsumerValid()
}
private fun isWindowLayoutProviderValid(): Boolean {
return validateReflection("WindowExtensions#getWindowLayoutComponent is not valid") {
- val extensionsClass = windowExtensionsClass
+ val extensionsClass = safeWindowExtensionsProvider.windowExtensionsClass
val getWindowLayoutComponentMethod =
extensionsClass.getMethod("getWindowLayoutComponent")
val windowLayoutComponentClass = windowLayoutComponentClass
@@ -178,16 +164,6 @@
}
}
- 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 foldingFeatureClass: Class<*>
get() {
return loader.loadClass(FOLDING_FEATURE_CLASS)
diff --git a/window/window/src/main/java/androidx/window/layout/WindowInfoTracker.kt b/window/window/src/main/java/androidx/window/layout/WindowInfoTracker.kt
index 8af11e0..7ecff91 100644
--- a/window/window/src/main/java/androidx/window/layout/WindowInfoTracker.kt
+++ b/window/window/src/main/java/androidx/window/layout/WindowInfoTracker.kt
@@ -24,7 +24,6 @@
import androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP
import androidx.annotation.UiContext
import androidx.window.core.ConsumerAdapter
-import androidx.window.core.ExperimentalWindowApi
import androidx.window.layout.adapter.WindowBackend
import androidx.window.layout.adapter.extensions.ExtensionWindowLayoutInfoBackend
import androidx.window.layout.adapter.sidecar.SidecarWindowBackend
@@ -62,9 +61,9 @@
* @throws NotImplementedError when [Context] is not an [UiContext] or this method has no
* supporting implementation.
*/
- @ExperimentalWindowApi
fun windowLayoutInfo(@UiContext context: Context): Flow<WindowLayoutInfo> {
- val windowLayoutInfoFlow: Flow<WindowLayoutInfo>? = windowLayoutInfo((context as Activity))
+ val windowLayoutInfoFlow: Flow<WindowLayoutInfo>? = (context as? Activity)
+ ?.let { activity -> windowLayoutInfo(activity) }
return windowLayoutInfoFlow
?: throw NotImplementedError(
message = "Must override windowLayoutInfo(context) and provide an implementation.")
diff --git a/window/window/src/main/java/androidx/window/layout/WindowInfoTrackerImpl.kt b/window/window/src/main/java/androidx/window/layout/WindowInfoTrackerImpl.kt
index 2247c4b..26dd99b 100644
--- a/window/window/src/main/java/androidx/window/layout/WindowInfoTrackerImpl.kt
+++ b/window/window/src/main/java/androidx/window/layout/WindowInfoTrackerImpl.kt
@@ -65,8 +65,4 @@
}
}
}
-
- internal companion object {
- private const val BUFFER_CAPACITY = 10
- }
}
diff --git a/window/window/src/main/java/androidx/window/layout/WindowMetricsCalculator.kt b/window/window/src/main/java/androidx/window/layout/WindowMetricsCalculator.kt
index b0a0b73..8d8151e 100644
--- a/window/window/src/main/java/androidx/window/layout/WindowMetricsCalculator.kt
+++ b/window/window/src/main/java/androidx/window/layout/WindowMetricsCalculator.kt
@@ -26,7 +26,6 @@
import androidx.annotation.RestrictTo
import androidx.annotation.UiContext
import androidx.core.view.WindowInsetsCompat
-import androidx.window.core.ExperimentalWindowApi
/**
* An interface to calculate the [WindowMetrics] for an [Activity] or a [UiContext].
@@ -131,14 +130,12 @@
return decorator(WindowMetricsCalculatorCompat)
}
- @ExperimentalWindowApi
@JvmStatic
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
fun overrideDecorator(overridingDecorator: WindowMetricsCalculatorDecorator) {
decorator = overridingDecorator::decorate
}
- @ExperimentalWindowApi
@JvmStatic
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
fun reset() {
@@ -159,7 +156,6 @@
}
}
-@ExperimentalWindowApi
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
interface WindowMetricsCalculatorDecorator {