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

Commit 56b26195 authored by Jean Chalard's avatar Jean Chalard Committed by Android Git Automerger
Browse files

am 95eeb2df: Merge "Add a class for previously composed data (A1)"

* commit '95eeb2df':
  Add a class for previously composed data (A1)
parents 13c66f20 95eeb2df
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.android.inputmethod.latin;

/**
 * This class encapsulates data about a word previously composed, but that has been
 * committed already. This is used for resuming suggestion, and cancel auto-correction.
 */
public class LastComposedWord {
    // COMMIT_TYPE_USER_TYPED_WORD is used when the word committed is the exact typed word, with
    // no hinting from the IME. It happens when some external event happens (rotating the device,
    // for example) or when auto-correction is off by settings or editor attributes.
    public static final int COMMIT_TYPE_USER_TYPED_WORD = 0;
    // COMMIT_TYPE_MANUAL_PICK is used when the user pressed a field in the suggestion strip.
    public static final int COMMIT_TYPE_MANUAL_PICK = 1;
    // COMMIT_TYPE_DECIDED_WORD is used when the IME commits the word it decided was best
    // for the current user input. It may be different from what the user typed (true auto-correct)
    // or it may be exactly what the user typed if it's in the dictionary or the IME does not have
    // enough confidence in any suggestion to auto-correct (auto-correct to typed word).
    public static final int COMMIT_TYPE_DECIDED_WORD = 2;
    // COMMIT_TYPE_CANCEL_AUTO_CORRECT is used upon committing back the old word upon cancelling
    // an auto-correction.
    public static final int COMMIT_TYPE_CANCEL_AUTO_CORRECT = 3;

    public final int mType;

    public LastComposedWord(final int type) {
        mType = type;
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -1096,7 +1096,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
    public void commitTyped(final InputConnection ic) {
        if (!mWordComposer.isComposingWord()) return;
        final CharSequence typedWord = mWordComposer.getTypedWord();
        mWordComposer.onCommitWord(WordComposer.COMMIT_TYPE_USER_TYPED_WORD);
        mWordComposer.onCommitWord(LastComposedWord.COMMIT_TYPE_USER_TYPED_WORD);
        if (typedWord.length() > 0) {
            if (ic != null) {
                ic.commitText(typedWord, 1);
@@ -1847,7 +1847,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
            }
            Utils.Stats.onAutoCorrection(typedWord, autoCorrection.toString(), separatorCodePoint);
            mExpectingUpdateSelection = true;
            commitChosenWord(autoCorrection, WordComposer.COMMIT_TYPE_DECIDED_WORD);
            commitChosenWord(autoCorrection, LastComposedWord.COMMIT_TYPE_DECIDED_WORD);
            // Add the word to the user unigram dictionary if it's not a known word
            addToUserUnigramAndBigramDictionaries(autoCorrection,
                    UserUnigramDictionary.FREQUENCY_FOR_TYPED);
@@ -1917,7 +1917,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
        LatinImeLogger.logOnManualSuggestion(mWordComposer.getTypedWord().toString(),
                suggestion.toString(), index, suggestions.mWords);
        mExpectingUpdateSelection = true;
        commitChosenWord(suggestion, WordComposer.COMMIT_TYPE_MANUAL_PICK);
        commitChosenWord(suggestion, LastComposedWord.COMMIT_TYPE_MANUAL_PICK);
        // Add the word to the auto dictionary if it's not a known word
        if (index == 0) {
            addToUserUnigramAndBigramDictionaries(suggestion,
@@ -2176,7 +2176,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
        // Re-insert the separator
        ic.commitText(separator, 1);
        mWordComposer.deleteAutoCorrection();
        mWordComposer.onCommitWord(WordComposer.COMMIT_TYPE_CANCEL_AUTO_CORRECT);
        mWordComposer.onCommitWord(LastComposedWord.COMMIT_TYPE_CANCEL_AUTO_CORRECT);
        Utils.Stats.onSeparator(separator.charAt(0), WordComposer.NOT_A_COORDINATE,
                WordComposer.NOT_A_COORDINATE);
        mHandler.cancelUpdateBigramPredictions();
+4 −20
Original line number Diff line number Diff line
@@ -33,23 +33,6 @@ public class WordComposer {
    public static final int NOT_A_CODE = KeyDetector.NOT_A_CODE;
    public static final int NOT_A_COORDINATE = -1;

    // TODO: Straighten out commit behavior so that the flags here are more understandable,
    // and possibly adjust their names.
    // COMMIT_TYPE_USER_TYPED_WORD is used when the word committed is the exact typed word, with
    // no hinting from the IME. It happens when some external event happens (rotating the device,
    // for example) or when auto-correction is off by settings or editor attributes.
    public static final int COMMIT_TYPE_USER_TYPED_WORD = 0;
    // COMMIT_TYPE_MANUAL_PICK is used when the user pressed a field in the suggestion strip.
    public static final int COMMIT_TYPE_MANUAL_PICK = 1;
    // COMMIT_TYPE_DECIDED_WORD is used when the IME commits the word it decided was best
    // for the current user input. It may be different from what the user typed (true auto-correct)
    // or it may be exactly what the user typed if it's in the dictionary or the IME does not have
    // enough confidence in any suggestion to auto-correct (auto-correct to typed word).
    public static final int COMMIT_TYPE_DECIDED_WORD = 2;
    // COMMIT_TYPE_CANCEL_AUTO_CORRECT is used upon committing back the old word upon cancelling
    // an auto-correction.
    public static final int COMMIT_TYPE_CANCEL_AUTO_CORRECT = 3;

    // Storage for all the info about the current input.
    private static class CharacterStore {
        /**
@@ -346,8 +329,8 @@ public class WordComposer {
        return mCurrentWord.mAutoCorrection;
    }

    // `type' should be one of the COMMIT_TYPE_* constants above.
    public void onCommitWord(final int type) {
    // `type' should be one of the LastComposedWord.COMMIT_TYPE_* constants above.
    public LastComposedWord onCommitWord(final int type) {
        mCommittedWordSavedForSuggestionResuming = mCurrentWord;
        // Note: currently, we come here whenever we commit a word. If it's any *other* kind than
        // DECIDED_WORD, we should reset mAutoCorrection so that we don't attempt to cancel later.
@@ -359,12 +342,13 @@ public class WordComposer {
        // #didAutoCorrectToAnotherWord with #equals(). It would be marginally cleaner to do it
        // here, but it would be slower (since we would #equals() for each commit, instead of
        // only on cancel), and ultimately we want to figure it out even earlier anyway.
        if (type != COMMIT_TYPE_DECIDED_WORD) {
        if (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD) {
            // Only ever revert an auto-correct.
            mCommittedWordSavedForSuggestionResuming.mAutoCorrection = null;
        }
        // TODO: improve performance by swapping buffers instead of creating a new object.
        mCurrentWord = new CharacterStore();
        return new LastComposedWord(type);
    }

    public boolean hasWordKeptForSuggestionResuming() {