Migrate Migrate Manga screen to Compose (#7045)

* Migrate Migrate Manga screen to Compose

* Changes from review comments
This commit is contained in:
Andreas
2022-04-30 15:37:10 +02:00
committed by GitHub
parent 6ef6eab994
commit bf6d59cd21
16 changed files with 258 additions and 177 deletions

View File

@@ -0,0 +1,65 @@
package eu.kanade.presentation.manga.components
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import eu.kanade.domain.manga.model.Manga
import eu.kanade.presentation.components.MangaCover
import eu.kanade.presentation.util.horizontalPadding
@Composable
fun BaseMangaListItem(
modifier: Modifier = Modifier,
manga: Manga,
onClickItem: () -> Unit = {},
onClickCover: () -> Unit = onClickItem,
cover: @Composable RowScope.() -> Unit = { defaultCover(manga, onClickCover) },
actions: @Composable RowScope.() -> Unit = {},
content: @Composable RowScope.() -> Unit = { defaultContent(manga) },
) {
Row(
modifier = modifier
.clickable(onClick = onClickItem)
.height(56.dp)
.padding(horizontal = horizontalPadding),
verticalAlignment = Alignment.CenterVertically
) {
cover()
content()
actions()
}
}
private val defaultCover: @Composable RowScope.(Manga, () -> Unit) -> Unit = { manga, onClick ->
MangaCover.Square(
modifier = Modifier
.padding(vertical = 8.dp)
.clickable(onClick = onClick)
.fillMaxHeight(),
data = manga.thumbnailUrl
)
}
private val defaultContent: @Composable RowScope.(Manga) -> Unit = {
Box(modifier = Modifier.weight(1f)) {
Text(
text = it.title,
modifier = Modifier
.padding(start = horizontalPadding),
overflow = TextOverflow.Ellipsis,
maxLines = 1,
style = MaterialTheme.typography.bodyMedium
)
}
}