From d862d83511d6bc7dee53609bcac77c20b01bc795 Mon Sep 17 00:00:00 2001 From: Eshlender <35057681+e-shl@users.noreply.github.com> Date: Wed, 1 Nov 2023 18:01:38 +0500 Subject: [PATCH] Combining manga information into a function (#10093) * Combining manga information into a function * clean space * indexes * context * clean * textAlign for Tablet Mode --- .../manga/components/MangaInfoHeader.kt | 360 +++++++----------- 1 file changed, 148 insertions(+), 212 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt index a88aa7a7e..570812442 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaInfoHeader.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.manga.components -import android.content.Context import androidx.compose.animation.animateContentSize import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.graphics.res.animatedVectorResource @@ -43,6 +42,7 @@ import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalMinimumInteractiveComponentEnforcement +import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.SuggestionChip @@ -134,7 +134,6 @@ fun MangaInfoBox( coverDataProvider = coverDataProvider, onCoverClick = onCoverClick, title = title, - context = LocalContext.current, doSearch = doSearch, author = author, artist = artist, @@ -148,7 +147,6 @@ fun MangaInfoBox( coverDataProvider = coverDataProvider, onCoverClick = onCoverClick, title = title, - context = LocalContext.current, doSearch = doSearch, author = author, artist = artist, @@ -323,7 +321,6 @@ private fun MangaAndSourceTitlesLarge( coverDataProvider: () -> Manga, onCoverClick: () -> Unit, title: String, - context: Context, doSearch: (query: String, global: Boolean) -> Unit, author: String?, artist: String?, @@ -344,102 +341,16 @@ private fun MangaAndSourceTitlesLarge( onClick = onCoverClick, ) Spacer(modifier = Modifier.height(16.dp)) - Text( - text = title.ifBlank { stringResource(R.string.unknown_title) }, - style = MaterialTheme.typography.titleLarge, - modifier = Modifier.clickableNoIndication( - onLongClick = { if (title.isNotBlank()) context.copyToClipboard(title, title) }, - onClick = { if (title.isNotBlank()) doSearch(title, true) }, - ), + MangaContentInfo( + title = title, + doSearch = doSearch, + author = author, + artist = artist, + status = status, + sourceName = sourceName, + isStubSource = isStubSource, textAlign = TextAlign.Center, ) - Spacer(modifier = Modifier.height(2.dp)) - Text( - text = author?.takeIf { it.isNotBlank() } ?: stringResource(R.string.unknown_author), - style = MaterialTheme.typography.titleSmall, - modifier = Modifier - .secondaryItemAlpha() - .padding(top = 2.dp) - .clickableNoIndication( - onLongClick = { - if (!author.isNullOrBlank()) { - context.copyToClipboard( - author, - author, - ) - } - }, - onClick = { if (!author.isNullOrBlank()) doSearch(author, true) }, - ), - textAlign = TextAlign.Center, - ) - if (!artist.isNullOrBlank() && author != artist) { - Text( - text = artist, - style = MaterialTheme.typography.titleSmall, - modifier = Modifier - .secondaryItemAlpha() - .padding(top = 2.dp) - .clickableNoIndication( - onLongClick = { context.copyToClipboard(artist, artist) }, - onClick = { doSearch(artist, true) }, - ), - textAlign = TextAlign.Center, - ) - } - Spacer(modifier = Modifier.height(4.dp)) - Row( - modifier = Modifier.secondaryItemAlpha(), - verticalAlignment = Alignment.CenterVertically, - ) { - Icon( - imageVector = when (status) { - SManga.ONGOING.toLong() -> Icons.Outlined.Schedule - SManga.COMPLETED.toLong() -> Icons.Outlined.DoneAll - SManga.LICENSED.toLong() -> Icons.Outlined.AttachMoney - SManga.PUBLISHING_FINISHED.toLong() -> Icons.Outlined.Done - SManga.CANCELLED.toLong() -> Icons.Outlined.Close - SManga.ON_HIATUS.toLong() -> Icons.Outlined.Pause - else -> Icons.Outlined.Block - }, - contentDescription = null, - modifier = Modifier - .padding(end = 4.dp) - .size(16.dp), - ) - ProvideTextStyle(MaterialTheme.typography.bodyMedium) { - Text( - text = when (status) { - SManga.ONGOING.toLong() -> stringResource(R.string.ongoing) - SManga.COMPLETED.toLong() -> stringResource(R.string.completed) - SManga.LICENSED.toLong() -> stringResource(R.string.licensed) - SManga.PUBLISHING_FINISHED.toLong() -> stringResource(R.string.publishing_finished) - SManga.CANCELLED.toLong() -> stringResource(R.string.cancelled) - SManga.ON_HIATUS.toLong() -> stringResource(R.string.on_hiatus) - else -> stringResource(R.string.unknown) - }, - overflow = TextOverflow.Ellipsis, - maxLines = 1, - ) - DotSeparatorText() - if (isStubSource) { - Icon( - imageVector = Icons.Filled.Warning, - contentDescription = null, - modifier = Modifier - .padding(end = 4.dp) - .size(16.dp), - tint = MaterialTheme.colorScheme.error, - ) - } - Text( - text = sourceName, - modifier = Modifier.clickableNoIndication { doSearch(sourceName, false) }, - overflow = TextOverflow.Ellipsis, - maxLines = 1, - ) - } - } } } @@ -449,7 +360,6 @@ private fun MangaAndSourceTitlesSmall( coverDataProvider: () -> Manga, onCoverClick: () -> Unit, title: String, - context: Context, doSearch: (query: String, global: Boolean) -> Unit, author: String?, artist: String?, @@ -475,135 +385,161 @@ private fun MangaAndSourceTitlesSmall( Column( verticalArrangement = Arrangement.spacedBy(2.dp), ) { - Text( - text = title.ifBlank { stringResource(R.string.unknown_title) }, - style = MaterialTheme.typography.titleLarge, - modifier = Modifier.clickableNoIndication( + MangaContentInfo( + title = title, + doSearch = doSearch, + author = author, + artist = artist, + status = status, + sourceName = sourceName, + isStubSource = isStubSource, + ) + } + } +} + +@Composable +private fun MangaContentInfo( + title: String, + textAlign: TextAlign? = LocalTextStyle.current.textAlign, + doSearch: (query: String, global: Boolean) -> Unit, + author: String?, + artist: String?, + status: Long, + sourceName: String, + isStubSource: Boolean, +) { + val context = LocalContext.current + Text( + text = title.ifBlank { stringResource(R.string.unknown_title) }, + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.clickableNoIndication( + onLongClick = { + if (title.isNotBlank()) { + context.copyToClipboard( + title, + title, + ) + } + }, + onClick = { if (title.isNotBlank()) doSearch(title, true) }, + ), + textAlign = textAlign, + ) + + Spacer(modifier = Modifier.height(2.dp)) + + Row( + modifier = Modifier.secondaryItemAlpha(), + horizontalArrangement = Arrangement.spacedBy(4.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + imageVector = Icons.Filled.PersonOutline, + contentDescription = null, + modifier = Modifier.size(16.dp), + ) + Text( + text = author?.takeIf { it.isNotBlank() } + ?: stringResource(R.string.unknown_author), + style = MaterialTheme.typography.titleSmall, + modifier = Modifier + .clickableNoIndication( onLongClick = { - if (title.isNotBlank()) { + if (!author.isNullOrBlank()) { context.copyToClipboard( - title, - title, + author, + author, ) } }, - onClick = { if (title.isNotBlank()) doSearch(title, true) }, + onClick = { if (!author.isNullOrBlank()) doSearch(author, true) }, ), + textAlign = textAlign, + ) + } + + if (!artist.isNullOrBlank() && author != artist) { + Row( + modifier = Modifier.secondaryItemAlpha(), + horizontalArrangement = Arrangement.spacedBy(4.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + imageVector = Icons.Filled.Brush, + contentDescription = null, + modifier = Modifier.size(16.dp), ) + Text( + text = artist, + style = MaterialTheme.typography.titleSmall, + modifier = Modifier + .clickableNoIndication( + onLongClick = { context.copyToClipboard(artist, artist) }, + onClick = { doSearch(artist, true) }, + ), + textAlign = textAlign, + ) + } + } - Spacer(modifier = Modifier.height(2.dp)) + Spacer(modifier = Modifier.height(2.dp)) - Row( - modifier = Modifier.secondaryItemAlpha(), - horizontalArrangement = Arrangement.spacedBy(4.dp), - verticalAlignment = Alignment.CenterVertically, - ) { + Row( + modifier = Modifier.secondaryItemAlpha(), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + imageVector = when (status) { + SManga.ONGOING.toLong() -> Icons.Outlined.Schedule + SManga.COMPLETED.toLong() -> Icons.Outlined.DoneAll + SManga.LICENSED.toLong() -> Icons.Outlined.AttachMoney + SManga.PUBLISHING_FINISHED.toLong() -> Icons.Outlined.Done + SManga.CANCELLED.toLong() -> Icons.Outlined.Close + SManga.ON_HIATUS.toLong() -> Icons.Outlined.Pause + else -> Icons.Outlined.Block + }, + contentDescription = null, + modifier = Modifier + .padding(end = 4.dp) + .size(16.dp), + ) + ProvideTextStyle(MaterialTheme.typography.bodyMedium) { + Text( + text = when (status) { + SManga.ONGOING.toLong() -> stringResource(R.string.ongoing) + SManga.COMPLETED.toLong() -> stringResource(R.string.completed) + SManga.LICENSED.toLong() -> stringResource(R.string.licensed) + SManga.PUBLISHING_FINISHED.toLong() -> stringResource(R.string.publishing_finished) + SManga.CANCELLED.toLong() -> stringResource(R.string.cancelled) + SManga.ON_HIATUS.toLong() -> stringResource(R.string.on_hiatus) + else -> stringResource(R.string.unknown) + }, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + DotSeparatorText() + if (isStubSource) { Icon( - imageVector = Icons.Filled.PersonOutline, - contentDescription = null, - modifier = Modifier.size(16.dp), - ) - Text( - text = author?.takeIf { it.isNotBlank() } - ?: stringResource(R.string.unknown_author), - style = MaterialTheme.typography.titleSmall, - modifier = Modifier - .clickableNoIndication( - onLongClick = { - if (!author.isNullOrBlank()) { - context.copyToClipboard( - author, - author, - ) - } - }, - onClick = { if (!author.isNullOrBlank()) doSearch(author, true) }, - ), - ) - } - - if (!artist.isNullOrBlank() && author != artist) { - Row( - modifier = Modifier.secondaryItemAlpha(), - horizontalArrangement = Arrangement.spacedBy(4.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - Icon( - imageVector = Icons.Filled.Brush, - contentDescription = null, - modifier = Modifier.size(16.dp), - ) - Text( - text = artist, - style = MaterialTheme.typography.titleSmall, - modifier = Modifier - .clickableNoIndication( - onLongClick = { context.copyToClipboard(artist, artist) }, - onClick = { doSearch(artist, true) }, - ), - ) - } - } - - Spacer(modifier = Modifier.height(2.dp)) - - Row( - modifier = Modifier.secondaryItemAlpha(), - verticalAlignment = Alignment.CenterVertically, - ) { - Icon( - imageVector = when (status) { - SManga.ONGOING.toLong() -> Icons.Outlined.Schedule - SManga.COMPLETED.toLong() -> Icons.Outlined.DoneAll - SManga.LICENSED.toLong() -> Icons.Outlined.AttachMoney - SManga.PUBLISHING_FINISHED.toLong() -> Icons.Outlined.Done - SManga.CANCELLED.toLong() -> Icons.Outlined.Close - SManga.ON_HIATUS.toLong() -> Icons.Outlined.Pause - else -> Icons.Outlined.Block - }, + imageVector = Icons.Filled.Warning, contentDescription = null, modifier = Modifier .padding(end = 4.dp) .size(16.dp), + tint = MaterialTheme.colorScheme.error, ) - ProvideTextStyle(MaterialTheme.typography.bodyMedium) { - Text( - text = when (status) { - SManga.ONGOING.toLong() -> stringResource(R.string.ongoing) - SManga.COMPLETED.toLong() -> stringResource(R.string.completed) - SManga.LICENSED.toLong() -> stringResource(R.string.licensed) - SManga.PUBLISHING_FINISHED.toLong() -> stringResource(R.string.publishing_finished) - SManga.CANCELLED.toLong() -> stringResource(R.string.cancelled) - SManga.ON_HIATUS.toLong() -> stringResource(R.string.on_hiatus) - else -> stringResource(R.string.unknown) - }, - overflow = TextOverflow.Ellipsis, - maxLines = 1, - ) - DotSeparatorText() - if (isStubSource) { - Icon( - imageVector = Icons.Filled.Warning, - contentDescription = null, - modifier = Modifier - .padding(end = 4.dp) - .size(16.dp), - tint = MaterialTheme.colorScheme.error, - ) - } - Text( - text = sourceName, - modifier = Modifier.clickableNoIndication { - doSearch( - sourceName, - false, - ) - }, - overflow = TextOverflow.Ellipsis, - maxLines = 1, - ) - } } + Text( + text = sourceName, + modifier = Modifier.clickableNoIndication { + doSearch( + sourceName, + false, + ) + }, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) } } }