Spent a while debugging this — posting in case anyone else hit it or in case it's a known thing.
On the device, onHold is never delivered when the touch lands near the top edge (~12 o'clock area). onTap at the exact same spot works fine. Simulator is unaffected — only the real device.
Minimal repro:
function onTap(evt) { System.println("tap " + evt.getCoordinates()); return true; }
function onHold(evt) { System.println("hold " + evt.getCoordinates()); return true; }
Tap top edge → tap line prints. Long-press top edge → nothing. Move 20-30px down, long-press works.
My guess: the system's "long-press top of screen to lock touchscreen" gesture lives in the same area, so the firmware withholds the touch-down from CIQ until it decides whether it's the system gesture — and apparently never resolves to forwarding it as onHold. Short taps aren't ambiguous so they get through.
If this is intentional, can it get documented? Or is there a way to opt out (something like "my view wants all touches, don't run system gestures")? Right now any radial/sector-style UI with a long-press "up" direction silently doesn't work on this hardware and the simulator gives no warning.
Anyone else seeing this, or know a workaround other than "just don't put hold targets near the top"? what a buggy platform