Remove delay for entering tap-to-drag state

As tap-to-drag is now an opt-in setting, we can be more aggressive when
detecting tap-to-drag gestures.  Before, the user needed to leave their
finger stationary for a short moment before dragging:
  1. Finger down
  2. Finger up
  3. Finger down
  4. Finger remains stationary for 50 ms
  5. Finger moves
This was to prevent false detection, when the user wanted to tap and
then move the cursor.

This CL removes the requirement that the user keep their finger
stationary for a moment. We still differentiate between tap-to-drag
and tap-then-move by the length of the delay between tap and move.

BUG=chromium:840072
TEST=unit tests and touchtests passed.  Manual testing.

Change-Id: Ic7bb99aad3b50581b3cf3457bf69f098623a1329
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/gestures/+/2311355
Tested-by: Sean O'Brien <seobrien@chromium.org>
Reviewed-by: Harry Cutts <hcutts@chromium.org>
Commit-Queue: Sean O'Brien <seobrien@chromium.org>
diff --git a/src/immediate_interpreter.cc b/src/immediate_interpreter.cc
index 3b72094..f02fde0 100644
--- a/src/immediate_interpreter.cc
+++ b/src/immediate_interpreter.cc
@@ -1008,7 +1008,7 @@
       tap_paused_(prop_reg, "Tap Paused", false),
       tap_timeout_(prop_reg, "Tap Timeout", 0.2),
       inter_tap_timeout_(prop_reg, "Inter-Tap Timeout", 0.15),
-      tap_drag_delay_(prop_reg, "Tap Drag Delay", 0.05),
+      tap_drag_delay_(prop_reg, "Tap Drag Delay", 0),
       tap_drag_timeout_(prop_reg, "Tap Drag Timeout", 0.3),
       tap_drag_enable_(prop_reg, "Tap Drag Enable", 0),
       drag_lock_enable_(prop_reg, "Tap Drag Lock Enable", 0),
@@ -2775,7 +2775,7 @@
         tap_drag_last_motion_time_ = now;
       }
       if (tap_record_.TapType() == GESTURES_BUTTON_LEFT &&
-          now - tap_drag_last_motion_time_ > tap_drag_stationary_time_.val_) {
+          now - tap_drag_last_motion_time_ >= tap_drag_stationary_time_.val_) {
         tap_drag_finger_was_stationary_ = true;
       }
 
@@ -2787,7 +2787,7 @@
             SetTapToClickState(kTtcDrag, now);
           } else {
             bool drag_delay_met = (now - tap_to_click_state_entered_
-                                   > tap_drag_delay_.val_);
+                                   >= tap_drag_delay_.val_);
             if (drag_delay_met && tap_drag_finger_was_stationary_) {
               *buttons_down = GESTURES_BUTTON_LEFT;
               SetTapToClickState(kTtcDrag, now);
diff --git a/src/immediate_interpreter_unittest.cc b/src/immediate_interpreter_unittest.cc
index c651ece..d687b33 100644
--- a/src/immediate_interpreter_unittest.cc
+++ b/src/immediate_interpreter_unittest.cc
@@ -1799,13 +1799,14 @@
     {C,make_hwstate(0.14,0,1,1,&fs[6]),-1,MkSet(95),0,0,kDrg,false},
     {C,make_hwstate(0.15,0,0,0,NULL),-1,MkSet(),0,0,kDRl,true},
     {C,make_hwstate(0.99,0,0,0,NULL),.99,MkSet(),0,kBL,kIdl,false},
-    // 1-finger tap + move
+    // 1-finger tap + move (drag expected)
     {S,make_hwstate(0.00,0,1,1,&fs[0]),-1,MkSet(91),0,0,kFTB,false},
     {C,make_hwstate(0.01,0,0,0,NULL),-1,MkSet(),0,0,kTpC,true},
     {C,make_hwstate(0.02,0,1,1,&fs[4]),-1,MkSet(95),0,0,kSTB,false},
-    {C,make_hwstate(0.03,0,1,1,&fs[5]),-1,MkSet(95),kBL,kBL,kIdl,false},
-    {C,make_hwstate(0.04,0,1,1,&fs[6]),-1,MkSet(95),0,0,kIdl,false},
-    {C,make_hwstate(0.05,0,0,0,NULL),-1,MkSet(),0,0,kIdl,false},
+    {C,make_hwstate(0.03,0,1,1,&fs[5]),-1,MkSet(95),kBL,0,kDrg,false},
+    {C,make_hwstate(0.04,0,1,1,&fs[6]),-1,MkSet(95),0,0,kDrg,false},
+    {C,make_hwstate(0.05,0,0,0,NULL),-1,MkSet(),0,0,kDRl,true},
+    {C,make_hwstate(0.99,0,0,0,NULL),.99,MkSet(),0,kBL,kIdl,false},
     // 1-finger tap, move, release, move again (drag lock)
     {S,make_hwstate(0.00,0,1,1,&fs[0]),-1,MkSet(91),0,0,kFTB,false},
     {C,make_hwstate(0.01,0,0,0,NULL),-1,MkSet(),0,0,kTpC,true},
@@ -2022,13 +2023,13 @@
     {C,make_hwstate(1.02,0,0,2,NULL),-1,MkSet(),0,0,kIdl,false},
     {C,make_hwstate(1.03,0,2,2,&fs[10]),-1,MkSet(97,98),0,0,kIdl,false},
     {C,make_hwstate(1.04,0,0,0,NULL),-1,MkSet(),0,0,kIdl,false},
-    // tap then move. no drag expected
+    // tap then move with delay between touches. no drag expected
     {S,make_hwstate(0.00,0,1,1,&fs[0]),-1,MkSet(91),0,0,kFTB,false},
     {C,make_hwstate(0.01,0,0,0,NULL),-1,MkSet(),0,0,kTpC,true},
-    {C,make_hwstate(0.02,0,1,1,&fs[4]),-1,MkSet(95),0,0,kSTB,false},
-    {C,make_hwstate(0.03,0,1,1,&fs[5]),-1,MkSet(95),kBL,kBL,kIdl,false},
-    {C,make_hwstate(0.05,0,1,1,&fs[6]),-1,MkSet(95),0,0,kIdl,false},
-    {C,make_hwstate(0.06,0,0,0,NULL),-1,MkSet(),0,0,kIdl,false},
+    {C,make_hwstate(0.22,0,1,1,&fs[4]),-1,MkSet(95),kBL,kBL,kIdl,false},
+    {C,make_hwstate(0.23,0,1,1,&fs[5]),-1,MkSet(95),0,0,kIdl,false},
+    {C,make_hwstate(0.25,0,1,1,&fs[6]),-1,MkSet(95),0,0,kIdl,false},
+    {C,make_hwstate(0.26,0,0,0,NULL),-1,MkSet(),0,0,kIdl,false},
     {C,make_hwstate(0.99,0,0,0,NULL),.99,MkSet(),0,0,kIdl,false},
   };
   const size_t kT5R2TestFirstIndex = NonT5R2States(hwsgs, arraysize(hwsgs));