From a98d479952402495009d3c5607e5cfa2014a7ff9 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Tue, 23 Apr 2024 14:30:13 +0200 Subject: [PATCH] [resources] Mark ResourceEnvironment as experimental and add a sample of usage. --- .../resources/demo/shared/build.gradle.kts | 5 -- .../compose/resources/demo/shared/FileRes.kt | 53 ++++++++++++++++++- components/resources/library/build.gradle.kts | 1 + .../resources/PluralStringResources.kt | 2 - .../compose/resources/ResourceEnvironment.kt | 1 + .../compose/resources/StringArrayResources.kt | 1 - .../compose/resources/StringResources.kt | 2 - 7 files changed, 54 insertions(+), 11 deletions(-) diff --git a/components/resources/demo/shared/build.gradle.kts b/components/resources/demo/shared/build.gradle.kts index cecd7b3f1d..5cb567bec0 100644 --- a/components/resources/demo/shared/build.gradle.kts +++ b/components/resources/demo/shared/build.gradle.kts @@ -52,11 +52,6 @@ kotlin { applyDefaultHierarchyTemplate() sourceSets { - all { - languageSettings { - optIn("org.jetbrains.compose.resources.ExperimentalResourceApi") - } - } val desktopMain by getting val wasmJsMain by getting diff --git a/components/resources/demo/shared/src/commonMain/kotlin/org/jetbrains/compose/resources/demo/shared/FileRes.kt b/components/resources/demo/shared/src/commonMain/kotlin/org/jetbrains/compose/resources/demo/shared/FileRes.kt index efe4b68737..fc40f20c2f 100644 --- a/components/resources/demo/shared/src/commonMain/kotlin/org/jetbrains/compose/resources/demo/shared/FileRes.kt +++ b/components/resources/demo/shared/src/commonMain/kotlin/org/jetbrains/compose/resources/demo/shared/FileRes.kt @@ -9,11 +9,16 @@ import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import components.resources.demo.shared.generated.resources.Res +import components.resources.demo.shared.generated.resources.droid_icon +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.getDrawableResourceBytes +import org.jetbrains.compose.resources.rememberResourceEnvironment +@OptIn(ExperimentalResourceApi::class) @Composable fun FileRes(paddingValues: PaddingValues) { Column( - modifier = Modifier.padding(paddingValues) + modifier = Modifier.padding(paddingValues).verticalScroll(rememberScrollState()) ) { Text( modifier = Modifier.padding(16.dp), @@ -48,6 +53,34 @@ fun FileRes(paddingValues: PaddingValues) { Text(bytes.decodeToString()) """.trimIndent() ) + HorizontalDivider(modifier = Modifier.fillMaxWidth().padding(bottom = 16.dp)) + OutlinedCard( + modifier = Modifier.padding(horizontal = 16.dp), + shape = RoundedCornerShape(4.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.primaryContainer) + ) { + val composeEnv = rememberResourceEnvironment() + var bytes by remember { mutableStateOf(ByteArray(0)) } + LaunchedEffect(Unit) { + bytes = getDrawableResourceBytes(composeEnv, Res.drawable.droid_icon) + } + Text( + modifier = Modifier.padding(8.dp), + text = "droid_icon byte size = " + bytes.size, + color = MaterialTheme.colorScheme.onPrimaryContainer + ) + } + Text( + modifier = Modifier.padding(16.dp), + text = """ + val composeEnv = rememberResourceEnvironment() + var bytes by remember { mutableStateOf(ByteArray(0)) } + LaunchedEffect(Unit) { + bytes = getDrawableResourceBytes(composeEnv, Res.drawable.droid_icon) + } + Text("droid_icon byte size = " + bytes.size) + """.trimIndent() + ) Text( modifier = Modifier.padding(16.dp), text = "File: 'files/platform-text.txt'", @@ -80,5 +113,23 @@ fun FileRes(paddingValues: PaddingValues) { Text(bytes.decodeToString()) """.trimIndent() ) + HorizontalDivider(modifier = Modifier.fillMaxWidth().padding(bottom = 16.dp)) + OutlinedCard( + modifier = Modifier.padding(horizontal = 16.dp), + shape = RoundedCornerShape(4.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.primaryContainer) + ) { + Text( + modifier = Modifier.padding(8.dp), + text = "File URI: " + Res.getUri("files/platform-text.txt"), + color = MaterialTheme.colorScheme.onPrimaryContainer + ) + } + Text( + modifier = Modifier.padding(16.dp), + text = """ + Text("File URI: " + Res.getUri("files/platform-text.txt")) + """.trimIndent() + ) } } \ No newline at end of file diff --git a/components/resources/library/build.gradle.kts b/components/resources/library/build.gradle.kts index 6cb66172d9..b23ba687eb 100644 --- a/components/resources/library/build.gradle.kts +++ b/components/resources/library/build.gradle.kts @@ -53,6 +53,7 @@ kotlin { optIn("kotlinx.cinterop.ExperimentalForeignApi") optIn("kotlin.experimental.ExperimentalNativeApi") optIn("org.jetbrains.compose.resources.InternalResourceApi") + optIn("org.jetbrains.compose.resources.ExperimentalResourceApi") } } diff --git a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/PluralStringResources.kt b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/PluralStringResources.kt index a7936c7c0d..75227432d6 100644 --- a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/PluralStringResources.kt +++ b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/PluralStringResources.kt @@ -42,7 +42,6 @@ fun pluralStringResource(resource: PluralStringResource, quantity: Int): String * * @throws IllegalArgumentException If the provided ID or the pluralization is not found in the resource file. */ -@OptIn(ExperimentalResourceApi::class) suspend fun getPluralString(resource: PluralStringResource, quantity: Int): String = loadPluralString(resource, quantity, DefaultResourceReader, getSystemResourceEnvironment()) @@ -111,7 +110,6 @@ fun pluralStringResource(resource: PluralStringResource, quantity: Int, vararg f * * @throws IllegalArgumentException If the provided ID or the pluralization is not found in the resource file. */ -@OptIn(ExperimentalResourceApi::class) suspend fun getPluralString(resource: PluralStringResource, quantity: Int, vararg formatArgs: Any): String = loadPluralString( resource, quantity, 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 276ed20dc6..3965a75797 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,6 +5,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.intl.Locale +@ExperimentalResourceApi data class ResourceEnvironment internal constructor( internal val language: LanguageQualifier, internal val region: RegionQualifier, diff --git a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/StringArrayResources.kt b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/StringArrayResources.kt index 04a9cccef1..c44ba23798 100644 --- a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/StringArrayResources.kt +++ b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/StringArrayResources.kt @@ -45,7 +45,6 @@ fun stringArrayResource(resource: StringArrayResource): List { * * @throws IllegalStateException if the string array with the given ID is not found. */ -@OptIn(ExperimentalResourceApi::class) suspend fun getStringArray(resource: StringArrayResource): List = loadStringArray(resource, DefaultResourceReader, getSystemResourceEnvironment()) 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 edf7dc03b6..91e62bdd1a 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,7 +38,6 @@ fun stringResource(resource: StringResource): String { * * @throws IllegalArgumentException If the provided ID is not found in the resource file. */ -@OptIn(ExperimentalResourceApi::class) suspend fun getString(resource: StringResource): String = loadString(resource, DefaultResourceReader, getSystemResourceEnvironment()) @@ -92,7 +91,6 @@ fun stringResource(resource: StringResource, vararg formatArgs: Any): String { * * @throws IllegalArgumentException If the provided ID is not found in the resource file. */ -@OptIn(ExperimentalResourceApi::class) suspend fun getString(resource: StringResource, vararg formatArgs: Any): String = loadString( resource, formatArgs.map { it.toString() },