mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Update dependency me.saket.swipe:swipe to v1.3.0 (#343)
* Update dependency me.saket.swipe:swipe to v1.3.0 * Update MangaChapterListItem.kt --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Co-authored-by: Ivan Iskandar <12537387+ivaniskandar@users.noreply.github.com>
This commit is contained in:
		@@ -24,36 +24,27 @@ import androidx.compose.material3.ProvideTextStyle
 | 
			
		||||
import androidx.compose.material3.Text
 | 
			
		||||
import androidx.compose.material3.contentColorFor
 | 
			
		||||
import androidx.compose.runtime.Composable
 | 
			
		||||
import androidx.compose.runtime.CompositionLocalProvider
 | 
			
		||||
import androidx.compose.runtime.LaunchedEffect
 | 
			
		||||
import androidx.compose.runtime.getValue
 | 
			
		||||
import androidx.compose.runtime.mutableIntStateOf
 | 
			
		||||
import androidx.compose.runtime.remember
 | 
			
		||||
import androidx.compose.runtime.setValue
 | 
			
		||||
import androidx.compose.runtime.snapshotFlow
 | 
			
		||||
import androidx.compose.ui.Alignment
 | 
			
		||||
import androidx.compose.ui.Modifier
 | 
			
		||||
import androidx.compose.ui.draw.clipToBounds
 | 
			
		||||
import androidx.compose.ui.graphics.Color
 | 
			
		||||
import androidx.compose.ui.graphics.vector.ImageVector
 | 
			
		||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
 | 
			
		||||
import androidx.compose.ui.platform.LocalDensity
 | 
			
		||||
import androidx.compose.ui.platform.LocalHapticFeedback
 | 
			
		||||
import androidx.compose.ui.platform.LocalViewConfiguration
 | 
			
		||||
import androidx.compose.ui.platform.ViewConfiguration
 | 
			
		||||
import androidx.compose.ui.text.style.TextOverflow
 | 
			
		||||
import androidx.compose.ui.unit.dp
 | 
			
		||||
import androidx.compose.ui.unit.sp
 | 
			
		||||
import eu.kanade.tachiyomi.data.download.model.Download
 | 
			
		||||
import me.saket.swipe.SwipeableActionsBox
 | 
			
		||||
import me.saket.swipe.rememberSwipeableActionsState
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences
 | 
			
		||||
import tachiyomi.i18n.MR
 | 
			
		||||
import tachiyomi.presentation.core.components.material.ReadItemAlpha
 | 
			
		||||
import tachiyomi.presentation.core.components.material.SecondaryItemAlpha
 | 
			
		||||
import tachiyomi.presentation.core.i18n.stringResource
 | 
			
		||||
import tachiyomi.presentation.core.util.selectedBackground
 | 
			
		||||
import kotlin.math.absoluteValue
 | 
			
		||||
 | 
			
		||||
@Composable
 | 
			
		||||
fun MangaChapterListItem(
 | 
			
		||||
@@ -75,142 +66,122 @@ fun MangaChapterListItem(
 | 
			
		||||
    onChapterSwipe: (LibraryPreferences.ChapterSwipeAction) -> Unit,
 | 
			
		||||
    modifier: Modifier = Modifier,
 | 
			
		||||
) {
 | 
			
		||||
    val haptic = LocalHapticFeedback.current
 | 
			
		||||
    val density = LocalDensity.current
 | 
			
		||||
 | 
			
		||||
    val textAlpha = if (read) ReadItemAlpha else 1f
 | 
			
		||||
    val textSubtitleAlpha = if (read) ReadItemAlpha else SecondaryItemAlpha
 | 
			
		||||
 | 
			
		||||
    // Increase touch slop of swipe action to reduce accidental trigger
 | 
			
		||||
    val configuration = LocalViewConfiguration.current
 | 
			
		||||
    CompositionLocalProvider(
 | 
			
		||||
        LocalViewConfiguration provides object : ViewConfiguration by configuration {
 | 
			
		||||
            override val touchSlop: Float = configuration.touchSlop * 3f
 | 
			
		||||
        },
 | 
			
		||||
    val start = getSwipeAction(
 | 
			
		||||
        action = chapterSwipeStartAction,
 | 
			
		||||
        read = read,
 | 
			
		||||
        bookmark = bookmark,
 | 
			
		||||
        downloadState = downloadStateProvider(),
 | 
			
		||||
        background = MaterialTheme.colorScheme.primaryContainer,
 | 
			
		||||
        onSwipe = { onChapterSwipe(chapterSwipeStartAction) },
 | 
			
		||||
    )
 | 
			
		||||
    val end = getSwipeAction(
 | 
			
		||||
        action = chapterSwipeEndAction,
 | 
			
		||||
        read = read,
 | 
			
		||||
        bookmark = bookmark,
 | 
			
		||||
        downloadState = downloadStateProvider(),
 | 
			
		||||
        background = MaterialTheme.colorScheme.primaryContainer,
 | 
			
		||||
        onSwipe = { onChapterSwipe(chapterSwipeEndAction) },
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    SwipeableActionsBox(
 | 
			
		||||
        modifier = Modifier.clipToBounds(),
 | 
			
		||||
        startActions = listOfNotNull(start),
 | 
			
		||||
        endActions = listOfNotNull(end),
 | 
			
		||||
        swipeThreshold = swipeActionThreshold,
 | 
			
		||||
        backgroundUntilSwipeThreshold = MaterialTheme.colorScheme.surfaceContainerLowest,
 | 
			
		||||
    ) {
 | 
			
		||||
        val start = getSwipeAction(
 | 
			
		||||
            action = chapterSwipeStartAction,
 | 
			
		||||
            read = read,
 | 
			
		||||
            bookmark = bookmark,
 | 
			
		||||
            downloadState = downloadStateProvider(),
 | 
			
		||||
            background = MaterialTheme.colorScheme.primaryContainer,
 | 
			
		||||
            onSwipe = { onChapterSwipe(chapterSwipeStartAction) },
 | 
			
		||||
        )
 | 
			
		||||
        val end = getSwipeAction(
 | 
			
		||||
            action = chapterSwipeEndAction,
 | 
			
		||||
            read = read,
 | 
			
		||||
            bookmark = bookmark,
 | 
			
		||||
            downloadState = downloadStateProvider(),
 | 
			
		||||
            background = MaterialTheme.colorScheme.primaryContainer,
 | 
			
		||||
            onSwipe = { onChapterSwipe(chapterSwipeEndAction) },
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        val swipeableActionsState = rememberSwipeableActionsState()
 | 
			
		||||
        LaunchedEffect(Unit) {
 | 
			
		||||
            // Haptic effect when swipe over threshold
 | 
			
		||||
            val swipeActionThresholdPx = with(density) { swipeActionThreshold.toPx() }
 | 
			
		||||
            snapshotFlow { swipeableActionsState.offset.value.absoluteValue > swipeActionThresholdPx }
 | 
			
		||||
                .collect { if (it) haptic.performHapticFeedback(HapticFeedbackType.LongPress) }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SwipeableActionsBox(
 | 
			
		||||
            modifier = Modifier.clipToBounds(),
 | 
			
		||||
            state = swipeableActionsState,
 | 
			
		||||
            startActions = listOfNotNull(start),
 | 
			
		||||
            endActions = listOfNotNull(end),
 | 
			
		||||
            swipeThreshold = swipeActionThreshold,
 | 
			
		||||
            backgroundUntilSwipeThreshold = MaterialTheme.colorScheme.surfaceContainerLowest,
 | 
			
		||||
        Row(
 | 
			
		||||
            modifier = modifier
 | 
			
		||||
                .selectedBackground(selected)
 | 
			
		||||
                .combinedClickable(
 | 
			
		||||
                    onClick = onClick,
 | 
			
		||||
                    onLongClick = onLongClick,
 | 
			
		||||
                )
 | 
			
		||||
                .padding(start = 16.dp, top = 12.dp, end = 8.dp, bottom = 12.dp),
 | 
			
		||||
        ) {
 | 
			
		||||
            Row(
 | 
			
		||||
                modifier = modifier
 | 
			
		||||
                    .selectedBackground(selected)
 | 
			
		||||
                    .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 { mutableIntStateOf(0) }
 | 
			
		||||
                        if (!read) {
 | 
			
		||||
                            Icon(
 | 
			
		||||
                                imageVector = Icons.Filled.Circle,
 | 
			
		||||
                                contentDescription = stringResource(MR.strings.unread),
 | 
			
		||||
                                modifier = Modifier
 | 
			
		||||
                                    .height(8.dp)
 | 
			
		||||
                                    .padding(end = 4.dp),
 | 
			
		||||
                                tint = MaterialTheme.colorScheme.primary,
 | 
			
		||||
                            )
 | 
			
		||||
                        }
 | 
			
		||||
                        if (bookmark) {
 | 
			
		||||
                            Icon(
 | 
			
		||||
                                imageVector = Icons.Filled.Bookmark,
 | 
			
		||||
                                contentDescription = stringResource(MR.strings.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 { mutableIntStateOf(0) }
 | 
			
		||||
                    if (!read) {
 | 
			
		||||
                        Icon(
 | 
			
		||||
                            imageVector = Icons.Filled.Circle,
 | 
			
		||||
                            contentDescription = stringResource(MR.strings.unread),
 | 
			
		||||
                            modifier = Modifier
 | 
			
		||||
                                .height(8.dp)
 | 
			
		||||
                                .padding(end = 4.dp),
 | 
			
		||||
                            tint = MaterialTheme.colorScheme.primary,
 | 
			
		||||
                        )
 | 
			
		||||
                    }
 | 
			
		||||
                    if (bookmark) {
 | 
			
		||||
                        Icon(
 | 
			
		||||
                            imageVector = Icons.Filled.Bookmark,
 | 
			
		||||
                            contentDescription = stringResource(MR.strings.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,
 | 
			
		||||
                                    color = LocalContentColor.current.copy(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,
 | 
			
		||||
                                color = LocalContentColor.current.copy(alpha = ReadItemAlpha),
 | 
			
		||||
                            )
 | 
			
		||||
                            if (scanlator != null) DotSeparatorText()
 | 
			
		||||
                        }
 | 
			
		||||
                        if (scanlator != null) {
 | 
			
		||||
                            Text(
 | 
			
		||||
                                text = scanlator,
 | 
			
		||||
                                maxLines = 1,
 | 
			
		||||
                                overflow = TextOverflow.Ellipsis,
 | 
			
		||||
                            )
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                ChapterDownloadIndicator(
 | 
			
		||||
                    enabled = downloadIndicatorEnabled,
 | 
			
		||||
                    modifier = Modifier.padding(start = 4.dp),
 | 
			
		||||
                    downloadStateProvider = downloadStateProvider,
 | 
			
		||||
                    downloadProgressProvider = downloadProgressProvider,
 | 
			
		||||
                    onClick = { onDownloadClick?.invoke(it) },
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            ChapterDownloadIndicator(
 | 
			
		||||
                enabled = downloadIndicatorEnabled,
 | 
			
		||||
                modifier = Modifier.padding(start = 4.dp),
 | 
			
		||||
                downloadStateProvider = downloadStateProvider,
 | 
			
		||||
                downloadProgressProvider = downloadProgressProvider,
 | 
			
		||||
                onClick = { onDownloadClick?.invoke(it) },
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -64,7 +64,7 @@ directionalviewpager = "com.github.tachiyomiorg:DirectionalViewPager:1.0.0"
 | 
			
		||||
insetter = "dev.chrisbanes.insetter:insetter:0.6.1"
 | 
			
		||||
compose-materialmotion = "io.github.fornewid:material-motion-compose-core:1.2.0"
 | 
			
		||||
 | 
			
		||||
swipe = "me.saket.swipe:swipe:1.2.0"
 | 
			
		||||
swipe = "me.saket.swipe:swipe:1.3.0"
 | 
			
		||||
 | 
			
		||||
moko-core = { module = "dev.icerock.moko:resources", version.ref = "moko" }
 | 
			
		||||
moko-gradle = { module = "dev.icerock.moko:resources-generator", version.ref = "moko" }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user