Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99f31896 authored by Kurt Partridge's avatar Kurt Partridge
Browse files

[Rlog32] ResearchLogger segment motion data around gestures correctly

multi-project commit with I684ba5fed8c653777942e6b0366113ca40dfa37c

Change-Id: Id3804e6cfa97b4cdde212b8eebc413f76fa4772c
parent f763dc59
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -1153,7 +1153,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
            commitChosenWord(typedWord, LastComposedWord.COMMIT_TYPE_USER_TYPED_WORD,
                    separatorString);
            if (ProductionFlag.IS_EXPERIMENTAL) {
                ResearchLogger.getInstance().onWordComplete(typedWord, Long.MAX_VALUE);
                ResearchLogger.getInstance().onWordFinished(typedWord);
            }
        }
    }
@@ -1193,8 +1193,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
            final String text = lastTwo.charAt(1) + " ";
            mConnection.commitText(text, 1);
            if (ProductionFlag.IS_EXPERIMENTAL) {
                ResearchLogger.getInstance().onWordComplete(text, Long.MAX_VALUE);
                ResearchLogger.latinIME_swapSwapperAndSpace();
                ResearchLogger.latinIME_swapSwapperAndSpace(text);
            }
            mKeyboardSwitcher.updateShiftState();
        }
@@ -1214,7 +1213,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
            final String textToInsert = ". ";
            mConnection.commitText(textToInsert, 1);
            if (ProductionFlag.IS_EXPERIMENTAL) {
                ResearchLogger.getInstance().onWordComplete(textToInsert, Long.MAX_VALUE);
                ResearchLogger.latinIME_maybeDoubleSpacePeriod(textToInsert);
            }
            mKeyboardSwitcher.updateShiftState();
            return true;
@@ -1465,7 +1464,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
        }
        mConnection.commitText(text, 1);
        if (ProductionFlag.IS_EXPERIMENTAL) {
            ResearchLogger.getInstance().onWordComplete(text, Long.MAX_VALUE);
            ResearchLogger.latinIME_onTextInput(text);
        }
        mConnection.endBatchEdit();
        // Space state must be updated before calling updateShiftState
@@ -1726,7 +1725,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
            }
            if (SPACE_STATE_DOUBLE == spaceState) {
                mHandler.cancelDoubleSpacePeriodTimer();
                if (mConnection.revertDoubleSpace()) {
                if (mConnection.revertDoubleSpacePeriod()) {
                    // No need to reset mSpaceState, it has already be done (that's why we
                    // receive it as a parameter)
                    return;
@@ -2324,7 +2323,6 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
        }
        if (ProductionFlag.IS_EXPERIMENTAL) {
            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
        // separator.
+3 −3
Original line number Diff line number Diff line
@@ -648,7 +648,7 @@ public final class RichInputConnection {
        return word;
    }

    public boolean revertDoubleSpace() {
    public boolean revertDoubleSpacePeriod() {
        if (DEBUG_BATCH_NESTING) checkBatchEdit();
        // 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.
@@ -665,7 +665,7 @@ public final class RichInputConnection {
        final String doubleSpace = "  ";
        commitText(doubleSpace, 1);
        if (ProductionFlag.IS_EXPERIMENTAL) {
            ResearchLogger.getInstance().onWordComplete(doubleSpace, Long.MAX_VALUE);
            ResearchLogger.richInputConnection_revertDoubleSpacePeriod(doubleSpace);
        }
        return true;
    }
@@ -690,7 +690,7 @@ public final class RichInputConnection {
        final String text = " " + textBeforeCursor.subSequence(0, 1);
        commitText(text, 1);
        if (ProductionFlag.IS_EXPERIMENTAL) {
            ResearchLogger.getInstance().onWordComplete(text, Long.MAX_VALUE);
            ResearchLogger.richInputConnection_revertSwapPunctuation(text);
        }
        return true;
    }
+74 −9
Original line number Diff line number Diff line
@@ -153,6 +153,11 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang

    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() {
        mStatistics = Statistics.getInstance();
    }
@@ -739,9 +744,15 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
        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 =
            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();
        if (word != null && word.length() > 0 && hasLetters(word)) {
            mCurrentLogUnit.setWord(word);
@@ -755,6 +766,11 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
        mCurrentLogUnit = newLogUnit;
    }

    public void onWordFinished(final String word) {
        commitCurrentLogUnitAsWord(word, mSavedDownEventTime);
        mSavedDownEventTime = Long.MAX_VALUE;
    }

    private static int scrubDigitFromCodePoint(int codePoint) {
        return Character.isDigit(codePoint) ? DIGIT_REPLACEMENT_CODEPOINT : codePoint;
    }
@@ -896,8 +912,14 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
            }
            final float size = me.getSize(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);
            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;
            }
        }
    }

@@ -1035,6 +1057,16 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
                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().
     *
@@ -1051,7 +1083,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
                scrubDigitsFromString(replacedWord), index,
                suggestion == null ? null : scrubbedWord, Constants.SUGGESTION_STRIP_COORDINATE,
                Constants.SUGGESTION_STRIP_COORDINATE);
        researchLogger.onWordComplete(scrubbedWord, Long.MAX_VALUE);
        researchLogger.commitCurrentLogUnitAsWord(scrubbedWord, Long.MAX_VALUE);
        researchLogger.mStatistics.recordManualSuggestion();
    }

