From f9dcd0019315ccabc33b7acdb4ed5a782f0029e0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Jan 2024 18:20:27 +0100 Subject: [PATCH] Add a way to hide the Jump to Bottom button for coherent preview --- .../android/features/messages/impl/MessagesView.kt | 5 +++++ .../features/messages/impl/timeline/TimelineView.kt | 9 ++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt index e629571c3c..fd1c6bf19b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt @@ -125,6 +125,7 @@ fun MessagesView( onCreatePollClicked: () -> Unit, onJoinCallClicked: () -> Unit, modifier: Modifier = Modifier, + forceJumpToBottomVisibility: Boolean = false ) { OnLifecycleEvent { _, event -> state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvents.LifecycleEvent(event)) @@ -224,6 +225,7 @@ fun MessagesView( onSwipeToReply = { targetEvent -> state.eventSink(MessagesEvents.HandleAction(TimelineItemAction.Reply, targetEvent)) }, + forceJumpToBottomVisibility = forceJumpToBottomVisibility, ) }, snackbarHost = { @@ -324,6 +326,7 @@ private fun MessagesViewContent( onTimestampClicked: (TimelineItem.Event) -> Unit, onSendLocationClicked: () -> Unit, onCreatePollClicked: () -> Unit, + forceJumpToBottomVisibility: Boolean, modifier: Modifier = Modifier, onSwipeToReply: (TimelineItem.Event) -> Unit, ) { @@ -394,6 +397,7 @@ private fun MessagesViewContent( onMoreReactionsClicked = onMoreReactionsClicked, onReadReceiptClick = onReadReceiptClick, onSwipeToReply = onSwipeToReply, + forceJumpToBottomVisibility = forceJumpToBottomVisibility, ) }, sheetContent = { subcomposing: Boolean -> @@ -574,5 +578,6 @@ internal fun MessagesViewPreview(@PreviewParameter(MessagesStateProvider::class) onSendLocationClicked = {}, onCreatePollClicked = {}, onJoinCallClicked = {}, + forceJumpToBottomVisibility = true, ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index 410e74faa4..3c0d7fc67b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -47,7 +47,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.rotate -import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -90,6 +89,7 @@ fun TimelineView( onMoreReactionsClicked: (TimelineItem.Event) -> Unit, onReadReceiptClick: (TimelineItem.Event) -> Unit, modifier: Modifier = Modifier, + forceJumpToBottomVisibility: Boolean = false ) { fun onReachedLoadMore() { state.eventSink(TimelineEvents.LoadMore) @@ -164,6 +164,7 @@ fun TimelineView( TimelineScrollHelper( isTimelineEmpty = state.timelineItems.isEmpty(), lazyListState = lazyListState, + forceJumpToBottomVisibility = forceJumpToBottomVisibility, newEventState = state.newEventState, onScrollFinishedAt = ::onScrollFinishedAt ) @@ -175,6 +176,7 @@ private fun BoxScope.TimelineScrollHelper( isTimelineEmpty: Boolean, lazyListState: LazyListState, newEventState: NewEventState, + forceJumpToBottomVisibility: Boolean, onScrollFinishedAt: (Int) -> Unit, ) { val coroutineScope = rememberCoroutineScope() @@ -212,7 +214,7 @@ private fun BoxScope.TimelineScrollHelper( JumpToBottomButton( // Use inverse of canAutoScroll otherwise we might briefly see the before the scroll animation is triggered - isVisible = !canAutoScroll, + isVisible = !canAutoScroll || forceJumpToBottomVisibility, modifier = Modifier .align(Alignment.BottomEnd) .padding(end = 24.dp, bottom = 12.dp), @@ -228,7 +230,7 @@ private fun JumpToBottomButton( ) { AnimatedVisibility( modifier = modifier, - visible = isVisible || LocalInspectionMode.current, + visible = isVisible, enter = scaleIn(animationSpec = tween(100)), exit = scaleOut(animationSpec = tween(100)), ) { @@ -273,6 +275,7 @@ internal fun TimelineViewPreview( onMoreReactionsClicked = {}, onSwipeToReply = {}, onReadReceiptClick = {}, + forceJumpToBottomVisibility = true, ) } }