From 611374d80092ce2a2336846b74174608041bcc1b Mon Sep 17 00:00:00 2001 From: Thomas Andres Gomez Date: Tue, 19 Jul 2022 11:20:45 +0200 Subject: [PATCH] Add SharedDelay feature to the AnimatedOffset --- .../composable/animation/AnimatedDelayer.kt | 31 ++++++++++++++++--- .../ui/composable/animation/AnimatedOffset.kt | 2 +- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/pixelized/biblib/ui/composable/animation/AnimatedDelayer.kt b/app/src/main/java/com/pixelized/biblib/ui/composable/animation/AnimatedDelayer.kt index 42bd967..a377404 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/composable/animation/AnimatedDelayer.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/composable/animation/AnimatedDelayer.kt @@ -2,13 +2,14 @@ package com.pixelized.biblib.ui.composable.animation import androidx.compose.animation.* import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable @Composable fun AnimatedDelayer( delay: Int = Delay.DELTA, content: @Composable AnimatedDelayerScope.() -> Unit ) { - val scope = AnimatedDelayerScope( + val scope = IncreasedDelayerScope( delay = Delay(value = delay) ) scope.content() @@ -33,9 +34,31 @@ fun AnimatedDelayer( } } -class AnimatedDelayerScope( - var delay: Delay = Delay() -) +@Composable +fun AnimatedDelayerScope.SharedDelay(content: @Composable AnimatedDelayerScope.() -> Unit) { + val localScope = SharedDelayerScope(delay = play()) + localScope.content() +} + +@Stable +interface AnimatedDelayerScope { + val delay: Delay + fun play(): Delay +} + +@Stable +private class IncreasedDelayerScope( + override var delay: Delay +): AnimatedDelayerScope { + override fun play(): Delay = delay++ +} + +@Stable +private class SharedDelayerScope( + override var delay: Delay +): AnimatedDelayerScope { + override fun play(): Delay = delay +} @JvmInline value class Delay( diff --git a/app/src/main/java/com/pixelized/biblib/ui/composable/animation/AnimatedOffset.kt b/app/src/main/java/com/pixelized/biblib/ui/composable/animation/AnimatedOffset.kt index ed00496..88860ff 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/composable/animation/AnimatedOffset.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/composable/animation/AnimatedOffset.kt @@ -26,7 +26,7 @@ fun AnimatedDelayerScope.AnimatedOffset( AnimatedOffset( modifier = modifier, transitionLabel = transitionLabel, - delay = delay++, + delay = play(), contentAlignment = contentAlignment, content = content, )