Add a way to hide the Jump to Bottom button for coherent preview

This commit is contained in:
Benoit Marty 2024-01-29 18:20:27 +01:00 committed by Benoit Marty
parent bf84749d19
commit f9dcd00193
2 changed files with 11 additions and 3 deletions

View file

@ -125,6 +125,7 @@ fun MessagesView(
onCreatePollClicked: () -> Unit, onCreatePollClicked: () -> Unit,
onJoinCallClicked: () -> Unit, onJoinCallClicked: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
forceJumpToBottomVisibility: Boolean = false
) { ) {
OnLifecycleEvent { _, event -> OnLifecycleEvent { _, event ->
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvents.LifecycleEvent(event)) state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvents.LifecycleEvent(event))
@ -224,6 +225,7 @@ fun MessagesView(
onSwipeToReply = { targetEvent -> onSwipeToReply = { targetEvent ->
state.eventSink(MessagesEvents.HandleAction(TimelineItemAction.Reply, targetEvent)) state.eventSink(MessagesEvents.HandleAction(TimelineItemAction.Reply, targetEvent))
}, },
forceJumpToBottomVisibility = forceJumpToBottomVisibility,
) )
}, },
snackbarHost = { snackbarHost = {
@ -324,6 +326,7 @@ private fun MessagesViewContent(
onTimestampClicked: (TimelineItem.Event) -> Unit, onTimestampClicked: (TimelineItem.Event) -> Unit,
onSendLocationClicked: () -> Unit, onSendLocationClicked: () -> Unit,
onCreatePollClicked: () -> Unit, onCreatePollClicked: () -> Unit,
forceJumpToBottomVisibility: Boolean,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
onSwipeToReply: (TimelineItem.Event) -> Unit, onSwipeToReply: (TimelineItem.Event) -> Unit,
) { ) {
@ -394,6 +397,7 @@ private fun MessagesViewContent(
onMoreReactionsClicked = onMoreReactionsClicked, onMoreReactionsClicked = onMoreReactionsClicked,
onReadReceiptClick = onReadReceiptClick, onReadReceiptClick = onReadReceiptClick,
onSwipeToReply = onSwipeToReply, onSwipeToReply = onSwipeToReply,
forceJumpToBottomVisibility = forceJumpToBottomVisibility,
) )
}, },
sheetContent = { subcomposing: Boolean -> sheetContent = { subcomposing: Boolean ->
@ -574,5 +578,6 @@ internal fun MessagesViewPreview(@PreviewParameter(MessagesStateProvider::class)
onSendLocationClicked = {}, onSendLocationClicked = {},
onCreatePollClicked = {}, onCreatePollClicked = {},
onJoinCallClicked = {}, onJoinCallClicked = {},
forceJumpToBottomVisibility = true,
) )
} }

View file

@ -47,7 +47,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.rotate import androidx.compose.ui.draw.rotate
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -90,6 +89,7 @@ fun TimelineView(
onMoreReactionsClicked: (TimelineItem.Event) -> Unit, onMoreReactionsClicked: (TimelineItem.Event) -> Unit,
onReadReceiptClick: (TimelineItem.Event) -> Unit, onReadReceiptClick: (TimelineItem.Event) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
forceJumpToBottomVisibility: Boolean = false
) { ) {
fun onReachedLoadMore() { fun onReachedLoadMore() {
state.eventSink(TimelineEvents.LoadMore) state.eventSink(TimelineEvents.LoadMore)
@ -164,6 +164,7 @@ fun TimelineView(
TimelineScrollHelper( TimelineScrollHelper(
isTimelineEmpty = state.timelineItems.isEmpty(), isTimelineEmpty = state.timelineItems.isEmpty(),
lazyListState = lazyListState, lazyListState = lazyListState,
forceJumpToBottomVisibility = forceJumpToBottomVisibility,
newEventState = state.newEventState, newEventState = state.newEventState,
onScrollFinishedAt = ::onScrollFinishedAt onScrollFinishedAt = ::onScrollFinishedAt
) )
@ -175,6 +176,7 @@ private fun BoxScope.TimelineScrollHelper(
isTimelineEmpty: Boolean, isTimelineEmpty: Boolean,
lazyListState: LazyListState, lazyListState: LazyListState,
newEventState: NewEventState, newEventState: NewEventState,
forceJumpToBottomVisibility: Boolean,
onScrollFinishedAt: (Int) -> Unit, onScrollFinishedAt: (Int) -> Unit,
) { ) {
val coroutineScope = rememberCoroutineScope() val coroutineScope = rememberCoroutineScope()
@ -212,7 +214,7 @@ private fun BoxScope.TimelineScrollHelper(
JumpToBottomButton( JumpToBottomButton(
// Use inverse of canAutoScroll otherwise we might briefly see the before the scroll animation is triggered // Use inverse of canAutoScroll otherwise we might briefly see the before the scroll animation is triggered
isVisible = !canAutoScroll, isVisible = !canAutoScroll || forceJumpToBottomVisibility,
modifier = Modifier modifier = Modifier
.align(Alignment.BottomEnd) .align(Alignment.BottomEnd)
.padding(end = 24.dp, bottom = 12.dp), .padding(end = 24.dp, bottom = 12.dp),
@ -228,7 +230,7 @@ private fun JumpToBottomButton(
) { ) {
AnimatedVisibility( AnimatedVisibility(
modifier = modifier, modifier = modifier,
visible = isVisible || LocalInspectionMode.current, visible = isVisible,
enter = scaleIn(animationSpec = tween(100)), enter = scaleIn(animationSpec = tween(100)),
exit = scaleOut(animationSpec = tween(100)), exit = scaleOut(animationSpec = tween(100)),
) { ) {
@ -273,6 +275,7 @@ internal fun TimelineViewPreview(
onMoreReactionsClicked = {}, onMoreReactionsClicked = {},
onSwipeToReply = {}, onSwipeToReply = {},
onReadReceiptClick = {}, onReadReceiptClick = {},
forceJumpToBottomVisibility = true,
) )
} }
} }