kopia lustrzana https://github.com/vitorpamplona/amethyst
110 wiersze
3.5 KiB
Kotlin
110 wiersze
3.5 KiB
Kotlin
package com.vitorpamplona.amethyst.ui.components
|
|
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.graphics.ColorFilter
|
|
import androidx.compose.ui.graphics.DefaultAlpha
|
|
import androidx.compose.ui.graphics.FilterQuality
|
|
import androidx.compose.ui.graphics.drawscope.DrawScope
|
|
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(
|
|
robot: String,
|
|
modifier: Modifier = Modifier,
|
|
contentDescription: String? = null,
|
|
transform: (AsyncImagePainter.State) -> AsyncImagePainter.State = AsyncImagePainter.DefaultTransform,
|
|
onState: ((AsyncImagePainter.State) -> Unit)? = null,
|
|
alignment: Alignment = Alignment.Center,
|
|
contentScale: ContentScale = ContentScale.Fit,
|
|
alpha: Float = DefaultAlpha,
|
|
colorFilter: ColorFilter? = null,
|
|
filterQuality: FilterQuality = DrawScope.DefaultFilterQuality
|
|
) {
|
|
AsyncImage(
|
|
model = Robohash.imageRequest(LocalContext.current, robot),
|
|
contentDescription = contentDescription,
|
|
modifier = modifier,
|
|
transform = transform,
|
|
onState = onState,
|
|
alignment = alignment,
|
|
contentScale = contentScale,
|
|
alpha = alpha,
|
|
colorFilter = colorFilter,
|
|
filterQuality = filterQuality
|
|
)
|
|
}
|
|
|
|
@Composable
|
|
fun RobohashFallbackAsyncImage(
|
|
robot: String,
|
|
model: String?,
|
|
contentDescription: String?,
|
|
modifier: Modifier = Modifier,
|
|
alignment: Alignment = Alignment.Center,
|
|
contentScale: ContentScale = ContentScale.Fit,
|
|
alpha: Float = DefaultAlpha,
|
|
colorFilter: ColorFilter? = null,
|
|
filterQuality: FilterQuality = DrawScope.DefaultFilterQuality
|
|
) {
|
|
val context = LocalContext.current
|
|
val painter = rememberAsyncImagePainter(model = Robohash.imageRequest(context, robot))
|
|
|
|
AsyncImage(
|
|
model = model,
|
|
contentDescription = contentDescription,
|
|
modifier = modifier,
|
|
placeholder = painter,
|
|
fallback = painter,
|
|
error = painter,
|
|
alignment = alignment,
|
|
contentScale = contentScale,
|
|
alpha = alpha,
|
|
colorFilter = colorFilter,
|
|
filterQuality = filterQuality
|
|
)
|
|
}
|
|
|
|
@Composable
|
|
fun RobohashAsyncImageProxy(
|
|
robot: String,
|
|
model: ResizeImage,
|
|
contentDescription: String?,
|
|
modifier: Modifier = Modifier,
|
|
alignment: Alignment = Alignment.Center,
|
|
contentScale: ContentScale = ContentScale.Fit,
|
|
alpha: Float = DefaultAlpha,
|
|
colorFilter: ColorFilter? = null,
|
|
filterQuality: FilterQuality = DrawScope.DefaultFilterQuality
|
|
) {
|
|
if (model.url == null) {
|
|
RobohashAsyncImage(
|
|
robot = robot,
|
|
contentDescription = contentDescription,
|
|
modifier = modifier,
|
|
alignment = alignment,
|
|
contentScale = contentScale,
|
|
alpha = alpha,
|
|
colorFilter = colorFilter,
|
|
filterQuality = filterQuality
|
|
)
|
|
} else {
|
|
RobohashFallbackAsyncImage(
|
|
robot = robot,
|
|
model = model.proxyUrl(),
|
|
contentDescription = contentDescription,
|
|
modifier = modifier,
|
|
alignment = alignment,
|
|
contentScale = contentScale,
|
|
alpha = alpha,
|
|
colorFilter = colorFilter,
|
|
filterQuality = filterQuality
|
|
)
|
|
}
|
|
}
|