From 8391a25ef4b8ce495b7cdf28af771f56efd6c0ac Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Thu, 26 Dec 2024 13:19:54 +0700 Subject: [PATCH] refactor: .conditional extension method for Modifier Also slightly adjust cover's shape --- .../component/manga/MangaCover.kt | 23 ++++++++----------- app/src/main/java/yokai/util/Modifier.kt | 11 +++++++++ 2 files changed, 20 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/yokai/util/Modifier.kt diff --git a/app/src/main/java/yokai/presentation/component/manga/MangaCover.kt b/app/src/main/java/yokai/presentation/component/manga/MangaCover.kt index cab7862d53..571826d5e5 100644 --- a/app/src/main/java/yokai/presentation/component/manga/MangaCover.kt +++ b/app/src/main/java/yokai/presentation/component/manga/MangaCover.kt @@ -19,6 +19,7 @@ import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage import coil3.compose.AsyncImagePainter import eu.kanade.tachiyomi.R +import yokai.util.conditional import yokai.util.rememberResourceBitmapPainter @Composable @@ -30,7 +31,7 @@ fun MangaCover( minimumHeight: (() -> Int)? = null, modifier: Modifier = Modifier, contentDescription: String = "", - shape: Shape = MaterialTheme.shapes.extraSmall, + shape: Shape = MaterialTheme.shapes.small, contentScale: () -> ContentScale = { ContentScale.Crop }, onClick: (() -> Unit)? = null, onLoading: ((AsyncImagePainter.State.Loading) -> Unit)? = null, @@ -45,30 +46,24 @@ fun MangaCover( maximumHeightDp = maximumHeight?.let { it().toDp() } ?: Dp.Unspecified } - val ratioModifier = if (adjustViewBounds()) Modifier.aspectRatio(ratio()) else Modifier - AsyncImage( model = data, placeholder = ColorPainter(CoverPlaceholderColor), error = rememberResourceBitmapPainter(id = R.drawable.ic_broken_image_24dp), contentDescription = contentDescription, modifier = modifier - .then(ratioModifier) + .conditional(adjustViewBounds()) { aspectRatio(ratio()) } .clip(shape) .heightIn( min = minimumHeightDp, max = maximumHeightDp, ) - .then( - if (onClick != null) { - Modifier.clickable( - role = Role.Button, - onClick = onClick, - ) - } else { - Modifier - }, - ), + .conditional(onClick != null) { + clickable( + role = Role.Button, + onClick = onClick!!, + ) + }, contentScale = contentScale(), onLoading = onLoading, onError = onError, diff --git a/app/src/main/java/yokai/util/Modifier.kt b/app/src/main/java/yokai/util/Modifier.kt new file mode 100644 index 0000000000..0c5fd8b8f8 --- /dev/null +++ b/app/src/main/java/yokai/util/Modifier.kt @@ -0,0 +1,11 @@ +package yokai.util + +import androidx.compose.ui.Modifier + +fun Modifier.conditional(condition: Boolean, modifier: Modifier.() -> Modifier): Modifier { + return if (condition) { + modifier(this) + } else { + this + } +}