Merge "DividerScreenshoTest#darkTheme disabled on api33" 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..18c1cab 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,158 @@
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 = mapOf(
+ "required" to Property.Builder<StringValue>().setRequired(true).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 = mapOf(
+ "required" to Property.Builder<StringValue>().setRequired(true).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 = mapOf(
+ "required" to Property.Builder<StringValue>().setRequired(true).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 +1119,6 @@
class CapabilityBuilder :
Capability.Builder<
CapabilityBuilder,
- Properties,
Arguments,
Output,
Confirmation,
@@ -994,10 +1132,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 +1188,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 +1253,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 +1277,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/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/internal/sessionprocessor/BasicExtenderSessionProcessorTest.kt b/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/internal/sessionprocessor/BasicExtenderSessionProcessorTest.kt
index 288929c..5a0fb78 100644
--- a/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/internal/sessionprocessor/BasicExtenderSessionProcessorTest.kt
+++ b/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/internal/sessionprocessor/BasicExtenderSessionProcessorTest.kt
@@ -180,6 +180,10 @@
cameraProvider.shutdown()[10, TimeUnit.SECONDS]
}
}
+
+ if (::basicExtenderSessionProcessor.isInitialized) {
+ basicExtenderSessionProcessor.deInitSession()
+ }
}
@Test
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
index 6bbe1fe..8366234 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
@@ -847,29 +847,6 @@
}
@Test
- fun mute_defaultToNotMuted() {
- // Arrange.
- val recorder = createRecorder()
- val recording = createRecordingProcess(recorder = recorder)
- val recording2 = createRecordingProcess(recorder = recorder)
-
- // Act.
- recording.startAndVerify()
- recording.mute(true)
- recording.stopAndVerify()
-
- recording2.startAndVerify()
- recording2.verifyStatus(5) { statusList ->
- // Assert.
- statusList.forEach {
- assertThat(it.recordingStats.audioStats.audioState)
- .isEqualTo(AudioStats.AUDIO_STATE_ACTIVE)
- }
- }
- recording2.stopAndVerify()
- }
-
- @Test
fun optionsOverridesDefaults() {
val qualitySelector = QualitySelector.from(Quality.HIGHEST)
val recorder = createRecorder(qualitySelector = qualitySelector)
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoRecordingTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoRecordingTest.kt
index 2a79dbd..7e62cf4 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoRecordingTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoRecordingTest.kt
@@ -846,6 +846,73 @@
file2.delete()
}
+ @Test
+ fun mute_defaultToNotMuted() {
+ assumeTrue("Audio stream is not available", audioStreamAvailable)
+
+ // Arrange.
+ val recorder = Recorder.Builder().build()
+ val videoCaptureLocal = VideoCapture.withOutput(recorder)
+ instrumentation.runOnMainSync {
+ cameraProvider.bindToLifecycle(
+ lifecycleOwner,
+ cameraSelector,
+ preview,
+ videoCaptureLocal
+ )
+ }
+ val file1 = File.createTempFile("CameraX", ".tmp").apply { deleteOnExit() }
+
+ recorder.prepareRecording(context, FileOutputOptions.Builder(file1).build())
+ .withAudioEnabled()
+ .start(CameraXExecutors.directExecutor(), mockVideoRecordEventConsumer).use {
+ mockVideoRecordEventConsumer.verifyRecordingStartSuccessfully()
+ // Keep the first recording muted.
+ it.mute(true)
+ }
+
+ mockVideoRecordEventConsumer.verifyAcceptCall(
+ VideoRecordEvent.Finalize::class.java,
+ false,
+ GENERAL_TIMEOUT
+ )
+ file1.delete()
+
+ mockVideoRecordEventConsumer.clearAcceptCalls()
+
+ val file2 = File.createTempFile("CameraX", ".tmp").apply { deleteOnExit() }
+
+ // Act.
+ recorder.prepareRecording(context, FileOutputOptions.Builder(file2).build())
+ .withAudioEnabled()
+ .start(CameraXExecutors.directExecutor(), mockVideoRecordEventConsumer).use {
+ mockVideoRecordEventConsumer.verifyRecordingStartSuccessfully()
+ val captor = ArgumentCaptorCameraX<VideoRecordEvent> { argument ->
+ VideoRecordEvent::class.java.isInstance(
+ argument
+ )
+ }
+ mockVideoRecordEventConsumer.verifyAcceptCall(
+ VideoRecordEvent::class.java,
+ false,
+ CallTimesAtLeast(1),
+ captor
+ )
+ assertThat(captor.value).isInstanceOf(VideoRecordEvent.Status::class.java)
+ val status = captor.value as VideoRecordEvent.Status
+ // Assert: The second recording should not be muted.
+ assertThat(status.recordingStats.audioStats.audioState)
+ .isEqualTo(AudioStats.AUDIO_STATE_ACTIVE)
+ }
+
+ mockVideoRecordEventConsumer.verifyAcceptCall(
+ VideoRecordEvent.Finalize::class.java,
+ false,
+ GENERAL_TIMEOUT
+ )
+ file2.delete()
+ }
+
private fun performRecording(
videoCapture: VideoCapture<Recorder>,
file: File,
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/SharedByteBufferTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/SharedByteBufferTest.kt
index af3ed21..58e7d60 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/SharedByteBufferTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/SharedByteBufferTest.kt
@@ -16,6 +16,7 @@
package androidx.camera.video.internal
+import android.os.Build
import androidx.camera.core.impl.utils.executor.CameraXExecutors
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
@@ -35,6 +36,7 @@
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import kotlinx.coroutines.withTimeout
+import org.junit.Assume.assumeFalse
import org.junit.Test
import org.junit.runner.RunWith
@@ -289,6 +291,11 @@
@Test
@LargeTest
fun finalizeClosesUnclosedInstances() = runBlocking {
+ assumeFalse(
+ "Ignore devices that get flaky result. See b/278842333",
+ isModel("moto c") || isModel("rne-l23")
+ )
+
val buf = ByteBuffer.allocate(0)
val closeActionDeferred = CompletableDeferred<Unit>()
val origBuf = SharedByteBuffer.newSharedInstance(buf, CameraXExecutors.directExecutor()) {
@@ -327,4 +334,6 @@
phantomReferences.forEach { it.clear() }
}
}
+
+ private fun isModel(model: String) = model.equals(Build.MODEL, true)
}
\ No newline at end of file
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/BasicUITest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/BasicUITest.kt
index 26d932d..2fb1a60 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/BasicUITest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/BasicUITest.kt
@@ -19,6 +19,7 @@
import android.Manifest
import android.content.Context
import android.content.Intent
+import android.os.Build
import androidx.camera.camera2.Camera2Config
import androidx.camera.camera2.pipe.integration.CameraPipeConfig
import androidx.camera.lifecycle.ProcessCameraProvider
@@ -38,7 +39,7 @@
import java.util.concurrent.TimeUnit
import leakcanary.DetectLeaksAfterTestSuccess
import org.junit.After
-import org.junit.Assume
+import org.junit.Assume.assumeFalse
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Rule
@@ -94,7 +95,12 @@
@Before
fun setUp() {
- Assume.assumeTrue(CameraUtil.deviceHasCamera())
+ assumeTrue(CameraUtil.deviceHasCamera())
+ 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
+ )
CoreAppTestUtil.assumeCompatibleDevice()
// Use the natural orientation throughout these tests to ensure the activity isn't
// recreated unexpectedly. This will also freeze the sensors until
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/FocusMeteringDeviceTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/FocusMeteringDeviceTest.kt
index 056a07e..8aceeb4 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/FocusMeteringDeviceTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/FocusMeteringDeviceTest.kt
@@ -44,7 +44,6 @@
import java.util.concurrent.ExecutionException
import java.util.concurrent.TimeUnit
import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import org.hamcrest.CoreMatchers.equalTo
@@ -140,11 +139,6 @@
cameraProvider.shutdown()[10, TimeUnit.SECONDS]
}
}
-
- if (selectorName == "front" && implName == CameraPipeConfig::class.simpleName) {
- // TODO(b/264332446): Replace this delay with some API like closeAll() once available
- delay(5000)
- }
}
@Test
@@ -381,8 +375,8 @@
)
cameraCharacteristics?.run {
(if (flags.hasFlag(FLAG_AF)) (get(CONTROL_MAX_REGIONS_AF)!! > 0) else false) ||
- (if (flags.hasFlag(FLAG_AE)) (get(CONTROL_MAX_REGIONS_AE)!! > 0) else false) ||
- (if (flags.hasFlag(FLAG_AWB)) (get(CONTROL_MAX_REGIONS_AWB)!! > 0) else false)
+ (if (flags.hasFlag(FLAG_AE)) (get(CONTROL_MAX_REGIONS_AE)!! > 0) else false) ||
+ (if (flags.hasFlag(FLAG_AWB)) (get(CONTROL_MAX_REGIONS_AWB)!! > 0) else false)
} ?: false
} catch (e: Exception) {
false
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt
index 1b89972..7ed59c5 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt
@@ -56,7 +56,6 @@
import kotlinx.atomicfu.atomic
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import kotlinx.coroutines.withTimeout
@@ -134,11 +133,6 @@
cameraProvider.shutdown()[10, TimeUnit.SECONDS]
}
}
-
- if (selectorName == "front" && implName == CameraPipeConfig::class.simpleName) {
- // TODO(b/264332446): Replace this delay with some API like closeAll() once available
- delay(5000)
- }
}
@Test
@@ -186,7 +180,8 @@
*/
try {
cameraControl.setZoomRatio(maxZoomRatio + 1.0f)[5, TimeUnit.SECONDS]
- } catch (_: ExecutionException) {}
+ } catch (_: ExecutionException) {
+ }
assertThat(cameraInfo.zoomState.value?.zoomRatio).isEqualTo(2.0f)
}
@@ -213,7 +208,8 @@
*/
try {
cameraControl.setZoomRatio(minZoomRatio - 1.0f)[5, TimeUnit.SECONDS]
- } catch (_: ExecutionException) {}
+ } catch (_: ExecutionException) {
+ }
assertThat(cameraInfo.zoomState.value?.zoomRatio).isEqualTo(2.0f)
}
@@ -425,7 +421,8 @@
*/
try {
cameraControl.setLinearZoom(1.1f)[5, TimeUnit.SECONDS]
- } catch (_: ExecutionException) {}
+ } catch (_: ExecutionException) {
+ }
assertThat(cameraInfo.zoomState.value?.linearZoom).isEqualTo(0.5f)
}
@@ -448,7 +445,8 @@
*/
try {
cameraControl.setLinearZoom(-0.1f)[5, TimeUnit.SECONDS]
- } catch (_: ExecutionException) {}
+ } catch (_: ExecutionException) {
+ }
assertThat(cameraInfo.zoomState.value?.linearZoom).isEqualTo(0.5f)
}
@@ -761,8 +759,10 @@
private val failureException =
TimeoutException("Test doesn't complete after waiting for $captureCount frames.")
- @Volatile private var startReceiving = false
- @Volatile private var _verifyBlock: (
+ @Volatile
+ private var startReceiving = false
+ @Volatile
+ private var _verifyBlock: (
captureRequest: CaptureRequest,
captureResult: TotalCaptureResult
) -> Boolean = { _, _ -> false }
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureLockedOrientationTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureLockedOrientationTest.kt
index 7165a2e..b8d8429 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureLockedOrientationTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureLockedOrientationTest.kt
@@ -16,9 +16,11 @@
package androidx.camera.integration.uiwidgets.rotations
+import android.os.Build
import androidx.test.core.app.ActivityScenario
import androidx.test.filters.LargeTest
import org.junit.After
+import org.junit.Assume
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -54,6 +56,11 @@
@Before
fun before() {
+ 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/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureUnlockedOrientationTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureUnlockedOrientationTest.kt
index a0204db..aaedb05 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureUnlockedOrientationTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureUnlockedOrientationTest.kt
@@ -17,6 +17,7 @@
package androidx.camera.integration.uiwidgets.rotations
import android.app.Instrumentation
+import android.os.Build
import androidx.camera.core.CameraSelector
import androidx.camera.integration.uiwidgets.rotations.CameraActivity.Companion.IMAGE_CAPTURE_MODE_FILE
import androidx.camera.integration.uiwidgets.rotations.CameraActivity.Companion.IMAGE_CAPTURE_MODE_IN_MEMORY
@@ -25,6 +26,7 @@
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.After
+import org.junit.Assume.assumeFalse
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -87,6 +89,9 @@
@Before
fun before() {
+ 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/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/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/foundation/foundation-layout/api/current.txt b/compose/foundation/foundation-layout/api/current.txt
index 4339957..c8e0c04 100644
--- a/compose/foundation/foundation-layout/api/current.txt
+++ b/compose/foundation/foundation-layout/api/current.txt
@@ -111,12 +111,6 @@
method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
- @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface FlowColumnScope extends androidx.compose.foundation.layout.ColumnScope {
- }
-
- @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface FlowRowScope extends androidx.compose.foundation.layout.RowScope {
- }
-
public final class IntrinsicKt {
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier height(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredHeight(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
diff --git a/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt b/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
index 3e7c323..3d72dbe 100644
--- a/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
+++ b/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
@@ -114,7 +114,7 @@
@kotlin.RequiresOptIn(message="The API of this layout is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalLayoutApi {
}
- @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface FlowColumnScope extends androidx.compose.foundation.layout.ColumnScope {
+ @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface FlowColumnScope extends androidx.compose.foundation.layout.ColumnScope {
}
public final class FlowLayoutKt {
@@ -122,7 +122,7 @@
method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable public static inline void FlowRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional int maxItemsInEachRow, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.FlowRowScope,kotlin.Unit> content);
}
- @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface FlowRowScope extends androidx.compose.foundation.layout.RowScope {
+ @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface FlowRowScope extends androidx.compose.foundation.layout.RowScope {
}
public final class IntrinsicKt {
diff --git a/compose/foundation/foundation-layout/api/restricted_current.txt b/compose/foundation/foundation-layout/api/restricted_current.txt
index 2b75f19..03cdfb3 100644
--- a/compose/foundation/foundation-layout/api/restricted_current.txt
+++ b/compose/foundation/foundation-layout/api/restricted_current.txt
@@ -114,17 +114,11 @@
method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
- @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface FlowColumnScope extends androidx.compose.foundation.layout.ColumnScope {
- }
-
public final class FlowLayoutKt {
method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.compose.ui.layout.MeasurePolicy columnMeasurementHelper(androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, int maxItemsInMainAxis);
method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.compose.ui.layout.MeasurePolicy rowMeasurementHelper(androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, int maxItemsInMainAxis);
}
- @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface FlowRowScope extends androidx.compose.foundation.layout.RowScope {
- }
-
public final class IntrinsicKt {
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier height(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier requiredHeight(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/FlowLayout.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/FlowLayout.kt
index 5d58064..cdec1d5 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/FlowLayout.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/FlowLayout.kt
@@ -126,7 +126,7 @@
*/
@LayoutScopeMarker
@Immutable
-@JvmDefaultWithCompatibility
+@ExperimentalLayoutApi
interface FlowRowScope : RowScope
/**
@@ -134,11 +134,13 @@
*/
@LayoutScopeMarker
@Immutable
-@JvmDefaultWithCompatibility
+@ExperimentalLayoutApi
interface FlowColumnScope : ColumnScope
+@OptIn(ExperimentalLayoutApi::class)
internal object FlowRowScopeInstance : RowScope by RowScopeInstance, FlowRowScope
+@OptIn(ExperimentalLayoutApi::class)
internal object FlowColumnScopeInstance : ColumnScope by ColumnScopeInstance, FlowColumnScope
private fun getVerticalArrangement(verticalArrangement: Arrangement.Vertical):
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Size.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Size.kt
index 78210e2..b0a80c7 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Size.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Size.kt
@@ -38,7 +38,6 @@
import androidx.compose.ui.unit.constrain
import androidx.compose.ui.unit.constrainHeight
import androidx.compose.ui.unit.constrainWidth
-import androidx.compose.ui.unit.dp
import kotlin.math.roundToInt
/**
@@ -768,12 +767,12 @@
private val Density.targetConstraints: Constraints
get() {
val maxWidth = if (maxWidth != Dp.Unspecified) {
- maxWidth.coerceAtLeast(0.dp).roundToPx()
+ maxWidth.roundToPx().coerceAtLeast(0)
} else {
Constraints.Infinity
}
val maxHeight = if (maxHeight != Dp.Unspecified) {
- maxHeight.coerceAtLeast(0.dp).roundToPx()
+ maxHeight.roundToPx().coerceAtLeast(0)
} else {
Constraints.Infinity
}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt
index 910e79f..748d6b1 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt
@@ -89,7 +89,7 @@
)
private class BackgroundElement(
- private val color: Color? = null,
+ private val color: Color = Color.Unspecified,
private val brush: Brush? = null,
private val alpha: Float,
private val shape: Shape,
@@ -116,7 +116,7 @@
}
override fun hashCode(): Int {
- var result = color?.hashCode() ?: 0
+ var result = color.hashCode()
result = 31 * result + (brush?.hashCode() ?: 0)
result = 31 * result + alpha.hashCode()
result = 31 * result + shape.hashCode()
@@ -133,7 +133,7 @@
}
private class BackgroundNode(
- var color: Color?,
+ var color: Color,
var brush: Brush?,
var alpha: Float,
var shape: Shape,
@@ -155,7 +155,7 @@
}
private fun ContentDrawScope.drawRect() {
- color?.let { drawRect(color = it) }
+ if (color != Color.Unspecified) drawRect(color = color)
brush?.let { drawRect(brush = it, alpha = alpha) }
}
@@ -166,7 +166,7 @@
} else {
shape.createOutline(size, layoutDirection, this)
}
- color?.let { drawOutline(outline, color = it) }
+ if (color != Color.Unspecified) drawOutline(outline, color = color)
brush?.let { drawOutline(outline, brush = it, alpha = alpha) }
lastOutline = outline
lastSize = size
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt
index 5ef5aa7..86fda0b 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt
@@ -46,7 +46,7 @@
import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.platform.inspectable
import androidx.compose.ui.semantics.Role
-import androidx.compose.ui.semantics.SemanticsConfiguration
+import androidx.compose.ui.semantics.SemanticsPropertyReceiver
import androidx.compose.ui.semantics.disabled
import androidx.compose.ui.semantics.onClick
import androidx.compose.ui.semantics.onLongClick
@@ -645,7 +645,7 @@
private var onClickLabel: String?,
private var role: Role?,
private var onClick: () -> Unit
-) : DelegatingNode(), SemanticsModifierNode, PointerInputModifierNode, KeyInputModifierNode {
+) : DelegatingNode(), PointerInputModifierNode, KeyInputModifierNode {
abstract val clickablePointerInputNode: AbstractClickablePointerInputNode
abstract val clickableSemanticsNode: ClickableSemanticsNode
@@ -695,9 +695,6 @@
interactionData.currentKeyPressInteractions.clear()
}
- override val semanticsConfiguration: SemanticsConfiguration
- get() = clickableSemanticsNode.semanticsConfiguration
-
override fun onPointerEvent(
pointerEvent: PointerEvent,
pass: PointerEventPass,
@@ -812,26 +809,26 @@
this.onLongClick = onLongClick
}
- override val semanticsConfiguration
- get() = SemanticsConfiguration().apply {
- isMergingSemanticsOfDescendants = true
- if (this@ClickableSemanticsNode.role != null) {
- role = this@ClickableSemanticsNode.role!!
- }
- onClick(
- action = { onClick(); true },
- label = onClickLabel
- )
- if (onLongClick != null) {
- onLongClick(
- action = { onLongClick?.invoke(); true },
- label = onLongClickLabel
- )
- }
- if (!enabled) {
- disabled()
- }
+ override val shouldMergeDescendantSemantics: Boolean
+ get() = true
+ override fun SemanticsPropertyReceiver.applySemantics() {
+ if (this@ClickableSemanticsNode.role != null) {
+ role = this@ClickableSemanticsNode.role!!
}
+ onClick(
+ action = { onClick(); true },
+ label = onClickLabel
+ )
+ if (onLongClick != null) {
+ onLongClick(
+ action = { onLongClick?.invoke(); true },
+ label = onLongClickLabel
+ )
+ }
+ if (!enabled) {
+ disabled()
+ }
+ }
}
private sealed class AbstractClickablePointerInputNode(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Focusable.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Focusable.kt
index 55ea39a..de22bba 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Focusable.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Focusable.kt
@@ -51,6 +51,7 @@
import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.platform.inspectable
import androidx.compose.ui.semantics.SemanticsConfiguration
+import androidx.compose.ui.semantics.SemanticsPropertyReceiver
import androidx.compose.ui.semantics.focused
import androidx.compose.ui.semantics.requestFocus
import kotlinx.coroutines.launch
@@ -246,9 +247,9 @@
}
// TODO(levima) Remove this once delegation can propagate this events on its own
- override val semanticsConfiguration: SemanticsConfiguration
- get() = focusableSemanticsNode.semanticsConfiguration
-
+ override fun SemanticsPropertyReceiver.applySemantics() {
+ with(focusableSemanticsNode) { applySemantics() }
+ }
// TODO(levima) Remove this once delegation can propagate this events on its own
override fun onGloballyPositioned(coordinates: LayoutCoordinates) {
focusedBoundsNode.onGloballyPositioned(coordinates)
@@ -362,11 +363,10 @@
this.isFocused = focused
}
- override val semanticsConfiguration: SemanticsConfiguration
- get() = semanticsConfigurationCache.apply {
- focused = isFocused
- requestFocus {
- this@FocusableSemanticsNode.requestFocus()
- }
+ override fun SemanticsPropertyReceiver.applySemantics() {
+ focused = isFocused
+ requestFocus {
+ this@FocusableSemanticsNode.requestFocus()
}
+ }
}
\ No newline at end of file
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 cb376a7..23c078e 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
@@ -181,7 +181,8 @@
*/
@Deprecated(
"Please use the overload without pageCount. pageCount should be provided " +
- "through PagerState.", ReplaceWith(
+ "through PagerState.",
+ ReplaceWith(
"""HorizontalPager(
modifier = modifier,
state = state,
@@ -202,8 +203,9 @@
"androidx.compose.foundation.layout.PaddingValues",
"androidx.compose.foundation.pager.PageSize",
"androidx.compose.foundation.pager.PagerDefaults"
- )
- )
+ ),
+ ),
+ level = DeprecationLevel.ERROR
)
@Composable
@ExperimentalFoundationApi
@@ -387,7 +389,8 @@
"androidx.compose.foundation.pager.PageSize",
"androidx.compose.foundation.pager.PagerDefaults"
)
- )
+ ),
+ level = DeprecationLevel.ERROR
)
@Composable
@ExperimentalFoundationApi
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
index 23e45b8..1e9132b 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
@@ -103,7 +103,7 @@
){
// provide pageCount
}"""
- )
+ ), level = DeprecationLevel.ERROR
)
@ExperimentalFoundationApi
@Composable
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/SelectableTextAnnotatedStringNode.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/SelectableTextAnnotatedStringNode.kt
index f8831fe..3616033 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/SelectableTextAnnotatedStringNode.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/SelectableTextAnnotatedStringNode.kt
@@ -30,9 +30,7 @@
import androidx.compose.ui.node.DrawModifierNode
import androidx.compose.ui.node.GlobalPositionAwareModifierNode
import androidx.compose.ui.node.LayoutModifierNode
-import androidx.compose.ui.node.SemanticsModifierNode
import androidx.compose.ui.node.invalidateMeasurement
-import androidx.compose.ui.semantics.SemanticsConfiguration
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.Placeholder
import androidx.compose.ui.text.TextLayoutResult
@@ -59,8 +57,7 @@
onPlaceholderLayout: ((List<Rect?>) -> Unit)? = null,
private val selectionController: SelectionController? = null,
overrideColor: ColorProducer? = null
-) : DelegatingNode(), LayoutModifierNode, DrawModifierNode, GlobalPositionAwareModifierNode,
- SemanticsModifierNode {
+) : DelegatingNode(), LayoutModifierNode, DrawModifierNode, GlobalPositionAwareModifierNode {
private val delegate = delegate(
TextAnnotatedStringNode(
@@ -96,9 +93,6 @@
constraints: Constraints
): MeasureResult = delegate.measureNonExtension(this, measurable, constraints)
- override val semanticsConfiguration: SemanticsConfiguration
- get() = delegate.semanticsConfiguration
-
override fun IntrinsicMeasureScope.minIntrinsicWidth(
measurable: IntrinsicMeasurable,
height: Int
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt
index 93b37e5..54b93c4 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt
@@ -43,7 +43,7 @@
import androidx.compose.ui.node.invalidateLayer
import androidx.compose.ui.node.invalidateMeasurement
import androidx.compose.ui.node.invalidateSemantics
-import androidx.compose.ui.semantics.SemanticsConfiguration
+import androidx.compose.ui.semantics.SemanticsPropertyReceiver
import androidx.compose.ui.semantics.getTextLayoutResult
import androidx.compose.ui.semantics.text
import androidx.compose.ui.text.AnnotatedString
@@ -207,7 +207,6 @@
callbacksChanged: Boolean
) {
if (textChanged) {
- _semanticsConfiguration = null
invalidateSemantics()
}
@@ -230,11 +229,9 @@
}
}
- private var _semanticsConfiguration: SemanticsConfiguration? = null
-
private var semanticsTextLayoutResult: ((MutableList<TextLayoutResult>) -> Boolean)? = null
- private fun generateSemantics(text: AnnotatedString): SemanticsConfiguration {
+ override fun SemanticsPropertyReceiver.applySemantics() {
var localSemanticsTextLayoutResult = semanticsTextLayoutResult
if (localSemanticsTextLayoutResult == null) {
localSemanticsTextLayoutResult = { textLayoutResult ->
@@ -245,24 +242,10 @@
}
semanticsTextLayoutResult = localSemanticsTextLayoutResult
}
- return SemanticsConfiguration().also {
- it.isMergingSemanticsOfDescendants = false
- it.isClearingSemantics = false
- it.text = text
- it.getTextLayoutResult(action = localSemanticsTextLayoutResult)
- }
+ text = this@TextAnnotatedStringNode.text
+ getTextLayoutResult(action = localSemanticsTextLayoutResult)
}
- override val semanticsConfiguration: SemanticsConfiguration
- get() {
- var localSemantics = _semanticsConfiguration
- if (localSemantics == null) {
- localSemantics = generateSemantics(text)
- _semanticsConfiguration = localSemantics
- }
- return localSemantics
- }
-
fun measureNonExtension(
measureScope: MeasureScope,
measurable: Measurable,
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt
index 09d2c75..fccf555 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt
@@ -43,7 +43,7 @@
import androidx.compose.ui.node.invalidateLayer
import androidx.compose.ui.node.invalidateMeasurement
import androidx.compose.ui.node.invalidateSemantics
-import androidx.compose.ui.semantics.SemanticsConfiguration
+import androidx.compose.ui.semantics.SemanticsPropertyReceiver
import androidx.compose.ui.semantics.getTextLayoutResult
import androidx.compose.ui.semantics.text
import androidx.compose.ui.text.AnnotatedString
@@ -168,7 +168,6 @@
layoutChanged: Boolean
) {
if (textChanged) {
- _semanticsConfiguration = null
invalidateSemantics()
}
@@ -190,11 +189,9 @@
}
}
- private var _semanticsConfiguration: SemanticsConfiguration? = null
-
private var semanticsTextLayoutResult: ((MutableList<TextLayoutResult>) -> Boolean)? = null
- private fun generateSemantics(text: String): SemanticsConfiguration {
+ override fun SemanticsPropertyReceiver.applySemantics() {
var localSemanticsTextLayoutResult = semanticsTextLayoutResult
if (localSemanticsTextLayoutResult == null) {
localSemanticsTextLayoutResult = { textLayoutResult ->
@@ -206,24 +203,10 @@
}
semanticsTextLayoutResult = localSemanticsTextLayoutResult
}
- return SemanticsConfiguration().also {
- it.isMergingSemanticsOfDescendants = false
- it.isClearingSemantics = false
- it.text = AnnotatedString(text)
- it.getTextLayoutResult(action = localSemanticsTextLayoutResult)
- }
+ this.text = AnnotatedString(this@TextStringSimpleNode.text)
+ getTextLayoutResult(action = localSemanticsTextLayoutResult)
}
- override val semanticsConfiguration: SemanticsConfiguration
- get() {
- var localSemantics = _semanticsConfiguration
- if (localSemantics == null) {
- localSemantics = generateSemantics(text)
- _semanticsConfiguration = localSemantics
- }
- return localSemantics
- }
-
/**
* Text layout happens here
*/
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/AlertDialogTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/AlertDialogTest.kt
index e961cd7..147f199 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/AlertDialogTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/AlertDialogTest.kt
@@ -28,9 +28,13 @@
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.test.captureToImage
+import androidx.compose.ui.test.getUnclippedBoundsInRoot
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.FlakyTest
@@ -117,4 +121,45 @@
assertThat(dialogWidth).isLessThan(screenWidth)
}
}
+
+ @Test
+ fun alertDialog_positioningActionsWithLongText() {
+ rule.setMaterialContent {
+ AlertDialog(
+ onDismissRequest = {},
+ title = { Text(text = "Title") },
+ text = { Text("Text") },
+ confirmButton = {
+ TextButton(
+ onClick = { /* doSomething() */ },
+ Modifier
+ .testTag(ConfirmButtonTestTag)
+ .semantics(mergeDescendants = true) {}
+ ) {
+ Text("Confirm with a long text")
+ }
+ },
+ dismissButton = {
+ TextButton(
+ onClick = { /* doSomething() */ },
+ Modifier
+ .testTag(DismissButtonTestTag)
+ .semantics(mergeDescendants = true) {}
+ ) {
+ Text("Dismiss with a long text")
+ }
+ }
+ )
+ }
+
+ val confirmBtBounds = rule.onNodeWithTag(ConfirmButtonTestTag).getUnclippedBoundsInRoot()
+ val dismissBtBounds = rule.onNodeWithTag(DismissButtonTestTag).getUnclippedBoundsInRoot()
+
+ assert(dismissBtBounds.top > confirmBtBounds.bottom) {
+ "dismiss action should appear below the confirm action"
+ }
+ }
}
+
+private const val ConfirmButtonTestTag = "confirmButton"
+private const val DismissButtonTestTag = "dismissButton"
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/AlertDialog.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/AlertDialog.kt
index 0c41e95..a469837 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/AlertDialog.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/AlertDialog.kt
@@ -214,7 +214,8 @@
if (sequences.isNotEmpty()) {
crossAxisSpace += crossAxisSpacing.roundToPx()
}
- sequences += currentSequence.toList()
+ // Ensures that confirming actions appear above dismissive actions.
+ sequences.add(0, currentSequence.toList())
crossAxisSizes += currentCrossAxisSize
crossAxisPositions += crossAxisSpace
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AlertDialogTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AlertDialogTest.kt
index 83b1f2b..d3ed41d 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AlertDialogTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AlertDialogTest.kt
@@ -418,6 +418,44 @@
}
@Test
+ fun alertDialog_positioningActionsWithLongText() {
+ rule.setMaterialContent(lightColorScheme()) {
+ AlertDialog(
+ onDismissRequest = {},
+ title = { Text(text = "Title") },
+ text = { Text("Text") },
+ confirmButton = {
+ TextButton(
+ onClick = { /* doSomething() */ },
+ Modifier
+ .testTag(ConfirmButtonTestTag)
+ .semantics(mergeDescendants = true) {}
+ ) {
+ Text("Confirm with a long text")
+ }
+ },
+ dismissButton = {
+ TextButton(
+ onClick = { /* doSomething() */ },
+ Modifier
+ .testTag(DismissButtonTestTag)
+ .semantics(mergeDescendants = true) {}
+ ) {
+ Text("Dismiss with a long text")
+ }
+ }
+ )
+ }
+
+ val confirmBtBounds = rule.onNodeWithTag(ConfirmButtonTestTag).getUnclippedBoundsInRoot()
+ val dismissBtBounds = rule.onNodeWithTag(DismissButtonTestTag).getUnclippedBoundsInRoot()
+
+ assert(dismissBtBounds.top > confirmBtBounds.bottom) {
+ "dismiss action should appear below the confirm action"
+ }
+ }
+
+ @Test
fun alertDialog_positioningWithLazyColumnText() {
rule.setMaterialContent(lightColorScheme()) {
AlertDialog(
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/NavigationBarScreenshotTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/NavigationBarScreenshotTest.kt
index 3693245..3c05d96 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/NavigationBarScreenshotTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/NavigationBarScreenshotTest.kt
@@ -21,6 +21,7 @@
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.PressInteraction
import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.height
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.runtime.Composable
@@ -33,6 +34,7 @@
import androidx.compose.ui.test.captureToImage
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
@@ -112,6 +114,25 @@
}
@Test
+ fun lightTheme_customHeight() {
+ val interactionSource = MutableInteractionSource()
+
+ var scope: CoroutineScope? = null
+
+ composeTestRule.setMaterialContent(lightColorScheme()) {
+ scope = rememberCoroutineScope()
+ DefaultNavigationBar(interactionSource, Modifier.height(64.dp))
+ }
+
+ assertNavigationBarMatches(
+ scope = scope!!,
+ interactionSource = interactionSource,
+ interaction = null,
+ goldenIdentifier = "navigationBar_lightTheme_customHeight"
+ )
+ }
+
+ @Test
fun darkTheme_defaultColors() {
val interactionSource = MutableInteractionSource()
@@ -211,14 +232,16 @@
*
* @param interactionSource the [MutableInteractionSource] for the first [NavigationBarItem], to
* control its visual state.
+ * @param modifier the [Modifier] applied to the navigation bar
* @param setUnselectedItemsAsDisabled when true, marks unselected items as disabled
*/
@Composable
private fun DefaultNavigationBar(
interactionSource: MutableInteractionSource,
+ modifier: Modifier = Modifier,
setUnselectedItemsAsDisabled: Boolean = false,
) {
- Box(Modifier.semantics(mergeDescendants = true) {}.testTag(Tag)) {
+ Box(modifier.semantics(mergeDescendants = true) {}.testTag(Tag)) {
NavigationBar {
NavigationBarItem(
icon = { Icon(Icons.Filled.Favorite, null) },
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/NavigationBarTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/NavigationBarTest.kt
index e9a0168..2f6c21f 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/NavigationBarTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/NavigationBarTest.kt
@@ -19,6 +19,7 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.height
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material3.tokens.NavigationBarTokens
@@ -266,42 +267,43 @@
@Test
fun navigationBarItemContent_withLabel_sizeAndPosition() {
rule.setMaterialContent(lightColorScheme()) {
- Box {
- NavigationBar {
- NavigationBarItem(
- modifier = Modifier.testTag("item"),
- icon = {
- Icon(Icons.Filled.Favorite, null, Modifier.testTag("icon"))
- },
- label = {
- Text("ItemText")
- },
- selected = true,
- onClick = {}
- )
- }
+ NavigationBar {
+ NavigationBarItem(
+ modifier = Modifier.testTag("item"),
+ icon = {
+ Icon(Icons.Filled.Favorite, null, Modifier.testTag("icon"))
+ },
+ label = {
+ Text("ItemText")
+ },
+ selected = true,
+ onClick = {}
+ )
}
}
val itemBounds = rule.onNodeWithTag("item").getUnclippedBoundsInRoot()
val iconBounds = rule.onNodeWithTag("icon", useUnmergedTree = true)
.getUnclippedBoundsInRoot()
- val textBounds = rule.onNodeWithText("ItemText", useUnmergedTree = true)
- .getUnclippedBoundsInRoot()
- // Distance from the bottom of the item to the text bottom, and from the top of the icon to
- // the top of the item
- val verticalPadding = NavigationBarItemVerticalPadding
-
- val itemBottom = itemBounds.height + itemBounds.top
- // Text bottom should be `verticalPadding` from the bottom of the item
- textBounds.bottom.assertIsEqualTo(itemBottom - verticalPadding)
+ // Distance from the top of the item to the top of the icon for the default height
+ val verticalPadding = 16.dp
rule.onNodeWithTag("icon", useUnmergedTree = true)
- // The icon should be centered in the item
+ // The icon should be horizontally centered in the item
.assertLeftPositionInRootIsEqualTo((itemBounds.width - iconBounds.width) / 2)
// The top of the icon is `verticalPadding` below the top of the item
.assertTopPositionInRootIsEqualTo(itemBounds.top + verticalPadding)
+
+ val iconBottom = iconBounds.top + iconBounds.height
+ // Text should be `IndicatorVerticalPadding + NavigationBarIndicatorToLabelPadding` from the
+ // bottom of the icon
+ rule.onNodeWithText("ItemText", useUnmergedTree = true)
+ .getUnclippedBoundsInRoot()
+ .top
+ .assertIsEqualTo(
+ iconBottom + IndicatorVerticalPadding + NavigationBarIndicatorToLabelPadding
+ )
}
@Test
@@ -367,6 +369,49 @@
}
@Test
+ fun navigationBarItemContent_customHeight_withLabel_sizeAndPosition() {
+ val defaultHeight = NavigationBarTokens.ContainerHeight
+ val customHeight = 64.dp
+
+ rule.setMaterialContent(lightColorScheme()) {
+ NavigationBar(Modifier.height(customHeight)) {
+ NavigationBarItem(
+ modifier = Modifier.testTag("item"),
+ icon = {
+ Icon(Icons.Filled.Favorite, null, Modifier.testTag("icon"))
+ },
+ label = { Text("Label") },
+ selected = true,
+ onClick = {}
+ )
+ }
+ }
+
+ // Vertical padding is removed symmetrically from top and bottom for smaller heights
+ val verticalPadding = 16.dp - (defaultHeight - customHeight) / 2
+
+ val itemBounds = rule.onNodeWithTag("item").getUnclippedBoundsInRoot()
+ val iconBounds = rule.onNodeWithTag("icon", useUnmergedTree = true)
+ .getUnclippedBoundsInRoot()
+
+ rule.onNodeWithTag("icon", useUnmergedTree = true)
+ // The icon should be horizontally centered in the item
+ .assertLeftPositionInRootIsEqualTo((itemBounds.width - iconBounds.width) / 2)
+ // The top of the icon is `verticalPadding` below the top of the item
+ .assertTopPositionInRootIsEqualTo(itemBounds.top + verticalPadding)
+
+ val iconBottom = iconBounds.top + iconBounds.height
+ // Text should be `IndicatorVerticalPadding + NavigationBarIndicatorToLabelPadding` from the
+ // bottom of the item
+ rule.onNodeWithText("Label", useUnmergedTree = true)
+ .getUnclippedBoundsInRoot()
+ .top
+ .assertIsEqualTo(
+ iconBottom + IndicatorVerticalPadding + NavigationBarIndicatorToLabelPadding
+ )
+ }
+
+ @Test
fun navigationBar_selectNewItem() {
rule.setMaterialContent(lightColorScheme()) {
var selectedItem by remember { mutableStateOf(0) }
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/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AlertDialog.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AlertDialog.kt
index 21cd441..62a0006 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AlertDialog.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AlertDialog.kt
@@ -149,7 +149,8 @@
if (sequences.isNotEmpty()) {
crossAxisSpace += crossAxisSpacing.roundToPx()
}
- sequences += currentSequence.toList()
+ // Ensures that confirming actions appear above dismissive actions.
+ sequences.add(0, currentSequence.toList())
crossAxisSizes += currentCrossAxisSize
crossAxisPositions += crossAxisSpace
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationBar.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationBar.kt
index 2746436..5f1bf66 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationBar.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationBar.kt
@@ -535,8 +535,8 @@
* [animationProgress].
*
* When [alwaysShowLabel] is true, the positions do not move. The [iconPlaceable] will be placed
- * near the top of the item and the [labelPlaceable] will be placed near the bottom, according to
- * the spec.
+ * near the top of the item and the [labelPlaceable] will be placed beneath it with padding,
+ * according to the spec.
*
* When [animationProgress] is 1 (representing the selected state), the positions will be the same
* as above.
@@ -573,11 +573,13 @@
): MeasureResult {
val height = constraints.maxHeight
- // Label should be `ItemVerticalPadding` from the bottom
- val labelY = height - labelPlaceable.height - NavigationBarItemVerticalPadding.roundToPx()
+ val contentTotalHeight = iconPlaceable.height + IndicatorVerticalPadding.roundToPx() +
+ NavigationBarIndicatorToLabelPadding.roundToPx() + labelPlaceable.height
+ val contentVerticalPadding = ((height - contentTotalHeight) / 2)
+ .coerceAtLeast(IndicatorVerticalPadding.roundToPx())
- // Icon (when selected) should be `ItemVerticalPadding` from the top
- val selectedIconY = NavigationBarItemVerticalPadding.roundToPx()
+ // Icon (when selected) should be `contentVerticalPadding` from top
+ val selectedIconY = contentVerticalPadding
val unselectedIconY =
if (alwaysShowLabel) selectedIconY else (height - iconPlaceable.height) / 2
@@ -588,6 +590,10 @@
// animationProgress.
val offset = (iconDistance * (1 - animationProgress)).roundToInt()
+ // Label should be fixed padding below icon
+ val labelY = selectedIconY + iconPlaceable.height + IndicatorVerticalPadding.roundToPx() +
+ NavigationBarIndicatorToLabelPadding.roundToPx()
+
val containerWidth = constraints.maxWidth
val labelX = (containerWidth - labelPlaceable.width) / 2
@@ -626,12 +632,13 @@
internal val NavigationBarItemHorizontalPadding: Dp = 8.dp
/*@VisibleForTesting*/
-internal val NavigationBarItemVerticalPadding: Dp = 16.dp
+internal val NavigationBarIndicatorToLabelPadding: Dp = 4.dp
private val IndicatorHorizontalPadding: Dp =
(NavigationBarTokens.ActiveIndicatorWidth - NavigationBarTokens.IconSize) / 2
-private val IndicatorVerticalPadding: Dp =
+/*@VisibleForTesting*/
+internal val IndicatorVerticalPadding: Dp =
(NavigationBarTokens.ActiveIndicatorHeight - NavigationBarTokens.IconSize) / 2
private val IndicatorVerticalOffset: Dp = 12.dp
\ No newline at end of file
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/ui/ui-graphics/api/current.txt b/compose/ui/ui-graphics/api/current.txt
index 2042050..ae86521 100644
--- a/compose/ui/ui-graphics/api/current.txt
+++ b/compose/ui/ui-graphics/api/current.txt
@@ -634,6 +634,7 @@
method public void reset();
method public default void rewind();
method public void setFillType(int);
+ method public default void transform(float[] matrix);
method public void translate(long offset);
property public abstract int fillType;
property public abstract boolean isConvex;
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 cb69cd3..d6fde28 100644
--- a/compose/ui/ui-graphics/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-graphics/api/public_plus_experimental_current.txt
@@ -637,6 +637,7 @@
method public void reset();
method public default void rewind();
method public void setFillType(int);
+ method public default void transform(float[] matrix);
method public void translate(long offset);
property public abstract int fillType;
property public abstract boolean isConvex;
diff --git a/compose/ui/ui-graphics/api/restricted_current.txt b/compose/ui/ui-graphics/api/restricted_current.txt
index 032a956b..17269b9 100644
--- a/compose/ui/ui-graphics/api/restricted_current.txt
+++ b/compose/ui/ui-graphics/api/restricted_current.txt
@@ -669,6 +669,7 @@
method public void reset();
method public default void rewind();
method public void setFillType(int);
+ method public default void transform(float[] matrix);
method public void translate(long offset);
property public abstract int fillType;
property public abstract boolean isConvex;
diff --git a/compose/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/BrushSamples.kt b/compose/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/BrushSamples.kt
index 4784e83..b825b33 100644
--- a/compose/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/BrushSamples.kt
+++ b/compose/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/BrushSamples.kt
@@ -26,8 +26,10 @@
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.TileMode
import androidx.compose.ui.unit.dp
@Sampled
@@ -57,4 +59,108 @@
val sweep = Brush.sweepGradient(listOf(Color.Cyan, Color.Magenta))
Box(modifier = Modifier.size(120.dp).background(sweep))
}
+}
+
+@Sampled
+fun LinearGradientColorStopSample() {
+ Brush.linearGradient(
+ 0.0f to Color.Red,
+ 0.3f to Color.Green,
+ 1.0f to Color.Blue,
+ start = Offset(0.0f, 50.0f),
+ end = Offset(0.0f, 100.0f)
+ )
+}
+
+@Sampled
+fun LinearGradientSample() {
+ Brush.linearGradient(
+ listOf(Color.Red, Color.Green, Color.Blue),
+ start = Offset(0.0f, 50.0f),
+ end = Offset(0.0f, 100.0f)
+ )
+}
+
+@Sampled
+fun HorizontalGradientSample() {
+ Brush.horizontalGradient(
+ listOf(Color.Red, Color.Green, Color.Blue),
+ startX = 10.0f,
+ endX = 20.0f
+ )
+}
+
+@Sampled
+fun HorizontalGradientColorStopSample() {
+ Brush.horizontalGradient(
+ 0.0f to Color.Red,
+ 0.3f to Color.Green,
+ 1.0f to Color.Blue,
+ startX = 0.0f,
+ endX = 100.0f
+ )
+}
+
+@Sampled
+fun VerticalGradientColorStopSample() {
+ Brush.verticalGradient(
+ 0.1f to Color.Red,
+ 0.3f to Color.Green,
+ 0.5f to Color.Blue,
+ startY = 0.0f,
+ endY = 100.0f
+ )
+}
+
+@Sampled
+fun VerticalGradientSample() {
+ Brush.verticalGradient(
+ listOf(Color.Red, Color.Green, Color.Blue),
+ startY = 0.0f,
+ endY = 100.0f
+ )
+}
+
+@Sampled
+fun RadialBrushColorStopSample() {
+ val side1 = 100
+ val side2 = 200
+ Brush.radialGradient(
+ 0.0f to Color.Red,
+ 0.3f to Color.Green,
+ 1.0f to Color.Blue,
+ center = Offset(side1 / 2.0f, side2 / 2.0f),
+ radius = side1 / 2.0f,
+ tileMode = TileMode.Repeated
+ )
+}
+
+@Sampled
+fun RadialBrushSample() {
+ val side1 = 100
+ val side2 = 200
+ Brush.radialGradient(
+ listOf(Color.Red, Color.Green, Color.Blue),
+ center = Offset(side1 / 2.0f, side2 / 2.0f),
+ radius = side1 / 2.0f,
+ tileMode = TileMode.Repeated
+ )
+}
+
+@Sampled
+fun SweepGradientColorStopSample() {
+ Brush.sweepGradient(
+ 0.0f to Color.Red,
+ 0.3f to Color.Green,
+ 1.0f to Color.Blue,
+ center = Offset(0.0f, 100.0f)
+ )
+}
+
+@Sampled
+fun SweepGradientSample() {
+ Brush.sweepGradient(
+ listOf(Color.Red, Color.Green, Color.Blue),
+ center = Offset(10.0f, 20.0f)
+ )
}
\ No newline at end of file
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PathTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PathTest.kt
index 6975ef7..def70c3 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PathTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PathTest.kt
@@ -97,6 +97,37 @@
assertEquals(0, androidPath.resetCount)
}
+ @Test
+ fun testPathTransform() {
+ val width = 100
+ val height = 100
+ val image = ImageBitmap(width, height)
+ val canvas = Canvas(image)
+
+ val path = Path().apply {
+ addRect(Rect(0f, 0f, 50f, 50f))
+ transform(
+ Matrix().apply { translate(50f, 50f) }
+ )
+ }
+
+ val paint = Paint().apply { color = Color.Black }
+ canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), paint)
+ paint.color = Color.Red
+ canvas.drawPath(path, paint)
+
+ image.toPixelMap().apply {
+ assertEquals(Color.Black, this[width / 2 - 3, height / 2 - 3])
+ assertEquals(Color.Black, this[width / 2, height / 2 - 3])
+ assertEquals(Color.Black, this[width / 2 - 3, height / 2])
+
+ assertEquals(Color.Red, this[width / 2 + 2, height / 2 + 2])
+ assertEquals(Color.Red, this[width - 2, height / 2 + 2])
+ assertEquals(Color.Red, this[width - 2, height - 2])
+ assertEquals(Color.Red, this[width / 2 + 2, height - 2])
+ }
+ }
+
class TestAndroidPath : android.graphics.Path() {
var resetCount = 0
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ShaderTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ShaderTest.kt
index 786ed1f..a1c9071 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ShaderTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ShaderTest.kt
@@ -28,6 +28,8 @@
import org.junit.Test
import org.junit.runner.RunWith
import kotlin.math.roundToInt
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -197,6 +199,53 @@
)
}
+ @Test
+ fun testInvalidWidthBrush() {
+ // Verify that attempts to create a RadialGradient with a width of 0 do not throw
+ // IllegalArgumentExceptions for an invalid radius
+ val brush = Brush.radialGradient(listOf(Color.Red, Color.Blue))
+ val paint = Paint()
+ brush.applyTo(Size(0f, 10f), paint, 1.0f)
+ }
+
+ @Test
+ fun testInvalidHeightBrush() {
+ val brush = Brush.radialGradient(listOf(Color.Red, Color.Blue))
+ val paint = Paint()
+ // Verify that attempts to create a RadialGradient with a height of 0 do not throw
+ // IllegalArgumentExceptions for an invalid radius
+ brush.applyTo(Size(10f, 0f), paint, 1.0f)
+ }
+
+ @Test
+ fun testValidToInvalidWidthBrush() {
+ // Verify that attempts to create a RadialGradient with a non-zero width/height that
+ // is later attempted to be recreated with a zero width remove the shader from the Paint
+ val brush = Brush.radialGradient(listOf(Color.Red, Color.Blue))
+ val paint = Paint()
+ brush.applyTo(Size(10f, 10f), paint, 1.0f)
+
+ assertNotNull(paint.shader)
+
+ brush.applyTo(Size(0f, 10f), paint, 1.0f)
+ assertNull(paint.shader)
+ }
+
+ @Test
+ fun testValidToInvalidHeightBrush() {
+ // Verify that attempts to create a RadialGradient with a non-zero width/height that
+ // is later attempted to be recreated with a zero height remove the shader from the Paint
+ val brush = Brush.radialGradient(listOf(Color.Red, Color.Blue))
+ val paint = Paint()
+
+ brush.applyTo(Size(10f, 10f), paint, 1.0f)
+
+ assertNotNull(paint.shader)
+
+ brush.applyTo(Size(10f, 0f), paint, 1.0f)
+ assertNull(paint.shader)
+ }
+
private fun ImageBitmap.drawInto(
block: DrawScope.() -> Unit
) = CanvasDrawScope().draw(
diff --git a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidCanvas.android.kt b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidCanvas.android.kt
index 1293ae9..8f2debb 100644
--- a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidCanvas.android.kt
+++ b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidCanvas.android.kt
@@ -335,7 +335,9 @@
*/
private fun drawLines(points: List<Offset>, paint: Paint, stepBy: Int) {
if (points.size >= 2) {
- for (i in 0 until points.size - 1 step stepBy) {
+ val frameworkPaint = paint.asFrameworkPaint()
+ var i = 0
+ while (i < points.size - 1) {
val p1 = points[i]
val p2 = points[i + 1]
internalCanvas.drawLine(
@@ -343,8 +345,9 @@
p1.y,
p2.x,
p2.y,
- paint.asFrameworkPaint()
+ frameworkPaint
)
+ i += stepBy
}
}
}
@@ -365,10 +368,13 @@
private fun drawRawPoints(points: FloatArray, paint: Paint, stepBy: Int) {
if (points.size % 2 == 0) {
- for (i in 0 until points.size - 1 step stepBy) {
+ val frameworkPaint = paint.asFrameworkPaint()
+ var i = 0
+ while (i < points.size - 1) {
val x = points[i]
val y = points[i + 1]
- internalCanvas.drawPoint(x, y, paint.asFrameworkPaint())
+ internalCanvas.drawPoint(x, y, frameworkPaint)
+ i += stepBy
}
}
}
@@ -390,18 +396,15 @@
// Float array is treated as alternative set of x and y coordinates
// x1, y1, x2, y2, x3, y3, ... etc.
if (points.size >= 4 && points.size % 2 == 0) {
- for (i in 0 until points.size - 3 step stepBy * 2) {
+ val frameworkPaint = paint.asFrameworkPaint()
+ var i = 0
+ while (i < points.size - 3) {
val x1 = points[i]
val y1 = points[i + 1]
val x2 = points[i + 2]
val y2 = points[i + 3]
- internalCanvas.drawLine(
- x1,
- y1,
- x2,
- y2,
- paint.asFrameworkPaint()
- )
+ internalCanvas.drawLine(x1, y1, x2, y2, frameworkPaint)
+ i += stepBy * 2
}
}
}
diff --git a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPath.android.kt b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPath.android.kt
index 18705bc..f4272bb 100644
--- a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPath.android.kt
+++ b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPath.android.kt
@@ -190,6 +190,11 @@
internalPath.transform(mMatrix)
}
+ override fun transform(matrix: Matrix) {
+ mMatrix.setFrom(matrix)
+ internalPath.transform(mMatrix)
+ }
+
override fun getBounds(): Rect {
internalPath.computeBounds(rectF, true)
return Rect(
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Brush.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Brush.kt
index bda9615..5f7a1d0 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Brush.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Brush.kt
@@ -57,7 +57,8 @@
* )
* ```
*
- * @see androidx.compose.ui.graphics.samples.GradientBrushSample
+ * @sample androidx.compose.ui.graphics.samples.LinearGradientColorStopSample
+ * @sample androidx.compose.ui.graphics.samples.GradientBrushSample
*
* @param colorStops Colors and their offset in the gradient area
* @param start Starting position of the linear gradient. This can be set to
@@ -88,11 +89,12 @@
* ```
* Brush.linearGradient(
* listOf(Color.Red, Color.Green, Color.Blue),
- * start = Offset(0.0f, 50.0f)
+ * start = Offset(0.0f, 50.0f),
* end = Offset(0.0f, 100.0f)
* )
* ```
*
+ * @sample androidx.compose.ui.graphics.samples.LinearGradientSample
* @sample androidx.compose.ui.graphics.samples.GradientBrushSample
*
* @param colors Colors to be rendered as part of the gradient
@@ -129,6 +131,7 @@
* )
* ```
*
+ * @sample androidx.compose.ui.graphics.samples.HorizontalGradientSample
* @sample androidx.compose.ui.graphics.samples.GradientBrushSample
*
* @param colors colors Colors to be rendered as part of the gradient
@@ -163,6 +166,7 @@
* )
* ```
*
+ * @sample androidx.compose.ui.graphics.samples.HorizontalGradientColorStopSample
* @sample androidx.compose.ui.graphics.samples.GradientBrushSample
*
* @param colorStops Colors and offsets to determine how the colors are dispersed throughout
@@ -197,9 +201,9 @@
* startY = 0.0f,
* endY = 100.0f
* )
- *
* ```
*
+ * @sample androidx.compose.ui.graphics.samples.VerticalGradientSample
* @sample androidx.compose.ui.graphics.samples.GradientBrushSample
*
* @param colors colors Colors to be rendered as part of the gradient
@@ -234,6 +238,7 @@
* )
* ```
*
+ * @sample androidx.compose.ui.graphics.samples.VerticalGradientColorStopSample
* @sample androidx.compose.ui.graphics.samples.GradientBrushSample
*
* @param colorStops Colors and offsets to determine how the colors are dispersed throughout
@@ -273,6 +278,7 @@
* )
* ```
*
+ * @sample androidx.compose.ui.graphics.samples.RadialBrushColorStopSample
* @sample androidx.compose.ui.graphics.samples.GradientBrushSample
*
* @param colorStops Colors and offsets to determine how the colors are dispersed throughout
@@ -305,13 +311,13 @@
* ```
* Brush.radialGradient(
* listOf(Color.Red, Color.Green, Color.Blue),
- * centerX = side1 / 2.0f,
- * centerY = side2 / 2.0f,
+ * center = Offset(side1 / 2.0f, side2 / 2.0f),
* radius = side1 / 2.0f,
* tileMode = TileMode.Repeated
* )
* ```
*
+ * @sample androidx.compose.ui.graphics.samples.RadialBrushSample
* @sample androidx.compose.ui.graphics.samples.GradientBrushSample
*
* @param colors Colors to be rendered as part of the gradient
@@ -353,6 +359,7 @@
* )
* ```
*
+ * @sample androidx.compose.ui.graphics.samples.SweepGradientColorStopSample
* @sample androidx.compose.ui.graphics.samples.GradientBrushSample
*
* @param colorStops Colors and offsets to determine how the colors are dispersed throughout
@@ -384,6 +391,7 @@
* )
* ```
*
+ * @sample androidx.compose.ui.graphics.samples.SweepGradientSample
* @sample androidx.compose.ui.graphics.samples.GradientBrushSample
*
* @param colors List of colors to fill the sweep gradient
@@ -645,8 +653,14 @@
final override fun applyTo(size: Size, p: Paint, alpha: Float) {
var shader = internalShader
if (shader == null || createdSize != size) {
- shader = createShader(size).also { internalShader = it }
- createdSize = size
+ if (size.isEmpty()) {
+ shader = null
+ internalShader = null
+ createdSize = Size.Unspecified
+ } else {
+ shader = createShader(size).also { internalShader = it }
+ createdSize = size
+ }
}
if (p.color != Color.Black) p.color = Color.Black
if (p.shader != shader) p.shader = shader
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Path.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Path.kt
index b12273e..e54eef0 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Path.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Path.kt
@@ -233,6 +233,13 @@
fun translate(offset: Offset)
/**
+ * Transform the points in this path by the provided matrix
+ */
+ fun transform(matrix: Matrix) {
+ // NO-OP to ensure runtime + compile time compatibility
+ }
+
+ /**
* Compute the bounds of the control points of the path, and write the
* answer into bounds. If the path contains 0 or 1 points, the bounds is
* set to (0,0,0,0)
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 42cf68f..b4e0ed9 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
@@ -139,7 +139,7 @@
return this
}
- fun toNodes(): List<PathNode> = nodes
+ fun toNodes() = nodes
fun toPath(target: Path = Path()) = nodes.toPath(target)
@@ -156,7 +156,7 @@
* created [Path].
*/
fun List<PathNode>.toPath(target: Path = Path()): Path {
- // Rewind unsets the filltype so reset it here
+ // Rewind unsets the fill type so reset it here
val fillType = target.fillType
target.rewind()
target.fillType = fillType
diff --git a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/PathParserTest.kt b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/PathParserTest.kt
index 92b808d..31ff184 100644
--- a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/PathParserTest.kt
+++ b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/PathParserTest.kt
@@ -19,6 +19,7 @@
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.RoundRect
+import androidx.compose.ui.graphics.Matrix
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.PathFillType
import androidx.compose.ui.graphics.PathOperation
@@ -187,6 +188,10 @@
// NO-OP
}
+ override fun transform(matrix: Matrix) {
+ // NO-OP
+ }
+
override fun getBounds(): Rect = Rect.Zero
override fun op(path1: Path, path2: Path, operation: PathOperation): Boolean = false
diff --git a/compose/ui/ui-graphics/src/desktopTest/kotlin/androidx/compose/ui/graphics/DesktopPathTest.kt b/compose/ui/ui-graphics/src/desktopTest/kotlin/androidx/compose/ui/graphics/DesktopPathTest.kt
index 332b62b..4dc92b9 100644
--- a/compose/ui/ui-graphics/src/desktopTest/kotlin/androidx/compose/ui/graphics/DesktopPathTest.kt
+++ b/compose/ui/ui-graphics/src/desktopTest/kotlin/androidx/compose/ui/graphics/DesktopPathTest.kt
@@ -225,4 +225,35 @@
assertTrue(path.isEmpty)
}
+
+ @Test
+ fun testTransform() {
+ val width = 100
+ val height = 100
+ val image = ImageBitmap(width, height)
+ val canvas = Canvas(image)
+
+ val path = Path().apply {
+ addRect(Rect(0f, 0f, 50f, 50f))
+ transform(
+ Matrix().apply { translate(50f, 50f) }
+ )
+ }
+
+ val paint = Paint().apply { color = Color.Black }
+ canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), paint)
+ paint.color = Color.Red
+ canvas.drawPath(path, paint)
+
+ image.toPixelMap().apply {
+ assertEquals(Color.Black, this[width / 2 - 3, height / 2 - 3])
+ assertEquals(Color.Black, this[width / 2, height / 2 - 3])
+ assertEquals(Color.Black, this[width / 2 - 3, height / 2])
+
+ assertEquals(Color.Red, this[width / 2 + 2, height / 2 + 2])
+ assertEquals(Color.Red, this[width - 2, height / 2 + 2])
+ assertEquals(Color.Red, this[width - 2, height - 2])
+ assertEquals(Color.Red, this[width / 2 + 2, height - 2])
+ }
+ }
}
diff --git a/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedPath.skiko.kt b/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedPath.skiko.kt
index 403e36e..0285785 100644
--- a/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedPath.skiko.kt
+++ b/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedPath.skiko.kt
@@ -172,6 +172,10 @@
internalPath.transform(Matrix33.makeTranslate(offset.x, offset.y))
}
+ override fun transform(matrix: Matrix) {
+ internalPath.transform(Matrix33.makeTranslate(0f, 0f).apply { setFrom(matrix) })
+ }
+
override fun getBounds(): Rect {
val bounds = internalPath.bounds
return Rect(
@@ -209,4 +213,63 @@
override val isConvex: Boolean get() = internalPath.isConvex
override val isEmpty: Boolean get() = internalPath.isEmpty
+
+ fun Matrix33.setFrom(matrix: Matrix) {
+ require(
+ matrix[0, 2] == 0f &&
+ matrix[1, 2] == 0f &&
+ matrix[2, 2] == 1f &&
+ matrix[3, 2] == 0f &&
+ matrix[2, 0] == 0f &&
+ matrix[2, 1] == 0f &&
+ matrix[2, 3] == 0f
+ ) {
+ "Matrix33 does not support arbitrary transforms"
+ }
+
+ // We'll reuse the array used in Matrix to avoid allocation by temporarily
+ // setting it to the 3x3 matrix used by android.graphics.Matrix
+ // Store the values of the 4 x 4 matrix into temporary variables
+ // to be reset after the 3 x 3 matrix is configured
+ val scaleX = matrix.values[Matrix.ScaleX] // 0
+ val skewY = matrix.values[Matrix.SkewY] // 1
+ val v2 = matrix.values[2] // 2
+ val persp0 = matrix.values[Matrix.Perspective0] // 3
+ val skewX = matrix.values[Matrix.SkewX] // 4
+ val scaleY = matrix.values[Matrix.ScaleY] // 5
+ val v6 = matrix.values[6] // 6
+ val persp1 = matrix.values[Matrix.Perspective1] // 7
+ val v8 = matrix.values[8] // 8
+
+ val translateX = matrix.values[Matrix.TranslateX]
+ val translateY = matrix.values[Matrix.TranslateY]
+ val persp2 = matrix.values[Matrix.Perspective2]
+
+ val v = matrix.values
+
+ v[0] = scaleX // MSCALE_X = 0
+ v[1] = skewX // MSKEW_X = 1
+ v[2] = translateX // MTRANS_X = 2
+ v[3] = skewY // MSKEW_Y = 3
+ v[4] = scaleY // MSCALE_Y = 4
+ v[5] = translateY // MTRANS_Y
+ v[6] = persp0 // MPERSP_0 = 6
+ v[7] = persp1 // MPERSP_1 = 7
+ v[8] = persp2 // MPERSP_2 = 8
+
+ for (i in 0..8) {
+ mat[i] = v[i]
+ }
+
+ // Reset the values back after the android.graphics.Matrix is configured
+ v[Matrix.ScaleX] = scaleX // 0
+ v[Matrix.SkewY] = skewY // 1
+ v[2] = v2 // 2
+ v[Matrix.Perspective0] = persp0 // 3
+ v[Matrix.SkewX] = skewX // 4
+ v[Matrix.ScaleY] = scaleY // 5
+ v[6] = v6 // 6
+ v[Matrix.Perspective1] = persp1 // 7
+ v[8] = v8 // 8
+ }
}
\ No newline at end of file
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/PrintToStringTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/PrintToStringTest.kt
index f818fcc..5d24c91 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/PrintToStringTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/PrintToStringTest.kt
@@ -129,10 +129,10 @@
|-Node #X at (l=X, t=X, r=X, b=X)px, Tag: 'box'
| [Disabled]
| |-Node #X at (l=X, t=X, r=X, b=X)px
- | Role = 'Button'
| Focused = 'false'
+ | Role = 'Button'
| Text = '[Button]'
- | Actions = [RequestFocus, OnClick, GetTextLayoutResult]
+ | Actions = [OnClick, RequestFocus, GetTextLayoutResult]
| MergeDescendants = 'true'
|-Node #X at (l=X, t=X, r=X, b=X)px
Text = '[Hello]'
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTest.kt
index 386b478..1aef72f 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTest.kt
@@ -1348,7 +1348,7 @@
val paragraph = simpleParagraph(
text = "",
style = TextStyle(brush = brush),
- width = 0.0f
+ width = 1.0f
)
assertThat(paragraph.textPaint.shader).isNotNull()
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/animation/clock/Utils.kt b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/animation/clock/Utils.kt
index ae1f769..0ecdc83 100644
--- a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/animation/clock/Utils.kt
+++ b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/animation/clock/Utils.kt
@@ -117,8 +117,10 @@
)
values[endTimeMs] = this.getValueFromNanos(millisToNanos(endTimeMs))
- for (millis in startTimeMs..endTimeMs step stepMs) {
+ var millis = startTimeMs
+ while (millis <= endTimeMs) {
values[millis] = this.getValueFromNanos(millisToNanos(millis))
+ millis += stepMs
}
values
}
@@ -145,8 +147,10 @@
)
values[endTimeMs] = this.animation.getValueFromNanos(millisToNanos(endTimeMs))
- for (millis in startTimeMs..endTimeMs step stepMs) {
+ var millis = startTimeMs
+ while (millis <= endTimeMs) {
values[millis] = this.animation.getValueFromNanos(millisToNanos(millis))
+ millis += stepMs
}
values
}
diff --git a/compose/ui/ui/api/current.txt b/compose/ui/ui/api/current.txt
index 7222c00..eeeb983 100644
--- a/compose/ui/ui/api/current.txt
+++ b/compose/ui/ui/api/current.txt
@@ -2379,8 +2379,11 @@
}
public interface SemanticsModifierNode extends androidx.compose.ui.node.DelegatableNode {
- method public androidx.compose.ui.semantics.SemanticsConfiguration getSemanticsConfiguration();
- property public abstract androidx.compose.ui.semantics.SemanticsConfiguration semanticsConfiguration;
+ method public void applySemantics(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public default boolean getShouldClearDescendantSemantics();
+ method public default boolean getShouldMergeDescendantSemantics();
+ property public default boolean shouldClearDescendantSemantics;
+ property public default boolean shouldMergeDescendantSemantics;
}
public final class SemanticsModifierNodeKt {
diff --git a/compose/ui/ui/api/public_plus_experimental_current.txt b/compose/ui/ui/api/public_plus_experimental_current.txt
index bb73f64..2a98886 100644
--- a/compose/ui/ui/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui/api/public_plus_experimental_current.txt
@@ -2604,8 +2604,11 @@
}
public interface SemanticsModifierNode extends androidx.compose.ui.node.DelegatableNode {
- method public androidx.compose.ui.semantics.SemanticsConfiguration getSemanticsConfiguration();
- property public abstract androidx.compose.ui.semantics.SemanticsConfiguration semanticsConfiguration;
+ method public void applySemantics(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public default boolean getShouldClearDescendantSemantics();
+ method public default boolean getShouldMergeDescendantSemantics();
+ property public default boolean shouldClearDescendantSemantics;
+ property public default boolean shouldMergeDescendantSemantics;
}
public final class SemanticsModifierNodeKt {
diff --git a/compose/ui/ui/api/restricted_current.txt b/compose/ui/ui/api/restricted_current.txt
index 24148fc..c17196f 100644
--- a/compose/ui/ui/api/restricted_current.txt
+++ b/compose/ui/ui/api/restricted_current.txt
@@ -2427,8 +2427,11 @@
}
public interface SemanticsModifierNode extends androidx.compose.ui.node.DelegatableNode {
- method public androidx.compose.ui.semantics.SemanticsConfiguration getSemanticsConfiguration();
- property public abstract androidx.compose.ui.semantics.SemanticsConfiguration semanticsConfiguration;
+ method public void applySemantics(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method public default boolean getShouldClearDescendantSemantics();
+ method public default boolean getShouldMergeDescendantSemantics();
+ property public default boolean shouldClearDescendantSemantics;
+ property public default boolean shouldMergeDescendantSemantics;
}
public final class SemanticsModifierNodeKt {
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierSamples.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierSamples.kt
index a61a41e..020c4b9 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierSamples.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierSamples.kt
@@ -51,7 +51,7 @@
import androidx.compose.ui.node.SemanticsModifierNode
import androidx.compose.ui.node.requireLayoutDirection
import androidx.compose.ui.platform.InspectorInfo
-import androidx.compose.ui.semantics.SemanticsConfiguration
+import androidx.compose.ui.semantics.SemanticsPropertyReceiver
import androidx.compose.ui.semantics.heading
import androidx.compose.ui.semantics.onClick
import androidx.compose.ui.unit.IntSize
@@ -155,13 +155,12 @@
gesture.onCancelPointerInput()
}
- override val semanticsConfiguration: SemanticsConfiguration = SemanticsConfiguration()
- .apply {
- onClick {
- gesture.onTap()
- true
- }
+ override fun SemanticsPropertyReceiver.applySemantics() {
+ onClick {
+ gesture.onTap()
+ true
}
+ }
}
}
@@ -184,13 +183,12 @@
}
class TapSemanticsNode(var onTap: () -> Unit) : SemanticsModifierNode, Modifier.Node() {
- override val semanticsConfiguration: SemanticsConfiguration = SemanticsConfiguration()
- .apply {
- onClick {
- onTap()
- true
- }
+ override fun SemanticsPropertyReceiver.applySemantics() {
+ onClick {
+ onTap()
+ true
}
+ }
}
class TapGestureWithClickSemantics(onTap: () -> Unit) : DelegatingNode() {
var onTap: () -> Unit
@@ -250,13 +248,12 @@
}
class TapSemanticsNode(var onTap: () -> Unit) : SemanticsModifierNode, Modifier.Node() {
- override val semanticsConfiguration: SemanticsConfiguration = SemanticsConfiguration()
- .apply {
- onClick {
- onTap()
- true
- }
+ override fun SemanticsPropertyReceiver.applySemantics() {
+ onClick {
+ onTap()
+ true
}
+ }
}
class TapGestureWithClickSemantics(onTap: () -> Unit) : DelegatingNode() {
var onTap: () -> Unit
@@ -340,10 +337,9 @@
@Composable
fun SemanticsModifierNodeSample() {
class HeadingNode : SemanticsModifierNode, Modifier.Node() {
- override val semanticsConfiguration: SemanticsConfiguration = SemanticsConfiguration()
- .apply {
- heading()
- }
+ override fun SemanticsPropertyReceiver.applySemantics() {
+ heading()
+ }
}
val HeadingElement = object : ModifierNodeElement<HeadingNode>() {
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
index 4e95ffd..337f866 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
@@ -29,15 +29,44 @@
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshots.Snapshot
import androidx.compose.runtime.structuralEqualityPolicy
+import androidx.compose.ui.autofill.Autofill
+import androidx.compose.ui.autofill.AutofillTree
+import androidx.compose.ui.focus.FocusDirection
+import androidx.compose.ui.focus.FocusOwner
+import androidx.compose.ui.geometry.MutableRect
import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.graphics.Canvas
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.CompositingStrategy
+import androidx.compose.ui.graphics.Matrix
+import androidx.compose.ui.graphics.RenderEffect
+import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.TransformOrigin
import androidx.compose.ui.graphics.toAndroidRect
+import androidx.compose.ui.hapticfeedback.HapticFeedback
+import androidx.compose.ui.input.InputModeManager
+import androidx.compose.ui.input.key.KeyEvent
+import androidx.compose.ui.input.pointer.PointerIconService
+import androidx.compose.ui.modifier.ModifierLocalManager
+import androidx.compose.ui.node.InternalCoreApi
import androidx.compose.ui.node.LayoutNode
+import androidx.compose.ui.node.LayoutNodeDrawScope
+import androidx.compose.ui.node.OwnedLayer
+import androidx.compose.ui.node.Owner
+import androidx.compose.ui.node.OwnerSnapshotObserver
+import androidx.compose.ui.node.RootForTest
+import androidx.compose.ui.platform.AccessibilityManager
import androidx.compose.ui.platform.AndroidComposeView
import androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat
import androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.SemanticsNodeCopy
+import androidx.compose.ui.platform.ClipboardManager
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.SemanticsNodeWithAdjustedBounds
+import androidx.compose.ui.platform.TextToolbar
+import androidx.compose.ui.platform.ViewConfiguration
+import androidx.compose.ui.platform.WindowInfo
import androidx.compose.ui.platform.getAllUncoveredSemanticsNodesToMap
+import androidx.compose.ui.platform.invertTo
import androidx.compose.ui.semantics.CustomAccessibilityAction
import androidx.compose.ui.semantics.EmptySemanticsElement
import androidx.compose.ui.semantics.LiveRegionMode
@@ -78,11 +107,23 @@
import androidx.compose.ui.semantics.text
import androidx.compose.ui.semantics.textSelectionRange
import androidx.compose.ui.semantics.verticalScrollAxisRange
+import androidx.compose.ui.test.InternalTestApi
import androidx.compose.ui.test.TestActivity
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.ExperimentalTextApi
import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.input.PlatformTextInputPluginRegistry
+import androidx.compose.ui.text.input.TextInputService
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntRect
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.toOffset
import androidx.core.view.ViewCompat
import androidx.core.view.ViewStructureCompat
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
@@ -106,6 +147,7 @@
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
import java.util.concurrent.Executors
+import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.asCoroutineDispatcher
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
@@ -1593,6 +1635,7 @@
accessibilityDelegate.sendSemanticsPropertyChangeEvents(mapOf(nodeId to newTextNode))
}
+ @OptIn(InternalTestApi::class)
private fun createSemanticsNodeWithProperties(
id: Int,
mergeDescendants: Boolean,
@@ -1602,6 +1645,7 @@
layoutNode.modifier = Modifier.semantics(mergeDescendants) {
properties()
}
+ layoutNode.attach(MockOwner())
return SemanticsNode(layoutNode, true)
}
@@ -1615,6 +1659,7 @@
layoutNode.modifier = Modifier.semantics {
properties()
}
+ layoutNode.attach(MockOwner())
return SemanticsNode(layoutNode, true)
}
@@ -1641,3 +1686,228 @@
return false
}
}
+
+internal class MockOwner(
+ private val position: IntOffset = IntOffset.Zero,
+ override val root: LayoutNode = LayoutNode(),
+ override val coroutineContext: CoroutineContext =
+ Executors.newFixedThreadPool(3).asCoroutineDispatcher()
+) : Owner {
+ val onRequestMeasureParams = mutableListOf<LayoutNode>()
+ val onAttachParams = mutableListOf<LayoutNode>()
+ val onDetachParams = mutableListOf<LayoutNode>()
+ var layoutChangeCount = 0
+
+ override val rootForTest: RootForTest
+ get() = TODO("Not yet implemented")
+ override val hapticFeedBack: HapticFeedback
+ get() = TODO("Not yet implemented")
+ override val inputModeManager: InputModeManager
+ get() = TODO("Not yet implemented")
+ override val clipboardManager: ClipboardManager
+ get() = TODO("Not yet implemented")
+ override val accessibilityManager: AccessibilityManager
+ get() = TODO("Not yet implemented")
+ override val textToolbar: TextToolbar
+ get() = TODO("Not yet implemented")
+
+ @OptIn(ExperimentalComposeUiApi::class)
+ override val autofillTree: AutofillTree
+ get() = TODO("Not yet implemented")
+
+ @OptIn(ExperimentalComposeUiApi::class)
+ override val autofill: Autofill?
+ get() = TODO("Not yet implemented")
+ override val density: Density
+ get() = Density(1f)
+ override val textInputService: TextInputService
+ get() = TODO("Not yet implemented")
+ @OptIn(ExperimentalTextApi::class)
+ override val platformTextInputPluginRegistry: PlatformTextInputPluginRegistry
+ get() = TODO("Not yet implemented")
+ override val pointerIconService: PointerIconService
+ get() = TODO("Not yet implemented")
+ override val focusOwner: FocusOwner
+ get() = TODO("Not yet implemented")
+ override val windowInfo: WindowInfo
+ get() = TODO("Not yet implemented")
+
+ @Deprecated(
+ "fontLoader is deprecated, use fontFamilyResolver",
+ replaceWith = ReplaceWith("fontFamilyResolver")
+ )
+ @Suppress("DEPRECATION")
+ override val fontLoader: Font.ResourceLoader
+ get() = TODO("Not yet implemented")
+ override val fontFamilyResolver: FontFamily.Resolver
+ get() = TODO("Not yet implemented")
+ override val layoutDirection: LayoutDirection
+ get() = LayoutDirection.Ltr
+ @InternalCoreApi
+ override var showLayoutBounds: Boolean = false
+ override val snapshotObserver = OwnerSnapshotObserver { it.invoke() }
+ override val modifierLocalManager: ModifierLocalManager = ModifierLocalManager(this)
+
+ override fun onRequestMeasure(
+ layoutNode: LayoutNode,
+ affectsLookahead: Boolean,
+ forceRequest: Boolean,
+ scheduleMeasureAndLayout: Boolean
+ ) {
+ onRequestMeasureParams += layoutNode
+ if (affectsLookahead) {
+ layoutNode.markLookaheadMeasurePending()
+ }
+ layoutNode.markMeasurePending()
+ }
+
+ override fun onRequestRelayout(
+ layoutNode: LayoutNode,
+ affectsLookahead: Boolean,
+ forceRequest: Boolean
+ ) {
+ if (affectsLookahead) {
+ layoutNode.markLookaheadLayoutPending()
+ }
+ layoutNode.markLayoutPending()
+ }
+
+ override fun requestOnPositionedCallback(layoutNode: LayoutNode) {
+ }
+
+ override fun onAttach(node: LayoutNode) {
+ onAttachParams += node
+ }
+
+ override fun onDetach(node: LayoutNode) {
+ onDetachParams += node
+ }
+
+ override fun calculatePositionInWindow(localPosition: Offset): Offset =
+ localPosition + position.toOffset()
+
+ override fun calculateLocalPosition(positionInWindow: Offset): Offset =
+ positionInWindow - position.toOffset()
+
+ override fun requestFocus(): Boolean = false
+
+ override fun measureAndLayout(sendPointerUpdate: Boolean) {
+ }
+
+ override fun measureAndLayout(layoutNode: LayoutNode, constraints: Constraints) {
+ }
+
+ override fun forceMeasureTheSubtree(layoutNode: LayoutNode, affectsLookahead: Boolean) {
+ }
+
+ override fun registerOnEndApplyChangesListener(listener: () -> Unit) {
+ listener()
+ }
+
+ override fun onEndApplyChanges() {
+ }
+
+ override fun registerOnLayoutCompletedListener(listener: Owner.OnLayoutCompletedListener) {
+ TODO("Not yet implemented")
+ }
+
+ val invalidatedLayers = mutableListOf<OwnedLayer>()
+
+ override fun createLayer(
+ drawBlock: (Canvas) -> Unit,
+ invalidateParentLayer: () -> Unit
+ ): OwnedLayer {
+ val transform = Matrix()
+ val inverseTransform = Matrix()
+ return object : OwnedLayer {
+ override fun updateLayerProperties(
+ scaleX: Float,
+ scaleY: Float,
+ alpha: Float,
+ translationX: Float,
+ translationY: Float,
+ shadowElevation: Float,
+ rotationX: Float,
+ rotationY: Float,
+ rotationZ: Float,
+ cameraDistance: Float,
+ transformOrigin: TransformOrigin,
+ shape: Shape,
+ clip: Boolean,
+ renderEffect: RenderEffect?,
+ ambientShadowColor: Color,
+ spotShadowColor: Color,
+ compositingStrategy: CompositingStrategy,
+ layoutDirection: LayoutDirection,
+ density: Density
+ ) {
+ transform.reset()
+ // This is not expected to be 100% accurate
+ transform.scale(scaleX, scaleY)
+ transform.rotateZ(rotationZ)
+ transform.translate(translationX, translationY)
+ transform.invertTo(inverseTransform)
+ }
+
+ override fun isInLayer(position: Offset) = true
+
+ override fun move(position: IntOffset) {
+ }
+
+ override fun resize(size: IntSize) {
+ }
+
+ override fun drawLayer(canvas: Canvas) {
+ drawBlock(canvas)
+ }
+
+ override fun updateDisplayList() {
+ }
+
+ override fun invalidate() {
+ invalidatedLayers.add(this)
+ }
+
+ override fun destroy() {
+ }
+
+ override fun mapBounds(rect: MutableRect, inverse: Boolean) {
+ }
+
+ override fun reuseLayer(
+ drawBlock: (Canvas) -> Unit,
+ invalidateParentLayer: () -> Unit
+ ) {
+ }
+
+ override fun transform(matrix: Matrix) {
+ matrix.timesAssign(transform)
+ }
+
+ override fun inverseTransform(matrix: Matrix) {
+ matrix.timesAssign(inverseTransform)
+ }
+
+ override fun mapOffset(point: Offset, inverse: Boolean) = point
+ }
+ }
+
+ var semanticsChanged: Boolean = false
+ override fun onSemanticsChange() {
+ semanticsChanged = true
+ }
+
+ override fun onLayoutChange(layoutNode: LayoutNode) {
+ layoutChangeCount++
+ }
+
+ override fun getFocusDirection(keyEvent: KeyEvent): FocusDirection? {
+ TODO("Not yet implemented")
+ }
+
+ override var measureIteration: Long = 0
+ override val viewConfiguration: ViewConfiguration
+ get() = TODO("Not yet implemented")
+
+ override val sharedDrawScope = LayoutNodeDrawScope()
+}
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterCoroutineJobTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterCoroutineJobTest.kt
new file mode 100644
index 0000000..ddf5536
--- /dev/null
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterCoroutineJobTest.kt
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.ui.input.pointer
+
+import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.awaitFirstDown
+import androidx.compose.foundation.gestures.waitForUpOrCancellation
+import androidx.compose.foundation.layout.Box
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.test.ExperimentalTestApi
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.unit.IntSize
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.test.assertEquals
+import kotlinx.coroutines.CoroutineStart
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import org.junit.Assert.assertTrue
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@OptIn(ExperimentalCoroutinesApi::class)
+class SuspendingPointerInputFilterCoroutineJobTest {
+ @OptIn(ExperimentalTestApi::class)
+ @get:Rule
+ val rule = createComposeRule(Dispatchers.Main)
+
+ @Test
+ @LargeTest
+ fun isPointerInputJobStillActive_cancelPointerEvent_assertsTrue() {
+ val latch = CountDownLatch(1)
+
+ var repeatActualNumber = 0
+ val repeatExpectedNumber = 4
+
+ // To create Pointer Events:
+ val emitter = PointerInputChangeEmitter()
+ val change = emitter.nextChange(Offset(5f, 5f))
+
+ // Used to manually trigger a PointerEvent created from our PointerInputChange.
+ val suspendingPointerInputModifierNode = SuspendingPointerInputModifierNode {
+ coroutineScope {
+ awaitEachGesture {
+ // First down event (triggered)
+ awaitFirstDown()
+ // Up event won't ever come since we never trigger the event, times out as
+ // a cancellation
+ waitForUpOrCancellation()
+
+ // By running this code after down/up, we are making sure the block of code
+ // for handling pointer input events is still active despite the cancel pointer
+ // input being called later.
+ launch(start = CoroutineStart.UNDISPATCHED) {
+ repeat(repeatExpectedNumber) {
+ repeatActualNumber++
+ delay(100)
+ }
+ latch.countDown()
+ }
+ }
+ }
+ }
+
+ rule.setContent {
+ Box(
+ modifier = elementFor(
+ key1 = Unit,
+ instance = suspendingPointerInputModifierNode as Modifier.Node
+ )
+ )
+ }
+
+ rule.runOnIdle {
+ suspendingPointerInputModifierNode.onPointerEvent(
+ change.toPointerEvent(),
+ PointerEventPass.Main,
+ IntSize(10, 10)
+ )
+ }
+
+ suspendingPointerInputModifierNode.onCancelPointerInput()
+
+ val resultOfLatch = latch.await(3000, TimeUnit.MILLISECONDS)
+ assertTrue("Waiting for coroutine's tasks to finish", resultOfLatch)
+ assertEquals(repeatExpectedNumber, repeatActualNumber)
+ }
+}
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt
index 1d3593d..c521919 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt
@@ -24,10 +24,7 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.node.DelegatingNode
-import androidx.compose.ui.node.ModifierNodeElement
-import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.platform.ValueElement
-import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.platform.isDebugInspectorInfoEnabled
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.semantics.elementFor
@@ -273,7 +270,7 @@
)
}
- // Triggers cancel event
+ // Manually cancels the current pointer input event.
suspendingPointerInputModifierNode.onCancelPointerInput()
}
@@ -305,15 +302,16 @@
var currentEventAtEnd: PointerEvent? = null
val results = Channel<PointerEvent>(Channel.UNLIMITED)
- // Used to manually trigger a PointerEvent(s) created from our PointerInputChange(s).
+ // Used to manually trigger/test PointerEvents and other functionality.
val suspendingPointerInputModifierNode = SuspendingPointerInputModifierNode {
awaitPointerEventScope {
try {
// NOTE: This will never trigger 3 times. There are only two events
- // triggered followed by a onCancelPointerInput() call which doesn't trigger
- // an event because the previous event has down (press) set to false, so we
- // will always get an exception thrown with the last repeat's timeout
- // (we expect this).
+ // triggered (a down [press] event followed by an event with down [press] set to
+ // false). The resetPointerInputHandler() is called after that, but it won't
+ // trigger a cancel event if the previous event has the down [press] set to
+ // false. In this case, it does, so there are only ever two events, so the
+ // withTimeout() will trigger the timeout (expected).
repeat(3) {
withTimeout(200) {
results.trySend(awaitPointerEvent())
@@ -334,7 +332,6 @@
)
)
}
-
val bounds = IntSize(50, 50)
val emitter1 = PointerInputChangeEmitter(0)
val emitter2 = PointerInputChangeEmitter(1)
@@ -378,9 +375,9 @@
)
}
- // Manually triggers cancel event.
- // Note: This will not trigger an event in the customPointerInput block because the
- // previous events don't have any pressed pointers.
+ // Manually cancels the current pointer input event.
+ // Note: This will not trigger an event in the customPointerInput block because of the
+ // reasons listed above (previous event has down (press) set to false).
suspendingPointerInputModifierNode.onCancelPointerInput()
}
@@ -411,35 +408,48 @@
@Test
@MediumTest
- fun testCancelledHandlerBlock() {
+ fun testCancelPointerInput() {
+ val firstEventCheckpointInfo =
+ Pair(3, "First pointer event triggered to create Job.")
+ val cancelEventCheckpointInfo =
+ Pair(5, "Cancel pointer event triggered (shouldn't cancel Job).")
+ val invalidEventCheckpointNumber =
+ Pair(-1, "Should never execute.")
+
val counter = TestCounter()
- // Used to manually trigger a PointerEvent(s) created from our PointerInputChange(s).
+ // Used to manually trigger/test PointerEvents and other functionality.
val suspendingPointerInputModifierNode = SuspendingPointerInputModifierNode {
try {
awaitPointerEventScope {
try {
- counter.expect(3, "about to call awaitPointerEvent")
+ counter.expect(2, "Before awaitPointerEvent() call.")
- // With only one event triggered, this will stay stuck in the repeat
- // block until the Job is cancelled via
- // SuspendPointerInputModifierNode.resetHandling()
- repeat(2) {
+ // With only two events triggered (press and cancel), this will stay stuck
+ // in the repeat block until it is torn down, that is, until the
+ // test is over.
+ repeat(3) { repeatCount ->
awaitPointerEvent()
- counter.expect(
- 4,
- "One and only pointer event triggered to create Job."
- )
+ val checkpointInfo = when (repeatCount) {
+ 0 -> { firstEventCheckpointInfo }
+ 1 -> { cancelEventCheckpointInfo }
+ else -> {
+ fail("Should never be three events.")
+ invalidEventCheckpointNumber
+ }
+ }
+ counter.expect(checkpointInfo.first, checkpointInfo.second)
}
-
- fail("awaitPointerEvent returned; should have thrown for cancel")
+ fail("awaitPointerEvent() run 3+ times in repeat() block, should only " +
+ "have run twice (one event, one cancel).")
} finally {
- counter.expect(6, "inner finally block running")
+ counter.expect(7, "Inner finally block runs after " +
+ "teardown.")
}
}
} finally {
- counter.expect(7, "outer finally block running; inner " +
- "finally should have run")
+ counter.expect(8, "Outer finally block runs; inner finally " +
+ "block should have already run.")
}
}
@@ -457,16 +467,13 @@
val singleEventBounds = IntSize(20, 20)
rule.runOnIdle {
+ // Because the pointer input handler is triggered lazily in
+ // SuspendPointerInputModifierNode, it will not be triggered until the first event
+ // comes in, so this will be the first counter checkpoint.
counter.expect(
1,
- "Job to handle pointer input not created yet; awaitPointerEvent should " +
- "be suspended"
- )
-
- counter.expect(
- 2,
- "Trigger pointer input event to create Job for handing handle pointer" +
- " input (done lazily in SuspendPointerInputModifierNode)."
+ "Trigger pointer input handler through first pointer input event " +
+ "(handler triggered lazily)."
)
suspendingPointerInputModifierNode.onPointerEvent(
@@ -475,12 +482,96 @@
singleEventBounds
)
- counter.expect(5, "before cancelling handler; awaitPointerEvent " +
+ counter.expect(4, "Before onCancelPointerInput() handler; awaitPointerEvent " +
"should be suspended")
- // Cancels Job that manages pointer input events in SuspendPointerInputModifierNode.
+ // Manually cancels the current pointer input event.
+ suspendingPointerInputModifierNode.onCancelPointerInput()
+ counter.expect(6, "After onCancelPointerInput(), end of test, " +
+ " start teardown.")
+ }
+ }
+
+ @Test
+ @MediumTest
+ fun testResetHandlerBlock() {
+ val counter = TestCounter()
+
+ // Used to manually trigger/test PointerEvents and other functionality.
+ val suspendingPointerInputModifierNode = SuspendingPointerInputModifierNode {
+ try {
+ awaitPointerEventScope {
+ try {
+ counter.expect(2, "Before awaitPointerEvent() call.")
+
+ // With only one event triggered (press) to kick start the handler, this
+ // will stay stuck in the repeat block until it is torn down, that is,
+ // until the test is over.
+ repeat(2) { repeatCount ->
+ awaitPointerEvent()
+ when (repeatCount) {
+ 0 -> {
+ counter.expect(
+ 3,
+ "First/only pointer event triggered."
+ )
+ }
+ else -> {
+ fail("Should never be two or more events.")
+ counter.expect(-1, "Should never execute.")
+ }
+ }
+ }
+ fail("awaitPointerEvent repeated twice; should have only happened once " +
+ "and stayed suspended in repeat() waiting for a second event (that " +
+ "should never arrive).")
+ } finally {
+ fail("inner finally shouldn't call during teardown since coroutine job " +
+ "was cancelled with resetPointerInputHandler().")
+ }
+ }
+ } finally {
+ counter.expect(5, "outer finally block runs after " +
+ "resetPointerInputHandler().")
+ }
+ }
+
+ rule.setContent {
+ Box(
+ modifier = elementFor(
+ key1 = Unit,
+ instance = suspendingPointerInputModifierNode as Modifier.Node
+ )
+ )
+ }
+
+ val emitter = PointerInputChangeEmitter()
+ val singleEvent = emitter.nextChange(Offset(5f, 5f))
+ val singleEventBounds = IntSize(20, 20)
+
+ rule.runOnIdle {
+ // Because the pointer input handler is triggered lazily in
+ // SuspendPointerInputModifierNode, it will not be triggered until the first event
+ // comes in, so this will be the first counter checkpoint.
+ counter.expect(
+ 1,
+ "Trigger pointer input handler through first pointer input event " +
+ "(handler triggered lazily)."
+ )
+
+ suspendingPointerInputModifierNode.onPointerEvent(
+ singleEvent.toPointerEvent(),
+ PointerEventPass.Main,
+ singleEventBounds
+ )
+
+ counter.expect(4, "before resetPointerInputHandler(), handler should" +
+ "be suspended waiting for a second event (that never comes).")
+
+ // Cancels the pointer input handler in SuspendPointerInputModifierNode (and thus the
+ // Coroutine Job associated with it).
suspendingPointerInputModifierNode.resetPointerInputHandler()
- counter.expect(8, "after cancelling; finally blocks should have run")
+ counter.expect(6, "after resetPointerInputHandler(), end of test.")
}
}
@@ -774,72 +865,3 @@
assertThat(events).hasSize(2)
}
}
-
-private fun PointerInputChange.toPointerEvent() = PointerEvent(listOf(this))
-
-private val PointerEvent.firstChange get() = changes.first()
-
-private class PointerInputChangeEmitter(id: Int = 0) {
- val pointerId = PointerId(id.toLong())
- var previousTime = 0L
- var previousPosition = Offset.Zero
- var previousPressed = false
-
- fun nextChange(
- position: Offset = Offset.Zero,
- down: Boolean = true,
- time: Long = 0
- ): PointerInputChange {
- return PointerInputChange(
- id = pointerId,
- time,
- position,
- down,
- previousTime,
- previousPosition,
- previousPressed,
- isInitiallyConsumed = false
- ).also {
- previousTime = time
- previousPosition = position
- previousPressed = down
- }
- }
-}
-
-private class TestCounter {
- private var count = 0
-
- fun expect(checkpoint: Int, message: String = "(no message)") {
- val expected = count + 1
- if (checkpoint != expected) {
- fail("out of order event $checkpoint, expected $expected, $message")
- }
- count = expected
- }
-}
-
-private fun elementFor(
- key1: Any? = null,
- instance: Modifier.Node
-) = object : ModifierNodeElement<Modifier.Node>() {
- override fun InspectorInfo.inspectableProperties() {
- debugInspectorInfo {
- name = "pointerInput"
- properties["key1"] = key1
- properties["instance"] = instance
- }
- }
-
- override fun create() = instance
- override fun update(node: Modifier.Node) {}
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (other !is SuspendPointerInputElement) return false
- if (key1 != other.key1) return false
- return true
- }
- override fun hashCode(): Int {
- return key1?.hashCode() ?: 0
- }
-}
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/TestUtils.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/TestUtils.kt
index af27c0d..fb92e8f 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/TestUtils.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/TestUtils.kt
@@ -28,13 +28,17 @@
import androidx.compose.ui.composed
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.layout.LayoutCoordinates
+import androidx.compose.ui.node.ModifierNodeElement
import androidx.compose.ui.node.NodeCoordinator
import androidx.compose.ui.node.PointerInputModifierNode
+import androidx.compose.ui.platform.InspectorInfo
+import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.unit.IntSize
import com.google.common.truth.FailureMetadata
import com.google.common.truth.Subject
import com.google.common.truth.Subject.Factory
import com.google.common.truth.Truth
+import org.junit.Assert
@OptIn(ExperimentalComposeUiApi::class)
internal fun PointerInputEventData(
@@ -555,3 +559,73 @@
type = this.type,
scrollDelta = this.scrollDelta
)
+
+// SuspendingPointerInputFilter test utilities
+internal fun PointerInputChange.toPointerEvent() = PointerEvent(listOf(this))
+
+internal val PointerEvent.firstChange get() = changes.first()
+
+internal class PointerInputChangeEmitter(id: Int = 0) {
+ val pointerId = PointerId(id.toLong())
+ var previousTime = 0L
+ var previousPosition = Offset.Zero
+ var previousPressed = false
+
+ fun nextChange(
+ position: Offset = Offset.Zero,
+ down: Boolean = true,
+ time: Long = 0
+ ): PointerInputChange {
+ return PointerInputChange(
+ id = pointerId,
+ time,
+ position,
+ down,
+ previousTime,
+ previousPosition,
+ previousPressed,
+ isInitiallyConsumed = false
+ ).also {
+ previousTime = time
+ previousPosition = position
+ previousPressed = down
+ }
+ }
+}
+
+internal class TestCounter {
+ private var count = 0
+
+ fun expect(checkpoint: Int, message: String = "(no message)") {
+ val expected = count + 1
+ if (checkpoint != expected) {
+ Assert.fail("out of order event $checkpoint, expected $expected, $message")
+ }
+ count = expected
+ }
+}
+
+internal fun elementFor(
+ key1: Any? = null,
+ instance: Modifier.Node
+) = object : ModifierNodeElement<Modifier.Node>() {
+ override fun InspectorInfo.inspectableProperties() {
+ debugInspectorInfo {
+ name = "pointerInput"
+ properties["key1"] = key1
+ properties["instance"] = instance
+ }
+ }
+
+ override fun create() = instance
+ override fun update(node: Modifier.Node) {}
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (other !is SuspendPointerInputElement) return false
+ if (key1 != other.key1) return false
+ return true
+ }
+ override fun hashCode(): Int {
+ return key1?.hashCode() ?: 0
+ }
+}
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt
index 5731018..2c1d8dd 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt
@@ -106,22 +106,6 @@
}
@Test
- fun valueSemanticsAreEqual() {
- assertEquals(
- Modifier.semantics {
- text = AnnotatedString("text")
- contentDescription = "foo"
- popup()
- },
- Modifier.semantics {
- text = AnnotatedString("text")
- contentDescription = "foo"
- popup()
- }
- )
- }
-
- @Test
fun isTraversalGroupProperty() {
rule.setContent {
Surface(
@@ -1083,10 +1067,9 @@
properties: SemanticsPropertyReceiver.() -> Unit
): CoreSemanticsModifierNode {
return CoreSemanticsModifierNode(
- SemanticsConfiguration().apply {
- isMergingSemanticsOfDescendants = mergeDescendants
- properties()
- }
+ mergeDescendants = mergeDescendants,
+ isClearingSemantics = false,
+ properties = properties,
)
}
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
index 497be6e..da63070 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
@@ -911,13 +911,20 @@
}
}
- private fun convertMeasureSpec(measureSpec: Int): Pair<Int, Int> {
+ @Suppress("NOTHING_TO_INLINE")
+ private inline operator fun ULong.component1() = (this shr 32).toInt()
+ @Suppress("NOTHING_TO_INLINE")
+ private inline operator fun ULong.component2() = (this and 0xFFFFFFFFUL).toInt()
+
+ private fun pack(a: Int, b: Int) = (a.toULong() shl 32 or b.toULong())
+
+ private fun convertMeasureSpec(measureSpec: Int): ULong {
val mode = MeasureSpec.getMode(measureSpec)
val size = MeasureSpec.getSize(measureSpec)
return when (mode) {
- MeasureSpec.EXACTLY -> size to size
- MeasureSpec.UNSPECIFIED -> 0 to Constraints.Infinity
- MeasureSpec.AT_MOST -> 0 to size
+ MeasureSpec.EXACTLY -> pack(size, size)
+ MeasureSpec.UNSPECIFIED -> pack(0, Constraints.Infinity)
+ MeasureSpec.AT_MOST -> pack(0, size)
else -> throw IllegalStateException()
}
}
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 ad8183c..3baff06 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
@@ -74,7 +74,6 @@
import androidx.compose.ui.semantics.SemanticsOwner
import androidx.compose.ui.semantics.SemanticsProperties
import androidx.compose.ui.semantics.SemanticsPropertiesAndroid
-import androidx.compose.ui.semantics.collapsedSemantics
import androidx.compose.ui.semantics.getOrNull
import androidx.compose.ui.state.ToggleableState
import androidx.compose.ui.text.AnnotatedString
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 562f991..0e155ef 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
@@ -19,7 +19,6 @@
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
-import androidx.compose.ui.geometry.Size
import androidx.compose.ui.geometry.Size.Companion.Unspecified
import androidx.compose.ui.graphics.BlendMode
import androidx.compose.ui.graphics.Brush
@@ -49,12 +48,6 @@
val EmptyPath = emptyList<PathNode>()
-inline fun PathData(block: PathBuilder.() -> Unit): List<PathNode> =
- with(PathBuilder()) {
- block()
- getNodes()
- }
-
const val DefaultPathName = ""
const val DefaultStrokeLineWidth = 0.0f
const val DefaultStrokeLineMiter = 4.0f
@@ -68,15 +61,18 @@
val DefaultTintColor = Color.Transparent
val DefaultFillType = PathFillType.NonZero
-fun addPathNodes(pathStr: String?): List<PathNode> =
- if (pathStr == null) {
- EmptyPath
- } else {
- PathParser().parsePathString(pathStr).toNodes()
- }
+inline fun PathData(block: PathBuilder.() -> Unit) = with(PathBuilder()) {
+ block()
+ getNodes()
+}
+
+fun addPathNodes(pathStr: String?) = if (pathStr == null) {
+ EmptyPath
+} else {
+ PathParser().parsePathString(pathStr).toNodes()
+}
sealed class VNode {
-
/**
* Callback invoked whenever the node in the vector tree is modified in a way that would
* change the output of the Vector
@@ -91,7 +87,6 @@
}
internal class VectorComponent : VNode() {
-
val root = GroupComponent().apply {
pivotX = 0.0f
pivotY = 0.0f
@@ -111,7 +106,7 @@
invalidateCallback.invoke()
}
- private var isDirty: Boolean = true
+ private var isDirty = true
private val cacheDrawScope = DrawCache()
@@ -119,7 +114,7 @@
internal var intrinsicColorFilter: ColorFilter? by mutableStateOf(null)
- var viewportWidth: Float = 0f
+ var viewportWidth = 0f
set(value) {
if (field != value) {
field = value
@@ -127,7 +122,7 @@
}
}
- var viewportHeight: Float = 0f
+ var viewportHeight = 0f
set(value) {
if (field != value) {
field = value
@@ -135,7 +130,7 @@
}
}
- private var previousDrawSize: Size = Unspecified
+ private var previousDrawSize = Unspecified
/**
* Cached lambda used to avoid allocating the lambda on each draw invocation
@@ -178,8 +173,7 @@
}
internal class PathComponent : VNode() {
-
- var name: String = DefaultPathName
+ var name = DefaultPathName
set(value) {
field = value
invalidate()
@@ -191,33 +185,33 @@
invalidate()
}
- var fillAlpha: Float = 1.0f
+ var fillAlpha = 1.0f
set(value) {
field = value
invalidate()
}
- var pathData: List<PathNode> = EmptyPath
+ var pathData = EmptyPath
set(value) {
field = value
isPathDirty = true
invalidate()
}
- var pathFillType: PathFillType = DefaultFillType
+ var pathFillType = DefaultFillType
set(value) {
field = value
renderPath.fillType = value
invalidate()
}
- var strokeAlpha: Float = 1.0f
+ var strokeAlpha = 1.0f
set(value) {
field = value
invalidate()
}
- var strokeLineWidth: Float = DefaultStrokeLineWidth
+ var strokeLineWidth = DefaultStrokeLineWidth
set(value) {
field = value
invalidate()
@@ -229,28 +223,28 @@
invalidate()
}
- var strokeLineCap: StrokeCap = DefaultStrokeLineCap
+ var strokeLineCap = DefaultStrokeLineCap
set(value) {
field = value
isStrokeDirty = true
invalidate()
}
- var strokeLineJoin: StrokeJoin = DefaultStrokeLineJoin
+ var strokeLineJoin = DefaultStrokeLineJoin
set(value) {
field = value
isStrokeDirty = true
invalidate()
}
- var strokeLineMiter: Float = DefaultStrokeLineMiter
+ var strokeLineMiter = DefaultStrokeLineMiter
set(value) {
field = value
isStrokeDirty = true
invalidate()
}
- var trimPathStart: Float = DefaultTrimPathStart
+ var trimPathStart = DefaultTrimPathStart
set(value) {
if (field != value) {
field = value
@@ -259,7 +253,7 @@
}
}
- var trimPathEnd: Float = DefaultTrimPathEnd
+ var trimPathEnd = DefaultTrimPathEnd
set(value) {
if (field != value) {
field = value
@@ -268,7 +262,7 @@
}
}
- var trimPathOffset: Float = DefaultTrimPathOffset
+ var trimPathOffset = DefaultTrimPathOffset
set(value) {
if (field != value) {
field = value
@@ -279,13 +273,12 @@
private var isPathDirty = true
private var isStrokeDirty = true
- private var isTrimPathDirty = true
+ private var isTrimPathDirty = false
private var strokeStyle: Stroke? = null
private val path = Path()
-
- private val renderPath = Path()
+ private var renderPath = path
private val pathMeasure: PathMeasure by lazy(LazyThreadSafetyMode.NONE) { PathMeasure() }
@@ -296,14 +289,18 @@
}
private fun updateRenderPath() {
- // 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)
+ renderPath = path
} else {
+ if (renderPath == path) {
+ renderPath = Path()
+ } else {
+ // Rewind unsets the fill type so reset it here
+ val fillType = renderPath.fillType
+ renderPath.rewind()
+ renderPath.fillType = fillType
+ }
+
pathMeasure.setPath(path, false)
val length = pathMeasure.length
val start = ((trimPathStart + trimPathOffset) % 1f) * length
@@ -339,18 +336,15 @@
}
}
- override fun toString(): String {
- return path.toString()
- }
+ override fun toString() = path.toString()
}
internal class GroupComponent : VNode() {
-
private var groupMatrix: Matrix? = null
private val children = mutableListOf<VNode>()
- var clipPathData: List<PathNode> = EmptyPath
+ var clipPathData = EmptyPath
set(value) {
field = value
isClipPathDirty = true
@@ -387,61 +381,64 @@
// If the name changes we should re-draw as individual nodes could
// be modified based off of this name parameter.
- var name: String = DefaultGroupName
+ var name = DefaultGroupName
set(value) {
field = value
invalidate()
}
- var rotation: Float = DefaultRotation
+ var rotation = DefaultRotation
set(value) {
field = value
isMatrixDirty = true
invalidate()
}
- var pivotX: Float = DefaultPivotX
+ var pivotX = DefaultPivotX
set(value) {
field = value
isMatrixDirty = true
invalidate()
}
- var pivotY: Float = DefaultPivotY
+ var pivotY = DefaultPivotY
set(value) {
field = value
isMatrixDirty = true
invalidate()
}
- var scaleX: Float = DefaultScaleX
+ var scaleX = DefaultScaleX
set(value) {
field = value
isMatrixDirty = true
invalidate()
}
- var scaleY: Float = DefaultScaleY
+ var scaleY = DefaultScaleY
set(value) {
field = value
isMatrixDirty = true
invalidate()
}
- var translationX: Float = DefaultTranslationX
+ var translationX = DefaultTranslationX
set(value) {
field = value
isMatrixDirty = true
invalidate()
}
- var translationY: Float = DefaultTranslationY
+ var translationY = DefaultTranslationY
set(value) {
field = value
isMatrixDirty = true
invalidate()
}
+ val numChildren: Int
+ get() = children.size
+
private var isMatrixDirty = true
private fun updateMatrix() {
@@ -528,9 +525,6 @@
}
}
- val numChildren: Int
- get() = children.size
-
override fun toString(): String {
val sb = StringBuilder().append("VGroup: ").append(name)
children.fastForEach { node ->
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt
index 9a7ddac..abd9b6a 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt
@@ -376,12 +376,21 @@
@OptIn(ExperimentalComposeUiApi::class)
for ((key, change) in changes) {
- // Filter for changes that are associated with pointer ids that are relevant to this
- // node
- if (key in pointerIds) {
+ val keyValue = key.value
+
+ // Using for (key in pointerIds) causes key to be boxed and create allocations
+ var keyInPointerIds = false
+ for (i in 0..pointerIds.lastIndex) {
+ if (pointerIds[i].value == keyValue) {
+ keyInPointerIds = true
+ break
+ }
+ }
+
+ if (keyInPointerIds) {
// And translate their position relative to the parent coordinates, to give us a
// change local to the PointerInputFilter's coordinates
- val historical = mutableListOf<HistoricalChange>()
+ val historical = ArrayList<HistoricalChange>(change.historical.size)
change.historical.fastForEach {
historical.add(
HistoricalChange(
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt
index a3d34a1..96c06cc 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt
@@ -602,9 +602,6 @@
dispatchPointerEvent(cancelEvent, PointerEventPass.Final)
lastPointerEvent = null
-
- // Cancels existing coroutine (Job) handling events.
- resetPointerInputHandler()
}
override suspend fun <R> awaitPointerEventScope(
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt
index 88b94ea..533ae5f 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/BackwardsCompatNode.kt
@@ -59,6 +59,7 @@
import androidx.compose.ui.modifier.modifierLocalMapOf
import androidx.compose.ui.semantics.SemanticsConfiguration
import androidx.compose.ui.semantics.SemanticsModifier
+import androidx.compose.ui.semantics.SemanticsPropertyReceiver
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
@@ -352,8 +353,11 @@
}
}
- override val semanticsConfiguration: SemanticsConfiguration
- get() = (element as SemanticsModifier).semanticsConfiguration
+ override fun SemanticsPropertyReceiver.applySemantics() {
+ val config = (element as SemanticsModifier).semanticsConfiguration
+ val toMergeInto = (this as SemanticsConfiguration)
+ toMergeInto.collapsePeer(config)
+ }
override fun onPointerEvent(
pointerEvent: PointerEvent,
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt
index e42df1f..aa215e9 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt
@@ -52,6 +52,7 @@
import androidx.compose.ui.platform.LocalViewConfiguration
import androidx.compose.ui.platform.ViewConfiguration
import androidx.compose.ui.platform.simpleIdentityToString
+import androidx.compose.ui.semantics.SemanticsConfiguration
import androidx.compose.ui.semantics.generateSemanticsId
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
@@ -65,6 +66,8 @@
*/
private const val DebugChanges = false
+private val DefaultDensity = Density(1f)
+
/**
* An element in the layout hierarchy, built with compose UI.
*/
@@ -392,6 +395,37 @@
invalidateMeasurements()
}
+ private var _collapsedSemantics: SemanticsConfiguration? = null
+ internal fun invalidateSemantics() {
+ _collapsedSemantics = null
+ // TODO(lmr): this ends up scheduling work that diffs the entire tree, but we should
+ // eventually move to marking just this node as invalidated since we are invalidating
+ // on a per-node level. This should preserve current behavior for now.
+ requireOwner().onSemanticsChange()
+ }
+ internal val collapsedSemantics: SemanticsConfiguration?
+ get() {
+ if (!nodes.has(Nodes.Semantics) || _collapsedSemantics != null) {
+ return _collapsedSemantics
+ }
+
+ var config = SemanticsConfiguration()
+ requireOwner().snapshotObserver.observeSemanticsReads(this) {
+ nodes.tailToHead(Nodes.Semantics) {
+ if (it.shouldClearDescendantSemantics) {
+ config = SemanticsConfiguration()
+ config.isClearingSemantics = true
+ }
+ if (it.shouldMergeDescendantSemantics) {
+ config.isMergingSemanticsOfDescendants = true
+ }
+ with(config) { with(it) { applySemantics() } }
+ }
+ }
+ _collapsedSemantics = config
+ return config
+ }
+
/**
* Set the [Owner] of this LayoutNode. This LayoutNode must not already be attached.
* [owner] must match its [parent].[owner].
@@ -419,7 +453,7 @@
this.owner = owner
this.depth = (parent?.depth ?: -1) + 1
if (nodes.has(Nodes.Semantics)) {
- owner.onSemanticsChange()
+ invalidateSemantics()
}
owner.onAttach(this)
@@ -469,7 +503,7 @@
onDetach?.invoke(owner)
if (nodes.has(Nodes.Semantics)) {
- owner.onSemanticsChange()
+ invalidateSemantics()
}
nodes.detach()
owner.onDetach(this)
@@ -595,7 +629,7 @@
/**
* The screen density to be used by this layout.
*/
- override var density: Density = Density(1f)
+ override var density: Density = DefaultDensity
set(value) {
if (field != value) {
field = value
@@ -1139,10 +1173,8 @@
fun invalidateSubtree(isRootOfInvalidation: Boolean = true) {
if (isRootOfInvalidation) {
parent?.invalidateLayer()
- // Invalidate semantics. We can do this once because there isn't a node-by-node
- // invalidation mechanism.
- requireOwner().onSemanticsChange()
}
+ invalidateSemantics()
requestRemeasure()
nodes.headToTail(Nodes.Layout) {
it.requireCoordinator(Nodes.Layout).layer?.invalidate()
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeChain.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeChain.kt
index 2b2847f..9043a07 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeChain.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeChain.kt
@@ -743,7 +743,8 @@
private fun Modifier.fillVector(
result: MutableVector<Modifier.Element>
): MutableVector<Modifier.Element> {
- val stack = MutableVector<Modifier>(result.size).also { it.add(this) }
+ val capacity = result.size.coerceAtLeast(16)
+ val stack = MutableVector<Modifier>(capacity).also { it.add(this) }
while (stack.isNotEmpty()) {
when (val next = stack.removeAt(stack.size - 1)) {
is CombinedModifier -> {
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt
index b0abc9f..6519bf8 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeCoordinator.kt
@@ -39,7 +39,6 @@
import androidx.compose.ui.layout.Placeable
import androidx.compose.ui.layout.findRootCoordinates
import androidx.compose.ui.layout.positionInRoot
-import androidx.compose.ui.semantics.collapsedSemantics
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntOffset
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnerSnapshotObserver.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnerSnapshotObserver.kt
index 22391a4..689bc64 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnerSnapshotObserver.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/OwnerSnapshotObserver.kt
@@ -39,6 +39,12 @@
}
}
+ private val onCommitAffectingSemantics: (LayoutNode) -> Unit = { layoutNode ->
+ if (layoutNode.isValidOwnerScope) {
+ layoutNode.invalidateSemantics()
+ }
+ }
+
private val onCommitAffectingLayout: (LayoutNode) -> Unit = { layoutNode ->
if (layoutNode.isValidOwnerScope) {
layoutNode.requestRelayout()
@@ -108,6 +114,13 @@
}
}
+ internal fun observeSemanticsReads(
+ node: LayoutNode,
+ block: () -> Unit
+ ) {
+ observeReads(node, onCommitAffectingSemantics, block)
+ }
+
/**
* Observe snapshot reads for any target, allowing consumers to determine how to respond
* to state changes.
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/SemanticsModifierNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/SemanticsModifierNode.kt
index 8c80e15..1cc3317 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/SemanticsModifierNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/SemanticsModifierNode.kt
@@ -21,6 +21,10 @@
import androidx.compose.ui.layout.boundsInRoot
import androidx.compose.ui.semantics.SemanticsActions
import androidx.compose.ui.semantics.SemanticsConfiguration
+import androidx.compose.ui.semantics.SemanticsNode
+import androidx.compose.ui.semantics.SemanticsOwner
+import androidx.compose.ui.semantics.SemanticsPropertyKey
+import androidx.compose.ui.semantics.SemanticsPropertyReceiver
import androidx.compose.ui.semantics.getOrNull
/**
@@ -32,31 +36,64 @@
*/
interface SemanticsModifierNode : DelegatableNode {
/**
- * The SemanticsConfiguration holds substantive data, especially a list of key/value pairs
- * such as (label -> "buttonName").
+ * Clears the semantics of all the descendant nodes and sets new semantics.
+ *
+ * In the merged semantics tree, this clears the semantic information provided
+ * by the node's descendants (but not those of the layout node itself, if any)
+ * In the unmerged tree, the semantics node is marked with
+ * "[SemanticsConfiguration.isClearingSemantics]", but nothing is actually cleared.
+ *
+ * Compose's default semantics provide baseline usability for screen-readers, but this can be
+ * used to provide a more polished screen-reader experience: for example, clearing the
+ * semantics of a group of tiny buttons, and setting equivalent actions on the card
+ * containing them.
*/
- val semanticsConfiguration: SemanticsConfiguration
+ @get:Suppress("GetterSetterNames")
+ val shouldClearDescendantSemantics: Boolean
+ get() = false
+
+ /**
+ * Whether the semantic information provided by this node and
+ * its descendants should be treated as one logical entity.
+ * Most commonly set on screen-reader-focusable items such as buttons or form fields.
+ * In the merged semantics tree, all descendant nodes (except those themselves marked
+ * [shouldMergeDescendantSemantics]) will disappear from the tree, and their properties
+ * will get merged into the parent's configuration (using a merging algorithm that varies based
+ * on the type of property -- for example, text properties will get concatenated, separated
+ * by commas). In the unmerged semantics tree, the node is simply marked with
+ * [SemanticsConfiguration.isMergingSemanticsOfDescendants].
+ */
+ @get:Suppress("GetterSetterNames")
+ val shouldMergeDescendantSemantics: Boolean
+ get() = false
+
+ /**
+ * Add semantics key/value pairs to the layout node, for use in testing, accessibility, etc.
+ *
+ * The [SemanticsPropertyReceiver] provides "key = value"-style setters for any
+ * [SemanticsPropertyKey]. Additionally, chaining multiple semantics modifiers is
+ * also a supported style.
+ *
+ * The resulting semantics produce two [SemanticsNode] trees:
+ *
+ * The "unmerged tree" rooted at [SemanticsOwner.unmergedRootSemanticsNode] has one
+ * [SemanticsNode] per layout node which has any [SemanticsModifierNode] on it. This
+ * [SemanticsNode] contains all the properties set in all the [SemanticsModifierNode]s on
+ * that node.
+ *
+ * The "merged tree" rooted at [SemanticsOwner.rootSemanticsNode] has equal-or-fewer nodes: it
+ * simplifies the structure based on [shouldMergeDescendantSemantics] and
+ * [shouldClearDescendantSemantics]. For most purposes (especially accessibility, or the
+ * testing of accessibility), the merged semantics tree should be used.
+ */
+ fun SemanticsPropertyReceiver.applySemantics()
}
-fun SemanticsModifierNode.invalidateSemantics() = requireOwner().onSemanticsChange()
-
-internal val SemanticsModifierNode.useMinimumTouchTarget: Boolean
- get() = semanticsConfiguration.getOrNull(SemanticsActions.OnClick) != null
+fun SemanticsModifierNode.invalidateSemantics() = requireLayoutNode().invalidateSemantics()
internal val SemanticsConfiguration.useMinimumTouchTarget: Boolean
get() = getOrNull(SemanticsActions.OnClick) != null
-internal fun SemanticsModifierNode.touchBoundsInRoot(): Rect {
- if (!node.isAttached) {
- return Rect.Zero
- }
- if (!useMinimumTouchTarget) {
- return requireCoordinator(Nodes.Semantics).boundsInRoot()
- }
-
- return requireCoordinator(Nodes.Semantics).touchBoundsInRoot()
-}
-
internal fun Modifier.Node.touchBoundsInRoot(useMinimumTouchTarget: Boolean): Rect {
if (!node.isAttached) {
return Rect.Zero
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsConfiguration.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsConfiguration.kt
index 0ca7a3d..922af3f 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsConfiguration.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsConfiguration.kt
@@ -59,7 +59,15 @@
}
override fun <T> set(key: SemanticsPropertyKey<T>, value: T) {
- props[key] = value
+ if (value is AccessibilityAction<*> && contains(key)) {
+ val prev = props[key] as AccessibilityAction<*>
+ props[key] = AccessibilityAction(
+ value.label ?: prev.label,
+ value.action ?: prev.action
+ )
+ } else {
+ props[key] = value
+ }
}
operator fun <T> contains(key: SemanticsPropertyKey<T>): Boolean {
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsModifier.kt
index 723d099..688113e 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsModifier.kt
@@ -47,16 +47,10 @@
}
internal object EmptySemanticsElement :
- ModifierNodeElement<CoreSemanticsModifierNode>() {
+ ModifierNodeElement<EmptySemanticsModifier>() {
+ override fun create() = EmptySemanticsModifier()
- private val semanticsConfiguration = SemanticsConfiguration().apply {
- isMergingSemanticsOfDescendants = false
- isClearingSemantics = false
- }
-
- override fun create() = CoreSemanticsModifierNode(semanticsConfiguration)
-
- override fun update(node: CoreSemanticsModifierNode) {}
+ override fun update(node: EmptySemanticsModifier) {}
override fun InspectorInfo.inspectableProperties() {
// Nothing to inspect.
@@ -67,8 +61,22 @@
}
internal class CoreSemanticsModifierNode(
- override var semanticsConfiguration: SemanticsConfiguration
-) : Modifier.Node(), SemanticsModifierNode
+ var mergeDescendants: Boolean,
+ var isClearingSemantics: Boolean,
+ var properties: SemanticsPropertyReceiver.() -> Unit
+) : Modifier.Node(), SemanticsModifierNode {
+ override val shouldClearDescendantSemantics: Boolean
+ get() = isClearingSemantics
+ override val shouldMergeDescendantSemantics: Boolean
+ get() = mergeDescendants
+ override fun SemanticsPropertyReceiver.applySemantics() {
+ properties()
+ }
+}
+
+internal class EmptySemanticsModifier : Modifier.Node(), SemanticsModifierNode {
+ override fun SemanticsPropertyReceiver.applySemantics() {}
+}
/**
* Add semantics key/value pairs to the layout node, for use in testing, accessibility, etc.
@@ -110,30 +118,33 @@
// Implement SemanticsModifier to allow tooling to inspect the semantics configuration
internal data class AppendedSemanticsElement(
- override val semanticsConfiguration: SemanticsConfiguration
+ val mergeDescendants: Boolean,
+ val properties: (SemanticsPropertyReceiver.() -> Unit)
) : ModifierNodeElement<CoreSemanticsModifierNode>(), SemanticsModifier {
- constructor(
- mergeDescendants: Boolean,
- properties: (SemanticsPropertyReceiver.() -> Unit)
- ) : this(
- SemanticsConfiguration().apply {
+ // This should only ever be called by layout inspector
+ override val semanticsConfiguration: SemanticsConfiguration
+ get() = SemanticsConfiguration().apply {
isMergingSemanticsOfDescendants = mergeDescendants
properties()
}
- )
override fun create(): CoreSemanticsModifierNode {
- return CoreSemanticsModifierNode(semanticsConfiguration)
+ return CoreSemanticsModifierNode(
+ mergeDescendants = mergeDescendants,
+ isClearingSemantics = false,
+ properties = properties
+ )
}
override fun update(node: CoreSemanticsModifierNode) {
- node.semanticsConfiguration = semanticsConfiguration
+ node.mergeDescendants = mergeDescendants
+ node.properties = properties
}
override fun InspectorInfo.inspectableProperties() {
name = "semantics"
- properties["mergeDescendants"] = semanticsConfiguration.isMergingSemanticsOfDescendants
+ properties["mergeDescendants"] = mergeDescendants
addSemanticsPropertiesFrom(semanticsConfiguration)
}
}
@@ -159,24 +170,27 @@
// Implement SemanticsModifier to allow tooling to inspect the semantics configuration
internal data class ClearAndSetSemanticsElement(
- override val semanticsConfiguration: SemanticsConfiguration
+ val properties: SemanticsPropertyReceiver.() -> Unit
) : ModifierNodeElement<CoreSemanticsModifierNode>(), SemanticsModifier {
- init {
- semanticsConfiguration.isMergingSemanticsOfDescendants = false
- semanticsConfiguration.isClearingSemantics = true
- }
-
- constructor(properties: (SemanticsPropertyReceiver.() -> Unit)) : this(
- SemanticsConfiguration().apply(properties)
- )
+ // This should only ever be called by layout inspector
+ override val semanticsConfiguration: SemanticsConfiguration
+ get() = SemanticsConfiguration().apply {
+ isMergingSemanticsOfDescendants = false
+ isClearingSemantics = true
+ properties()
+ }
override fun create(): CoreSemanticsModifierNode {
- return CoreSemanticsModifierNode(semanticsConfiguration)
+ return CoreSemanticsModifierNode(
+ mergeDescendants = false,
+ isClearingSemantics = true,
+ properties = properties
+ )
}
override fun update(node: CoreSemanticsModifierNode) {
- node.semanticsConfiguration = semanticsConfiguration
+ node.properties = properties
}
override fun InspectorInfo.inspectableProperties() {
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt
index 41cdc4f..bb78b7e 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt
@@ -402,7 +402,9 @@
}
val fakeNode = SemanticsNode(
outerSemanticsNode = object : SemanticsModifierNode, Modifier.Node() {
- override val semanticsConfiguration = configuration
+ override fun SemanticsPropertyReceiver.applySemantics() {
+ properties()
+ }
},
mergingEnabled = false,
layoutNode = LayoutNode(
@@ -427,25 +429,9 @@
}
}
-internal val LayoutNode.collapsedSemantics: SemanticsConfiguration?
- get() {
- var result: SemanticsConfiguration? = null
- nodes.tailToHead(Nodes.Semantics) {
- val current = result
- if (current == null || it.semanticsConfiguration.isClearingSemantics) {
- result = it.semanticsConfiguration
- } else {
- result = it.semanticsConfiguration.copy().also {
- it.collapsePeer(current)
- }
- }
- }
- return result
- }
-
internal val LayoutNode.outerMergingSemantics: SemanticsModifierNode?
get() = nodes.firstFromHead(Nodes.Semantics) {
- it.semanticsConfiguration.isMergingSemanticsOfDescendants
+ it.shouldMergeDescendantSemantics
}
/**
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsOwner.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsOwner.kt
index a5d43a5..7a39405 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsOwner.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsOwner.kt
@@ -18,6 +18,7 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.node.LayoutNode
+import androidx.compose.ui.node.Nodes
import androidx.compose.ui.util.fastForEach
/**
@@ -37,7 +38,16 @@
val unmergedRootSemanticsNode: SemanticsNode
get() {
- return SemanticsNode(rootNode, mergingEnabled = false)
+ return SemanticsNode(
+ outerSemanticsNode = rootNode.nodes.head(Nodes.Semantics)!!.node,
+ layoutNode = rootNode,
+ mergingEnabled = false,
+ // Forcing an empty SemanticsConfiguration here since the root node will always
+ // have an empty config, but if we don't pass this in explicitly here it will try
+ // to call `rootNode.collapsedSemantics` which will fail because the LayoutNode
+ // is not yet attached when this getter is first called.
+ unmergedConfig = SemanticsConfiguration()
+ )
}
}
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/DelegatingNodeTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/DelegatingNodeTest.kt
index 2fc9795..698d042 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/DelegatingNodeTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/DelegatingNodeTest.kt
@@ -21,7 +21,7 @@
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasureResult
import androidx.compose.ui.layout.MeasureScope
-import androidx.compose.ui.semantics.SemanticsConfiguration
+import androidx.compose.ui.semantics.SemanticsPropertyReceiver
import androidx.compose.ui.unit.Constraints
import org.junit.Test
import org.junit.runner.RunWith
@@ -830,8 +830,7 @@
}
class SemanticsMod(val id: String = "") : SemanticsModifierNode, Modifier.Node() {
- override val semanticsConfiguration: SemanticsConfiguration
- get() = SemanticsConfiguration()
+ override fun SemanticsPropertyReceiver.applySemantics() { }
override fun toString(): String {
return "SemanticsMod($id)"
}
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
index 586d600..df004df 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/LayoutNodeTest.kt
@@ -61,6 +61,7 @@
import androidx.compose.ui.platform.invertTo
import androidx.compose.ui.semantics.SemanticsConfiguration
import androidx.compose.ui.semantics.SemanticsModifier
+import androidx.compose.ui.semantics.SemanticsPropertyReceiver
import androidx.compose.ui.text.ExperimentalTextApi
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
@@ -1382,12 +1383,11 @@
@Test
fun hitTestSemantics_pointerInMinimumTouchTarget_closestHit() {
- val semanticsConfiguration = SemanticsConfiguration()
val semanticsNode1 = object : SemanticsModifierNode, Modifier.Node() {
- override val semanticsConfiguration: SemanticsConfiguration = semanticsConfiguration
+ override fun SemanticsPropertyReceiver.applySemantics() { }
}
val semanticsNode2 = object : SemanticsModifierNode, Modifier.Node() {
- override val semanticsConfiguration: SemanticsConfiguration = semanticsConfiguration
+ override fun SemanticsPropertyReceiver.applySemantics() { }
}
data class TestSemanticsElement(
private val node: Modifier.Node
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/core/core/src/main/java/androidx/core/view/SoftwareKeyboardControllerCompat.java b/core/core/src/main/java/androidx/core/view/SoftwareKeyboardControllerCompat.java
index a43c2af..5ccc392 100644
--- a/core/core/src/main/java/androidx/core/view/SoftwareKeyboardControllerCompat.java
+++ b/core/core/src/main/java/androidx/core/view/SoftwareKeyboardControllerCompat.java
@@ -207,24 +207,23 @@
insetsController = mView.getWindowInsetsController();
}
if (insetsController != null) {
- if (SDK_INT <= 33) {
- final AtomicBoolean isImeInsetsControllable = new AtomicBoolean(false);
- final WindowInsetsController.OnControllableInsetsChangedListener listener =
- (windowInsetsController, typeMask) -> isImeInsetsControllable.set(
- (typeMask & WindowInsetsCompat.Type.IME) != 0);
- // Register the OnControllableInsetsChangedListener would synchronously
- // callback current controllable insets. Adding the listener here to check if
- // ime inset is controllable.
- insetsController.addOnControllableInsetsChangedListener(listener);
- if (!isImeInsetsControllable.get()) {
- final InputMethodManager imm = (InputMethodManager) mView.getContext()
- .getSystemService(Context.INPUT_METHOD_SERVICE);
- // This is a backport when the app is in multi-windowing mode, it cannot
- // control the ime insets. Use the InputMethodManager instead.
- imm.hideSoftInputFromWindow(mView.getWindowToken(), 0);
- }
- insetsController.removeOnControllableInsetsChangedListener(listener);
+ final AtomicBoolean isImeInsetsControllable = new AtomicBoolean(false);
+ final WindowInsetsController.OnControllableInsetsChangedListener listener =
+ (windowInsetsController, typeMask) -> isImeInsetsControllable.set(
+ (typeMask & WindowInsetsCompat.Type.IME) != 0);
+ // Register the OnControllableInsetsChangedListener would synchronously
+ // callback current controllable insets. Adding the listener here to check if
+ // ime inset is controllable.
+ insetsController.addOnControllableInsetsChangedListener(listener);
+ if (!isImeInsetsControllable.get()) {
+ final InputMethodManager imm = (InputMethodManager) mView.getContext()
+ .getSystemService(Context.INPUT_METHOD_SERVICE);
+ // This is a backport when the app is in multi-windowing mode, it cannot
+ // control the ime insets. Use the InputMethodManager instead.
+ // TODO(b/280532442): Fix this in the platform side.
+ imm.hideSoftInputFromWindow(mView.getWindowToken(), 0);
}
+ insetsController.removeOnControllableInsetsChangedListener(listener);
insetsController.hide(WindowInsets.Type.ime());
} else {
// Couldn't find an insets controller, fallback to old implementation
diff --git a/fragment/CHANGELOG.md b/fragment/CHANGELOG.md
index 55e45de..0ea055d 100644
--- a/fragment/CHANGELOG.md
+++ b/fragment/CHANGELOG.md
@@ -6,6 +6,17 @@
# `Removed`: for now removed feature
# `Fixed`: for any bug fixes
# `Security`: in case of vulnerabilities
+#
+# Possible headings:
+# API Changes
+# Bug Fixes
+# Dependency Updates
+# Behavior Change
+# External Contributions
# Unreleased
+### Dependency Updates
+
+* Changed dependency of Activity library from version 1.5.1 to version 1.7.1.
+
diff --git a/fragment/fragment-ktx/build.gradle b/fragment/fragment-ktx/build.gradle
index 3eb971a..7327886 100644
--- a/fragment/fragment-ktx/build.gradle
+++ b/fragment/fragment-ktx/build.gradle
@@ -25,7 +25,7 @@
dependencies {
api(project(":fragment:fragment"))
- api("androidx.activity:activity-ktx:1.5.1") {
+ api("androidx.activity:activity-ktx:1.7.1") {
because "Mirror fragment dependency graph for -ktx artifacts"
}
api("androidx.core:core-ktx:1.2.0") {
diff --git a/fragment/fragment/build.gradle b/fragment/fragment/build.gradle
index 248f510..91b6c0f 100644
--- a/fragment/fragment/build.gradle
+++ b/fragment/fragment/build.gradle
@@ -29,7 +29,7 @@
api("androidx.collection:collection:1.1.0")
api("androidx.viewpager:viewpager:1.0.0")
api("androidx.loader:loader:1.0.0")
- api("androidx.activity:activity:1.5.1")
+ api("androidx.activity:activity:1.7.1")
api("androidx.lifecycle:lifecycle-runtime:2.6.1")
api("androidx.lifecycle:lifecycle-livedata-core:2.6.1")
api("androidx.lifecycle:lifecycle-viewmodel:2.6.1")
diff --git a/fragment/integration-tests/testapp/build.gradle b/fragment/integration-tests/testapp/build.gradle
index 17004dc..79ee5ac 100644
--- a/fragment/integration-tests/testapp/build.gradle
+++ b/fragment/integration-tests/testapp/build.gradle
@@ -25,7 +25,8 @@
main {
res.srcDirs = ["src/main/res",
"src/main/res/layouts/doubleTransitionBug",
- "src/main/res/layouts/kittenFragmentTransitions"
+ "src/main/res/layouts/kittenFragmentTransitions",
+ "src/main/res/layouts/basicAnimators",
]
}
}
diff --git a/fragment/integration-tests/testapp/src/main/AndroidManifest.xml b/fragment/integration-tests/testapp/src/main/AndroidManifest.xml
index 19d7b02..331b806 100644
--- a/fragment/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/fragment/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -21,6 +21,7 @@
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true"
+ android:enableOnBackInvokedCallback="true"
tools:ignore="AllowBackup,GoogleAppIndexingWarning,MissingApplicationIcon">
<activity
android:name=".MainFragmentActivity"
@@ -32,12 +33,6 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- <activity
- android:name=".doubleTransitionBug.DoubleTransitionBugActivity"
- android:exported="false" />
- <activity
- android:name=".kittenfragmenttransitions.KittenTransitionMainActivity"
- android:exported="false" />
</application>
</manifest>
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/AnimationTestsFragment.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/AnimatorTestsFragment.kt
similarity index 61%
rename from fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/AnimationTestsFragment.kt
rename to fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/AnimatorTestsFragment.kt
index 9c66c18..efddd99 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/AnimationTestsFragment.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/AnimatorTestsFragment.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * 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.
@@ -16,6 +16,13 @@
package androidx.fragment.testapp
+import android.os.Bundle
+import android.view.View
import androidx.fragment.app.Fragment
+import androidx.fragment.testapp.basicAnimators.BasicFragmentAnimatorFragment
-class AnimationTestsFragment : Fragment(R.layout.animation_fragment)
+class AnimatorTestsFragment : Fragment(R.layout.animation_fragment) {
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ addButton("Basic Fragment Animators", BasicFragmentAnimatorFragment())
+ }
+}
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/TestTypeSelectFragment.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/TestTypeSelectFragment.kt
index e7a7a5b..9f5c5f2 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/TestTypeSelectFragment.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/TestTypeSelectFragment.kt
@@ -28,25 +28,25 @@
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- addButton("Fragment Animation Test", AnimationTestsFragment())
+ addButton("Fragment Animator Test", AnimatorTestsFragment())
addButton("Fragment Transition Test", TransitionTestsFragment())
}
+}
- private fun Fragment.addButton(text: String, fragment: Fragment) {
- (requireView() as LinearLayout).addView(
- Button(context).apply {
- this.text = text
+internal fun Fragment.addButton(text: String, fragment: Fragment) {
+ (requireView() as LinearLayout).addView(
+ Button(context).apply {
+ this.text = text
- setOnClickListener {
- parentFragmentManager.commit {
- replace(R.id.fragment_container, fragment)
- addToBackStack(null)
- }
- }
- layoutParams = LinearLayout.LayoutParams(-1, 0).apply {
- weight = 1f
+ setOnClickListener {
+ parentFragmentManager.commit {
+ replace(R.id.fragment_container, fragment)
+ addToBackStack(null)
}
}
- )
- }
+ layoutParams = LinearLayout.LayoutParams(-1, 0).apply {
+ weight = 1f
+ }
+ }
+ )
}
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/TransitionTestsFragment.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/TransitionTestsFragment.kt
index 5c898b3..5c65086 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/TransitionTestsFragment.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/TransitionTestsFragment.kt
@@ -23,14 +23,14 @@
import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
-import androidx.fragment.testapp.doubleTransitionBug.DoubleTransitionBugActivity
-import androidx.fragment.testapp.kittenfragmenttransitions.KittenTransitionMainActivity
+import androidx.fragment.testapp.doubleTransitionBug.DoubleTransitionBugFragment
+import androidx.fragment.testapp.kittenfragmenttransitions.KittenTransitionMainFragment
class TransitionTestsFragment : Fragment(R.layout.transition_fragment) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- addButton("Double Transition Bug", DoubleTransitionBugActivity::class.java)
- addButton("Kitten Transition", KittenTransitionMainActivity::class.java)
+ addButton("Double Transition Bug", DoubleTransitionBugFragment())
+ addButton("Kitten Transition", KittenTransitionMainFragment())
}
}
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/basicAnimators/BasicFragmentAnimatorFragment.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/basicAnimators/BasicFragmentAnimatorFragment.kt
new file mode 100644
index 0000000..10cfa82
--- /dev/null
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/basicAnimators/BasicFragmentAnimatorFragment.kt
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.fragment.testapp.basicAnimators
+
+import android.graphics.Color
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import androidx.annotation.ColorInt
+import androidx.core.os.bundleOf
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.commit
+import androidx.fragment.testapp.R
+
+class BasicFragmentAnimatorFragment : Fragment(R.layout.basic_animators_main) {
+ private var count = 0
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ if (savedInstanceState == null) {
+ parentFragmentManager.beginTransaction()
+ .setPrimaryNavigationFragment(this)
+ .commit()
+ childFragmentManager.commit {
+ add(R.id.content, Fragment(R.layout.basic_animator_fragment))
+ }
+ }
+
+ return super.onCreateView(inflater, container, savedInstanceState)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ view.findViewById<Button>(R.id.next_button).setOnClickListener {
+ switchFragment()
+ }
+ }
+
+ private fun switchFragment() {
+ val fragment = MainFragment()
+ fragment.arguments = bundleOf("myarg" to when (count % 6) {
+ 1 -> { Color.GREEN }
+ 2 -> { Color.RED }
+ 3 -> { Color.YELLOW }
+ 4 -> { Color.GRAY }
+ 5 -> { Color.MAGENTA }
+ else -> {
+ Color.BLUE
+ }
+ })
+
+ count++
+
+ childFragmentManager.beginTransaction()
+ .setCustomAnimations(
+ androidx.fragment.R.animator.fragment_close_enter,
+ androidx.fragment.R.animator.fragment_close_exit,
+ androidx.fragment.R.animator.fragment_close_enter,
+ androidx.fragment.R.animator.fragment_close_exit,
+ )
+ .setReorderingAllowed(true)
+ .replace(R.id.content, fragment)
+ .addToBackStack(null)
+ .commit()
+ }
+
+ class MainFragment : Fragment(R.layout.basic_animator_fragment) {
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ @ColorInt val myarg = arguments?.getInt("myarg") ?: Color.RED
+
+ view.setBackgroundColor(myarg)
+ }
+ }
+}
\ No newline at end of file
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/doubleTransitionBug/DoubleTransitionBugActivity.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/doubleTransitionBug/DoubleTransitionBugFragment.kt
similarity index 78%
rename from fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/doubleTransitionBug/DoubleTransitionBugActivity.kt
rename to fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/doubleTransitionBug/DoubleTransitionBugFragment.kt
index 969f8e7..a239452 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/doubleTransitionBug/DoubleTransitionBugActivity.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/doubleTransitionBug/DoubleTransitionBugFragment.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * 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.
@@ -20,28 +20,29 @@
import android.view.Gravity
import android.widget.Button
import androidx.fragment.app.Fragment
-import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.commit
import androidx.fragment.testapp.R
import androidx.transition.Fade
import androidx.transition.Slide
-class DoubleTransitionBugActivity : FragmentActivity(R.layout.double_transition_bug_activity_main) {
+class DoubleTransitionBugFragment : Fragment(R.layout.double_transition_bug_activity_main) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState == null) {
- supportFragmentManager.commit {
+ childFragmentManager.commit {
add(R.id.content, Fragment(R.layout.double_transition_bug_fragment_second))
}
}
- findViewById<Button>(R.id.important_button).setOnClickListener { switchFragment() }
+ requireActivity().findViewById<Button>(R.id.important_button).setOnClickListener {
+ switchFragment()
+ }
}
private fun switchFragment() {
- val currentFragment = supportFragmentManager.findFragmentById(R.id.content)
+ val currentFragment = childFragmentManager.findFragmentById(R.id.content)
currentFragment!!.exitTransition = Fade()
@@ -51,7 +52,7 @@
val first = Fragment(R.layout.double_transition_bug_fragment_first)
first.enterTransition = Fade().setDuration(5000)
- supportFragmentManager.beginTransaction()
+ childFragmentManager.beginTransaction()
.setReorderingAllowed(true)
.add(R.id.content, first)
.add(R.id.content, second)
diff --git a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainActivity.kt b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainFragment.kt
similarity index 79%
rename from fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainActivity.kt
rename to fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainFragment.kt
index bd99b1f..13dc5a3 100644
--- a/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainActivity.kt
+++ b/fragment/integration-tests/testapp/src/main/java/androidx/fragment/testapp/kittenfragmenttransitions/KittenTransitionMainFragment.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * 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.
@@ -15,10 +15,10 @@
*/
package androidx.fragment.testapp.kittenfragmenttransitions
-import androidx.fragment.app.FragmentActivity
+import androidx.fragment.app.Fragment
import androidx.fragment.testapp.R
/**
* Main activity that holds our fragments
*/
-class KittenTransitionMainActivity : FragmentActivity(R.layout.kitten_activity_main)
+class KittenTransitionMainFragment : Fragment(R.layout.kitten_activity_main)
diff --git a/fragment/integration-tests/testapp/src/main/res/layouts/basicAnimators/layout/basic_animator_fragment.xml b/fragment/integration-tests/testapp/src/main/res/layouts/basicAnimators/layout/basic_animator_fragment.xml
new file mode 100644
index 0000000..fca3ed7
--- /dev/null
+++ b/fragment/integration-tests/testapp/src/main/res/layouts/basicAnimators/layout/basic_animator_fragment.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+ -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <FrameLayout
+ android:id="@+id/content"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
+</FrameLayout>
\ No newline at end of file
diff --git a/fragment/integration-tests/testapp/src/main/res/layouts/basicAnimators/layout/basic_animators_main.xml b/fragment/integration-tests/testapp/src/main/res/layouts/basicAnimators/layout/basic_animators_main.xml
new file mode 100644
index 0000000..a136643
--- /dev/null
+++ b/fragment/integration-tests/testapp/src/main/res/layouts/basicAnimators/layout/basic_animators_main.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+ -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <FrameLayout
+ android:id="@+id/content"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
+ <Button
+ android:id="@+id/next_button"
+ android:layout_gravity="center"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Next" />
+
+</FrameLayout>
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/navigation/CHANGELOG.md b/navigation/CHANGELOG.md
index 0f9c1e1..5c13fd8 100644
--- a/navigation/CHANGELOG.md
+++ b/navigation/CHANGELOG.md
@@ -6,6 +6,17 @@
# `Removed`: for now removed feature
# `Fixed`: for any bug fixes
# `Security`: in case of vulnerabilities
+#
+# Possible headings:
+# API Changes
+# Bug Fixes
+# Dependency Updates
+# Behavior Change
+# External Contributions
# Unreleased
+### Dependency Updates
+
+* Changed dependency of Activity library from version 1.6.1 to version 1.7.1.
+
diff --git a/navigation/navigation-runtime/build.gradle b/navigation/navigation-runtime/build.gradle
index f3c6511..c7ebc80 100644
--- a/navigation/navigation-runtime/build.gradle
+++ b/navigation/navigation-runtime/build.gradle
@@ -25,7 +25,7 @@
dependencies {
api(project(":navigation:navigation-common"))
- api("androidx.activity:activity-ktx:1.6.1")
+ api("androidx.activity:activity-ktx:1.7.1")
api("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1")
api("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
api("androidx.annotation:annotation-experimental:1.1.0")
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/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeExt.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeExt.kt
index 470c9af..213eeb9 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeExt.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeExt.kt
@@ -22,10 +22,10 @@
import com.google.devtools.ksp.symbol.KSDeclaration
import com.google.devtools.ksp.symbol.KSNode
import com.google.devtools.ksp.symbol.KSType
+import com.google.devtools.ksp.symbol.KSTypeAlias
import com.google.devtools.ksp.symbol.KSTypeArgument
import com.google.devtools.ksp.symbol.KSTypeParameter
import com.google.devtools.ksp.symbol.KSTypeReference
-import com.google.devtools.ksp.symbol.Modifier
/**
* Root package comes as <root> instead of "" so we work around it here.
@@ -47,10 +47,12 @@
}
internal fun KSTypeReference.isTypeParameterReference(): Boolean {
- return this.resolve().declaration is KSTypeParameter
+ return this.resolve().isTypeParameter()
}
-fun KSType.isInline() = declaration.modifiers.contains(Modifier.INLINE)
+internal fun KSType.isTypeParameter(): Boolean {
+ return declaration is KSTypeParameter
+}
internal fun KSType.withNullability(nullability: XNullability) = when (nullability) {
XNullability.NULLABLE -> makeNullable()
@@ -59,14 +61,15 @@
}
private fun KSAnnotated.hasAnnotation(qName: String) =
- annotations.any { it.hasQualifiedName(qName) }
+ annotations.any { it.hasQualifiedNameOrAlias(qName) }
-private fun KSAnnotation.hasQualifiedName(qName: String): Boolean {
- return annotationType.resolve().hasQualifiedName(qName)
+private fun KSAnnotation.hasQualifiedNameOrAlias(qName: String): Boolean {
+ return annotationType.resolve().hasQualifiedNameOrAlias(qName)
}
-private fun KSType.hasQualifiedName(qName: String): Boolean {
- return declaration.qualifiedName?.asString() == qName
+private fun KSType.hasQualifiedNameOrAlias(qName: String): Boolean {
+ return declaration.qualifiedName?.asString() == qName ||
+ (declaration as? KSTypeAlias)?.type?.resolve()?.hasQualifiedNameOrAlias(qName) ?: false
}
internal fun KSAnnotated.hasJvmWildcardAnnotation() =
@@ -75,20 +78,55 @@
internal fun KSAnnotated.hasSuppressJvmWildcardAnnotation() =
hasAnnotation(JvmSuppressWildcards::class.java.canonicalName!!)
-private fun KSType.hasAnnotation(qName: String) = annotations.any { it.hasQualifiedName(qName) }
-
-internal fun KSType.hasJvmWildcardAnnotation() =
- hasAnnotation(JvmWildcard::class.java.canonicalName!!)
+// TODO(bcorso): There's a bug in KSP where, after using KSType#asMemberOf() or KSType#replace(),
+// the annotations are removed from the resulting type. However, it turns out that the annotation
+// information is still available in the underlying KotlinType, so we use reflection to get them.
+// See https://github.com/google/ksp/issues/1376.
+private fun KSType.hasAnnotation(qName: String): Boolean {
+ fun String.toFqName(): Any {
+ return Class.forName("org.jetbrains.kotlin.name.FqName")
+ .getConstructor(String::class.java)
+ .newInstance(this)
+ }
+ fun hasAnnotationViaReflection(qName: String): Boolean {
+ val ksType = if (
+ // Note: Technically, we could just make KSTypeWrapper internal and cast to get the
+ // delegate, but since we need to use reflection anyway, just get it via reflection.
+ this.javaClass.canonicalName == "androidx.room.compiler.processing.ksp.KSTypeWrapper") {
+ this.javaClass.methods.find { it.name == "getDelegate" }?.invoke(this)
+ } else {
+ this
+ }
+ val kotlinType =
+ ksType?.javaClass?.methods?.find { it.name == "getKotlinType" }?.invoke(ksType)
+ val kotlinAnnotations =
+ kotlinType?.javaClass
+ ?.methods
+ ?.find { it.name == "getAnnotations" }
+ ?.invoke(kotlinType)
+ return kotlinAnnotations?.javaClass
+ ?.methods
+ ?.find { it.name == "hasAnnotation" }
+ ?.invoke(kotlinAnnotations, qName.toFqName()) == true
+ }
+ return if (annotations.toList().isEmpty()) {
+ // If there are no annotations but KSType#toString() shows annotations, check the underlying
+ // KotlinType for annotations using reflection.
+ toString().startsWith("[") && hasAnnotationViaReflection(qName)
+ } else {
+ annotations.any { it.annotationType.resolve().hasQualifiedNameOrAlias(qName) }
+ }
+}
internal fun KSType.hasSuppressJvmWildcardAnnotation() =
hasAnnotation(JvmSuppressWildcards::class.java.canonicalName!!)
internal fun KSNode.hasSuppressWildcardsAnnotationInHierarchy(): Boolean {
- (this as? KSAnnotated)?.let {
- if (hasSuppressJvmWildcardAnnotation()) {
- return true
- }
- }
- val parent = parent ?: return false
- return parent.hasSuppressWildcardsAnnotationInHierarchy()
- }
\ No newline at end of file
+ (this as? KSAnnotated)?.let {
+ if (hasSuppressJvmWildcardAnnotation()) {
+ return true
+ }
+ }
+ val parent = parent ?: return false
+ return parent.hasSuppressWildcardsAnnotationInHierarchy()
+}
\ No newline at end of file
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt
index bdade61..d797d50 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt
@@ -25,6 +25,7 @@
import com.google.devtools.ksp.symbol.KSTypeAlias
import com.google.devtools.ksp.symbol.KSTypeArgument
import com.google.devtools.ksp.symbol.KSTypeParameter
+import com.google.devtools.ksp.symbol.KSTypeReference
import com.google.devtools.ksp.symbol.Modifier
import com.google.devtools.ksp.symbol.Variance
@@ -59,21 +60,57 @@
return type
}
- val resolvedType = if (hasTypeVariables(scope.declarationType())) {
+ // First, replace any type aliases in the type with their actual types
+ return type.replaceTypeAliases()
+ // Next, resolve wildcards based on the scope of the type
+ .resolveWildcards(scope)
+ // Next, apply any additional variance changes based on the @JvmSuppressWildcards or
+ // @JvmWildcard annotations on the resolved type.
+ .applyJvmWildcardAnnotations()
+ // Finally, unwrap any delegate types. (Note: as part of resolving wildcards, we wrap
+ // types/type arguments in delegates to avoid loosing annotation information. However,
+ // those delegates may cause issues later if KSP tries to cast the type/argument to a
+ // particular implementation, so we unwrap them here.
+ .removeWrappers()
+ }
+
+ private fun KSType.replaceTypeAliases(typeStack: ReferenceStack = ReferenceStack()): KSType {
+ if (isError || typeStack.queue.contains(this)) {
+ return this
+ }
+ if (declaration is KSTypeAlias) {
+ return (declaration as KSTypeAlias).type.resolve().replaceTypeAliases(typeStack)
+ }
+ return typeStack.withReference(this) {
+ createWrapper(arguments.map { it.replaceTypeAliases(typeStack) })
+ }
+ }
+
+ private fun KSTypeArgument.replaceTypeAliases(typeStack: ReferenceStack): KSTypeArgument {
+ val type = type?.resolve()
+ if (
+ type == null ||
+ type.isError ||
+ variance == Variance.STAR ||
+ typeStack.queue.contains(type)
+ ) {
+ return this
+ }
+ return createWrapper(type.replaceTypeAliases(typeStack), variance)
+ }
+
+ private fun KSType.resolveWildcards(scope: KSTypeVarianceResolverScope): KSType {
+ return if (hasTypeVariables(scope.declarationType())) {
// If the associated declared type contains type variables that were resolved, e.g.
// using "asMemberOf", then it has special rules about how to resolve the types.
getJavaWildcardWithTypeVariables(
- type = type,
+ type = this,
declarationType = getJavaWildcard(scope.declarationType(), scope),
scope = scope,
)
} else {
- getJavaWildcard(type, scope)
+ getJavaWildcard(this, scope)
}
-
- // As a final pass, we apply variance from any @JvmSuppressWildcards or @JvmWildcard
- // annotations on the resolved type.
- return applyJvmWildcardAnnotations(resolvedType)
}
private fun hasTypeVariables(
@@ -99,15 +136,6 @@
if (type.isError || typeStack.queue.contains(type)) {
return type
}
- if (type.declaration is KSTypeAlias) {
- return getJavaWildcard(
- type = (type.declaration as KSTypeAlias).type.resolve(),
- scope = scope,
- typeStack = typeStack,
- typeArgStack = typeArgStack,
- typeParamStack = typeParamStack,
- )
- }
return typeStack.withReference(type) {
val resolvedTypeArgs =
type.arguments.indices.map { i ->
@@ -120,7 +148,7 @@
typeParamStack = typeParamStack,
)
}
- type.replace(resolvedTypeArgs)
+ type.createWrapper(resolvedTypeArgs)
}
}
@@ -158,10 +186,10 @@
if (typeParamStack.indices.none { i ->
(typeParamStack[i].variance == Variance.CONTRAVARIANT ||
typeArgStack[i].variance == Variance.CONTRAVARIANT) &&
- // The declaration and use site variance is ignored when using @JvmWildcard
- // explicitly on a type.
- !typeArgStack[i].hasJvmWildcardAnnotation()
- }) {
+ // The declaration and use site variance is ignored when using @JvmWildcard
+ // explicitly on a type.
+ !typeArgStack[i].hasJvmWildcardAnnotation()
+ }) {
return false
}
} else {
@@ -217,7 +245,7 @@
} else {
typeArg.variance
}
- return createTypeArgument(resolvedType, resolvedVariance)
+ return typeArg.createWrapper(resolvedType, resolvedVariance)
}
private fun getJavaWildcardWithTypeVariables(
@@ -252,7 +280,7 @@
)
}
}
- type.replace(resolvedTypeArgs)
+ type.createWrapper(resolvedTypeArgs)
}
}
@@ -293,7 +321,7 @@
} else {
typeArg.variance
}
- return createTypeArgument(resolvedType, resolvedVariance)
+ return typeArg.createWrapper(resolvedType, resolvedVariance)
}
private fun getJavaWildcardWithTypeVariablesForOuterType(
@@ -322,26 +350,27 @@
} else {
typeArg.variance
}
- return createTypeArgument(resolvedType, resolvedVariance)
+ return typeArg.createWrapper(resolvedType, resolvedVariance)
}
- private fun applyJvmWildcardAnnotations(
- type: KSType,
+ private fun KSType.applyJvmWildcardAnnotations(
typeStack: ReferenceStack = ReferenceStack(),
+ typeArgStack: List<KSTypeArgument> = emptyList(),
): KSType {
- if (type.isError || typeStack.queue.contains(type)) {
- return type
+ if (isError || typeStack.queue.contains(this)) {
+ return this
}
- return typeStack.withReference(type) {
+ return typeStack.withReference(this) {
val resolvedTypeArgs =
- type.arguments.indices.map { i ->
+ arguments.indices.map { i ->
applyJvmWildcardAnnotations(
- typeArg = type.arguments[i],
- typeParameter = type.declaration.typeParameters[i],
+ typeArg = arguments[i],
+ typeParameter = declaration.typeParameters[i],
+ typeArgStack = typeArgStack,
typeStack = typeStack,
)
}
- type.replace(resolvedTypeArgs)
+ createWrapper(resolvedTypeArgs)
}
}
@@ -349,6 +378,7 @@
typeArg: KSTypeArgument,
typeParameter: KSTypeParameter,
typeStack: ReferenceStack,
+ typeArgStack: List<KSTypeArgument>,
): KSTypeArgument {
val type = typeArg.type?.resolve()
if (
@@ -359,28 +389,107 @@
) {
return typeArg
}
- val resolvedType = applyJvmWildcardAnnotations(
- type = type,
- typeStack = typeStack,
- )
+ val resolvedType = type.applyJvmWildcardAnnotations(typeStack, typeArgStack + typeArg)
val resolvedVariance = when {
typeParameter.variance == Variance.INVARIANT &&
typeArg.variance != Variance.INVARIANT -> typeArg.variance
typeArg.hasJvmWildcardAnnotation() -> typeParameter.variance
- typeStack.queue.any { it.hasSuppressJvmWildcardAnnotation() } ||
+ // We only need to check the first type in the stack for @JvmSuppressWildcards.
+ // Any other @JvmSuppressWildcards usages will be placed on the type arguments rather
+ // than the types, so no need to check the rest of the types.
+ typeStack.queue.first().hasSuppressJvmWildcardAnnotation() ||
typeArg.hasSuppressWildcardsAnnotationInHierarchy() ||
+ typeArgStack.any { it.hasSuppressJvmWildcardAnnotation() } ||
typeParameter.hasSuppressWildcardsAnnotationInHierarchy() -> Variance.INVARIANT
else -> typeArg.variance
}
- return createTypeArgument(resolvedType, resolvedVariance)
+ return typeArg.createWrapper(resolvedType, resolvedVariance)
}
- private fun KSType.isTypeParameter(): Boolean {
- return createTypeReference().isTypeParameterReference()
+ private fun KSTypeArgument.createWrapper(
+ newType: KSType,
+ newVariance: Variance
+ ): KSTypeArgument {
+ return KSTypeArgumentWrapper(
+ delegate = (this as? KSTypeArgumentWrapper)?.delegate ?: this,
+ type = newType.createTypeReference(),
+ variance = newVariance
+ )
}
- private fun createTypeArgument(type: KSType, variance: Variance): KSTypeArgument {
- return resolver.getTypeArgument(type.createTypeReference(), variance)
+ private fun KSType.createWrapper(newArguments: List<KSTypeArgument>): KSType {
+ return KSTypeWrapper(
+ delegate = (this as? KSTypeWrapper)?.delegate ?: this,
+ arguments = newArguments
+ )
+ }
+
+ private fun KSType.removeWrappers(typeStack: ReferenceStack = ReferenceStack()): KSType {
+ if (isError || typeStack.queue.contains(this)) {
+ return this
+ }
+ return typeStack.withReference(this) {
+ val delegateType = (this as? KSTypeWrapper)?.delegate ?: this
+ delegateType.replace(arguments.map { it.removeWrappers(typeStack) })
+ }
+ }
+
+ private fun KSTypeArgument.removeWrappers(
+ typeStack: ReferenceStack = ReferenceStack()
+ ): KSTypeArgument {
+ val type = type?.resolve()
+ if (
+ type == null ||
+ type.isError ||
+ variance == Variance.STAR ||
+ typeStack.queue.contains(type)
+ ) {
+ return this
+ }
+ return resolver.getTypeArgument(
+ type.removeWrappers(typeStack).createTypeReference(),
+ variance
+ )
+ }
+}
+
+/**
+ * A wrapper for creating a new [KSType] that allows arguments of type [KSTypeArgumentWrapper].
+ *
+ * Note: This wrapper acts similar to [KSType#replace(KSTypeArgument)]. However, we can't call
+ * [KSType#replace(KSTypeArgument)] directly when using [KSTypeArgumentWrapper] or we'll get an
+ * [IllegalStateException] since KSP tries to cast to its own implementation of [KSTypeArgument].
+ */
+private class KSTypeWrapper(
+ val delegate: KSType,
+ override val arguments: List<KSTypeArgument>
+) : KSType by delegate {
+ override fun toString() = if (arguments.isNotEmpty()) {
+ "${delegate.toString().substringBefore("<")}<${arguments.joinToString(",")}>"
+ } else {
+ delegate.toString()
+ }
+}
+
+/**
+ * A wrapper for creating a new [KSTypeArgument] that delegates to the original argument for
+ * annotations.
+ *
+ * Note: This wrapper acts similar to [Resolver#getTypeArgument(KSTypeReference, Variance)].
+ * However, we can't call [Resolver#getTypeArgument(KSTypeReference, Variance)] directly because
+ * we'll lose information about annotations (e.g. `@JvmSuppressWildcards`) that were on the original
+ * type argument.
+ */
+private class KSTypeArgumentWrapper(
+ val delegate: KSTypeArgument,
+ override val type: KSTypeReference,
+ override val variance: Variance,
+) : KSTypeArgument by delegate {
+ override fun toString() = when (variance) {
+ Variance.INVARIANT -> "${type.resolve()}"
+ Variance.CONTRAVARIANT -> "in ${type.resolve()}"
+ Variance.COVARIANT -> "out ${type.resolve()}"
+ Variance.STAR -> "*"
}
}
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolverScope.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolverScope.kt
index f39ab11..19f546a 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolverScope.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolverScope.kt
@@ -27,7 +27,7 @@
* Provides KSType resolution scope for a type.
*/
internal sealed class KSTypeVarianceResolverScope(
- private val annotated: KSAnnotated,
+ val annotated: KSAnnotated,
private val container: KSDeclaration?,
private val asMemberOf: KspType?
) {
@@ -36,8 +36,15 @@
* parameter is in kotlin or the containing class, which inherited the method, is in kotlin.
*/
val needsWildcardResolution: Boolean by lazy {
+ fun nodeForSuppressionCheck(): KSAnnotated? = when (this) {
+ // For property setter and getter methods skip to the enclosing class to check for
+ // suppression annotations to match KAPT.
+ is PropertySetterParameterType,
+ is PropertyGetterMethodReturnType -> annotated.parent?.parent as? KSAnnotated
+ else -> annotated
+ }
(annotated.isInKotlinCode() || container?.isInKotlinCode() == true) &&
- !annotated.hasSuppressWildcardsAnnotationInHierarchy()
+ nodeForSuppressionCheck()?.hasSuppressWildcardsAnnotationInHierarchy() != true
}
private fun KSAnnotated.isInKotlinCode(): Boolean {
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt
index 2bd5ed4..be3f4bf 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt
@@ -159,6 +159,11 @@
class MyGenericIn<in T>
class MyGenericOut<out T>
class MyGenericMultipleParameters<T1: MyGeneric<*>, T2: MyGeneric<T1>>
+ interface MyInterface
+ typealias MyInterfaceAlias = MyInterface
+ typealias MyGenericAlias = MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>
+ typealias JSW = JvmSuppressWildcards
+ typealias JW = JvmWildcard
typealias MyLambdaTypeAlias = (@JvmWildcard MyType) -> @JvmWildcard MyType
enum class MyEnum {
VAL1,
@@ -341,6 +346,14 @@
sealedListChild: List<GrandParentSealed.Parent2.Child1>,
jvmWildcard: List<@JvmWildcard String>,
suppressJvmWildcard: List<@JvmSuppressWildcards Number>,
+ suppressJvmWildcardsGeneric1: @JvmSuppressWildcards List<MyGenericOut<MyGenericIn<MyGeneric<MyType>>>>,
+ suppressJvmWildcardsGeneric2: List<@JvmSuppressWildcards MyGenericOut<MyGenericIn<MyGeneric<MyType>>>>,
+ suppressJvmWildcardsGeneric3: List<MyGenericOut<@JvmSuppressWildcards MyGenericIn<MyGeneric<MyType>>>>,
+ suppressJvmWildcardsGeneric4: List<MyGenericOut<MyGenericIn<@JvmSuppressWildcards MyGeneric<MyType>>>>,
+ interfaceAlias: List<MyInterfaceAlias>,
+ genericAlias: List<MyGenericAlias>,
+ jvmWildcardTypeAlias: List<@JW String>,
+ suppressJvmWildcardTypeAlias: List<@JSW Number>,
) {
var propWithFinalType: String = ""
var propWithOpenType: Number = 3
@@ -353,6 +366,16 @@
var propSealedListChild: List<GrandParentSealed.Parent2.Child1> = TODO()
@JvmSuppressWildcards
var propWithOpenTypeButSuppressAnnotation: Number = 3
+ var genericVar: List<MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>> = TODO()
+ @JvmSuppressWildcards var suppressJvmWildcardsGenericVar1: List<MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>> = TODO()
+ var suppressJvmWildcardsGenericVar2: @JvmSuppressWildcards List<MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>> = TODO()
+ var suppressJvmWildcardsGenericVar3: List<@JvmSuppressWildcards MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>> = TODO()
+ var suppressJvmWildcardsGenericVar4: List<MyGenericIn<@JvmSuppressWildcards MyGenericOut<MyGenericOut<MyType>>>> = TODO()
+ var suppressJvmWildcardsGenericVar5: List<MyGenericIn<MyGenericOut<@JvmSuppressWildcards MyGenericOut<MyType>>>> = TODO()
+ var interfaceAlias: List<MyInterfaceAlias> = TODO()
+ var genericAlias: List<MyGenericAlias> = TODO()
+ var jvmWildcardTypeAlias: List<@JW String> = TODO()
+ var suppressJvmWildcardTypeAlias: List<@JSW Number> = TODO()
fun list(list: List<*>): List<*> { TODO() }
fun listTypeArg(list: List<R>): List<R> { TODO() }
fun listTypeArgNumber(list: List<Number>): List<Number> { TODO() }
@@ -393,6 +416,43 @@
fun suspendExplicitJvmSuppressWildcard_OnType2(
list: @JvmSuppressWildcards List<Number>
): @JvmSuppressWildcards List<Number> { TODO() }
+ fun interfaceAlias(
+ param: List<MyInterfaceAlias>
+ ): List<MyInterfaceAlias> = TODO()
+ fun explicitJvmSuppressWildcardsOnAlias(
+ param: List<@JvmSuppressWildcards MyInterfaceAlias>,
+ ): List<@JvmSuppressWildcards MyInterfaceAlias> = TODO()
+ fun genericAlias(param: List<MyGenericAlias>): List<MyGenericAlias> = TODO()
+ fun explicitJvmSuppressWildcardsOnGenericAlias(
+ param: List<@JvmSuppressWildcards MyGenericAlias>,
+ ): List<@JvmSuppressWildcards MyGenericAlias> = TODO()
+ fun explicitOutOnInvariant_onType1_WithExplicitJvmSuppressWildcardAlias(
+ list: @JSW MyGeneric<out MyGeneric<MyType>>
+ ): @JSW MyGeneric<out MyGeneric<MyType>> { TODO() }
+ fun explicitOutOnInvariant_onType2_WithExplicitJvmSuppressWildcardAlias(
+ list: @JSW MyGeneric<MyGeneric<out MyType>>
+ ): @JSW MyGeneric<MyGeneric<out MyType>> { TODO() }
+ fun explicitOutOnVariant_onType1(
+ list: List<out List<Number>>
+ ): List<out List<Number>> { TODO() }
+ fun explicitOutOnVariant_onType2(
+ list: List<List<out Number>>
+ ): List<List<out Number>> { TODO() }
+ fun explicitOutOnVariant_onType1_WithExplicitJvmSuppressWildcardAlias(
+ list: @JSW List<out List<Number>>
+ ): @JSW List<out List<Number>> { TODO() }
+ fun explicitOutOnVariant_onType2_WithExplicitJvmSuppressWildcardAlias(
+ list: @JSW List<List<out Number>>
+ ): @JSW List<List<out Number>> { TODO() }
+ fun explicitJvmWildcardTypeAlias(
+ list: List<@JW String>
+ ): List<@JW String> { TODO() }
+ fun explicitJvmSuppressWildcardTypeAlias_OnType(
+ list: List<@JSW Number>
+ ): List<@JSW Number> { TODO() }
+ fun explicitJvmSuppressWildcardTypeAlias_OnType2(
+ list: @JSW List<Number>
+ ): @JSW List<Number> { TODO() }
}
""".trimIndent()
), listOf(className)
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/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-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/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-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt b/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
index f541247..1a5e97a 100644
--- a/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
+++ b/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
@@ -16,6 +16,7 @@
package androidx.wear.compose.navigation
+import android.util.Log
import androidx.activity.compose.LocalOnBackPressedDispatcherOwner
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.Composable
@@ -171,9 +172,23 @@
// no WearNavigator.Destinations were added to the navigation backstack (be sure to build
// the NavGraph using androidx.wear.compose.navigation.composable) or because the last entry
// was popped prior to navigating (instead, use navigate with popUpTo).
- val current = if (backStack.isNotEmpty()) backStack.last() else throw IllegalArgumentException(
- "The WearNavigator backstack is empty, there is no navigation destination to display."
- )
+ // If the activity is using FLAG_ACTIVITY_NEW_TASK then it also needs to set
+ // FLAG_ACTIVITY_CLEAR_TASK, otherwise the activity will be created twice,
+ // the first of these with an empty backstack.
+ val current = backStack.lastOrNull()
+
+ if (current == null) {
+ val warningText =
+ "Current backstack entry is empty. Please ensure: \n" +
+ "1. The current WearNavigator navigation backstack is not empty (e.g. by using " +
+ "androidx.wear.compose.navigation.composable to build your nav graph). \n" +
+ "2. The last entry is not popped prior to navigation " +
+ "(instead, use navigate with popUpTo). \n" +
+ "3. If the activity uses FLAG_ACTIVITY_NEW_TASK you should also set " +
+ "FLAG_ACTIVITY_CLEAR_TASK to maintain the backstack consistency."
+
+ Log.w(TAG, warningText)
+ }
val swipeState = state.swipeToDismissBoxState
LaunchedEffect(swipeState.currentValue) {
@@ -200,7 +215,7 @@
modifier = Modifier,
hasBackground = previous != null,
backgroundKey = previous?.id ?: SwipeToDismissKeys.Background,
- contentKey = current.id,
+ contentKey = current?.id ?: SwipeToDismissKeys.Content,
content = { isBackground ->
BoxedStackEntryContent(if (isBackground) previous else current, stateHolder, modifier)
}
@@ -279,3 +294,5 @@
}
}
}
+
+private const val TAG = "SwipeDismissableNavHost"
\ No newline at end of file
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/main/java/androidx/wear/protolayout/expression/pipeline/BoundDynamicTypeImpl.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoundDynamicTypeImpl.java
index 3ed31ac..bbae3dc 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoundDynamicTypeImpl.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoundDynamicTypeImpl.java
@@ -16,6 +16,11 @@
package androidx.wear.protolayout.expression.pipeline;
+import android.os.Handler;
+import android.os.Looper;
+
+import androidx.annotation.UiThread;
+
import java.util.List;
/**
@@ -76,6 +81,15 @@
@Override
public void close() {
+ if (Looper.getMainLooper().isCurrentThread()) {
+ closeInternal();
+ } else {
+ new Handler(Looper.getMainLooper()).post(this::closeInternal);
+ }
+ }
+
+ @UiThread
+ private void closeInternal() {
mNodes.stream()
.filter(n -> n instanceof DynamicDataSourceNode)
.forEach(n -> ((DynamicDataSourceNode<?>) n).destroy());
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/TimeGatewayImpl.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/TimeGatewayImpl.java
index f9f699d..18bae95 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/TimeGatewayImpl.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/TimeGatewayImpl.java
@@ -138,6 +138,7 @@
}
@Override
+ @UiThread
public void close() {
setUpdatesEnabled(false);
registeredCallbacks.clear();
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 d70955a..506910e9 100644
--- a/wear/protolayout/protolayout/api/current.txt
+++ b/wear/protolayout/protolayout/api/current.txt
@@ -1043,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 9660d46..ce4acaa 100644
--- a/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
@@ -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 d70955a..506910e9 100644
--- a/wear/protolayout/protolayout/api/restricted_current.txt
+++ b/wear/protolayout/protolayout/api/restricted_current.txt
@@ -1043,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/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-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 8887171d..949c589 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
@@ -1836,13 +1836,13 @@
*
* Returns this Builder to allow chaining.
*/
- fun setListEntryCollection(timelineEntries: Collection<ComplicationData>?) = apply {
- if (timelineEntries == null) {
+ fun setListEntryCollection(listEntries: Collection<ComplicationData>?) = apply {
+ if (listEntries == null) {
fields.remove(EXP_FIELD_LIST_ENTRIES)
} else {
fields.putParcelableArray(
EXP_FIELD_LIST_ENTRIES,
- timelineEntries
+ listEntries
.map { data ->
data.fields.putInt(EXP_FIELD_LIST_ENTRY_TYPE, data.type)
data.fields
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 94db677..ddf43de 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
@@ -18,7 +18,7 @@
import android.icu.util.ULocale
import android.support.wearable.complications.ComplicationData as WireComplicationData
-import android.support.wearable.complications.ComplicationData
+import android.support.wearable.complications.ComplicationData.Companion.TYPE_NO_DATA
import android.support.wearable.complications.ComplicationText as WireComplicationText
import androidx.annotation.MainThread
import androidx.annotation.RestrictTo
@@ -41,17 +41,19 @@
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.emitAll
+import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapNotNull
+import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.update
+import kotlinx.coroutines.flow.updateAndGet
import kotlinx.coroutines.invoke
import kotlinx.coroutines.launch
/**
* Evaluates a [WireComplicationData] with
* [androidx.wear.protolayout.expression.DynamicBuilders.DynamicType] within its fields.
- *
- * Due to [WireComplicationData]'s shallow copy strategy the input is modified in-place.
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
class ComplicationDataExpressionEvaluator(
@@ -65,27 +67,101 @@
*
* The expression is evaluated _separately_ on each flow collection.
*/
- fun evaluate(unevaluatedData: WireComplicationData) =
- flow<WireComplicationData> {
- val state: MutableStateFlow<State> = unevaluatedData.buildState()
- state.value.use {
- val evaluatedData: Flow<WireComplicationData> =
- state
- .mapNotNull {
- when {
- // Emitting INVALID_DATA if there's an invalid receiver.
- it.invalidReceivers.isNotEmpty() -> INVALID_DATA
- // Emitting the data if all pending receivers are done and all
- // pre-updates are satisfied.
- it.pendingReceivers.isEmpty() -> it.data
- // Skipping states that are not ready for be emitted.
- else -> null
- }
- }
- .distinctUntilChanged()
- emitAll(evaluatedData)
+ fun evaluate(unevaluatedData: WireComplicationData): Flow<WireComplicationData> =
+ evaluateTopLevelFields(unevaluatedData)
+ // Combining with fields that are made of WireComplicationData.
+ .combineWithDataList(unevaluatedData.timelineEntries) { entries ->
+ // Timeline entries are set on the built WireComplicationData.
+ WireComplicationData.Builder(
+ this@combineWithDataList.build().apply { setTimelineEntryCollection(entries) }
+ )
}
+ .combineWithDataList(unevaluatedData.listEntries) { setListEntryCollection(it) }
+ // Must be last, as it overwrites INVALID_DATA.
+ .combineWithEvaluatedPlaceholder(unevaluatedData.placeholder)
+ .distinctUntilChanged()
+
+ /** Evaluates "local" fields, excluding fields of type WireComplicationData. */
+ private fun evaluateTopLevelFields(
+ unevaluatedData: WireComplicationData
+ ): Flow<WireComplicationData> = flow {
+ val state: MutableStateFlow<State> = unevaluatedData.buildState()
+ state.value.use {
+ val evaluatedData: Flow<WireComplicationData> =
+ state.mapNotNull {
+ when {
+ // Emitting INVALID_DATA if there's an invalid receiver.
+ it.invalidReceivers.isNotEmpty() -> INVALID_DATA
+ // Emitting the data if all pending receivers are done and all
+ // pre-updates are satisfied.
+ it.pendingReceivers.isEmpty() -> it.data
+ // Skipping states that are not ready for be emitted.
+ else -> null
+ }
+ }
+ emitAll(evaluatedData)
}
+ }
+
+ /**
+ * Combines the receiver with the evaluated version of the provided list.
+ *
+ * If the receiver [Flow] emits [INVALID_DATA] or the input list is null or empty, this does not
+ * mutate the flow and does not wait for the entries to finish evaluating.
+ *
+ * If even one [WireComplicationData] within the provided list is evaluated to [INVALID_DATA],
+ * the output [Flow] becomes [INVALID_DATA] (the receiver [Flow] is ignored).
+ */
+ private fun Flow<WireComplicationData>.combineWithDataList(
+ unevaluatedEntries: List<WireComplicationData>?,
+ setter:
+ WireComplicationData.Builder.(
+ List<WireComplicationData>
+ ) -> WireComplicationData.Builder,
+ ): Flow<WireComplicationData> {
+ if (unevaluatedEntries.isNullOrEmpty()) return this
+ val evaluatedEntriesFlow: Flow<List<WireComplicationData>> =
+ combine(unevaluatedEntries.map { evaluate(it) })
+
+ return this.combine(evaluatedEntriesFlow).map {
+ (data: WireComplicationData, evaluatedEntries: List<WireComplicationData>?) ->
+ // Not mutating if invalid.
+ if (data === INVALID_DATA) return@map data
+ // An entry is invalid, emitting invalid.
+ if (evaluatedEntries.any { it === INVALID_DATA }) return@map INVALID_DATA
+ // All is well, mutating the input.
+ return@map WireComplicationData.Builder(data).setter(evaluatedEntries).build()
+ }
+ }
+
+ /**
+ * Same as [combineWithDataList], but sets the evaluated placeholder ONLY when the receiver
+ * [Flow] emits [TYPE_NO_DATA], or [keepExpression] is true, otherwise clears it and does not
+ * wait for the placeholder to finish evaluating.
+ *
+ * If the placeholder is not required (per the above paragraph), this doesn't wait for it.
+ */
+ private fun Flow<WireComplicationData>.combineWithEvaluatedPlaceholder(
+ unevaluatedPlaceholder: WireComplicationData?
+ ): Flow<WireComplicationData> {
+ if (unevaluatedPlaceholder == null) return this
+ val evaluatedPlaceholderFlow: Flow<WireComplicationData> = evaluate(unevaluatedPlaceholder)
+
+ return this.combine(evaluatedPlaceholderFlow).map {
+ (data: WireComplicationData, evaluatedPlaceholder: WireComplicationData?) ->
+ if (!keepExpression && data.type != TYPE_NO_DATA) {
+ // Clearing the placeholder when data is not TYPE_NO_DATA (it was meant as an
+ // expression fallback).
+ return@map WireComplicationData.Builder(data).setPlaceholder(null).build()
+ }
+ // Placeholder required but invalid, emitting invalid.
+ if (evaluatedPlaceholder === INVALID_DATA) return@map INVALID_DATA
+ // All is well, mutating the input.
+ return@map WireComplicationData.Builder(data)
+ .setPlaceholder(evaluatedPlaceholder)
+ .build()
+ }
+ }
private suspend fun WireComplicationData.buildState() =
MutableStateFlow(State(this)).apply {
@@ -177,7 +253,7 @@
* [ComplicationEvaluationResultReceiver] that are evaluating it.
*/
private inner class State(
- val data: ComplicationData,
+ val data: WireComplicationData,
val pendingReceivers: Set<ComplicationEvaluationResultReceiver<out Any>> = setOf(),
val invalidReceivers: Set<ComplicationEvaluationResultReceiver<out Any>> = setOf(),
val completeReceivers: Set<ComplicationEvaluationResultReceiver<out Any>> = setOf(),
@@ -317,3 +393,35 @@
runnable.run()
}
}
+
+/** Replacement of [kotlinx.coroutines.flow.combine], which doesn't seem to work. */
+internal fun <T> combine(flows: List<Flow<T>>): Flow<List<T>> = flow {
+ data class ValueExists(val value: T?, val exists: Boolean)
+ val latest = MutableStateFlow(List(flows.size) { ValueExists(null, false) })
+ @Suppress("UNCHECKED_CAST") // Flow<List<T?>> -> Flow<List<T>> safe after filtering exists.
+ emitAll(
+ flows
+ .mapIndexed { i, flow -> flow.map { i to it } } // List<Flow<Int, T>> (indexed flows)
+ .merge() // Flow<Int, T>
+ .map { (i, value) ->
+ // Updating latest and returning the current latest.
+ latest.updateAndGet {
+ val newLatest = it.toMutableList()
+ newLatest[i] = ValueExists(value, true)
+ newLatest
+ }
+ } // Flow<List<ValueExists>>
+ // Filtering emissions until we have all values.
+ .filter { values -> values.all { it.exists } }
+ // Flow<List<T>> + defensive copy.
+ .map { values -> values.map { it.value } } as Flow<List<T>>
+ )
+}
+
+/**
+ * Another replacement of [kotlinx.coroutines.flow.combine] which is similar to
+ * `combine(List<Flow<T>>)` but allows different types for each flow.
+ */
+@Suppress("UNCHECKED_CAST")
+internal fun <T1, T2> Flow<T1>.combine(other: Flow<T2>): Flow<Pair<T1, T2>> =
+ combine(listOf(this as Flow<*>, other as Flow<*>)).map { (a, b) -> (a as T1) to (b as T2) }
diff --git a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt
index c913c25..3a22917 100644
--- a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt
+++ b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt
@@ -17,6 +17,8 @@
package androidx.wear.watchface.complications.data
import android.support.wearable.complications.ComplicationData as WireComplicationData
+import android.support.wearable.complications.ComplicationData.Companion.TYPE_NO_DATA
+import android.support.wearable.complications.ComplicationData.Companion.TYPE_SHORT_TEXT
import android.support.wearable.complications.ComplicationText as WireComplicationText
import android.util.Log
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat
@@ -58,10 +60,7 @@
@Test
fun evaluate_noExpression_returnsUnevaluated() = runBlocking {
- val data =
- WireComplicationData.Builder(WireComplicationData.TYPE_NO_DATA)
- .setRangedValue(10f)
- .build()
+ val data = WireComplicationData.Builder(TYPE_NO_DATA).setRangedValue(10f).build()
val evaluator = ComplicationDataExpressionEvaluator()
@@ -81,7 +80,7 @@
) {
SET_IMMEDIATELY_WHEN_ALL_DATA_AVAILABLE(
expressed =
- WireComplicationData.Builder(WireComplicationData.TYPE_NO_DATA)
+ WireComplicationData.Builder(TYPE_NO_DATA)
.setRangedValueExpression(DynamicFloat.constant(1f))
.setLongText(WireComplicationText(DynamicString.constant("Long Text")))
.setLongTitle(WireComplicationText(DynamicString.constant("Long Title")))
@@ -90,23 +89,29 @@
.setContentDescription(
WireComplicationText(DynamicString.constant("Description"))
)
- .build(),
+ .setPlaceholder(constantData("Placeholder"))
+ .setListEntryCollection(listOf(constantData("List")))
+ .build()
+ .also { it.setTimelineEntryCollection(listOf(constantData("Timeline"))) },
states = listOf(),
evaluated =
listOf(
- WireComplicationData.Builder(WireComplicationData.TYPE_NO_DATA)
+ WireComplicationData.Builder(TYPE_NO_DATA)
.setRangedValue(1f)
.setLongText(WireComplicationText("Long Text"))
.setLongTitle(WireComplicationText("Long Title"))
.setShortText(WireComplicationText("Short Text"))
.setShortTitle(WireComplicationText("Short Title"))
.setContentDescription(WireComplicationText("Description"))
+ .setPlaceholder(evaluatedData("Placeholder"))
+ .setListEntryCollection(listOf(evaluatedData("List")))
.build()
+ .also { it.setTimelineEntryCollection(listOf(evaluatedData("Timeline"))) },
),
),
SET_ONLY_AFTER_ALL_FIELDS_EVALUATED(
expressed =
- WireComplicationData.Builder(WireComplicationData.TYPE_NO_DATA)
+ WireComplicationData.Builder(TYPE_NO_DATA)
.setRangedValueExpression(DynamicFloat.fromState("ranged_value"))
.setLongText(WireComplicationText(DynamicString.fromState("long_text")))
.setLongTitle(WireComplicationText(DynamicString.fromState("long_title")))
@@ -115,7 +120,10 @@
.setContentDescription(
WireComplicationText(DynamicString.fromState("description"))
)
- .build(),
+ .setPlaceholder(stateData("placeholder"))
+ .setListEntryCollection(listOf(stateData("list")))
+ .build()
+ .also { it.setTimelineEntryCollection(listOf(stateData("timeline"))) },
states =
aggregate(
// Each map piles on top of the previous ones.
@@ -124,25 +132,38 @@
mapOf("long_title" to StateEntryValue.fromString("Long Title")),
mapOf("short_text" to StateEntryValue.fromString("Short Text")),
mapOf("short_title" to StateEntryValue.fromString("Short Title")),
- // Only the last one will trigger an evaluated data.
mapOf("description" to StateEntryValue.fromString("Description")),
+ mapOf("placeholder" to StateEntryValue.fromString("Placeholder")),
+ mapOf("list" to StateEntryValue.fromString("List")),
+ mapOf("timeline" to StateEntryValue.fromString("Timeline")),
+ // Only the last one will trigger an evaluated data.
),
evaluated =
listOf(
- INVALID_DATA, // Before state is available.
- WireComplicationData.Builder(WireComplicationData.TYPE_NO_DATA)
+ // Before any state is available.
+ INVALID_DATA,
+ // INVALID_DATA with placeholder, after it's available (and others aren't).
+ WireComplicationData.Builder(INVALID_DATA)
+ .setPlaceholder(evaluatedData("Placeholder"))
+ .build(),
+ // Evaluated data with after everything is available.
+ WireComplicationData.Builder(TYPE_NO_DATA)
.setRangedValue(1f)
.setLongText(WireComplicationText("Long Text"))
.setLongTitle(WireComplicationText("Long Title"))
.setShortText(WireComplicationText("Short Text"))
.setShortTitle(WireComplicationText("Short Title"))
.setContentDescription(WireComplicationText("Description"))
+ // Not trimmed for TYPE_NO_DATA.
+ .setPlaceholder(evaluatedData("Placeholder"))
+ .setListEntryCollection(listOf(evaluatedData("List")))
.build()
+ .also { it.setTimelineEntryCollection(listOf(evaluatedData("Timeline"))) },
),
),
SET_TO_EVALUATED_IF_ALL_FIELDS_VALID(
expressed =
- WireComplicationData.Builder(WireComplicationData.TYPE_SHORT_TEXT)
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
.setShortTitle(WireComplicationText(DynamicString.fromState("valid")))
.setShortText(WireComplicationText(DynamicString.fromState("valid")))
.build(),
@@ -153,7 +174,7 @@
evaluated =
listOf(
INVALID_DATA, // Before state is available.
- WireComplicationData.Builder(WireComplicationData.TYPE_SHORT_TEXT)
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
.setShortTitle(WireComplicationText("Valid"))
.setShortText(WireComplicationText("Valid"))
.build(),
@@ -161,7 +182,7 @@
),
SET_TO_NO_DATA_IF_FIRST_STATE_IS_INVALID(
expressed =
- WireComplicationData.Builder(WireComplicationData.TYPE_SHORT_TEXT)
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
.setShortTitle(WireComplicationText(DynamicString.fromState("valid")))
.setShortText(WireComplicationText(DynamicString.fromState("invalid")))
.build(),
@@ -177,7 +198,7 @@
),
SET_TO_NO_DATA_IF_LAST_STATE_IS_INVALID(
expressed =
- WireComplicationData.Builder(WireComplicationData.TYPE_SHORT_TEXT)
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
.setShortTitle(WireComplicationText(DynamicString.fromState("valid")))
.setShortText(WireComplicationText(DynamicString.fromState("invalid")))
.build(),
@@ -192,13 +213,43 @@
evaluated =
listOf(
INVALID_DATA, // Before state is available.
- WireComplicationData.Builder(WireComplicationData.TYPE_SHORT_TEXT)
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
.setShortTitle(WireComplicationText("Valid"))
.setShortText(WireComplicationText("Valid"))
.build(),
INVALID_DATA, // After it was invalidated.
),
),
+ SET_TO_EVALUATED_WITHOUT_PLACEHOLDER_IF_NOT_NO_DATA(
+ expressed =
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
+ .setShortText(WireComplicationText("Text"))
+ .setPlaceholder(evaluatedData("Placeholder"))
+ .build(),
+ states = listOf(),
+ evaluated =
+ listOf(
+ // No placeholder.
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
+ .setShortText(WireComplicationText("Text"))
+ .build(),
+ )
+ ),
+ SET_TO_EVALUATED_WITHOUT_PLACEHOLDER_EVEN_IF_PLACEHOLDER_INVALID_IF_NOT_NO_DATA(
+ expressed =
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
+ .setShortText(WireComplicationText("Text"))
+ .setPlaceholder(stateData("placeholder"))
+ .build(),
+ states = listOf(), // placeholder state not set.
+ evaluated =
+ listOf(
+ // No placeholder.
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
+ .setShortText(WireComplicationText("Text"))
+ .build(),
+ )
+ ),
}
@Test
@@ -231,7 +282,7 @@
@Test
fun evaluate_cancelled_cleansUp() = runBlocking {
val expressed =
- WireComplicationData.Builder(WireComplicationData.TYPE_NO_DATA)
+ WireComplicationData.Builder(TYPE_NO_DATA)
.setRangedValueExpression(
// Uses TimeGateway, which needs cleaning up.
DynamicInstant.withSecondsPrecision(Instant.EPOCH)
@@ -262,19 +313,22 @@
@Test
fun evaluate_keepExpression_doesNotTrimUnevaluatedExpression() = runBlocking {
val expressed =
- WireComplicationData.Builder(WireComplicationData.TYPE_NO_DATA)
+ WireComplicationData.Builder(TYPE_NO_DATA)
.setRangedValueExpression(DynamicFloat.constant(1f))
.setLongText(WireComplicationText(DynamicString.constant("Long Text")))
.setLongTitle(WireComplicationText(DynamicString.constant("Long Title")))
.setShortText(WireComplicationText(DynamicString.constant("Short Text")))
.setShortTitle(WireComplicationText(DynamicString.constant("Short Title")))
.setContentDescription(WireComplicationText(DynamicString.constant("Description")))
+ .setPlaceholder(constantData("Placeholder"))
+ .setListEntryCollection(listOf(constantData("List")))
.build()
+ .also { it.setTimelineEntryCollection(listOf(constantData("Timeline"))) }
val evaluator = ComplicationDataExpressionEvaluator(keepExpression = true)
assertThat(evaluator.evaluate(expressed).firstOrNull())
.isEqualTo(
- WireComplicationData.Builder(WireComplicationData.TYPE_NO_DATA)
+ WireComplicationData.Builder(TYPE_NO_DATA)
.setRangedValue(1f)
.setRangedValueExpression(DynamicFloat.constant(1f))
.setLongText(
@@ -292,6 +346,29 @@
.setContentDescription(
WireComplicationText("Description", DynamicString.constant("Description"))
)
+ .setPlaceholder(evaluatedWithConstantData("Placeholder"))
+ .setListEntryCollection(listOf(evaluatedWithConstantData("List")))
+ .build()
+ .also {
+ it.setTimelineEntryCollection(listOf(evaluatedWithConstantData("Timeline")))
+ },
+ )
+ }
+
+ @Test
+ fun evaluate_keepExpressionNotNoData_doesNotTrimPlaceholder() = runBlocking {
+ val expressed =
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
+ .setShortText(WireComplicationText("Text"))
+ .setPlaceholder(evaluatedData("Placeholder"))
+ .build()
+ val evaluator = ComplicationDataExpressionEvaluator(keepExpression = true)
+
+ assertThat(evaluator.evaluate(expressed).firstOrNull())
+ .isEqualTo(
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
+ .setShortText(WireComplicationText("Text"))
+ .setPlaceholder(evaluatedData("Placeholder"))
.build()
)
}
@@ -300,5 +377,25 @@
/** Converts `[{a: A}, {b: B}, {c: C}]` to `[{a: A}, {a: A, b: B}, {a: A, b: B, c: C}]`. */
fun <K, V> aggregate(vararg maps: Map<K, V>): List<Map<K, V>> =
maps.fold(listOf()) { acc, map -> acc + ((acc.lastOrNull() ?: mapOf()) + map) }
+
+ fun constantData(value: String) =
+ WireComplicationData.Builder(TYPE_NO_DATA)
+ .setLongText(WireComplicationText(DynamicString.constant(value)))
+ .build()
+
+ fun stateData(value: String) =
+ WireComplicationData.Builder(TYPE_NO_DATA)
+ .setLongText(WireComplicationText(DynamicString.fromState(value)))
+ .build()
+
+ fun evaluatedData(value: String) =
+ WireComplicationData.Builder(TYPE_NO_DATA)
+ .setLongText(WireComplicationText(value))
+ .build()
+
+ fun evaluatedWithConstantData(value: String) =
+ WireComplicationData.Builder(TYPE_NO_DATA)
+ .setLongText(WireComplicationText(value, DynamicString.constant(value)))
+ .build()
}
}
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 14e7b1a..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
@@ -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/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/window/window-testing/api/current.txt b/window/window-testing/api/current.txt
index 0c67563..28a4315 100644
--- a/window/window-testing/api/current.txt
+++ b/window/window-testing/api/current.txt
@@ -1,4 +1,38 @@
// Signature format: 4.0
+package androidx.window.testing.embedding {
+
+ public final class ActivityEmbeddingRule implements org.junit.rules.TestRule {
+ ctor public ActivityEmbeddingRule();
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public void overrideIsActivityEmbedded(android.app.Activity activity, boolean isActivityEmbedded);
+ method public void overrideSplitInfo(android.app.Activity activity, java.util.List<androidx.window.embedding.SplitInfo> splitInfoList);
+ method public void overrideSplitSupportStatus(androidx.window.embedding.SplitController.SplitSupportStatus status);
+ }
+
+ public final class TestActivityStack {
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack();
+ }
+
+ public final class TestSplitAttributesCalculatorParams {
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics);
+ }
+
+ public final class TestSplitInfo {
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo();
+ }
+
+}
+
package androidx.window.testing.layout {
public final class DisplayFeatureTesting {
diff --git a/window/window-testing/api/public_plus_experimental_current.txt b/window/window-testing/api/public_plus_experimental_current.txt
index bd1d758..28a4315 100644
--- a/window/window-testing/api/public_plus_experimental_current.txt
+++ b/window/window-testing/api/public_plus_experimental_current.txt
@@ -1,8 +1,8 @@
// Signature format: 4.0
package androidx.window.testing.embedding {
- @androidx.window.core.ExperimentalWindowApi public final class ActivityEmbeddingTestRule implements org.junit.rules.TestRule {
- ctor public ActivityEmbeddingTestRule();
+ public final class ActivityEmbeddingRule implements org.junit.rules.TestRule {
+ ctor public ActivityEmbeddingRule();
method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
method public void overrideIsActivityEmbedded(android.app.Activity activity, boolean isActivityEmbedded);
method public void overrideSplitInfo(android.app.Activity activity, java.util.List<androidx.window.embedding.SplitInfo> splitInfoList);
@@ -10,25 +10,25 @@
}
public final class TestActivityStack {
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.ActivityStack createTestActivityStack();
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack();
}
public final class TestSplitAttributesCalculatorParams {
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics);
}
public final class TestSplitInfo {
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
- method @androidx.window.core.ExperimentalWindowApi public static androidx.window.embedding.SplitInfo createTestSplitInfo();
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo();
}
}
diff --git a/window/window-testing/api/restricted_current.txt b/window/window-testing/api/restricted_current.txt
index 0c67563..28a4315 100644
--- a/window/window-testing/api/restricted_current.txt
+++ b/window/window-testing/api/restricted_current.txt
@@ -1,4 +1,38 @@
// Signature format: 4.0
+package androidx.window.testing.embedding {
+
+ public final class ActivityEmbeddingRule implements org.junit.rules.TestRule {
+ ctor public ActivityEmbeddingRule();
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public void overrideIsActivityEmbedded(android.app.Activity activity, boolean isActivityEmbedded);
+ method public void overrideSplitInfo(android.app.Activity activity, java.util.List<androidx.window.embedding.SplitInfo> splitInfoList);
+ method public void overrideSplitSupportStatus(androidx.window.embedding.SplitController.SplitSupportStatus status);
+ }
+
+ public final class TestActivityStack {
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack();
+ }
+
+ public final class TestSplitAttributesCalculatorParams {
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics);
+ }
+
+ public final class TestSplitInfo {
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo();
+ }
+
+}
+
package androidx.window.testing.layout {
public final class DisplayFeatureTesting {
diff --git a/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityEmbeddingTestRule.kt b/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityEmbeddingRule.kt
similarity index 96%
rename from window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityEmbeddingTestRule.kt
rename to window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityEmbeddingRule.kt
index 70d10c41..cd9fe23 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityEmbeddingTestRule.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityEmbeddingRule.kt
@@ -17,7 +17,6 @@
package androidx.window.testing.embedding
import android.app.Activity
-import androidx.window.core.ExperimentalWindowApi
import androidx.window.embedding.ActivityEmbeddingController
import androidx.window.embedding.EmbeddingBackend
import androidx.window.embedding.RuleController
@@ -33,8 +32,7 @@
* [RuleController] with a more simple one that will support testing independent of the current
* platform.
*/
-@ExperimentalWindowApi
-class ActivityEmbeddingTestRule : TestRule {
+class ActivityEmbeddingRule : TestRule {
private val stubEmbeddingBackend = StubEmbeddingBackend()
private val decorator = StubEmbeddingBackendDecorator(stubEmbeddingBackend)
diff --git a/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityStackTesting.kt b/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityStackTesting.kt
index a8e66a2..3bbca06 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityStackTesting.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityStackTesting.kt
@@ -18,7 +18,6 @@
package androidx.window.testing.embedding
import android.app.Activity
-import androidx.window.core.ExperimentalWindowApi
import androidx.window.embedding.ActivityStack
/**
@@ -35,7 +34,6 @@
* @return An [ActivityStack] instance for testing
*/
@Suppress("FunctionName")
-@ExperimentalWindowApi
@JvmName("createTestActivityStack")
@JvmOverloads
fun TestActivityStack(
diff --git a/window/window-testing/src/main/java/androidx/window/testing/embedding/SplitAttributesCalculatorParamsTesting.kt b/window/window-testing/src/main/java/androidx/window/testing/embedding/SplitAttributesCalculatorParamsTesting.kt
index bf20738..dd17311 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/embedding/SplitAttributesCalculatorParamsTesting.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/embedding/SplitAttributesCalculatorParamsTesting.kt
@@ -55,7 +55,7 @@
*
* @see SplitAttributesCalculatorParams
*/
-@ExperimentalWindowApi
+@OptIn(ExperimentalWindowApi::class)
@Suppress("FunctionName")
@JvmName("createTestSplitAttributesCalculatorParams")
@JvmOverloads
diff --git a/window/window-testing/src/main/java/androidx/window/testing/embedding/SplitInfoTesting.kt b/window/window-testing/src/main/java/androidx/window/testing/embedding/SplitInfoTesting.kt
index 3ce87ed..e3d3ac9 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/embedding/SplitInfoTesting.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/embedding/SplitInfoTesting.kt
@@ -17,7 +17,6 @@
package androidx.window.testing.embedding
-import androidx.window.core.ExperimentalWindowApi
import androidx.window.embedding.ActivityStack
import androidx.window.embedding.SplitAttributes
import androidx.window.embedding.SplitInfo
@@ -37,7 +36,6 @@
* @return A [SplitInfo] instance for testing
*/
@Suppress("FunctionName")
-@ExperimentalWindowApi
@JvmName("createTestSplitInfo")
@JvmOverloads
fun TestSplitInfo(
diff --git a/window/window-testing/src/main/java/androidx/window/testing/embedding/StubEmbeddingBackendDecorator.kt b/window/window-testing/src/main/java/androidx/window/testing/embedding/StubEmbeddingBackendDecorator.kt
index 2f0b90d..94bbc1a 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/embedding/StubEmbeddingBackendDecorator.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/embedding/StubEmbeddingBackendDecorator.kt
@@ -16,14 +16,12 @@
package androidx.window.testing.embedding
-import androidx.window.core.ExperimentalWindowApi
import androidx.window.embedding.EmbeddingBackend
import androidx.window.embedding.EmbeddingBackendDecorator
/**
* Decorator to return [StubEmbeddingBackend] instead of the actual implementation.
*/
-@ExperimentalWindowApi
internal class StubEmbeddingBackendDecorator(
private val stubEmbeddingBackend: StubEmbeddingBackend
) : EmbeddingBackendDecorator {
diff --git a/window/window-testing/src/test/java/androidx/window/testing/embedding/ActivityEmbeddingTestRuleTest.kt b/window/window-testing/src/test/java/androidx/window/testing/embedding/ActivityEmbeddingRuleTest.kt
similarity index 96%
rename from window/window-testing/src/test/java/androidx/window/testing/embedding/ActivityEmbeddingTestRuleTest.kt
rename to window/window-testing/src/test/java/androidx/window/testing/embedding/ActivityEmbeddingRuleTest.kt
index b1c22cb..6bd7721 100644
--- a/window/window-testing/src/test/java/androidx/window/testing/embedding/ActivityEmbeddingTestRuleTest.kt
+++ b/window/window-testing/src/test/java/androidx/window/testing/embedding/ActivityEmbeddingRuleTest.kt
@@ -19,7 +19,6 @@
import android.app.Activity
import android.app.Application
import android.content.Intent
-import androidx.window.core.ExperimentalWindowApi
import androidx.window.embedding.ActivityEmbeddingController
import androidx.window.embedding.ActivityRule
import androidx.window.embedding.EmbeddingBackend
@@ -51,12 +50,12 @@
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever
-/** Test for [ActivityEmbeddingTestRule]. */
-@OptIn(ExperimentalWindowApi::class, ExperimentalCoroutinesApi::class)
-class ActivityEmbeddingTestRuleTest {
+/** Test for [ActivityEmbeddingRule]. */
+@OptIn(ExperimentalCoroutinesApi::class)
+class ActivityEmbeddingRuleTest {
@get:Rule
- val testRule: ActivityEmbeddingTestRule = ActivityEmbeddingTestRule()
+ val testRule: ActivityEmbeddingRule = ActivityEmbeddingRule()
private val mockActivity: Activity = mock()
private val testScope = TestScope()
@@ -246,7 +245,7 @@
fun testRuleResetsOnException() {
EmbeddingBackend.reset()
try {
- ActivityEmbeddingTestRule().apply(
+ ActivityEmbeddingRule().apply(
object : Statement() {
override fun evaluate() {
throw TestException
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingBackend.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingBackend.kt
index 117337d..02b8a67 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingBackend.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingBackend.kt
@@ -70,14 +70,12 @@
return decorator(ExtensionEmbeddingBackend.getInstance(context))
}
- @ExperimentalWindowApi
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@JvmStatic
fun overrideDecorator(overridingDecorator: EmbeddingBackendDecorator) {
decorator = overridingDecorator::decorate
}
- @ExperimentalWindowApi
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@JvmStatic
fun reset() {
@@ -86,7 +84,6 @@
}
}
-@ExperimentalWindowApi
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
interface EmbeddingBackendDecorator {