feat: logique de décision du swipe-back

This commit is contained in:
herel committed 2026-08-28 16:14:00 +02:00
1 parent 61dc9f1d59
commit bc14056d3e
2 files changed
+67

No files matched your search

@@ -0,0 +1,15 @@
package com.livrets.ui
import androidx.compose.ui.unit.dp
object SwipeBackGesture {
val EdgeZone = 24.dp
const val CommitRatio = 0.4f
const val CommitVelocityDpPerSec = 1000f
fun shouldCommit(offsetPx: Float, containerWidthPx: Float, velocityDpPerSec: Float): Boolean {
if (containerWidthPx <= 0f) return false
return offsetPx / containerWidthPx > CommitRatio ||
velocityDpPerSec >= CommitVelocityDpPerSec
}
}
@@ -0,0 +1,52 @@
package com.livrets.ui
import kotlin.test.Test
import kotlin.test.assertFalse
import kotlin.test.assertTrue
class SwipeBackGestureTest {
@Test
fun `commit si l offset depasse 40 pourcent de la largeur`() {
assertTrue(
SwipeBackGesture.shouldCommit(
offsetPx = 401f,
containerWidthPx = 1000f,
velocityDpPerSec = 0f,
)
)
}
@Test
fun `pas de commit si offset et velocite sous les seuils`() {
assertFalse(
SwipeBackGesture.shouldCommit(
offsetPx = 399f,
containerWidthPx = 1000f,
velocityDpPerSec = 999f,
)
)
}
@Test
fun `commit par velocite seule meme avec offset nul`() {
assertTrue(
SwipeBackGesture.shouldCommit(
offsetPx = 0f,
containerWidthPx = 1000f,
velocityDpPerSec = 1000f,
)
)
}
@Test
fun `pas de commit si la largeur n est pas connue`() {
assertFalse(
SwipeBackGesture.shouldCommit(
offsetPx = 500f,
containerWidthPx = 0f,
velocityDpPerSec = 2000f,
)
)
}
}