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

Commit 4e21d371 authored by Ken Wakasa's avatar Ken Wakasa
Browse files

Revert "Use PrevWordsInfo for get/add/remove n-gram(bigram) entry."

This reverts commit ff50b391.

Bug: 14119293
Bug: 14425059
Bug: 15102610

Change-Id: If278b4ab236e38d20d8cdc0761b0438911bd4ff9
parent ff50b391
Loading
Loading
Loading
Loading
+17 −20
Original line number Diff line number Diff line
@@ -359,16 +359,14 @@ public final class BinaryDictionary extends Dictionary {
    }

    @UsedForTesting
    public boolean isValidNgram(final PrevWordsInfo prevWordsInfo, final String word) {
        return getNgramProbability(prevWordsInfo, word) != NOT_A_PROBABILITY;
    public boolean isValidBigram(final String word0, final String word1) {
        return getBigramProbability(word0, word1) != NOT_A_PROBABILITY;
    }

    public int getNgramProbability(final PrevWordsInfo prevWordsInfo, final String word) {
        if (TextUtils.isEmpty(prevWordsInfo.mPrevWord) || TextUtils.isEmpty(word)) {
            return NOT_A_PROBABILITY;
        }
        final int[] codePoints0 = StringUtils.toCodePointArray(prevWordsInfo.mPrevWord);
        final int[] codePoints1 = StringUtils.toCodePointArray(word);
    public int getBigramProbability(final String word0, final String word1) {
        if (TextUtils.isEmpty(word0) || TextUtils.isEmpty(word1)) return NOT_A_PROBABILITY;
        final int[] codePoints0 = StringUtils.toCodePointArray(word0);
        final int[] codePoints1 = StringUtils.toCodePointArray(word1);
        return getBigramProbabilityNative(mNativeDict, codePoints0, codePoints1);
    }

@@ -419,7 +417,7 @@ public final class BinaryDictionary extends Dictionary {
    }

    // Add a unigram entry to binary dictionary with unigram attributes in native code.
    public void addUnigramEntry(final String word, final int probability,
    public void addUnigramWord(final String word, final int probability,
            final String shortcutTarget, final int shortcutProbability, final boolean isNotAWord,
            final boolean isBlacklisted, final int timestamp) {
        if (TextUtils.isEmpty(word)) {
@@ -433,26 +431,25 @@ public final class BinaryDictionary extends Dictionary {
        mHasUpdated = true;
    }

    // Add an n-gram entry to the binary dictionary with timestamp in native code.
    public void addNgramEntry(final PrevWordsInfo prevWordsInfo, final String word,
            final int probability,
    // Add a bigram entry to binary dictionary with timestamp in native code.
    public void addBigramWords(final String word0, final String word1, final int probability,
            final int timestamp) {
        if (TextUtils.isEmpty(prevWordsInfo.mPrevWord) || TextUtils.isEmpty(word)) {
        if (TextUtils.isEmpty(word0) || TextUtils.isEmpty(word1)) {
            return;
        }
        final int[] codePoints0 = StringUtils.toCodePointArray(prevWordsInfo.mPrevWord);
        final int[] codePoints1 = StringUtils.toCodePointArray(word);
        final int[] codePoints0 = StringUtils.toCodePointArray(word0);
        final int[] codePoints1 = StringUtils.toCodePointArray(word1);
        addBigramWordsNative(mNativeDict, codePoints0, codePoints1, probability, timestamp);
        mHasUpdated = true;
    }

    // Remove an n-gram entry from the binary dictionary in native code.
    public void removeNgramEntry(final PrevWordsInfo prevWordsInfo, final String word) {
        if (TextUtils.isEmpty(prevWordsInfo.mPrevWord) || TextUtils.isEmpty(word)) {
    // Remove a bigram entry form binary dictionary in native code.
    public void removeBigramWords(final String word0, final String word1) {
        if (TextUtils.isEmpty(word0) || TextUtils.isEmpty(word1)) {
            return;
        }
        final int[] codePoints0 = StringUtils.toCodePointArray(prevWordsInfo.mPrevWord);
        final int[] codePoints1 = StringUtils.toCodePointArray(word);
        final int[] codePoints0 = StringUtils.toCodePointArray(word0);
        final int[] codePoints1 = StringUtils.toCodePointArray(word1);
        removeBigramWordsNative(mNativeDict, codePoints0, codePoints1);
        mHasUpdated = true;
    }
+8 −8
Original line number Diff line number Diff line
@@ -142,7 +142,7 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary {
                Log.d(TAG, "loadAccountVocabulary: " + word);
            }
            runGCIfRequiredLocked(true /* mindsBlockByGC */);
            addUnigramLocked(word, FREQUENCY_FOR_CONTACTS, null /* shortcut */,
            addWordDynamicallyLocked(word, FREQUENCY_FOR_CONTACTS, null /* shortcut */,
                    0 /* shortcutFreq */, false /* isNotAWord */, false /* isBlacklisted */,
                    BinaryDictionary.NOT_A_VALID_TIMESTAMP);
        }
@@ -224,7 +224,7 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary {
     */
    private void addNameLocked(final String name) {
        int len = StringUtils.codePointCount(name);
        PrevWordsInfo prevWordsInfo = new PrevWordsInfo(null);
        String prevWord = null;
        // TODO: Better tokenization for non-Latin writing systems
        for (int i = 0; i < len; i++) {
            if (Character.isLetter(name.codePointAt(i))) {
@@ -239,19 +239,19 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary {
                final int wordLen = StringUtils.codePointCount(word);
                if (wordLen < MAX_WORD_LENGTH && wordLen > 1) {
                    if (DEBUG) {
                        Log.d(TAG, "addName " + name + ", " + word + ", "
                                + prevWordsInfo.mPrevWord);
                        Log.d(TAG, "addName " + name + ", " + word + ", " + prevWord);
                    }
                    runGCIfRequiredLocked(true /* mindsBlockByGC */);
                    addUnigramLocked(word, FREQUENCY_FOR_CONTACTS,
                    addWordDynamicallyLocked(word, FREQUENCY_FOR_CONTACTS,
                            null /* shortcut */, 0 /* shortcutFreq */, false /* isNotAWord */,
                            false /* isBlacklisted */, BinaryDictionary.NOT_A_VALID_TIMESTAMP);
                    if (!TextUtils.isEmpty(prevWordsInfo.mPrevWord) && mUseFirstLastBigrams) {
                    if (!TextUtils.isEmpty(prevWord) && mUseFirstLastBigrams) {
                        runGCIfRequiredLocked(true /* mindsBlockByGC */);
                        addNgramEntryLocked(prevWordsInfo, word, FREQUENCY_FOR_CONTACTS_BIGRAM,
                        addBigramDynamicallyLocked(prevWord, word,
                                FREQUENCY_FOR_CONTACTS_BIGRAM,
                                BinaryDictionary.NOT_A_VALID_TIMESTAMP);
                    }
                    prevWordsInfo = new PrevWordsInfo(word);
                    prevWord = word;
                }
            }
        }
+9 −11
Original line number Diff line number Diff line
@@ -370,23 +370,22 @@ public class DictionaryFacilitatorForSuggest {
    }

    public void addToUserHistory(final String suggestion, final boolean wasAutoCapitalized,
            final PrevWordsInfo prevWordsInfo, final int timeStampInSeconds,
            final String previousWord, final int timeStampInSeconds,
            final boolean blockPotentiallyOffensive) {
        final Dictionaries dictionaries = mDictionaries;
        final String[] words = suggestion.split(Constants.WORD_SEPARATOR);
        for (int i = 0; i < words.length; i++) {
            final String currentWord = words[i];
            final PrevWordsInfo prevWordsInfoForCurrentWord =
                    (i == 0) ? prevWordsInfo : new PrevWordsInfo(words[i - 1]);
            final String prevWord = (i == 0) ? previousWord : words[i - 1];
            final boolean wasCurrentWordAutoCapitalized = (i == 0) ? wasAutoCapitalized : false;
            addWordToUserHistory(dictionaries, prevWordsInfoForCurrentWord, currentWord,
            addWordToUserHistory(dictionaries, prevWord, currentWord,
                    wasCurrentWordAutoCapitalized, timeStampInSeconds, blockPotentiallyOffensive);
        }
    }

    private void addWordToUserHistory(final Dictionaries dictionaries,
            final PrevWordsInfo prevWordsInfo, final String word, final boolean wasAutoCapitalized,
            final int timeStampInSeconds, final boolean blockPotentiallyOffensive) {
    private void addWordToUserHistory(final Dictionaries dictionaries, final String prevWord,
            final String word, final boolean wasAutoCapitalized, final int timeStampInSeconds,
            final boolean blockPotentiallyOffensive) {
        final ExpandableBinaryDictionary userHistoryDictionary =
                dictionaries.getSubDict(Dictionary.TYPE_USER_HISTORY);
        if (userHistoryDictionary == null) {
@@ -431,16 +430,15 @@ public class DictionaryFacilitatorForSuggest {
        // We demote unrecognized words (frequency < 0, below) by specifying them as "invalid".
        // We don't add words with 0-frequency (assuming they would be profanity etc.).
        final boolean isValid = maxFreq > 0;
        UserHistoryDictionary.addToDictionary(userHistoryDictionary, prevWordsInfo, secondWord,
        UserHistoryDictionary.addToDictionary(userHistoryDictionary, prevWord, secondWord,
                isValid, timeStampInSeconds);
    }

    public void cancelAddingUserHistory(final PrevWordsInfo prevWordsInfo,
            final String committedWord) {
    public void cancelAddingUserHistory(final String previousWord, final String committedWord) {
        final ExpandableBinaryDictionary userHistoryDictionary =
                mDictionaries.getSubDict(Dictionary.TYPE_USER_HISTORY);
        if (userHistoryDictionary != null) {
            userHistoryDictionary.removeNgramDynamically(prevWordsInfo, committedWord);
            userHistoryDictionary.removeBigramDynamically(previousWord, committedWord);
        }
    }

+15 −15
Original line number Diff line number Diff line
@@ -269,9 +269,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
    }

    /**
     * Adds unigram information of a word to the dictionary. May overwrite an existing entry.
     * Dynamically adds a word unigram to the dictionary. May overwrite an existing entry.
     */
    public void addUnigramEntry(final String word, final int frequency,
    public void addWordDynamically(final String word, final int frequency,
            final String shortcutTarget, final int shortcutFreq, final boolean isNotAWord,
            final boolean isBlacklisted, final int timestamp) {
        reloadDictionaryIfRequired();
@@ -282,23 +282,23 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
                    return;
                }
                runGCIfRequiredLocked(true /* mindsBlockByGC */);
                addUnigramLocked(word, frequency, shortcutTarget, shortcutFreq,
                addWordDynamicallyLocked(word, frequency, shortcutTarget, shortcutFreq,
                        isNotAWord, isBlacklisted, timestamp);
            }
        });
    }

    protected void addUnigramLocked(final String word, final int frequency,
    protected void addWordDynamicallyLocked(final String word, final int frequency,
            final String shortcutTarget, final int shortcutFreq, final boolean isNotAWord,
            final boolean isBlacklisted, final int timestamp) {
        mBinaryDictionary.addUnigramEntry(word, frequency, shortcutTarget, shortcutFreq,
        mBinaryDictionary.addUnigramWord(word, frequency, shortcutTarget, shortcutFreq,
                isNotAWord, isBlacklisted, timestamp);
    }

    /**
     * Adds n-gram information of a word to the dictionary. May overwrite an existing entry.
     * Dynamically adds a word bigram in the dictionary. May overwrite an existing entry.
     */
    public void addNgramEntry(final PrevWordsInfo prevWordsInfo, final String word,
    public void addBigramDynamically(final String word0, final String word1,
            final int frequency, final int timestamp) {
        reloadDictionaryIfRequired();
        asyncExecuteTaskWithWriteLock(new Runnable() {
@@ -308,20 +308,20 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
                    return;
                }
                runGCIfRequiredLocked(true /* mindsBlockByGC */);
                addNgramEntryLocked(prevWordsInfo, word, frequency, timestamp);
                addBigramDynamicallyLocked(word0, word1, frequency, timestamp);
            }
        });
    }

    protected void addNgramEntryLocked(final PrevWordsInfo prevWordsInfo, final String word,
    protected void addBigramDynamicallyLocked(final String word0, final String word1,
            final int frequency, final int timestamp) {
        mBinaryDictionary.addNgramEntry(prevWordsInfo, word, frequency, timestamp);
        mBinaryDictionary.addBigramWords(word0, word1, frequency, timestamp);
    }

    /**
     * Dynamically remove the n-gram entry in the dictionary.
     * Dynamically remove a word bigram in the dictionary.
     */
    public void removeNgramDynamically(final PrevWordsInfo prevWordsInfo, final String word1) {
    public void removeBigramDynamically(final String word0, final String word1) {
        reloadDictionaryIfRequired();
        asyncExecuteTaskWithWriteLock(new Runnable() {
            @Override
@@ -330,7 +330,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
                    return;
                }
                runGCIfRequiredLocked(true /* mindsBlockByGC */);
                mBinaryDictionary.removeNgramEntry(prevWordsInfo, word1);
                mBinaryDictionary.removeBigramWords(word0, word1);
            }
        });
    }
@@ -428,9 +428,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
        return mBinaryDictionary.isValidWord(word);
    }

    protected boolean isValidNgramLocked(final PrevWordsInfo prevWordsInfo, final String word) {
    protected boolean isValidBigramLocked(final String word1, final String word2) {
        if (mBinaryDictionary == null) return false;
        return mBinaryDictionary.isValidNgram(prevWordsInfo, word);
        return mBinaryDictionary.isValidBigram(word1, word2);
    }

    /**
+3 −3
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ public final class LastComposedWord {
    public final String mTypedWord;
    public final CharSequence mCommittedWord;
    public final String mSeparatorString;
    public final PrevWordsInfo mPrevWordsInfo;
    public final String mPrevWord;
    public final int mCapitalizedMode;
    public final InputPointers mInputPointers =
            new InputPointers(Constants.DICTIONARY_MAX_WORD_LENGTH);
@@ -64,7 +64,7 @@ public final class LastComposedWord {
    public LastComposedWord(final ArrayList<Event> events,
            final InputPointers inputPointers, final String typedWord,
            final CharSequence committedWord, final String separatorString,
            final PrevWordsInfo prevWordsInfo, final int capitalizedMode) {
            final String prevWord, final int capitalizedMode) {
        if (inputPointers != null) {
            mInputPointers.copy(inputPointers);
        }
@@ -73,7 +73,7 @@ public final class LastComposedWord {
        mCommittedWord = committedWord;
        mSeparatorString = separatorString;
        mActive = true;
        mPrevWordsInfo = prevWordsInfo;
        mPrevWord = prevWord;
        mCapitalizedMode = capitalizedMode;
    }

Loading