Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b139c32 authored by Joshua Tsuji's avatar Joshua Tsuji
Browse files

Adds estimateFlingEndValue to PhysicsAnimator.

Flings do not have a set end value, and decelerate via friction until coming to a halt. However, it's sometimes useful to have an estimate of where that might be - similar logic is used by flingMustReachMinOrMax.

Test: atest SystemUITests
Change-Id: I271a1587a321b97fbbdad1c00605a17342b6e694
parent 65aa3388
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -901,6 +901,23 @@ class PhysicsAnimator<T> private constructor (val target: T) {
            verboseLogging = debug
        }

        /**
         * Estimates the end value of a fling that starts at the given value using the provided
         * start velocity and fling configuration.
         *
         * This is only an estimate. Fling animations use a timing-based physics simulation that is
         * non-deterministic, so this exact value may not be reached.
         */
        @JvmStatic
        fun estimateFlingEndValue(
            startValue: Float,
            startVelocity: Float,
            flingConfig: FlingConfig
        ): Float {
            val distance = startVelocity / (flingConfig.friction * FLING_FRICTION_SCALAR_MULTIPLIER)
            return Math.min(flingConfig.max, Math.max(flingConfig.min, startValue + distance))
        }

        @JvmStatic
        fun getReadablePropertyName(property: FloatPropertyCompat<*>): String {
            return when (property) {