[Rlog59a] Split logUnits correctly around separators

Change-Id: I65ecdead7e7bdeb8a5f1748e27068ddbd5d3ce00
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 8c8a824..152118d 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1843,6 +1843,9 @@
     // Returns true if we did an autocorrection, false otherwise.
     private boolean handleSeparator(final int primaryCode, final int x, final int y,
             final int spaceState) {
+        if (ProductionFlag.IS_EXPERIMENTAL) {
+            ResearchLogger.latinIME_handleSeparator();
+        }
         boolean didAutoCorrect = false;
         // Handle separator
         if (mWordComposer.isComposingWord()) {
diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java
index 5c44af1..ff8067f 100644
--- a/java/src/com/android/inputmethod/research/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/research/ResearchLogger.java
@@ -838,6 +838,10 @@
         mCurrentLogUnit = newLogUnit;
     }
 
+    private void setSavedDownEventTime(final long time) {
+        mSavedDownEventTime = time;
+    }
+
     public void onWordFinished(final String word, final boolean isBatchMode) {
         commitCurrentLogUnitAsWord(word, mSavedDownEventTime, isBatchMode);
         mSavedDownEventTime = Long.MAX_VALUE;
@@ -987,7 +991,7 @@
             if (action == MotionEvent.ACTION_DOWN) {
                 // Subtract 1 from eventTime so the down event is included in the later
                 // LogUnit, not the earlier (the test is for inequality).
-                researchLogger.mSavedDownEventTime = eventTime - 1;
+                researchLogger.setSavedDownEventTime(eventTime - 1);
             }
         }
     }
@@ -1627,6 +1631,14 @@
         researchLogger.mStatistics.recordGestureDelete();
     }
 
+    public static void latinIME_handleSeparator() {
+        // Reset the saved down event time.  For tapping, motion events, etc. before the separator
+        // are assigned to the previous LogUnit, and events after the separator are assigned to the
+        // next LogUnit.  In the case of multitap, this might capture down events corresponding to
+        // the next word, however it should not be more than a character or two.
+        getInstance().setSavedDownEventTime(SystemClock.uptimeMillis());
+    }
+
     /**
      * Log statistics.
      *