Compare commits

...

2 Commits

Author SHA1 Message Date
Evgeny Poberezkin
ff57bef1e9 Merge branch 'master' into av/rtl-animation 2023-09-07 22:48:01 +01:00
Avently
cf4e2acd0a multiplatform: animation for RTL layout 2023-09-07 04:50:33 +08:00

View File

@@ -8,6 +8,9 @@ import androidx.compose.material.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
import chat.simplex.common.model.ChatModel import chat.simplex.common.model.ChatModel
import chat.simplex.common.platform.* import chat.simplex.common.platform.*
import chat.simplex.common.ui.theme.* import chat.simplex.common.ui.theme.*
@@ -111,13 +114,22 @@ class ModalManager(private val placement: ModalPlacement? = null) {
modalViews.lastOrNull()?.second?.invoke(::closeModal) modalViews.lastOrNull()?.second?.invoke(::closeModal)
return return
} }
val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl
AnimatedContent(targetState = modalCount.value, AnimatedContent(targetState = modalCount.value,
transitionSpec = { transitionSpec = {
if (targetState > initialState) { if (isRtl) {
fromEndToStartTransition() if (targetState < initialState) {
fromStartToEndTransition()
} else {
fromStartToEndTransition().using(SizeTransform(clip = true) { _, target -> spring(visibilityThreshold = target) })
}
} else { } else {
fromStartToEndTransition() if (targetState > initialState) {
}.using(SizeTransform(clip = false)) fromEndToStartTransition()
} else {
fromStartToEndTransition()
}.using(SizeTransform(clip = false))
}
} }
) { ) {
modalViews.getOrNull(it - 1)?.second?.invoke(::closeModal) modalViews.getOrNull(it - 1)?.second?.invoke(::closeModal)