Estoy trabajando en una botonera para motocicleta para poder usar durante un rally.

Una de mis pasiones es el motociclismo de aventura y al crear este proyecto, del cual les comentaré en otro post, me llevo a la necesidad de que, al ser una botonera de 5 botones, poder manejar mas opciones, a través de los gestos de click sencillo, doble y largo (single click, double click, long press).

La solución fue una máquina de estados para poder manejar diferentes momentos de los eventos y determinar si estaba ocurriendo alguno de ellos mediante “timeouts”.

Estos timeouts utilizan un par de periodos para determinar que esta ocurriendo, siendo necesario una tolerancia para el long press y una para el doble clic. Si no es ninguno, se asume clic sencillo.

Acá es importante aclara algo respecto a la experiencia de usuario, pues técnicamente un clic doble son sencillamente dos clics simples en un period de tiempo, y dependiendo de lo puristas que sean, pueden no estar de acuerdo con esta implementación.

En todo caso, acá diferenciamos entre el clic sencillo y el doble como eventos independientes, con la consecuencia de que hay un retraso para el clic sencillo, mientras se espera a ver si viene otro clic cercano o no.

El código se puede modificar para que detecte el clic sencillo y el doble clic dentro de las tolerancias, pero para mi caso práctico no era tan útil.