diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/Robohash.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/Robohash.kt
index 28def6986..2aa9f57c5 100644
--- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/Robohash.kt
+++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/Robohash.kt
@@ -1,11 +1,20 @@
package com.vitorpamplona.amethyst.ui.components
import android.content.Context
+import android.net.Uri
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
+import coil.ImageLoader
+import coil.decode.DataSource
+import coil.decode.ImageSource
+import coil.fetch.Fetcher
+import coil.fetch.SourceResult
import coil.request.ImageRequest
-import java.nio.ByteBuffer
+import coil.request.Options
+import okio.Buffer
import java.security.MessageDigest
+import kotlin.time.ExperimentalTime
+import kotlin.time.measureTimedValue
private fun toHex(color: Color): String {
val argb = color.toArgb()
@@ -40,29 +49,54 @@ private fun svgString(msg: String): String {
val mouth = mouths[mouthIndex]
val accessory = accessories[accIndex]
- return """
-
- """.trimIndent()
+ return """"""
}
+class HashImageFetcher(
+ private val context: Context,
+ private val data: Uri
+) : Fetcher {
+
+ @OptIn(ExperimentalTime::class)
+ override suspend fun fetch(): SourceResult {
+ val (value, elapsed) = measureTimedValue {
+ val source = try {
+ Buffer().apply { write(svgString(data.toString()).toByteArray()) }
+ } finally {
+ }
+
+ SourceResult(
+ source = ImageSource(source, context),
+ mimeType = null,
+ dataSource = DataSource.MEMORY
+ )
+ }
+ println("Elapsed: $elapsed")
+
+ return value
+ }
+
+ class Factory : Fetcher.Factory {
+ override fun create(data: Uri, options: Options, imageLoader: ImageLoader): Fetcher {
+ return HashImageFetcher(options.context, data)
+ }
+ }
+}
object Robohash {
fun imageRequest(context: Context, message: String): ImageRequest {
return ImageRequest
.Builder(context)
- .data(
- ByteBuffer.wrap(
- svgString(message).toByteArray()
- )
- )
+ .data("robohash:$message")
+ .fetcherFactory(HashImageFetcher.Factory())
.crossfade(100)
.build()
}