From 6d2a1ec1b980f7c599ab283386f651714e892c12 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 30 Oct 2023 14:57:57 -0400 Subject: [PATCH] Remember's modifiers in animations --- .../amethyst/ui/components/VideoView.kt | 8 ++-- .../ui/components/ZoomableContentView.kt | 4 +- .../amethyst/ui/note/NoteCompose.kt | 48 +++++++++++++++---- .../amethyst/ui/note/UserProfilePicture.kt | 6 +-- .../amethyst/ui/screen/loggedIn/MainScreen.kt | 4 +- 5 files changed, 50 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt index 39ee69508..9262fee1a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt @@ -840,8 +840,8 @@ private fun MuteButton( AnimatedVisibility( visible = holdOn.value || controllerVisible.value, modifier = modifier, - enter = fadeIn(), - exit = fadeOut() + enter = remember { fadeIn() }, + exit = remember { fadeOut() } ) { Box(modifier = VolumeBottomIconSize) { Box( @@ -881,8 +881,8 @@ private fun KeepPlayingButton( AnimatedVisibility( visible = controllerVisible.value, modifier = alignment, - enter = fadeIn(), - exit = fadeOut() + enter = remember { fadeIn() }, + exit = remember { fadeOut() } ) { Box(modifier = PinBottomIconSize) { Box( diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt index a0bcc8699..d4c9bda2e 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt @@ -726,8 +726,8 @@ private fun DialogContent( AnimatedVisibility( visible = holdOn.value || controllerVisible.value, - enter = fadeIn(), - exit = fadeOut() + enter = remember { fadeIn() }, + exit = remember { fadeOut() } ) { Row( modifier = Modifier diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt index 4ac258fb4..ae3809ec3 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt @@ -53,6 +53,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment +import androidx.compose.ui.Alignment.Companion.BottomEnd import androidx.compose.ui.Alignment.Companion.CenterVertically import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -70,6 +71,7 @@ import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.core.graphics.drawable.toBitmap @@ -2861,21 +2863,16 @@ private fun RepostNoteAuthorPicture( accountViewModel: AccountViewModel, nav: (String) -> Unit ) { - Box(modifier = Size55Modifier) { - Box(Size35Modifier.align(Alignment.TopStart)) { + GenericRepostSection( + baseAuthorPicture = { NoteAuthorPicture( baseNote = baseNote, nav = nav, accountViewModel = accountViewModel, size = Size34dp ) - } - - Box(Size18Modifier.align(Alignment.BottomStart).padding(1.dp)) { - RepostedIcon(modifier = Size18Modifier, MaterialTheme.colorScheme.placeholderText) - } - - Box(Size35Modifier.align(Alignment.BottomEnd)) { + }, + repostAuthorPicture = { NoteAuthorPicture( baseNote = baseRepost, nav = nav, @@ -2883,6 +2880,39 @@ private fun RepostNoteAuthorPicture( size = Size34dp ) } + ) +} + +@Composable +@Preview +private fun GenericRepostSectionPreview() { + GenericRepostSection( + baseAuthorPicture = { + Text("ab") + }, + repostAuthorPicture = { + Text("cd") + } + ) +} + +@Composable +private fun GenericRepostSection( + baseAuthorPicture: @Composable () -> Unit, + repostAuthorPicture: @Composable () -> Unit +) { + Box(modifier = Size55Modifier) { + Box(remember { Size35Modifier.align(Alignment.TopStart) }) { + baseAuthorPicture() + } + + Box(remember { Size18Modifier.align(Alignment.BottomStart).padding(1.dp) }) { + RepostedIcon(modifier = Size18Modifier, MaterialTheme.colorScheme.placeholderText) + } + + Box(remember { Size35Modifier.align(Alignment.BottomEnd) }, contentAlignment = BottomEnd) { + repostAuthorPicture() + } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserProfilePicture.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserProfilePicture.kt index 437242f44..4c8e7020e 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserProfilePicture.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserProfilePicture.kt @@ -80,7 +80,7 @@ fun NoteAuthorPicture( ) { val author by baseNote.live().authorChanges.observeAsState(baseNote.author) - Crossfade(targetState = author) { + Crossfade(targetState = author, label = "NoteAuthorPicture") { if (it == null) { DisplayBlankAuthor(size, modifier) } else { @@ -351,8 +351,8 @@ fun ObserveAndDisplayFollowingMark(userHex: String, iconSize: Dp, accountViewMod WatchUserFollows(userHex, accountViewModel) { newFollowingState -> AnimatedVisibility( visible = newFollowingState, - enter = fadeIn(), - exit = fadeOut() + enter = remember { fadeIn() }, + exit = remember { fadeOut() } ) { Box(contentAlignment = Alignment.TopEnd) { FollowingIcon(iconSize) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/MainScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/MainScreen.kt index c0af783fe..740e34951 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/MainScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/MainScreen.kt @@ -331,8 +331,8 @@ fun MainScreen( floatingActionButton = { AnimatedVisibility( visible = shouldShow.value, - enter = scaleIn(), - exit = scaleOut() + enter = remember { scaleIn() }, + exit = remember { scaleOut() } ) { Box( Size55Modifier