Merge "[Rlog32] ResearchLogger segment motion data around gestures correctly"

main
Kurt Partridge 2013-01-08 08:10:31 -08:00 committed by Android (Google) Code Review
commit 9bad176ebe
3 changed files with 82 additions and 19 deletions

View File

@ -1131,7 +1131,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
commitChosenWord(typedWord, LastComposedWord.COMMIT_TYPE_USER_TYPED_WORD, commitChosenWord(typedWord, LastComposedWord.COMMIT_TYPE_USER_TYPED_WORD,
separatorString); separatorString);
if (ProductionFlag.IS_EXPERIMENTAL) { if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.getInstance().onWordComplete(typedWord, Long.MAX_VALUE); ResearchLogger.getInstance().onWordFinished(typedWord);
} }
} }
} }
@ -1171,8 +1171,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
final String text = lastTwo.charAt(1) + " "; final String text = lastTwo.charAt(1) + " ";
mConnection.commitText(text, 1); mConnection.commitText(text, 1);
if (ProductionFlag.IS_EXPERIMENTAL) { if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.getInstance().onWordComplete(text, Long.MAX_VALUE); ResearchLogger.latinIME_swapSwapperAndSpace(text);
ResearchLogger.latinIME_swapSwapperAndSpace();
} }
mKeyboardSwitcher.updateShiftState(); mKeyboardSwitcher.updateShiftState();
} }
@ -1192,7 +1191,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
final String textToInsert = ". "; final String textToInsert = ". ";
mConnection.commitText(textToInsert, 1); mConnection.commitText(textToInsert, 1);
if (ProductionFlag.IS_EXPERIMENTAL) { if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.getInstance().onWordComplete(textToInsert, Long.MAX_VALUE); ResearchLogger.latinIME_maybeDoubleSpacePeriod(textToInsert);
} }
mKeyboardSwitcher.updateShiftState(); mKeyboardSwitcher.updateShiftState();
return true; return true;
@ -1441,7 +1440,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
} }
mConnection.commitText(text, 1); mConnection.commitText(text, 1);
if (ProductionFlag.IS_EXPERIMENTAL) { if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.getInstance().onWordComplete(text, Long.MAX_VALUE); ResearchLogger.latinIME_onTextInput(text);
} }
mConnection.endBatchEdit(); mConnection.endBatchEdit();
// Space state must be updated before calling updateShiftState // Space state must be updated before calling updateShiftState
@ -1700,7 +1699,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
} }
if (SPACE_STATE_DOUBLE == spaceState) { if (SPACE_STATE_DOUBLE == spaceState) {
mHandler.cancelDoubleSpacePeriodTimer(); mHandler.cancelDoubleSpacePeriodTimer();
if (mConnection.revertDoubleSpace()) { if (mConnection.revertDoubleSpacePeriod()) {
// No need to reset mSpaceState, it has already be done (that's why we // No need to reset mSpaceState, it has already be done (that's why we
// receive it as a parameter) // receive it as a parameter)
return; return;
@ -2294,7 +2293,6 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
} }
if (ProductionFlag.IS_EXPERIMENTAL) { if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.latinIME_revertCommit(committedWord, originallyTypedWord); ResearchLogger.latinIME_revertCommit(committedWord, originallyTypedWord);
ResearchLogger.getInstance().onWordComplete(originallyTypedWord, Long.MAX_VALUE);
} }
// Don't restart suggestion yet. We'll restart if the user deletes the // Don't restart suggestion yet. We'll restart if the user deletes the
// separator. // separator.

View File

@ -643,7 +643,7 @@ public final class RichInputConnection {
return word; return word;
} }
public boolean revertDoubleSpace() { public boolean revertDoubleSpacePeriod() {
if (DEBUG_BATCH_NESTING) checkBatchEdit(); if (DEBUG_BATCH_NESTING) checkBatchEdit();
// Here we test whether we indeed have a period and a space before us. This should not // Here we test whether we indeed have a period and a space before us. This should not
// be needed, but it's there just in case something went wrong. // be needed, but it's there just in case something went wrong.
@ -660,7 +660,7 @@ public final class RichInputConnection {
final String doubleSpace = " "; final String doubleSpace = " ";
commitText(doubleSpace, 1); commitText(doubleSpace, 1);
if (ProductionFlag.IS_EXPERIMENTAL) { if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.getInstance().onWordComplete(doubleSpace, Long.MAX_VALUE); ResearchLogger.richInputConnection_revertDoubleSpacePeriod(doubleSpace);
} }
return true; return true;
} }
@ -685,7 +685,7 @@ public final class RichInputConnection {
final String text = " " + textBeforeCursor.subSequence(0, 1); final String text = " " + textBeforeCursor.subSequence(0, 1);
commitText(text, 1); commitText(text, 1);
if (ProductionFlag.IS_EXPERIMENTAL) { if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.getInstance().onWordComplete(text, Long.MAX_VALUE); ResearchLogger.richInputConnection_revertSwapPunctuation(text);
} }
return true; return true;
} }

View File

@ -154,6 +154,11 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private LogUnit mCurrentLogUnit = new LogUnit(); private LogUnit mCurrentLogUnit = new LogUnit();
// Gestured or tapped words may be committed after the gesture of the next word has started.
// To ensure that the gesture data of the next word is not associated with the previous word,
// thereby leaking private data, we store the time of the down event that started the second
// gesture, and when committing the earlier word, split the LogUnit.
private long mSavedDownEventTime;
private ResearchLogger() { private ResearchLogger() {
mStatistics = Statistics.getInstance(); mStatistics = Statistics.getInstance();
} }
@ -741,9 +746,15 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
return false; return false;
} }
/**
* Commit the portion of mCurrentLogUnit before maxTime as a worded logUnit.
*
* After this operation completes, mCurrentLogUnit will hold any logStatements that happened
* after maxTime.
*/
private static final LogStatement LOGSTATEMENT_COMMIT_RECORD_SPLIT_WORDS = private static final LogStatement LOGSTATEMENT_COMMIT_RECORD_SPLIT_WORDS =
new LogStatement("recordSplitWords", true, false); new LogStatement("recordSplitWords", true, false);
public void onWordComplete(final String word, final long maxTime) { /* package for test */ void commitCurrentLogUnitAsWord(final String word, final long maxTime) {
final Dictionary dictionary = getDictionary(); final Dictionary dictionary = getDictionary();
if (word != null && word.length() > 0 && hasLetters(word)) { if (word != null && word.length() > 0 && hasLetters(word)) {
mCurrentLogUnit.setWord(word); mCurrentLogUnit.setWord(word);
@ -757,6 +768,11 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
mCurrentLogUnit = newLogUnit; mCurrentLogUnit = newLogUnit;
} }
public void onWordFinished(final String word) {
commitCurrentLogUnitAsWord(word, mSavedDownEventTime);
mSavedDownEventTime = Long.MAX_VALUE;
}
private static int scrubDigitFromCodePoint(int codePoint) { private static int scrubDigitFromCodePoint(int codePoint) {
return Character.isDigit(codePoint) ? DIGIT_REPLACEMENT_CODEPOINT : codePoint; return Character.isDigit(codePoint) ? DIGIT_REPLACEMENT_CODEPOINT : codePoint;
} }
@ -898,8 +914,14 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
} }
final float size = me.getSize(index); final float size = me.getSize(index);
final float pressure = me.getPressure(index); final float pressure = me.getPressure(index);
getInstance().enqueueEvent(LOGSTATEMENT_MAIN_KEYBOARD_VIEW_PROCESS_MOTION_EVENT, final ResearchLogger researchLogger = getInstance();
researchLogger.enqueueEvent(LOGSTATEMENT_MAIN_KEYBOARD_VIEW_PROCESS_MOTION_EVENT,
actionString, eventTime, id, x, y, size, pressure); actionString, eventTime, id, x, y, size, pressure);
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;
}
} }
} }
@ -1037,6 +1059,16 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
expectingUpdateSelectionFromLogger, scrubbedWord); expectingUpdateSelectionFromLogger, scrubbedWord);
} }
/**
* Log a call to LatinIME.onTextInput().
*
* SystemResponse: Raw text is added to the TextView.
*/
public static void latinIME_onTextInput(final String text) {
final ResearchLogger researchLogger = getInstance();
researchLogger.commitCurrentLogUnitAsWord(text, Long.MAX_VALUE);
}
/** /**
* Log a call to LatinIME.pickSuggestionManually(). * Log a call to LatinIME.pickSuggestionManually().
* *
@ -1053,7 +1085,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
scrubDigitsFromString(replacedWord), index, scrubDigitsFromString(replacedWord), index,
suggestion == null ? null : scrubbedWord, Constants.SUGGESTION_STRIP_COORDINATE, suggestion == null ? null : scrubbedWord, Constants.SUGGESTION_STRIP_COORDINATE,
Constants.SUGGESTION_STRIP_COORDINATE); Constants.SUGGESTION_STRIP_COORDINATE);
researchLogger.onWordComplete(scrubbedWord, Long.MAX_VALUE); researchLogger.commitCurrentLogUnitAsWord(scrubbedWord, Long.MAX_VALUE);
researchLogger.mStatistics.recordManualSuggestion(); researchLogger.mStatistics.recordManualSuggestion();
} }
@ -1069,7 +1101,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
final ResearchLogger researchLogger = getInstance(); final ResearchLogger researchLogger = getInstance();
researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_PUNCTUATIONSUGGESTION, index, suggestion, researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_PUNCTUATIONSUGGESTION, index, suggestion,
Constants.SUGGESTION_STRIP_COORDINATE, Constants.SUGGESTION_STRIP_COORDINATE); Constants.SUGGESTION_STRIP_COORDINATE, Constants.SUGGESTION_STRIP_COORDINATE);
researchLogger.onWordComplete(suggestion, Long.MAX_VALUE); researchLogger.commitCurrentLogUnitAsWord(suggestion, Long.MAX_VALUE);
} }
/** /**
@ -1098,8 +1130,20 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
*/ */
private static final LogStatement LOGSTATEMENT_LATINIME_SWAPSWAPPERANDSPACE = private static final LogStatement LOGSTATEMENT_LATINIME_SWAPSWAPPERANDSPACE =
new LogStatement("LatinIMESwapSwapperAndSpace", false, false); new LogStatement("LatinIMESwapSwapperAndSpace", false, false);
public static void latinIME_swapSwapperAndSpace() { public static void latinIME_swapSwapperAndSpace(final String text) {
getInstance().enqueueEvent(LOGSTATEMENT_LATINIME_SWAPSWAPPERANDSPACE); final ResearchLogger researchLogger = getInstance();
researchLogger.commitCurrentLogUnitAsWord(text, Long.MAX_VALUE);
researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_SWAPSWAPPERANDSPACE);
}
/**
* Log a call to LatinIME.maybeDoubleSpacePeriod().
*
* SystemResponse: Two spaces have been replaced by period space.
*/
public static void latinIME_maybeDoubleSpacePeriod(final String text) {
final ResearchLogger researchLogger = getInstance();
researchLogger.commitCurrentLogUnitAsWord(text, Long.MAX_VALUE);
} }
/** /**
@ -1156,6 +1200,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_REVERTCOMMIT, committedWord, researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_REVERTCOMMIT, committedWord,
originallyTypedWord); originallyTypedWord);
researchLogger.mStatistics.recordRevertCommit(); researchLogger.mStatistics.recordRevertCommit();
researchLogger.commitCurrentLogUnitAsWord(originallyTypedWord, Long.MAX_VALUE);
} }
/** /**
@ -1249,6 +1294,26 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
completionInfo); completionInfo);
} }
/**
* Log a call to RichInputConnection.revertDoubleSpacePeriod().
*
* SystemResponse: The IME has reverted ". ", which had previously replaced two typed spaces.
*/
public static void richInputConnection_revertDoubleSpacePeriod(final String doubleSpace) {
final ResearchLogger researchLogger = getInstance();
researchLogger.commitCurrentLogUnitAsWord(doubleSpace, Long.MAX_VALUE);
}
/**
* Log a call to RichInputConnection.revertSwapPunctuation().
*
* SystemResponse: The IME has reverted a punctuation swap.
*/
public static void richInputConnection_revertSwapPunctuation(final String text) {
final ResearchLogger researchLogger = getInstance();
researchLogger.commitCurrentLogUnitAsWord(text, Long.MAX_VALUE);
}
/** /**
* Log a call to LatinIME.commitCurrentAutoCorrection(). * Log a call to LatinIME.commitCurrentAutoCorrection().
* *
@ -1265,7 +1330,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
final ResearchLogger researchLogger = getInstance(); final ResearchLogger researchLogger = getInstance();
researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_COMMITCURRENTAUTOCORRECTION, researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_COMMITCURRENTAUTOCORRECTION,
scrubbedTypedWord, scrubbedAutoCorrection, separatorString); scrubbedTypedWord, scrubbedAutoCorrection, separatorString);
researchLogger.onWordComplete(scrubbedAutoCorrection, Long.MAX_VALUE); researchLogger.commitCurrentLogUnitAsWord(scrubbedAutoCorrection, Long.MAX_VALUE);
} }
private boolean isExpectingCommitText = false; private boolean isExpectingCommitText = false;
@ -1284,7 +1349,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
final ResearchLogger researchLogger = getInstance(); final ResearchLogger researchLogger = getInstance();
final String scrubbedWord = scrubDigitsFromString(committedWord.toString()); final String scrubbedWord = scrubDigitsFromString(committedWord.toString());
researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_COMMIT_PARTIAL_TEXT); researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_COMMIT_PARTIAL_TEXT);
researchLogger.onWordComplete(scrubbedWord, lastTimestampOfWordData); researchLogger.commitCurrentLogUnitAsWord(scrubbedWord, lastTimestampOfWordData);
researchLogger.mStatistics.recordSplitWords(); researchLogger.mStatistics.recordSplitWords();
} }
@ -1303,7 +1368,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
if (!researchLogger.isExpectingCommitText) { if (!researchLogger.isExpectingCommitText) {
researchLogger.enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTIONCOMMITTEXT, researchLogger.enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTIONCOMMITTEXT,
newCursorPosition); newCursorPosition);
researchLogger.onWordComplete(scrubbedWord, Long.MAX_VALUE); researchLogger.commitCurrentLogUnitAsWord(scrubbedWord, Long.MAX_VALUE);
} }
researchLogger.isExpectingCommitText = false; researchLogger.isExpectingCommitText = false;
} }