@@ -1067,7 +1099,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
        final ResearchLogger researchLogger = getInstance();
        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_PUNCTUATIONSUGGESTION, index, suggestion,
                Constants.SUGGESTION_STRIP_COORDINATE, Constants.SUGGESTION_STRIP_COORDINATE);
        researchLogger.onWordComplete(suggestion, Long.MAX_VALUE);
        researchLogger.commitCurrentLogUnitAsWord(suggestion, Long.MAX_VALUE);
    }

    /**
@@ -1096,8 +1128,20 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
     */
    private static final LogStatement LOGSTATEMENT_LATINIME_SWAPSWAPPERANDSPACE =
            new LogStatement("LatinIMESwapSwapperAndSpace", false, false);
    public static void latinIME_swapSwapperAndSpace() {
        getInstance().enqueueEvent(LOGSTATEMENT_LATINIME_SWAPSWAPPERANDSPACE);
    public static void latinIME_swapSwapperAndSpace(final String text) {
        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);
    }

    /**
@@ -1154,6 +1198,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_REVERTCOMMIT, committedWord,
                originallyTypedWord);
        researchLogger.mStatistics.recordRevertCommit();
        researchLogger.commitCurrentLogUnitAsWord(originallyTypedWord, Long.MAX_VALUE);
    }

    /**
@@ -1247,6 +1292,26 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
                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().
     *
@@ -1263,7 +1328,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
        final ResearchLogger researchLogger = getInstance();
        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_COMMITCURRENTAUTOCORRECTION,
                scrubbedTypedWord, scrubbedAutoCorrection, separatorString);
        researchLogger.onWordComplete(scrubbedAutoCorrection, Long.MAX_VALUE);
        researchLogger.commitCurrentLogUnitAsWord(scrubbedAutoCorrection, Long.MAX_VALUE);
    }

    private boolean isExpectingCommitText = false;
@@ -1282,7 +1347,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
        final ResearchLogger researchLogger = getInstance();
        final String scrubbedWord = scrubDigitsFromString(committedWord.toString());
        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_COMMIT_PARTIAL_TEXT);
        researchLogger.onWordComplete(scrubbedWord, lastTimestampOfWordData);
        researchLogger.commitCurrentLogUnitAsWord(scrubbedWord, lastTimestampOfWordData);
        researchLogger.mStatistics.recordSplitWords();
    }

@@ -1301,7 +1366,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
        if (!researchLogger.isExpectingCommitText) {
            researchLogger.enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTIONCOMMITTEXT,
                    newCursorPosition);
            researchLogger.onWordComplete(scrubbedWord, Long.MAX_VALUE);
            researchLogger.commitCurrentLogUnitAsWord(scrubbedWord, Long.MAX_VALUE);
        }
        researchLogger.isExpectingCommitText = false;
    }