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 e3f9a2f97..28def6986 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
@@ -15,9 +15,9 @@ private fun toHex(color: Color): String {
private val sha256: MessageDigest = MessageDigest.getInstance("SHA-256")
-private fun byteMod(byte: Byte, modulo: Int): Int {
+private fun byteMod10(byte: Byte): Int {
val ub = byte.toUByte().toInt()
- return ub % modulo
+ return ub % 10
}
private fun bytesToRGB(b1: Byte, b2: Byte, b3: Byte): Color {
@@ -27,16 +27,13 @@ private fun bytesToRGB(b1: Byte, b2: Byte, b3: Byte): Color {
private fun svgString(msg: String): String {
val hash = sha256.digest(msg.toByteArray())
val hashHex = hash.joinToString(separator = "") { b -> "%02x".format(b) }
- val bgColor1 = bytesToRGB(hash[0], hash[1], hash[2])
- val bgColor2 = bytesToRGB(hash[3], hash[4], hash[5])
- val fgColor = bytesToRGB(hash[6], hash[7], hash[8])
- val bgIndex = byteMod(hash[9], 8)
- val bodyIndex = byteMod(hash[10], 10)
- val faceIndex = byteMod(hash[11], 10)
- val eyesIndex = byteMod(hash[12], 10)
- val mouthIndex = byteMod(hash[13], 10)
- val accIndex = byteMod(hash[14], 10)
- val background = backgrounds[bgIndex]
+ val bgColor = bytesToRGB(hash[0], hash[1], hash[2])
+ val fgColor = bytesToRGB(hash[3], hash[4], hash[5])
+ val bodyIndex = byteMod10(hash[6])
+ val faceIndex = byteMod10(hash[7])
+ val eyesIndex = byteMod10(hash[8])
+ val mouthIndex = byteMod10(hash[9])
+ val accIndex = byteMod10(hash[10])
val body = bodies[bodyIndex]
val face = faces[faceIndex]
val eye = eyes[eyesIndex]
@@ -47,11 +44,11 @@ private fun svgString(msg: String): String {
""".trimIndent()
@@ -66,22 +63,14 @@ object Robohash {
svgString(message).toByteArray()
)
)
+ .crossfade(100)
.build()
}
}
private data class Part(val style: String, val paths: String)
-private val backgrounds: List = listOf(
- """""",
- """""",
- """""",
- """""",
- """""",
- """""",
- """""",
- """"""
-)
+private const val background = """"""
private val accessories: List = listOf(
Part(
diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RobohashAsyncImage.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RobohashAsyncImage.kt
index 7523dff6e..73b500ccf 100644
--- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RobohashAsyncImage.kt
+++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RobohashAsyncImage.kt
@@ -1,11 +1,6 @@
package com.vitorpamplona.amethyst.ui.components
-import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ColorFilter
@@ -16,6 +11,7 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import coil.compose.AsyncImage
import coil.compose.AsyncImagePainter
+import coil.compose.rememberAsyncImagePainter
@Composable
fun RobohashAsyncImage(
@@ -46,8 +42,8 @@ fun RobohashAsyncImage(
@Composable
fun RobohashFallbackAsyncImage(
- robot: String = "aaaa",
- model: Any?,
+ robot: String,
+ model: String?,
contentDescription: String?,
modifier: Modifier = Modifier,
alignment: Alignment = Alignment.Center,
@@ -56,37 +52,22 @@ fun RobohashFallbackAsyncImage(
colorFilter: ColorFilter? = null,
filterQuality: FilterQuality = DrawScope.DefaultFilterQuality
) {
- var loading by remember { mutableStateOf(false) }
- var error by remember { mutableStateOf(false) }
+ val context = LocalContext.current
+ val painter = rememberAsyncImagePainter(model = Robohash.imageRequest(context, robot))
- Box {
- AsyncImage(
- model = model,
- contentDescription = contentDescription,
- modifier = modifier,
- onLoading = { loading = true },
- onSuccess = { loading = false; error = false },
- onError = { error = true },
- alignment = alignment,
- contentScale = contentScale,
- alpha = alpha,
- colorFilter = colorFilter,
- filterQuality = filterQuality
- )
-
- if (loading || error) {
- RobohashAsyncImage(
- robot = robot,
- contentDescription = contentDescription,
- modifier = modifier,
- alignment = alignment,
- contentScale = contentScale,
- alpha = alpha,
- colorFilter = colorFilter,
- filterQuality = filterQuality
- )
- }
- }
+ AsyncImage(
+ model = model,
+ contentDescription = contentDescription,
+ modifier = modifier,
+ placeholder = painter,
+ fallback = painter,
+ error = painter,
+ alignment = alignment,
+ contentScale = contentScale,
+ alpha = alpha,
+ colorFilter = colorFilter,
+ filterQuality = filterQuality
+ )
}
@Composable