Acknowledged
CIQQA-4714

Instinct 3 AMOLED: CTRL double-press flashlight toggle fails while the display is on, scaling with Connect IQ watch face complexity

With a Connect IQ watch face active, the CTRL double-press flashlight shortcut does not work reliably while the display is already on. The first press is acted on immediately as a single press (display off) instead of being held for the double-press window, so the second press is treated as a separate single press (display on). The flashlight never toggles.

The severity scales with how much work the watch face does: the more complications/data fields a face renders, the longer the unresponsive period. Simple faces are barely affected and complex ones fail most of the time. What I observed :

  1. Install any moderately complex Connect IQ watch face.
  2. With the display off, double-press CTRL → flashlight turns on. (works)
  3. Leave the flashlight on. The display is now on.
  4. Double-press CTRL again to turn the flashlight off.
  5. Observed: the display turns off and immediately back on. The flashlight stays on. 
  6. Expected: the flashlight turns off.
  7. Single-press CTRL to turn the display off, then double-press CTRL → the flashlight turns off correctly. 

I developed several of the affected watch faces and I have tried to fix this in application code. None of the following resolved it:

  • Removing onDisplayModeChanged() handling.
  • Removing WatchUi.requestUpdate() from onEnterSleep() / onExitSleep().
  • Reducing per-frame drawing cost by ~30% (measured), including caching the most expensive rendering into a BufferedBitmap.
  • Disabling data fields entirely (improves the margin slightly but does not fix it).

A deliberately lean Connect IQ watch face on the same watch does not show the problem, while faces that implement more Connect IQ lifecycle callbacks than the failing ones (onDisplayModeChanged, WatchFaceDelegate, onPartialUpdate, requestUpdate() on sleep transitions) also do not show it. So it does not correlate with which API a watch face uses, only with how much work it does per frame.

That points to a system-side issue: button gesture detection appears to be blocked by, or serialised with, Connect IQ watch face rendering during a display state transition. A watch face cannot implement double-press arbitration itself, so this is not something application code can work around (I believe) it can only be pushed below the threshold, and the threshold is low enough that ordinary watch faces cross it.

This looks like the same underlying issue as watch faces from IQ are causing a problem for the flashlight. Beta 10.15 fixed the flickering strength indicator reported there, but the activation/deactivation delay described in that thread  and this double-press failure seems to remain. Tested with software version 15.18