Loading java/src/com/android/inputmethod/latin/LatinIME.java +3 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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(); } Loading Loading @@ -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 = Loading java/src/com/android/inputmethod/latin/UserBigramDictionary.java +53 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()) { Loading Loading @@ -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(); Loading Loading @@ -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()) { Loading java/src/com/android/inputmethod/latin/UserUnigramDictionary.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading
java/src/com/android/inputmethod/latin/LatinIME.java +3 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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(); } Loading Loading @@ -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 = Loading
java/src/com/android/inputmethod/latin/UserBigramDictionary.java +53 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()) { Loading Loading @@ -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(); Loading Loading @@ -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()) { Loading
java/src/com/android/inputmethod/latin/UserUnigramDictionary.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading