diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts index 8865ea5ef..c27fb4357 100644 --- a/androidApp/build.gradle.kts +++ b/androidApp/build.gradle.kts @@ -31,11 +31,11 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } diff --git a/core-api/build.gradle.kts b/core-api/build.gradle.kts index 996852673..bea7f8c8d 100644 --- a/core-api/build.gradle.kts +++ b/core-api/build.gradle.kts @@ -14,7 +14,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/core-appearance/build.gradle.kts b/core-appearance/build.gradle.kts index a81d2046f..cb7030050 100644 --- a/core-appearance/build.gradle.kts +++ b/core-appearance/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/core-architecture/build.gradle.kts b/core-architecture/build.gradle.kts index 15a180a96..558e06a40 100644 --- a/core-architecture/build.gradle.kts +++ b/core-architecture/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/core-md/build.gradle.kts b/core-md/build.gradle.kts index 9aa3c11d5..e1287d547 100644 --- a/core-md/build.gradle.kts +++ b/core-md/build.gradle.kts @@ -13,7 +13,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } @@ -40,7 +40,7 @@ kotlin { implementation(compose.material3) api(libs.markdown) - implementation(libs.compose.imageloader) + implementation(libs.kamel) } } val commonTest by getting { diff --git a/core-md/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core_md/compose/elements/MarkdownImage.kt b/core-md/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core_md/compose/elements/MarkdownImage.kt index f27e16652..dd3f02477 100755 --- a/core-md/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core_md/compose/elements/MarkdownImage.kt +++ b/core-md/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core_md/compose/elements/MarkdownImage.kt @@ -1,12 +1,12 @@ package com.github.diegoberaldin.raccoonforlemmy.core_md.compose.elements -import androidx.compose.foundation.Image import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale import com.github.diegoberaldin.raccoonforlemmy.core_md.utils.findChildOfTypeRecursive -import com.seiko.imageloader.rememberImagePainter +import io.kamel.image.KamelImage +import io.kamel.image.asyncPainterResource import org.intellij.markdown.MarkdownElementTypes import org.intellij.markdown.ast.ASTNode import org.intellij.markdown.ast.getTextInNode @@ -17,10 +17,10 @@ internal fun MarkdownImage(content: String, node: ASTNode) { node.findChildOfTypeRecursive(MarkdownElementTypes.LINK_DESTINATION)?.getTextInNode(content) ?.toString() ?: return - val painter = rememberImagePainter(link) - Image( - painter = painter, - contentDescription = "Markdown Image", // TODO + val painterResource = asyncPainterResource(data = link) + KamelImage( + resource = painterResource, + contentDescription = null, contentScale = ContentScale.FillWidth, modifier = Modifier.fillMaxWidth() ) diff --git a/core-md/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core_md/compose/elements/MarkdownText.kt b/core-md/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core_md/compose/elements/MarkdownText.kt index 6438ae765..fd7674c84 100755 --- a/core-md/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core_md/compose/elements/MarkdownText.kt +++ b/core-md/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core_md/compose/elements/MarkdownText.kt @@ -1,6 +1,5 @@ package com.github.diegoberaldin.raccoonforlemmy.core_md.compose.elements -import androidx.compose.foundation.Image import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.text.InlineTextContent @@ -22,7 +21,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core_md.compose.LocalMarkdownTyp import com.github.diegoberaldin.raccoonforlemmy.core_md.compose.LocalReferenceLinkHandler import com.github.diegoberaldin.raccoonforlemmy.core_md.utils.TAG_IMAGE_URL import com.github.diegoberaldin.raccoonforlemmy.core_md.utils.TAG_URL -import com.seiko.imageloader.rememberImagePainter +import io.kamel.image.KamelImage +import io.kamel.image.asyncPainterResource @Composable internal fun MarkdownText( @@ -67,10 +67,10 @@ internal fun MarkdownText( PlaceholderVerticalAlign.Bottom ) // TODO, identify flexible scaling! ) { link -> - val painter = rememberImagePainter(link) - Image( - painter = painter, - contentDescription = "Image", // TODO + val painterResource = asyncPainterResource(data = link) + KamelImage( + resource = painterResource, + contentDescription = null, contentScale = ContentScale.FillWidth, modifier = Modifier.fillMaxWidth() ) diff --git a/core-preferences/build.gradle.kts b/core-preferences/build.gradle.kts index 22db471cc..b342b2752 100644 --- a/core-preferences/build.gradle.kts +++ b/core-preferences/build.gradle.kts @@ -11,7 +11,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/core-utils/build.gradle.kts b/core-utils/build.gradle.kts index a7719e6e7..2fb126165 100644 --- a/core-utils/build.gradle.kts +++ b/core-utils/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/domain-identity/build.gradle.kts b/domain-identity/build.gradle.kts index 933fefdaa..6fe72f02c 100644 --- a/domain-identity/build.gradle.kts +++ b/domain-identity/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/domain-post/build.gradle.kts b/domain-post/build.gradle.kts index 160eb0e13..ffbf68a52 100644 --- a/domain-post/build.gradle.kts +++ b/domain-post/build.gradle.kts @@ -11,7 +11,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/domain-post/data/build.gradle.kts b/domain-post/data/build.gradle.kts index 9c5e3129a..a45e7602f 100644 --- a/domain-post/data/build.gradle.kts +++ b/domain-post/data/build.gradle.kts @@ -11,7 +11,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/domain-post/repository/build.gradle.kts b/domain-post/repository/build.gradle.kts index 806cc9085..064208f7c 100644 --- a/domain-post/repository/build.gradle.kts +++ b/domain-post/repository/build.gradle.kts @@ -11,7 +11,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/feature-example/build.gradle.kts b/feature-example/build.gradle.kts index d1bb43b07..223a8b686 100644 --- a/feature-example/build.gradle.kts +++ b/feature-example/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/feature-home/build.gradle.kts b/feature-home/build.gradle.kts index d58318ed2..40ede0443 100644 --- a/feature-home/build.gradle.kts +++ b/feature-home/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } @@ -46,7 +46,7 @@ kotlin { implementation(libs.voyager.navigator) implementation(libs.voyager.tab) implementation(libs.voyager.bottomsheet) - implementation(libs.compose.imageloader) + implementation(libs.kamel) implementation(projects.resources) implementation(projects.coreAppearance) diff --git a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_home/ui/PostCardImage.kt b/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_home/ui/PostCardImage.kt index 3b1a5e103..bc65a1507 100644 --- a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_home/ui/PostCardImage.kt +++ b/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_home/ui/PostCardImage.kt @@ -1,6 +1,5 @@ package com.github.diegoberaldin.raccoonforlemmy.feature_home.ui -import androidx.compose.foundation.Image import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn import androidx.compose.runtime.Composable @@ -8,16 +7,17 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import com.github.diegoberaldin.raccoonforlemmy.data.PostModel -import com.seiko.imageloader.rememberImagePainter +import io.kamel.image.KamelImage +import io.kamel.image.asyncPainterResource @Composable internal fun PostCardImage(post: PostModel) { val imageUrl = post.thumbnailUrl.orEmpty() if (imageUrl.isNotEmpty()) { - val painter = rememberImagePainter(imageUrl) - Image( + val painterResource = asyncPainterResource(data = imageUrl) + KamelImage( modifier = Modifier.fillMaxWidth().heightIn(min = 200.dp), - painter = painter, + resource = painterResource, contentDescription = null, contentScale = ContentScale.FillWidth, ) diff --git a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_home/ui/PostCardSubtitle.kt b/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_home/ui/PostCardSubtitle.kt index 75b18e9c1..f518ba5cd 100644 --- a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_home/ui/PostCardSubtitle.kt +++ b/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_home/ui/PostCardSubtitle.kt @@ -1,6 +1,5 @@ package com.github.diegoberaldin.raccoonforlemmy.feature_home.ui -import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.size @@ -15,7 +14,8 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import com.github.diegoberaldin.raccoonforlemmy.core_appearance.theme.Spacing import com.github.diegoberaldin.raccoonforlemmy.data.PostModel -import com.seiko.imageloader.rememberImagePainter +import io.kamel.image.KamelImage +import io.kamel.image.asyncPainterResource @Composable internal fun PostCardSubtitle(post: PostModel) { @@ -33,11 +33,11 @@ internal fun PostCardSubtitle(post: PostModel) { ) { if (communityName.isNotEmpty()) { if (communityIcon.isNotEmpty()) { - val painter = rememberImagePainter(communityIcon) - Image( + val painterResource = asyncPainterResource(data = communityIcon) + KamelImage( modifier = Modifier.size(iconSize) .clip(RoundedCornerShape(iconSize / 2)), - painter = painter, + resource = painterResource, contentDescription = null, contentScale = ContentScale.FillBounds, ) @@ -60,11 +60,11 @@ internal fun PostCardSubtitle(post: PostModel) { ) } if (creatorAvatar.isNotEmpty()) { - val painter = rememberImagePainter(creatorAvatar) - Image( + val painterResource = asyncPainterResource(data = creatorAvatar) + KamelImage( modifier = Modifier.size(iconSize) .clip(RoundedCornerShape(iconSize / 2)), - painter = painter, + resource = painterResource, contentDescription = null, contentScale = ContentScale.FillBounds, ) diff --git a/feature-inbox/build.gradle.kts b/feature-inbox/build.gradle.kts index d8a2a0f32..9f0ae0757 100644 --- a/feature-inbox/build.gradle.kts +++ b/feature-inbox/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/feature-profile/build.gradle.kts b/feature-profile/build.gradle.kts index 10afec188..82c8b5951 100644 --- a/feature-profile/build.gradle.kts +++ b/feature-profile/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } @@ -45,7 +45,9 @@ kotlin { implementation(libs.voyager.navigator) implementation(libs.voyager.tab) implementation(libs.voyager.bottomsheet) - implementation(libs.compose.imageloader) + implementation(libs.kamel) + implementation(libs.ktor.cio) + implementation(libs.kamel) implementation(projects.resources) implementation(projects.coreArchitecture) diff --git a/feature-profile/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_profile/ui/ProfileLoggedContent.kt b/feature-profile/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_profile/ui/ProfileLoggedContent.kt index c99cb855a..99e850901 100644 --- a/feature-profile/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_profile/ui/ProfileLoggedContent.kt +++ b/feature-profile/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature_profile/ui/ProfileLoggedContent.kt @@ -1,6 +1,5 @@ package com.github.diegoberaldin.raccoonforlemmy.feature_profile.ui -import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -16,15 +15,15 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import com.github.diegoberaldin.raccoonforlemmy.core_appearance.theme.CornerSize import com.github.diegoberaldin.raccoonforlemmy.core_appearance.theme.Spacing import com.github.diegoberaldin.raccoonforlemmy.data.UserCounterModel import com.github.diegoberaldin.raccoonforlemmy.data.UserModel import com.github.diegoberaldin.raccoonforlemmy.resources.MR -import com.seiko.imageloader.rememberImagePainter import dev.icerock.moko.resources.compose.stringResource +import io.kamel.image.KamelImage +import io.kamel.image.asyncPainterResource @Composable internal fun ProfileLoggedContent( @@ -34,29 +33,27 @@ internal fun ProfileLoggedContent( ) { Column( modifier = Modifier.fillMaxSize().padding(horizontal = Spacing.m), - verticalArrangement = Arrangement.spacedBy(Spacing.xs) + verticalArrangement = Arrangement.spacedBy(Spacing.xs), + horizontalAlignment = Alignment.CenterHorizontally, ) { val avatar = user?.avatar.orEmpty() if (avatar.isNotEmpty()) { - val painter = rememberImagePainter(avatar) - Image( - modifier = Modifier.size(50.dp) + val painterResource = asyncPainterResource(data = avatar) + KamelImage( + modifier = Modifier.size(100.dp) .clip(RoundedCornerShape(CornerSize.m)), - painter = painter, + resource = painterResource, contentDescription = null, - contentScale = ContentScale.FillBounds, ) } val name = user?.name.orEmpty() Text( - modifier = Modifier.align(Alignment.CenterHorizontally), text = name, style = MaterialTheme.typography.titleLarge ) Spacer(modifier = Modifier.height(Spacing.l)) Button( - modifier = Modifier.align(Alignment.CenterHorizontally), onClick = { onLogout() }, diff --git a/feature-search/build.gradle.kts b/feature-search/build.gradle.kts index ce31db390..0fc41d303 100644 --- a/feature-search/build.gradle.kts +++ b/feature-search/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/feature-settings/build.gradle.kts b/feature-settings/build.gradle.kts index 96500658b..f18216717 100644 --- a/feature-settings/build.gradle.kts +++ b/feature-settings/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 409f5614a..6c49e33e8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ androidx_activity_compose = "1.7.2" androidx_crypto = "1.0.0" android_gradle = "7.4.2" compose = "1.4.3" -compose_imageloader = "1.6.0" +kamel = "0.7.1" koin = "3.2.0" kotlin = "1.8.20" ksp = "1.8.20-1.0.11" @@ -20,7 +20,7 @@ voyager = "1.0.0-rc05" androidx_activity_compose = { module = "androidx.activity:activity-compose", version.ref = "androidx.activity.compose" } androidx_security_crypto = { module = "androidx.security:security-crypto", version.ref = "androidx.crypto" } -compose_imageloader = { module = "io.github.qdsfdhvh:image-loader", version.ref = "compose.imageloader" } +kamel = { module = "media.kamel:kamel-image", version.ref = "kamel" } markdown = { module = "org.jetbrains:markdown", version.ref = "markdown" } multiplatform_settings = { module = "com.russhwolf:multiplatform-settings", version.ref = "multiplatform.settings" } @@ -29,6 +29,7 @@ koin_test = { module = "io.insert-koin:koin-test", version.ref = "koin" } koin_android = { module = "io.insert-koin:koin-android", version.ref = "koin" } ktor_serialization = { module = "io.ktor:ktor-client-serialization", version.ref = "ktor" } +ktor_cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktor" } ktor_contentnegotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" } ktor_logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" } ktor_json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" } diff --git a/resources/build.gradle.kts b/resources/build.gradle.kts index 4e9c3ce95..d2019f772 100644 --- a/resources/build.gradle.kts +++ b/resources/build.gradle.kts @@ -13,7 +13,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } } diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 6cfc21cd7..0c01a15fa 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -10,7 +10,7 @@ kotlin { android { compilations.all { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } }