From 659154d0fb01c960af850d89ef9f0576a8768b47 Mon Sep 17 00:00:00 2001 From: seiko Date: Sat, 8 Jul 2023 13:11:47 +0800 Subject: [PATCH 1/5] cleanup code --- .../imageloader/cache/memory/MemoryCacheBuilder.kt | 12 ++++++------ .../seiko/imageloader/intercept/MappedInterceptor.kt | 10 ++++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/cache/memory/MemoryCacheBuilder.kt b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/cache/memory/MemoryCacheBuilder.kt index 81cd0980..3f7ae397 100644 --- a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/cache/memory/MemoryCacheBuilder.kt +++ b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/cache/memory/MemoryCacheBuilder.kt @@ -1,7 +1,6 @@ package com.seiko.imageloader.cache.memory import com.seiko.imageloader.Bitmap -import com.seiko.imageloader.size class MemoryCacheBuilder internal constructor( private val valueHashProvider: (V) -> Int, @@ -26,11 +25,12 @@ class MemoryCacheBuilder internal constructor( } internal fun build(): MemoryCache { - val weakMemoryCache: WeakMemoryCache = if (weakReferencesEnabled) { - RealWeakMemoryCache(valueHashProvider) - } else { - EmptyWeakMemoryCache() - } + val weakMemoryCache: WeakMemoryCache = + if (weakReferencesEnabled) { + RealWeakMemoryCache(valueHashProvider) + } else { + EmptyWeakMemoryCache() + } val strongMemoryCache: StrongMemoryCache = if (strongReferencesEnabled && maxSizeBytes > 0) { RealStrongMemoryCache(maxSizeBytes, weakMemoryCache, valueSizeProvider) diff --git a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/intercept/MappedInterceptor.kt b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/intercept/MappedInterceptor.kt index d52f2526..809695f0 100644 --- a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/intercept/MappedInterceptor.kt +++ b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/intercept/MappedInterceptor.kt @@ -10,10 +10,12 @@ class MappedInterceptor : Interceptor { val logger = chain.logger val mappedData = chain.components.map(request.data, options) - logger.d( - tag = "MappedInterceptor", - data = request.data, - ) { "map -> $mappedData" } + if (mappedData !== request.data) { + logger.d( + tag = "MappedInterceptor", + data = request.data, + ) { "map -> $mappedData" } + } val newRequest = request.newBuilder { data(mappedData) } return chain.proceed(newRequest) From e50a0f8cb6a7e84548882d817128e4134f02a495 Mon Sep 17 00:00:00 2001 From: seiko Date: Sat, 8 Jul 2023 13:38:23 +0800 Subject: [PATCH 2/5] rename rememberImageActionPainter to rememberImagePainter --- .../kotlin/com/seiko/imageloader/Remember.kt | 15 ---- .../seiko/imageloader/RememberDeprecated.kt | 77 +++++++++---------- .../com/seiko/imageloader/RememberExt.kt | 42 +++++++++- 3 files changed, 73 insertions(+), 61 deletions(-) diff --git a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Remember.kt b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Remember.kt index 4a030727..c5bb11f7 100644 --- a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Remember.kt +++ b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Remember.kt @@ -28,21 +28,6 @@ fun rememberImageAction( }.collectAsState(ImageEvent.Start) } -@Composable -fun rememberImageActionPainter( - request: ImageRequest, - imageLoader: ImageLoader = LocalImageLoader.current, - filterQuality: FilterQuality = DefaultFilterQuality, -): Painter { - val action by rememberImageAction(request, imageLoader) - return rememberImageActionPainter( - action = action, - filterQuality = filterQuality, - placeholderPainter = request.placeholderPainter, - errorPainter = request.errorPainter, - ) -} - @Composable fun rememberImageActionPainter( action: ImageAction, diff --git a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/RememberDeprecated.kt b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/RememberDeprecated.kt index 966e4ef0..5cb2e440 100644 --- a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/RememberDeprecated.kt +++ b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/RememberDeprecated.kt @@ -10,17 +10,20 @@ import androidx.compose.ui.layout.ContentScale import com.seiko.imageloader.model.ImageRequest import com.seiko.imageloader.option.Scale -@Deprecated("rememberImagePainter is deprecated", replaceWith = ReplaceWith("rememberImageActionPainter")) +@Deprecated( + message = "move contentScale into ImageRequest", + replaceWith = ReplaceWith("ImageRequest { scale(contentScale.toScale()) }"), +) @Composable fun rememberImagePainter( url: String, + contentScale: ContentScale, imageLoader: ImageLoader = LocalImageLoader.current, - contentScale: ContentScale = ContentScale.Fit, filterQuality: FilterQuality = DefaultFilterQuality, placeholderPainter: (@Composable () -> Painter)? = null, errorPainter: (@Composable () -> Painter)? = null, ): Painter { - val action by rememberImageAction( + return rememberImagePainter( request = remember(url, contentScale) { ImageRequest { data(url) @@ -28,26 +31,24 @@ fun rememberImagePainter( } }, imageLoader = imageLoader, - ) - return rememberImageActionPainter( - action = action, filterQuality = filterQuality, - placeholderPainter = placeholderPainter, - errorPainter = errorPainter, ) } -@Deprecated("rememberImagePainter is deprecated", replaceWith = ReplaceWith("rememberImageActionPainter")) +@Deprecated( + message = "move contentScale into ImageRequest", + replaceWith = ReplaceWith("ImageRequest { scale(contentScale.toScale()) }"), +) @Composable fun rememberImagePainter( resId: Int, + contentScale: ContentScale, imageLoader: ImageLoader = LocalImageLoader.current, - contentScale: ContentScale = ContentScale.Fit, filterQuality: FilterQuality = DefaultFilterQuality, placeholderPainter: (@Composable () -> Painter)? = null, errorPainter: (@Composable () -> Painter)? = null, ): Painter { - val action by rememberImageAction( + return rememberImagePainter( request = remember(resId, contentScale) { ImageRequest { data(resId) @@ -55,32 +56,33 @@ fun rememberImagePainter( } }, imageLoader = imageLoader, - ) - return rememberImageActionPainter( - action = action, filterQuality = filterQuality, - placeholderPainter = placeholderPainter, - errorPainter = errorPainter, ) } -@Deprecated("rememberImagePainter is deprecated", replaceWith = ReplaceWith("rememberImageActionPainter")) +@Deprecated( + message = "move contentScale into ImageRequest", + replaceWith = ReplaceWith("ImageRequest { scale(contentScale.toScale()) }"), +) @Composable fun rememberImagePainter( request: ImageRequest, + contentScale: ContentScale, imageLoader: ImageLoader = LocalImageLoader.current, - contentScale: ContentScale = ContentScale.Fit, filterQuality: FilterQuality = DefaultFilterQuality, ): Painter { - val newRequest = remember(request) { - request.newBuilder { - scale(contentScale.toScale()) - } - } - return rememberImageActionPainter(newRequest, imageLoader, filterQuality) + return rememberImagePainter( + request = remember(request) { + request.newBuilder { + scale(contentScale.toScale()) + } + }, + imageLoader = imageLoader, + filterQuality = filterQuality, + ) } -@Deprecated("rememberAsyncImagePainter is deprecated", replaceWith = ReplaceWith("rememberImageActionPainter")) +@Deprecated("Use rememberImageAction&rememberImageActionPainter or rememberImagePainter") @Composable fun rememberAsyncImagePainter( url: String, @@ -94,14 +96,11 @@ fun rememberAsyncImagePainter( scale(contentScale.toScale()) } } - return rememberImageActionPainter( - request = request, - imageLoader = imageLoader, - filterQuality = filterQuality, - ) + val action by rememberImageAction(request, imageLoader) + return rememberImageActionPainter(action, filterQuality) } -@Deprecated("rememberAsyncImagePainter is deprecated", replaceWith = ReplaceWith("rememberImageActionPainter")) +@Deprecated("Use rememberImageAction&rememberImageActionPainter or rememberImagePainter") @Composable fun rememberAsyncImagePainter( resId: Int, @@ -115,14 +114,11 @@ fun rememberAsyncImagePainter( scale(contentScale.toScale()) } } - return rememberImageActionPainter( - request = request, - imageLoader = imageLoader, - filterQuality = filterQuality, - ) + val action by rememberImageAction(request, imageLoader) + return rememberImageActionPainter(action, filterQuality) } -@Deprecated("rememberAsyncImagePainter is deprecated", replaceWith = ReplaceWith("rememberImageActionPainter")) +@Deprecated("Use rememberImageAction&rememberImageActionPainter or rememberImagePainter") @Composable fun rememberAsyncImagePainter( request: ImageRequest, @@ -135,11 +131,8 @@ fun rememberAsyncImagePainter( scale(contentScale.toScale()) } } - return rememberImageActionPainter( - request = newRequest, - imageLoader = imageLoader, - filterQuality = filterQuality, - ) + val action by rememberImageAction(newRequest, imageLoader) + return rememberImageActionPainter(action, filterQuality) } fun ContentScale.toScale() = when (this) { diff --git a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/RememberExt.kt b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/RememberExt.kt index 1192fe4e..36822bcf 100644 --- a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/RememberExt.kt +++ b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/RememberExt.kt @@ -2,6 +2,7 @@ package com.seiko.imageloader import androidx.compose.runtime.Composable import androidx.compose.runtime.State +import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.graphics.FilterQuality import androidx.compose.ui.graphics.drawscope.DrawScope @@ -28,21 +29,54 @@ fun rememberImageAction( } @Composable -fun rememberImageActionPainter( +fun rememberImagePainter( url: String, imageLoader: ImageLoader = LocalImageLoader.current, filterQuality: FilterQuality = DrawScope.DefaultFilterQuality, + placeholderPainter: (@Composable () -> Painter)? = null, + errorPainter: (@Composable () -> Painter)? = null, ): Painter { val request = remember { ImageRequest(url) } - return rememberImageActionPainter(request, imageLoader, filterQuality) + return rememberImagePainter( + request = request, + imageLoader = imageLoader, + filterQuality = filterQuality, + placeholderPainter = placeholderPainter, + errorPainter = errorPainter, + ) } @Composable -fun rememberImageActionPainter( +fun rememberImagePainter( resId: Int, imageLoader: ImageLoader = LocalImageLoader.current, filterQuality: FilterQuality = DrawScope.DefaultFilterQuality, + placeholderPainter: (@Composable () -> Painter)? = null, + errorPainter: (@Composable () -> Painter)? = null, ): Painter { val request = remember { ImageRequest(resId) } - return rememberImageActionPainter(request, imageLoader, filterQuality) + return rememberImagePainter( + request = request, + imageLoader = imageLoader, + filterQuality = filterQuality, + placeholderPainter = placeholderPainter, + errorPainter = errorPainter, + ) +} + +@Composable +fun rememberImagePainter( + request: ImageRequest, + imageLoader: ImageLoader = LocalImageLoader.current, + filterQuality: FilterQuality = DrawScope.DefaultFilterQuality, + placeholderPainter: (@Composable () -> Painter)? = request.placeholderPainter, + errorPainter: (@Composable () -> Painter)? = request.errorPainter, +): Painter { + val action by rememberImageAction(request, imageLoader) + return rememberImageActionPainter( + action = action, + filterQuality = filterQuality, + placeholderPainter = placeholderPainter, + errorPainter = errorPainter, + ) } From 96c37e1e17973a677cacf673c2d34bdefd78774d Mon Sep 17 00:00:00 2001 From: seiko Date: Sat, 8 Jul 2023 13:42:33 +0800 Subject: [PATCH 3/5] update demo --- .../com/seiko/imageloader/demo/scene/OtherImagesScene.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/common/src/commonMain/kotlin/com/seiko/imageloader/demo/scene/OtherImagesScene.kt b/app/common/src/commonMain/kotlin/com/seiko/imageloader/demo/scene/OtherImagesScene.kt index 2eb9f77c..e34093de 100644 --- a/app/common/src/commonMain/kotlin/com/seiko/imageloader/demo/scene/OtherImagesScene.kt +++ b/app/common/src/commonMain/kotlin/com/seiko/imageloader/demo/scene/OtherImagesScene.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import com.seiko.imageloader.demo.MR -import com.seiko.imageloader.rememberImageActionPainter +import com.seiko.imageloader.rememberImagePainter @Composable fun OtherImagesScene( @@ -78,7 +78,7 @@ fun OtherImagesScene( @Composable private fun TestSvgImage(url: String) { Image( - painter = rememberImageActionPainter(url), + painter = rememberImagePainter(url), contentDescription = null, modifier = Modifier .size(50.dp) From a6f701d540061783875bec547f6ed6a537fb37c7 Mon Sep 17 00:00:00 2001 From: seiko Date: Sat, 8 Jul 2023 14:02:19 +0800 Subject: [PATCH 4/5] remove filterQuality in Image.toPainter --- .../androidMain/kotlin/com/seiko/imageloader/Image.android.kt | 3 +-- .../src/commonMain/kotlin/com/seiko/imageloader/Image.kt | 4 +--- .../src/commonMain/kotlin/com/seiko/imageloader/Remember.kt | 4 ++-- .../src/skiaMain/kotlin/com/seiko/imageloader/Image.skia.kt | 3 +-- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/image-loader/src/androidMain/kotlin/com/seiko/imageloader/Image.android.kt b/image-loader/src/androidMain/kotlin/com/seiko/imageloader/Image.android.kt index 63515e80..fde3afea 100644 --- a/image-loader/src/androidMain/kotlin/com/seiko/imageloader/Image.android.kt +++ b/image-loader/src/androidMain/kotlin/com/seiko/imageloader/Image.android.kt @@ -14,7 +14,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter -import androidx.compose.ui.graphics.FilterQuality import androidx.compose.ui.graphics.asAndroidColorFilter import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.drawIntoCanvas @@ -32,7 +31,7 @@ actual class Image( @Suppress("NOTHING_TO_INLINE") inline fun Drawable.toImage() = Image(this) -actual fun Image.toPainter(filterQuality: FilterQuality): Painter { +actual fun Image.toPainter(): Painter { return when (drawable) { is ColorDrawable -> ColorPainter(Color(drawable.color)) else -> DrawablePainter(drawable.mutate()) diff --git a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Image.kt b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Image.kt index 8f52c478..3fbd4e4c 100644 --- a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Image.kt +++ b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Image.kt @@ -1,9 +1,7 @@ package com.seiko.imageloader -import androidx.compose.ui.graphics.FilterQuality -import androidx.compose.ui.graphics.drawscope.DrawScope.Companion.DefaultFilterQuality import androidx.compose.ui.graphics.painter.Painter expect class Image -expect fun Image.toPainter(filterQuality: FilterQuality = DefaultFilterQuality): Painter +expect fun Image.toPainter(): Painter diff --git a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Remember.kt b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Remember.kt index c5bb11f7..d7b2efd9 100644 --- a/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Remember.kt +++ b/image-loader/src/commonMain/kotlin/com/seiko/imageloader/Remember.kt @@ -58,8 +58,8 @@ fun rememberImageResultPainter( is ImageResult.Bitmap -> remember(filterQuality) { result.bitmap.toPainter(filterQuality) } - is ImageResult.Image -> remember(filterQuality) { - result.image.toPainter(filterQuality) + is ImageResult.Image -> remember { + result.image.toPainter() } is ImageResult.Error, is ImageResult.Source, diff --git a/image-loader/src/skiaMain/kotlin/com/seiko/imageloader/Image.skia.kt b/image-loader/src/skiaMain/kotlin/com/seiko/imageloader/Image.skia.kt index 19b9b9ed..7fb7e2ca 100644 --- a/image-loader/src/skiaMain/kotlin/com/seiko/imageloader/Image.skia.kt +++ b/image-loader/src/skiaMain/kotlin/com/seiko/imageloader/Image.skia.kt @@ -1,12 +1,11 @@ package com.seiko.imageloader -import androidx.compose.ui.graphics.FilterQuality import androidx.compose.ui.graphics.painter.BitmapPainter import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.toComposeImageBitmap actual typealias Image = org.jetbrains.skia.Image -actual fun Image.toPainter(filterQuality: FilterQuality): Painter { +actual fun Image.toPainter(): Painter { return BitmapPainter(toComposeImageBitmap()) } From 11c753e5bb1ef4d94e72c636eca459d5e4035237 Mon Sep 17 00:00:00 2001 From: seiko Date: Sat, 8 Jul 2023 14:04:18 +0800 Subject: [PATCH 5/5] cleanup code --- build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 782dac59..c1ff28e4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,6 @@ import com.vanniktech.maven.publish.SonatypeHost import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -@Suppress("DSL_SCOPE_VIOLATION") plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false