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

Commit f73efa90 authored by Jean Chalard's avatar Jean Chalard Committed by Android (Google) Code Review
Browse files

Merge "Move the UserUnigramDictionary functionality over"

parents 9945f364 c68d1bbf
Loading
Loading
Loading
Loading
+3 −10
Original line number Diff line number Diff line
@@ -204,7 +204,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar

    private UserDictionary mUserDictionary;
    private UserBigramDictionary mUserBigramDictionary;
    private UserUnigramDictionary mUserUnigramDictionary;
    private boolean mIsUserDictionaryAvailable;

    private LastComposedWord mLastComposedWord = LastComposedWord.NOT_A_COMPOSED_WORD;
@@ -528,12 +527,10 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar

        resetContactsDictionary(oldContactsDictionary);

        mUserUnigramDictionary
                = new UserUnigramDictionary(this, this, localeStr, Suggest.DIC_USER_UNIGRAM);
        mSuggest.setUserUnigramDictionary(mUserUnigramDictionary);

        // TODO: rename UserBigramDictionary into UserHistoryDictionary
        mUserBigramDictionary
                = new UserBigramDictionary(this, this, localeStr, Suggest.DIC_USER_BIGRAM);
        mSuggest.setUserUnigramDictionary(mUserBigramDictionary);
        mSuggest.setUserBigramDictionary(mUserBigramDictionary);

        LocaleUtils.setSystemLocale(res, savedLocale);
@@ -776,7 +773,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar

        KeyboardView inputView = mKeyboardSwitcher.getKeyboardView();
        if (inputView != null) inputView.closing();
        if (mUserUnigramDictionary != null) mUserUnigramDictionary.flushPendingWrites();
        if (mUserBigramDictionary != null) mUserBigramDictionary.flushPendingWrites();
    }

@@ -2009,11 +2005,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
            return;
        }

        if (null != mUserUnigramDictionary) {
            mUserUnigramDictionary.addUnigram(suggestion.toString());
        }

        if (mUserBigramDictionary != null) {
            mUserBigramDictionary.addUnigram(suggestion.toString());
            final InputConnection ic = getCurrentInputConnection();
            if (null != ic) {
                final CharSequence prevWord =
+53 −9
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.os.AsyncTask;
import android.provider.BaseColumns;
import android.text.TextUtils;
import android.util.Log;

import java.util.HashMap;
@@ -155,19 +156,49 @@ public class UserBigramDictionary extends ExpandableDictionary {
    }

    /**
     * Pair will be added to the userbigram database.
     * Return whether the passed charsequence is in the dictionary.
     */
    public int addBigramPair(String word1, String word2) {
    @Override
    public boolean isValidWord(final CharSequence word) {
        // TODO: figure out what is the correct thing to do here.
        return false;
    }

    /**
     * Add a single word without context.
     *
     * This is a temporary method to match the interface to UserUnigramDictionary. In the end
     * this should be merged with addBigramPair.
     */
    public void addUnigram(final String newWord) {
        addBigramPair(null, newWord);
    }

    /**
     * Pair will be added to the user history dictionary.
     *
     * The first word may be null. That means we don't know the context, in other words,
     * it's only a unigram. The first word may also be an empty string : this means start
     * context, as in beginning of a sentence for example.
     * The second word may not be null (a NullPointerException would be thrown).
     */
    public int addBigramPair(final String word1, String word2) {
        // remove caps if second word is autocapitalized
        if (mIme != null && mIme.isAutoCapitalized()) {
            word2 = Character.toLowerCase(word2.charAt(0)) + word2.substring(1);
        }
        // Do not insert a word as a bigram of itself
        if (word1.equals(word2)) {
        if (word2.equals(word1)) {
            return 0;
        }

        int freq = super.addBigram(word1, word2, FREQUENCY_FOR_TYPED);
        int freq;
        if (null == word1) {
            freq = FREQUENCY_FOR_TYPED;
            super.addWord(word2, FREQUENCY_FOR_TYPED);
        } else {
            freq = super.addBigram(word1, word2, FREQUENCY_FOR_TYPED);
        }
        if (freq > FREQUENCY_MAX) freq = FREQUENCY_MAX;
        synchronized (mPendingWritesLock) {
            if (freq == FREQUENCY_FOR_TYPED || mPendingWrites.isEmpty()) {
@@ -225,7 +256,10 @@ public class UserBigramDictionary extends ExpandableDictionary {
                    int frequency = cursor.getInt(frequencyIndex);
                    // Safeguard against adding really long words. Stack may overflow due
                    // to recursive lookup
                    if (word1.length() < MAX_WORD_LENGTH && word2.length() < MAX_WORD_LENGTH) {
                    if (null == word1) {
                        super.addWord(word2, frequency);
                    } else if (word1.length() < MAX_WORD_LENGTH
                            && word2.length() < MAX_WORD_LENGTH) {
                        super.setBigram(word1, word2, frequency);
                    }
                    cursor.moveToNext();
@@ -367,13 +401,23 @@ public class UserBigramDictionary extends ExpandableDictionary {
            // Write all the entries to the db
            Iterator<Bigram> iterator = mMap.iterator();
            while (iterator.hasNext()) {
                // TODO: this process of making a text search for each pair each time
                // is terribly inefficient. Optimize this.
                Bigram bi = iterator.next();

                // find pair id
                Cursor c = db.query(MAIN_TABLE_NAME, new String[] { MAIN_COLUMN_ID },
                final Cursor c;
                if (null != bi.mWord1) {
                    c = db.query(MAIN_TABLE_NAME, new String[] { MAIN_COLUMN_ID },
                            MAIN_COLUMN_WORD1 + "=? AND " + MAIN_COLUMN_WORD2 + "=? AND "
                            + MAIN_COLUMN_LOCALE + "=?",
                            new String[] { bi.mWord1, bi.mWord2, mLocale }, null, null, null);
                } else {
                    c = db.query(MAIN_TABLE_NAME, new String[] { MAIN_COLUMN_ID },
                            MAIN_COLUMN_WORD1 + " IS NULL AND " + MAIN_COLUMN_WORD2 + "=? AND "
                            + MAIN_COLUMN_LOCALE + "=?",
                            new String[] { bi.mWord2, mLocale }, null, null, null);
                }

                int pairId;
                if (c.moveToFirst()) {
+1 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ import java.util.Set;
 * based dictionary. It stores words that the user typed to supply a provision
 * for suggesting and re-ordering of candidates.
 */
public class UserUnigramDictionary extends ExpandableDictionary {
class UserUnigramDictionary extends ExpandableDictionary {
    static final boolean ENABLE_USER_UNIGRAM_DICTIONARY = false;

    // Weight added to a user picking a new word from the suggestion strip