DEFAULT_FLING_REFERENCE

const val DEFAULT_FLING_REFERENCE: Float = 5.0f

Ours, and the one number in this class that was set by somebody looking at a phone.

What it does is decide how much of the spring a given arrival speed spends, through 1 − e^(−(v ⁄ reference)²). The range it has to cover is measured: a thumb produces roughly 3 000 to 12 000 px/s, which over a viewport of about 2 200 px is 1.4 to 5.5 viewports per second. What the range cannot decide is the amplitude, and two reports from a device did: at 4 with no square a throw was too deep at every speed; at 8 the hard end was right and a small throw still jumped, which is a curve too flat to tell a nudge from a throw. The square is that separation and 5 keeps the hard end where it was.

It is deliberately the fling's own number rather than maxOffset. That one is shared with the drag, which nobody has complained about; lowering it to fix a throw would change a gesture that was already right. When a report says a throw is too strong at every speed, this is the knob — and if a drag held past the end is ever too deep, that is the other one.

The curve is 1 − e^(−v ⁄ reference), so nothing ever spends all of the spring and no clamp is ever reached from below.