Skip to content

Commit

Permalink
feat(chat): reverse reply gesture direction
Browse files Browse the repository at this point in the history
  • Loading branch information
outadoc committed Oct 22, 2024
1 parent f108c4d commit 62ecec4
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,10 @@ internal fun ChatList(

SwipeToReply(
modifier = Modifier.animateItem(),
onDismiss = { onReplyToMessage(item) },
onDismiss = {
haptic.performHapticFeedback(HapticFeedbackType.LongPress)
onReplyToMessage(item)
},
enabled = canBeRepliedTo,
) {
ChatMessage(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.scale
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
import androidx.compose.ui.platform.LocalHapticFeedback
Expand All @@ -30,21 +31,22 @@ internal fun SwipeToReply(
onDismiss: () -> Unit,
content: @Composable () -> Unit,
) {
val direction: SwipeToDismissBoxValue = SwipeToDismissBoxValue.EndToStart
val dismissState: SwipeToDismissBoxState =
rememberSwipeToDismissBoxState(
confirmValueChange = { value ->
if (value == SwipeToDismissBoxValue.StartToEnd) {
if (value == direction) {
onDismiss()
}
value != SwipeToDismissBoxValue.StartToEnd
value != direction
},
)

SwipeToDismissBox(
modifier = modifier,
state = dismissState,
enableDismissFromStartToEnd = enabled,
enableDismissFromEndToStart = false,
enableDismissFromStartToEnd = false,
enableDismissFromEndToStart = enabled,
backgroundContent = {
val scale by animateFloatAsState(
when (dismissState.targetValue) {
Expand All @@ -56,28 +58,30 @@ internal fun SwipeToReply(

val haptic = LocalHapticFeedback.current
LaunchedEffect(dismissState.targetValue) {
if (dismissState.targetValue == SwipeToDismissBoxValue.StartToEnd) {
if (dismissState.targetValue == direction) {
haptic.performHapticFeedback(HapticFeedbackType.LongPress)
}
}

Box(
Modifier
.fillMaxSize()
.padding(start = 8.dp),
contentAlignment = Alignment.CenterStart,
.padding(end = 8.dp),
contentAlignment = Alignment.CenterEnd,
) {
Icon(
Icons.AutoMirrored.Filled.Reply,
contentDescription = "Reply",
modifier = Modifier.scale(scale),
modifier = Modifier
.scale(scale)
.alpha(scale),
)
}
},
content = {
val elevation by animateDpAsState(
targetValue = when (dismissState.targetValue) {
SwipeToDismissBoxValue.StartToEnd -> 1.dp
direction -> 2.dp
else -> 0.dp
},
label = "Reply item elevation",
Expand Down

0 comments on commit 62ecec4

Please sign in to comment.