mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	Simplify chapter item composable a bit
Closes #9442 because I just removed the rounding entirely...
This commit is contained in:
		| @@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.fillMaxSize | ||||
| import androidx.compose.foundation.layout.height | ||||
| import androidx.compose.foundation.layout.padding | ||||
| import androidx.compose.foundation.layout.sizeIn | ||||
| import androidx.compose.foundation.shape.RoundedCornerShape | ||||
| import androidx.compose.material.DismissDirection | ||||
| import androidx.compose.material.DismissValue | ||||
| import androidx.compose.material.SwipeToDismiss | ||||
| @@ -26,8 +25,6 @@ import androidx.compose.material.icons.filled.FileDownloadOff | ||||
| import androidx.compose.material.icons.filled.Visibility | ||||
| import androidx.compose.material.icons.filled.VisibilityOff | ||||
| import androidx.compose.material.rememberDismissState | ||||
| import androidx.compose.material3.Card | ||||
| import androidx.compose.material3.CardDefaults | ||||
| import androidx.compose.material3.Icon | ||||
| import androidx.compose.material3.LocalContentColor | ||||
| import androidx.compose.material3.MaterialTheme | ||||
| @@ -55,7 +52,6 @@ import tachiyomi.domain.library.service.LibraryPreferences | ||||
| import tachiyomi.presentation.core.components.material.ReadItemAlpha | ||||
| import tachiyomi.presentation.core.components.material.SecondaryItemAlpha | ||||
| import tachiyomi.presentation.core.util.selectedBackground | ||||
| import kotlin.math.min | ||||
|  | ||||
| @Composable | ||||
| fun MangaChapterListItem( | ||||
| @@ -102,6 +98,15 @@ fun MangaChapterListItem( | ||||
|             lastDismissDirection = null | ||||
|         }, | ||||
|     ) | ||||
|     val dismissContentAlpha = if (lastDismissDirection != null) animateDismissContentAlpha else 1f | ||||
|     val backgroundColor = if (chapterSwipeEndEnabled && (dismissState.dismissDirection == DismissDirection.StartToEnd || lastDismissDirection == DismissDirection.StartToEnd)) { | ||||
|         MaterialTheme.colorScheme.primary | ||||
|     } else if (chapterSwipeStartEnabled && (dismissState.dismissDirection == DismissDirection.EndToStart || lastDismissDirection == DismissDirection.EndToStart)) { | ||||
|         MaterialTheme.colorScheme.primary | ||||
|     } else { | ||||
|         Color.Unspecified | ||||
|     } | ||||
|  | ||||
|     LaunchedEffect(dismissState.currentValue) { | ||||
|         when (dismissState.currentValue) { | ||||
|             DismissValue.DismissedToEnd -> { | ||||
| @@ -123,17 +128,11 @@ fun MangaChapterListItem( | ||||
|             DismissValue.Default -> { } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     SwipeToDismiss( | ||||
|         state = dismissState, | ||||
|         directions = dismissDirections, | ||||
|         background = { | ||||
|             val backgroundColor = if (chapterSwipeEndEnabled && (dismissState.dismissDirection == DismissDirection.StartToEnd || lastDismissDirection == DismissDirection.StartToEnd)) { | ||||
|                 MaterialTheme.colorScheme.primary | ||||
|             } else if (chapterSwipeStartEnabled && (dismissState.dismissDirection == DismissDirection.EndToStart || lastDismissDirection == DismissDirection.EndToStart)) { | ||||
|                 MaterialTheme.colorScheme.primary | ||||
|             } else { | ||||
|                 Color.Unspecified | ||||
|             } | ||||
|             Box( | ||||
|                 modifier = Modifier | ||||
|                     .fillMaxSize() | ||||
| @@ -171,119 +170,100 @@ fun MangaChapterListItem( | ||||
|             } | ||||
|         }, | ||||
|         dismissContent = { | ||||
|             val animateCornerRatio = if (dismissState.offset.value != 0f) { | ||||
|                 min( | ||||
|                     dismissState.progress.fraction / .075f, | ||||
|                     1f, | ||||
|                 ) | ||||
|             } else { | ||||
|                 0f | ||||
|             } | ||||
|             val animateCornerShape = (8f * animateCornerRatio).dp | ||||
|             val dismissContentAlpha = | ||||
|                 if (lastDismissDirection != null) animateDismissContentAlpha else 1f | ||||
|             Card( | ||||
|                 modifier = modifier, | ||||
|                 colors = CardDefaults.elevatedCardColors( | ||||
|                     containerColor = Color.Transparent, | ||||
|                 ), | ||||
|                 shape = RoundedCornerShape(animateCornerShape), | ||||
|             Row( | ||||
|                 modifier = modifier | ||||
|                     .background( | ||||
|                         MaterialTheme.colorScheme.background.copy(dismissContentAlpha), | ||||
|                     ) | ||||
|                     .selectedBackground(selected) | ||||
|                     .alpha(dismissContentAlpha) | ||||
|                     .combinedClickable( | ||||
|                         onClick = onClick, | ||||
|                         onLongClick = onLongClick, | ||||
|                     ) | ||||
|                     .padding(start = 16.dp, top = 12.dp, end = 8.dp, bottom = 12.dp), | ||||
|             ) { | ||||
|                 Row( | ||||
|                     modifier = Modifier | ||||
|                         .background( | ||||
|                             MaterialTheme.colorScheme.background.copy(dismissContentAlpha), | ||||
|                         ) | ||||
|                         .selectedBackground(selected) | ||||
|                         .alpha(dismissContentAlpha) | ||||
|                         .combinedClickable( | ||||
|                             onClick = onClick, | ||||
|                             onLongClick = onLongClick, | ||||
|                         ) | ||||
|                         .padding(start = 16.dp, top = 12.dp, end = 8.dp, bottom = 12.dp), | ||||
|                 Column( | ||||
|                     modifier = Modifier.weight(1f), | ||||
|                     verticalArrangement = Arrangement.spacedBy(6.dp), | ||||
|                 ) { | ||||
|                     Column( | ||||
|                         modifier = Modifier.weight(1f), | ||||
|                         verticalArrangement = Arrangement.spacedBy(6.dp), | ||||
|                     Row( | ||||
|                         horizontalArrangement = Arrangement.spacedBy(2.dp), | ||||
|                         verticalAlignment = Alignment.CenterVertically, | ||||
|                     ) { | ||||
|                         Row( | ||||
|                             horizontalArrangement = Arrangement.spacedBy(2.dp), | ||||
|                             verticalAlignment = Alignment.CenterVertically, | ||||
|                         ) { | ||||
|                             var textHeight by remember { mutableStateOf(0) } | ||||
|                             if (!read) { | ||||
|                                 Icon( | ||||
|                                     imageVector = Icons.Filled.Circle, | ||||
|                                     contentDescription = stringResource(R.string.unread), | ||||
|                                     modifier = Modifier | ||||
|                                         .height(8.dp) | ||||
|                                         .padding(end = 4.dp), | ||||
|                                     tint = MaterialTheme.colorScheme.primary, | ||||
|                                 ) | ||||
|                             } | ||||
|                             if (bookmark) { | ||||
|                                 Icon( | ||||
|                                     imageVector = Icons.Filled.Bookmark, | ||||
|                                     contentDescription = stringResource(R.string.action_filter_bookmarked), | ||||
|                                     modifier = Modifier | ||||
|                                         .sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }), | ||||
|                                     tint = MaterialTheme.colorScheme.primary, | ||||
|                                 ) | ||||
|                             } | ||||
|                             Text( | ||||
|                                 text = title, | ||||
|                                 style = MaterialTheme.typography.bodyMedium, | ||||
|                                 color = LocalContentColor.current.copy(alpha = textAlpha), | ||||
|                                 maxLines = 1, | ||||
|                                 overflow = TextOverflow.Ellipsis, | ||||
|                                 onTextLayout = { textHeight = it.size.height }, | ||||
|                         var textHeight by remember { mutableStateOf(0) } | ||||
|                         if (!read) { | ||||
|                             Icon( | ||||
|                                 imageVector = Icons.Filled.Circle, | ||||
|                                 contentDescription = stringResource(R.string.unread), | ||||
|                                 modifier = Modifier | ||||
|                                     .height(8.dp) | ||||
|                                     .padding(end = 4.dp), | ||||
|                                 tint = MaterialTheme.colorScheme.primary, | ||||
|                             ) | ||||
|                         } | ||||
|                         if (bookmark) { | ||||
|                             Icon( | ||||
|                                 imageVector = Icons.Filled.Bookmark, | ||||
|                                 contentDescription = stringResource(R.string.action_filter_bookmarked), | ||||
|                                 modifier = Modifier | ||||
|                                     .sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }), | ||||
|                                 tint = MaterialTheme.colorScheme.primary, | ||||
|                             ) | ||||
|                         } | ||||
|                         Text( | ||||
|                             text = title, | ||||
|                             style = MaterialTheme.typography.bodyMedium, | ||||
|                             color = LocalContentColor.current.copy(alpha = textAlpha), | ||||
|                             maxLines = 1, | ||||
|                             overflow = TextOverflow.Ellipsis, | ||||
|                             onTextLayout = { textHeight = it.size.height }, | ||||
|                         ) | ||||
|                     } | ||||
|  | ||||
|                         Row { | ||||
|                             ProvideTextStyle( | ||||
|                                 value = MaterialTheme.typography.bodyMedium.copy( | ||||
|                                     fontSize = 12.sp, | ||||
|                                     color = LocalContentColor.current.copy(alpha = textSubtitleAlpha), | ||||
|                                 ), | ||||
|                             ) { | ||||
|                                 if (date != null) { | ||||
|                                     Text( | ||||
|                                         text = date, | ||||
|                                         maxLines = 1, | ||||
|                                         overflow = TextOverflow.Ellipsis, | ||||
|                                     ) | ||||
|                                     if (readProgress != null || scanlator != null) DotSeparatorText() | ||||
|                                 } | ||||
|                                 if (readProgress != null) { | ||||
|                                     Text( | ||||
|                                         text = readProgress, | ||||
|                                         maxLines = 1, | ||||
|                                         overflow = TextOverflow.Ellipsis, | ||||
|                                         modifier = Modifier.alpha(ReadItemAlpha), | ||||
|                                     ) | ||||
|                                     if (scanlator != null) DotSeparatorText() | ||||
|                                 } | ||||
|                                 if (scanlator != null) { | ||||
|                                     Text( | ||||
|                                         text = scanlator, | ||||
|                                         maxLines = 1, | ||||
|                                         overflow = TextOverflow.Ellipsis, | ||||
|                                     ) | ||||
|                                 } | ||||
|                     Row { | ||||
|                         ProvideTextStyle( | ||||
|                             value = MaterialTheme.typography.bodyMedium.copy( | ||||
|                                 fontSize = 12.sp, | ||||
|                                 color = LocalContentColor.current.copy(alpha = textSubtitleAlpha), | ||||
|                             ), | ||||
|                         ) { | ||||
|                             if (date != null) { | ||||
|                                 Text( | ||||
|                                     text = date, | ||||
|                                     maxLines = 1, | ||||
|                                     overflow = TextOverflow.Ellipsis, | ||||
|                                 ) | ||||
|                                 if (readProgress != null || scanlator != null) DotSeparatorText() | ||||
|                             } | ||||
|                             if (readProgress != null) { | ||||
|                                 Text( | ||||
|                                     text = readProgress, | ||||
|                                     maxLines = 1, | ||||
|                                     overflow = TextOverflow.Ellipsis, | ||||
|                                     modifier = Modifier.alpha(ReadItemAlpha), | ||||
|                                 ) | ||||
|                                 if (scanlator != null) DotSeparatorText() | ||||
|                             } | ||||
|                             if (scanlator != null) { | ||||
|                                 Text( | ||||
|                                     text = scanlator, | ||||
|                                     maxLines = 1, | ||||
|                                     overflow = TextOverflow.Ellipsis, | ||||
|                                 ) | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                     if (onDownloadClick != null) { | ||||
|                         ChapterDownloadIndicator( | ||||
|                             enabled = downloadIndicatorEnabled, | ||||
|                             modifier = Modifier.padding(start = 4.dp), | ||||
|                             downloadStateProvider = downloadStateProvider, | ||||
|                             downloadProgressProvider = downloadProgressProvider, | ||||
|                             onClick = onDownloadClick, | ||||
|                         ) | ||||
|                     } | ||||
|                 if (onDownloadClick != null) { | ||||
|                     ChapterDownloadIndicator( | ||||
|                         enabled = downloadIndicatorEnabled, | ||||
|                         modifier = Modifier.padding(start = 4.dp), | ||||
|                         downloadStateProvider = downloadStateProvider, | ||||
|                         downloadProgressProvider = downloadProgressProvider, | ||||
|                         onClick = onDownloadClick, | ||||
|                     ) | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user