Status Update
Comments
ch...@gmail.com <ch...@gmail.com> #2
Weirdness = velocities in the wrong direction to what I just dragged.
ae...@google.com <ae...@google.com> #3
I have a WIP patch aosp/1826965 which greatly increases the volume and accuracy of data fed to VelocityTracker. It doesn't include any additional reset calls right now, but it resolves a lot of the weird behavior in fling velocity.
Examining the original logic in
ch...@gmail.com <ch...@gmail.com> #4
ap...@google.com <ap...@google.com> #5
Branch: androidx-main
commit 9446c48c42cd9583bf86249eda1aa2e1bb3c59d5
Author: Alexandre Elias <aelias@google.com>
Date: Thu Sep 16 20:15:37 2021
Velocity tracking for historical changes
This forwards the additional "historical" pointer information in
MotionEvent to the fling velocity tracker, allowing more accurate fling
detection.
It also forwards ordinary pointer information for the
first DOWN event and first (slop) MOVE event, matching the framework
velocity tracker.
Test: MoveWithHistoryTest.flingScrollableWithHistorical
Fixes: 197553056
Fixes: 199914454
Bug: 199921305
Relnote: Added experimental historical pointers to PointerEventChange.
Change-Id: Ic1fd82fd3f2335a9289cc1fc96c35e89ec9b90ee
M compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/AndroidInputDispatcher.android.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/MotionEventAdapter.android.kt
M compose/ui/ui-test/api/public_plus_experimental_current.txt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/MultiModalInjectionScope.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TouchInjectionScope.kt
A compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveWithHistoryTest.kt
M compose/ui/ui/api/current.txt
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/PointerInputEventProcessorTest.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/InputDispatcher.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/PointerInputEventProcessor.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/PointerEvent.kt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/InternalPointerInput.kt
M compose/ui/ui/api/restricted_current.txt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/OverScrollTest.kt
M compose/ui/ui-test/src/desktopMain/kotlin/androidx/compose/ui/test/DesktopInputDispatcher.desktop.kt
M compose/ui/ui/api/public_plus_experimental_current.txt
ma...@gmail.com <ma...@gmail.com> #6
Weirdness = velocities in the wrong direction to what I just dragged
I suspect this is because the velocity calculation is based on touch position relative to the component handling the pointer input.
Description
I'm currently writing a custom
FlingBehavior
which handles flings from the Lazy layouts. Unfortunately I'm seeing weirdness in the velocity values provided.It seems that if you perform a number of flings in alternating directions (left then right, repeat), the velocities accumulate.
I had a quick look through draggable, and I'm not seeing anywhere where the VelocityTracker is being reset. I'd expect a call tohttps://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt;l=329
velocityTracker.resetTracking()
somewhere around here:Is this intentional?