Loading mechanics/src/com/android/mechanics/MotionValue.kt +16 −1 Original line number Diff line number Diff line Loading @@ -312,7 +312,22 @@ private class ObservableComputations( override val currentSegment by derivedStateOf { computeCurrentSegment() } override val currentGuaranteeState by derivedStateOf { computeCurrentGuaranteeState() } override val currentAnimation by derivedStateOf { computeCurrentAnimation() } override val currentSpringState by derivedStateOf { computeCurrentSpringState() } private var memoizedSpringState: SpringState = SpringState.AtRest private var memoizedAnimation: DiscontinuityAnimation? = null private var memoizedTimeNanos: Long = Long.MIN_VALUE override val currentSpringState: SpringState get() { val animation = currentAnimation val timeNanos = currentAnimationTimeNanos return if (memoizedAnimation == animation && memoizedTimeNanos == timeNanos) { memoizedSpringState } else { memoizedAnimation = animation memoizedTimeNanos = timeNanos computeCurrentSpringState(animation, timeNanos).also { memoizedSpringState = it } } } suspend fun keepRunning(continueRunning: () -> Boolean) { check(!isActive) { "MotionValue($label) is already running" } Loading mechanics/src/com/android/mechanics/impl/Computations.kt +3 −3 Original line number Diff line number Diff line Loading @@ -403,11 +403,11 @@ internal interface ComputeAnimation : ComputeGuaranteeState { internal interface ComputeSpringState : ComputeAnimation { val currentAnimation: DiscontinuityAnimation fun computeCurrentSpringState(): SpringState { with(currentAnimation) { fun computeCurrentSpringState(animation: DiscontinuityAnimation, timeNanos: Long): SpringState { with(animation) { if (isAtRest) return SpringState.AtRest val nanosSinceAnimationStart = currentAnimationTimeNanos - springStartTimeNanos val nanosSinceAnimationStart = timeNanos - springStartTimeNanos val updatedSpringState = springStartState.calculateUpdatedState(nanosSinceAnimationStart, springParameters) Loading mechanics/src/com/android/mechanics/view/ViewMotionValue.kt +4 −2 Original line number Diff line number Diff line Loading @@ -209,7 +209,8 @@ private class ImperativeComputations( override var currentSegment: SegmentData = computeCurrentSegment() override var currentGuaranteeState: GuaranteeState = computeCurrentGuaranteeState() override var currentAnimation: DiscontinuityAnimation = computeCurrentAnimation() override var currentSpringState: SpringState = computeCurrentSpringState() override var currentSpringState: SpringState = computeCurrentSpringState(currentAnimation, currentAnimationTimeNanos) // ---- Lifecycle ------------------------------------------------------------------------------ Loading Loading @@ -281,7 +282,8 @@ private class ImperativeComputations( currentSegment = computeCurrentSegment() currentGuaranteeState = computeCurrentGuaranteeState() currentAnimation = computeCurrentAnimation() currentSpringState = computeCurrentSpringState() currentSpringState = computeCurrentSpringState(currentAnimation, currentAnimationTimeNanos) } debugInspector?.run { Loading Loading
mechanics/src/com/android/mechanics/MotionValue.kt +16 −1 Original line number Diff line number Diff line Loading @@ -312,7 +312,22 @@ private class ObservableComputations( override val currentSegment by derivedStateOf { computeCurrentSegment() } override val currentGuaranteeState by derivedStateOf { computeCurrentGuaranteeState() } override val currentAnimation by derivedStateOf { computeCurrentAnimation() } override val currentSpringState by derivedStateOf { computeCurrentSpringState() } private var memoizedSpringState: SpringState = SpringState.AtRest private var memoizedAnimation: DiscontinuityAnimation? = null private var memoizedTimeNanos: Long = Long.MIN_VALUE override val currentSpringState: SpringState get() { val animation = currentAnimation val timeNanos = currentAnimationTimeNanos return if (memoizedAnimation == animation && memoizedTimeNanos == timeNanos) { memoizedSpringState } else { memoizedAnimation = animation memoizedTimeNanos = timeNanos computeCurrentSpringState(animation, timeNanos).also { memoizedSpringState = it } } } suspend fun keepRunning(continueRunning: () -> Boolean) { check(!isActive) { "MotionValue($label) is already running" } Loading
mechanics/src/com/android/mechanics/impl/Computations.kt +3 −3 Original line number Diff line number Diff line Loading @@ -403,11 +403,11 @@ internal interface ComputeAnimation : ComputeGuaranteeState { internal interface ComputeSpringState : ComputeAnimation { val currentAnimation: DiscontinuityAnimation fun computeCurrentSpringState(): SpringState { with(currentAnimation) { fun computeCurrentSpringState(animation: DiscontinuityAnimation, timeNanos: Long): SpringState { with(animation) { if (isAtRest) return SpringState.AtRest val nanosSinceAnimationStart = currentAnimationTimeNanos - springStartTimeNanos val nanosSinceAnimationStart = timeNanos - springStartTimeNanos val updatedSpringState = springStartState.calculateUpdatedState(nanosSinceAnimationStart, springParameters) Loading
mechanics/src/com/android/mechanics/view/ViewMotionValue.kt +4 −2 Original line number Diff line number Diff line Loading @@ -209,7 +209,8 @@ private class ImperativeComputations( override var currentSegment: SegmentData = computeCurrentSegment() override var currentGuaranteeState: GuaranteeState = computeCurrentGuaranteeState() override var currentAnimation: DiscontinuityAnimation = computeCurrentAnimation() override var currentSpringState: SpringState = computeCurrentSpringState() override var currentSpringState: SpringState = computeCurrentSpringState(currentAnimation, currentAnimationTimeNanos) // ---- Lifecycle ------------------------------------------------------------------------------ Loading Loading @@ -281,7 +282,8 @@ private class ImperativeComputations( currentSegment = computeCurrentSegment() currentGuaranteeState = computeCurrentGuaranteeState() currentAnimation = computeCurrentAnimation() currentSpringState = computeCurrentSpringState() currentSpringState = computeCurrentSpringState(currentAnimation, currentAnimationTimeNanos) } debugInspector?.run { Loading