diff --git a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.kt b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.kt index fae740f048d..08786c8d1c7 100644 --- a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.kt +++ b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.kt @@ -5,11 +5,12 @@ import androidx.compose.runtime.* import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.intl.Locale -class ResourceEnvironment internal constructor( - internal val language: LanguageQualifier, - internal val region: RegionQualifier, - internal val theme: ThemeQualifier, - internal val density: DensityQualifier +@ExperimentalResourceApi +class ResourceEnvironment( + val language: LanguageQualifier, + val region: RegionQualifier, + val theme: ThemeQualifier, + val density: DensityQualifier ) { override fun equals(other: Any?): Boolean { if (this === other) return true @@ -32,6 +33,18 @@ class ResourceEnvironment internal constructor( result = 31 * result + density.hashCode() return result } + + fun copy( + language: LanguageQualifier = this.language, + region: RegionQualifier = this.region, + theme: ThemeQualifier = this.theme, + density: DensityQualifier = this.density + ) = ResourceEnvironment( + language = language, + region = region, + theme = theme, + density = density + ) } internal interface ComposeEnvironment { diff --git a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/StringResources.kt b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/StringResources.kt index bec660e95c3..4de12942d15 100644 --- a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/StringResources.kt +++ b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/StringResources.kt @@ -38,8 +38,14 @@ fun stringResource(resource: StringResource): String { * * @throws IllegalArgumentException If the provided ID is not found in the resource file. */ -suspend fun getString(resource: StringResource): String = - loadString(resource, DefaultResourceReader, getSystemResourceEnvironment()) +suspend fun getString( + resource: StringResource, + reader: ResourceReader = DefaultResourceReader +): String = loadString( + resource = resource, + resourceReader = reader, + environment = getSystemResourceEnvironment() +) /** * Loads a string using the specified string resource. @@ -50,8 +56,15 @@ suspend fun getString(resource: StringResource): String = * * @throws IllegalArgumentException If the provided ID is not found in the resource file. */ -suspend fun getString(environment: ResourceEnvironment, resource: StringResource): String = - loadString(resource, DefaultResourceReader, environment) +suspend fun getString( + environment: ResourceEnvironment, + resource: StringResource, + reader: ResourceReader = DefaultResourceReader +): String = loadString( + resource = resource, + resourceReader = reader, + environment = environment +) private suspend fun loadString( resource: StringResource, @@ -91,11 +104,15 @@ fun stringResource(resource: StringResource, vararg formatArgs: Any): String { * * @throws IllegalArgumentException If the provided ID is not found in the resource file. */ -suspend fun getString(resource: StringResource, vararg formatArgs: Any): String = loadString( - resource, - formatArgs.map { it.toString() }, - DefaultResourceReader, - getSystemResourceEnvironment() +suspend fun getString( + resource: StringResource, + reader: ResourceReader = DefaultResourceReader, + vararg formatArgs: Any +): String = loadString( + resource = resource, + args = formatArgs.map { it.toString() }, + resourceReader = reader, + environment = getSystemResourceEnvironment() ) /** @@ -111,12 +128,13 @@ suspend fun getString(resource: StringResource, vararg formatArgs: Any): String suspend fun getString( environment: ResourceEnvironment, resource: StringResource, + reader: ResourceReader = DefaultResourceReader, vararg formatArgs: Any ): String = loadString( - resource, - formatArgs.map { it.toString() }, - DefaultResourceReader, - environment + resource = resource, + args = formatArgs.map { it.toString() }, + resourceReader = reader, + environment = environment ) private suspend fun loadString(