Browse Source

Animate scroll to bottom FAB

julioromano/fixTallAndWidePreviews
Benoit Marty 1 year ago
parent
commit
329bdea142
  1. 19
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt

19
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt

@ -14,9 +14,17 @@
* limitations under the License. * limitations under the License.
*/ */
@file:OptIn(ExperimentalAnimationApi::class)
package io.element.android.features.messages.impl.timeline package io.element.android.features.messages.impl.timeline
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.animateContentSize import androidx.compose.animation.animateContentSize
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.scaleIn
import androidx.compose.animation.scaleOut
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -251,7 +259,14 @@ internal fun BoxScope.TimelineScrollHelper(
} }
// Jump to bottom button (display also in previews) // Jump to bottom button (display also in previews)
if (!shouldAutoScrollToBottom || LocalInspectionMode.current) { AnimatedVisibility(
modifier = Modifier
.align(Alignment.BottomEnd)
.padding(end = 16.dp, bottom = 12.dp),
visible = !shouldAutoScrollToBottom || LocalInspectionMode.current,
enter = scaleIn() + fadeIn(),
exit = scaleOut() + fadeOut(),
) {
FloatingActionButton( FloatingActionButton(
onClick = { onClick = {
coroutineScope.launch { coroutineScope.launch {
@ -264,8 +279,6 @@ internal fun BoxScope.TimelineScrollHelper(
}, },
shape = CircleShape, shape = CircleShape,
modifier = Modifier modifier = Modifier
.align(Alignment.BottomEnd)
.padding(end = 16.dp, bottom = 12.dp)
.size(36.dp), .size(36.dp),
containerColor = ElementTheme.colors.bgSubtleSecondary, containerColor = ElementTheme.colors.bgSubtleSecondary,
contentColor = ElementTheme.colors.iconSecondary contentColor = ElementTheme.colors.iconSecondary

Loading…
Cancel
Save