diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java index d1bf6d93afa940198f2767833f0f41742d292c2c..d181bf697b77dc4404ebc32545735e7299b7df3d 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java @@ -38,7 +38,7 @@ public final class BinaryDictionary extends Dictionary { private static final String TAG = BinaryDictionary.class.getSimpleName(); // Must be equal to MAX_WORD_LENGTH in native/jni/src/defines.h - private static final int MAX_WORD_LENGTH = Constants.Dictionary.MAX_WORD_LENGTH; + private static final int MAX_WORD_LENGTH = Constants.DICTIONARY_MAX_WORD_LENGTH; // Must be equal to MAX_RESULTS in native/jni/src/defines.h private static final int MAX_RESULTS = 18; diff --git a/java/src/com/android/inputmethod/latin/Constants.java b/java/src/com/android/inputmethod/latin/Constants.java index ad09b6a5693dbdcda96cbb2205b4533782cad7ef..6d67bdb0402a1ca9bcd066e6722f5d75cfbffe1a 100644 --- a/java/src/com/android/inputmethod/latin/Constants.java +++ b/java/src/com/android/inputmethod/latin/Constants.java @@ -126,15 +126,6 @@ public final class Constants { } } - public static final class Dictionary { - // Must be equal to MAX_WORD_LENGTH in native/jni/src/defines.h - public static final int MAX_WORD_LENGTH = 48; - - private Dictionary() { - // This utility class is no publicly instantiable. - } - } - public static final int NOT_A_CODE = -1; public static final int NOT_A_COORDINATE = -1; @@ -142,6 +133,10 @@ public final class Constants { public static final int SPELL_CHECKER_COORDINATE = -3; public static final int EXTERNAL_KEYBOARD_COORDINATE = -4; + + // Must be equal to MAX_WORD_LENGTH in native/jni/src/defines.h + public static final int DICTIONARY_MAX_WORD_LENGTH = 48; + public static boolean isValidCoordinate(final int coordinate) { // Detect {@link NOT_A_COORDINATE}, {@link SUGGESTION_STRIP_COORDINATE}, // and {@link SPELL_CHECKER_COORDINATE}. diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java index 657fc64b41c2dc38e2fb7ff4666b5c0d3065261d..3f11391baa861042d70d24e3c163b50d9afdd641 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java @@ -48,7 +48,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { /** * The maximum length of a word in this dictionary. */ - protected static final int MAX_WORD_LENGTH = Constants.Dictionary.MAX_WORD_LENGTH; + protected static final int MAX_WORD_LENGTH = Constants.DICTIONARY_MAX_WORD_LENGTH; /** * A static map of locks, each of which controls access to a single binary dictionary file. They diff --git a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java index 2666573bbfbcf45fc3782aaf08561dcaa43cff45..bd2d70365202ff4cec723250de2229cb0c80f887 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java @@ -43,7 +43,7 @@ public class ExpandableDictionary extends Dictionary { protected static final int BIGRAM_MAX_FREQUENCY = 255; private Context mContext; - private char[] mWordBuilder = new char[Constants.Dictionary.MAX_WORD_LENGTH]; + private char[] mWordBuilder = new char[Constants.DICTIONARY_MAX_WORD_LENGTH]; private int mMaxDepth; private int mInputLength; @@ -87,7 +87,7 @@ public class ExpandableDictionary extends Dictionary { } } - protected interface NextWord { + public interface NextWord { public Node getWordNode(); public int getFrequency(); public ForgettingCurveParams getFcParams(); @@ -161,7 +161,7 @@ public class ExpandableDictionary extends Dictionary { super(dictType); mContext = context; clearDictionary(); - mCodes = new int[Constants.Dictionary.MAX_WORD_LENGTH][]; + mCodes = new int[Constants.DICTIONARY_MAX_WORD_LENGTH][]; } public void loadDictionary() { @@ -198,11 +198,11 @@ public class ExpandableDictionary extends Dictionary { } public int getMaxWordLength() { - return Constants.Dictionary.MAX_WORD_LENGTH; + return Constants.DICTIONARY_MAX_WORD_LENGTH; } public void addWord(final String word, final String shortcutTarget, final int frequency) { - if (word.length() >= Constants.Dictionary.MAX_WORD_LENGTH) { + if (word.length() >= Constants.DICTIONARY_MAX_WORD_LENGTH) { return; } addWordRec(mRoots, word, 0, shortcutTarget, frequency, null); @@ -258,7 +258,7 @@ public class ExpandableDictionary extends Dictionary { final boolean blockOffensiveWords) { if (reloadDictionaryIfRequired()) return null; if (composer.size() > 1) { - if (composer.size() >= Constants.Dictionary.MAX_WORD_LENGTH) { + if (composer.size() >= Constants.DICTIONARY_MAX_WORD_LENGTH) { return null; } final ArrayList<SuggestedWordInfo> suggestions = @@ -629,7 +629,7 @@ public class ExpandableDictionary extends Dictionary { } // Local to reverseLookUp, but do not allocate each time. - private final char[] mLookedUpString = new char[Constants.Dictionary.MAX_WORD_LENGTH]; + private final char[] mLookedUpString = new char[Constants.DICTIONARY_MAX_WORD_LENGTH]; /** * reverseLookUp retrieves the full word given a list of terminal nodes and adds those words @@ -644,7 +644,7 @@ public class ExpandableDictionary extends Dictionary { for (NextWord nextWord : terminalNodes) { node = nextWord.getWordNode(); freq = nextWord.getFrequency(); - int index = Constants.Dictionary.MAX_WORD_LENGTH; + int index = Constants.DICTIONARY_MAX_WORD_LENGTH; do { --index; mLookedUpString[index] = node.mCode; @@ -656,7 +656,7 @@ public class ExpandableDictionary extends Dictionary { // to ignore the word in this case. if (freq >= 0 && node == null) { suggestions.add(new SuggestedWordInfo(new String(mLookedUpString, index, - Constants.Dictionary.MAX_WORD_LENGTH - index), + Constants.DICTIONARY_MAX_WORD_LENGTH - index), freq, SuggestedWordInfo.KIND_CORRECTION, mDictType)); } } diff --git a/java/src/com/android/inputmethod/latin/LastComposedWord.java b/java/src/com/android/inputmethod/latin/LastComposedWord.java index cdeadc74fb4745e80ff70d7cbe0db689029c1921..642b3a4da23efae5f5a292791f5ef511df780fa1 100644 --- a/java/src/com/android/inputmethod/latin/LastComposedWord.java +++ b/java/src/com/android/inputmethod/latin/LastComposedWord.java @@ -49,7 +49,7 @@ public final class LastComposedWord { public final String mPrevWord; public final int mCapitalizedMode; public final InputPointers mInputPointers = - new InputPointers(Constants.Dictionary.MAX_WORD_LENGTH); + new InputPointers(Constants.DICTIONARY_MAX_WORD_LENGTH); private boolean mActive; diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 6384ef74d024e80144b6a526e1155749d44a9375..fe5fedd5933c1d3cb0f289953cdc8e56bb87a2c2 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -75,6 +75,7 @@ import com.android.inputmethod.keyboard.KeyboardSwitcher; import com.android.inputmethod.keyboard.MainKeyboardView; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.define.ProductionFlag; +import com.android.inputmethod.latin.personalization.UserHistoryDictionary; import com.android.inputmethod.latin.settings.Settings; import com.android.inputmethod.latin.settings.SettingsActivity; import com.android.inputmethod.latin.settings.SettingsValues; diff --git a/java/src/com/android/inputmethod/latin/RichInputConnection.java b/java/src/com/android/inputmethod/latin/RichInputConnection.java index 8264f6a6d0606febbe62a0c1551b1cc0d650830d..2c65e5eca63b139467d82dee366b4cb5cfc98ecc 100644 --- a/java/src/com/android/inputmethod/latin/RichInputConnection.java +++ b/java/src/com/android/inputmethod/latin/RichInputConnection.java @@ -51,7 +51,7 @@ public final class RichInputConnection { private static final boolean DEBUG_PREVIOUS_TEXT = false; private static final boolean DEBUG_BATCH_NESTING = false; // Provision for a long word pair and a separator - private static final int LOOKBACK_CHARACTER_NUM = Constants.Dictionary.MAX_WORD_LENGTH * 2 + 1; + private static final int LOOKBACK_CHARACTER_NUM = Constants.DICTIONARY_MAX_WORD_LENGTH * 2 + 1; private static final Pattern spaceRegex = Pattern.compile("\\s+"); private static final int INVALID_CURSOR_POSITION = -1; diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index ac497ec9f0a66921680a3e121cfe597872daef04..647c6f6e136eb9c7d59a7be5e4c6dc91f3e5a92f 100644 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -22,6 +22,7 @@ import android.text.TextUtils; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; +import com.android.inputmethod.latin.personalization.UserHistoryDictionary; import com.android.inputmethod.latin.utils.AutoCorrectionUtils; import com.android.inputmethod.latin.utils.BoundedTreeSet; import com.android.inputmethod.latin.utils.CollectionUtils; diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java index 0c73d44c0cdfc1aaeb0a34199dc05cca370f84aa..a09ca605c8f2e80596f84ec93f8e81c27824a4a0 100644 --- a/java/src/com/android/inputmethod/latin/WordComposer.java +++ b/java/src/com/android/inputmethod/latin/WordComposer.java @@ -26,7 +26,7 @@ import java.util.Arrays; * A place to store the currently composing word with information such as adjacent key codes as well */ public final class WordComposer { - private static final int MAX_WORD_LENGTH = Constants.Dictionary.MAX_WORD_LENGTH; + private static final int MAX_WORD_LENGTH = Constants.DICTIONARY_MAX_WORD_LENGTH; private static final boolean DBG = LatinImeLogger.sDBG; public static final int CAPS_MODE_OFF = 0; diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java index c87a9254dee1197b3b9cff1ed3ee30d30efe9d75..000c252706f9b95334d454f6ff037f21321372d4 100644 --- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java +++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java @@ -181,7 +181,7 @@ public final class BinaryDictIOUtils { final FileHeader header = BinaryDictInputOutput.readHeader(buffer); int wordPos = 0; final int wordLen = word.codePointCount(0, word.length()); - for (int depth = 0; depth < Constants.Dictionary.MAX_WORD_LENGTH; ++depth) { + for (int depth = 0; depth < Constants.DICTIONARY_MAX_WORD_LENGTH; ++depth) { if (wordPos >= wordLen) return FormatSpec.NOT_VALID_WORD; do { @@ -746,7 +746,7 @@ public final class BinaryDictIOUtils { final int[] codePoints = FusionDictionary.getCodePoints(word); final int wordLen = codePoints.length; - for (int depth = 0; depth < Constants.Dictionary.MAX_WORD_LENGTH; ++depth) { + for (int depth = 0; depth < Constants.DICTIONARY_MAX_WORD_LENGTH; ++depth) { if (wordPos >= wordLen) break; nodeOriginAddress = buffer.position(); int nodeParentAddress = -1; diff --git a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java index e1e5e5500fb2ba7185f1090beef69a18c25148e9..feadcda764c96695f9ab2ca9047224af8230670d 100644 --- a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java +++ b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java @@ -167,7 +167,7 @@ public final class FormatSpec { // TODO: Make this value adaptative to content data, store it in the header, and // use it in the reading code. - static final int MAX_WORD_LENGTH = Constants.Dictionary.MAX_WORD_LENGTH; + static final int MAX_WORD_LENGTH = Constants.DICTIONARY_MAX_WORD_LENGTH; static final int PARENT_ADDRESS_SIZE = 3; static final int FORWARD_LINK_ADDRESS_SIZE = 3; diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java index 1132e4a4aa30175b39bdc9487a4e95ac7099984a..5a2b24c58b4fa84f755704184e82641e0f8a5ae6 100644 --- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java +++ b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java @@ -462,7 +462,7 @@ public final class FusionDictionary implements Iterable<Word> { final ArrayList<WeightedString> shortcutTargets, final boolean isNotAWord, final boolean isBlacklistEntry) { assert(frequency >= 0 && frequency <= 255); - if (word.length >= Constants.Dictionary.MAX_WORD_LENGTH) { + if (word.length >= Constants.DICTIONARY_MAX_WORD_LENGTH) { MakedictLog.w("Ignoring a word that is too long: word.length = " + word.length); return; } diff --git a/java/src/com/android/inputmethod/latin/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java similarity index 95% rename from java/src/com/android/inputmethod/latin/UserHistoryDictionary.java rename to java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java index 6cad37168a3d381a1d3de26ed4ec30c74f60db9c..a5d6f04973993b906b62919788a9d8c41a29bbe6 100644 --- a/java/src/com/android/inputmethod/latin/UserHistoryDictionary.java +++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.inputmethod.latin; +package com.android.inputmethod.latin.personalization; import android.content.Context; import android.content.SharedPreferences; @@ -23,6 +23,11 @@ import android.util.Log; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; +import com.android.inputmethod.latin.Constants; +import com.android.inputmethod.latin.Dictionary; +import com.android.inputmethod.latin.ExpandableDictionary; +import com.android.inputmethod.latin.LatinImeLogger; +import com.android.inputmethod.latin.WordComposer; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions; import com.android.inputmethod.latin.settings.Settings; @@ -152,8 +157,8 @@ public final class UserHistoryDictionary extends ExpandableDictionary { * The second word may not be null (a NullPointerException would be thrown). */ public int addToUserHistory(final String word1, final String word2, final boolean isValid) { - if (word2.length() >= Constants.Dictionary.MAX_WORD_LENGTH || - (word1 != null && word1.length() >= Constants.Dictionary.MAX_WORD_LENGTH)) { + if (word2.length() >= Constants.DICTIONARY_MAX_WORD_LENGTH || + (word1 != null && word1.length() >= Constants.DICTIONARY_MAX_WORD_LENGTH)) { return -1; } if (mBigramListLock.tryLock()) { @@ -244,8 +249,8 @@ public final class UserHistoryDictionary extends ExpandableDictionary { @Override public void setBigram(final String word1, final String word2, final int frequency) { - if (word1.length() < Constants.Dictionary.MAX_WORD_LENGTH - && word2.length() < Constants.Dictionary.MAX_WORD_LENGTH) { + if (word1.length() < Constants.DICTIONARY_MAX_WORD_LENGTH + && word2.length() < Constants.DICTIONARY_MAX_WORD_LENGTH) { profTotal++; if (DBG_SAVE_RESTORE) { Log.d(TAG, "load bigram: " + word1 + "," + word2 + "," + frequency); @@ -404,7 +409,8 @@ public final class UserHistoryDictionary extends ExpandableDictionary { } @UsedForTesting - void forceAddWordForTest(final String word1, final String word2, final boolean isValid) { + /* package for test */ void forceAddWordForTest( + final String word1, final String word2, final boolean isValid) { mBigramListLock.lock(); try { addToUserHistory(word1, word2, isValid); diff --git a/java/src/com/android/inputmethod/latin/UserHistoryDictionaryBigramList.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryBigramList.java similarity index 98% rename from java/src/com/android/inputmethod/latin/UserHistoryDictionaryBigramList.java rename to java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryBigramList.java index 28941c4a185892efc8e9d7454bc74b9c1be35bf8..b93630a1807b50b08b6438b5d3ccec057fb0f9b6 100644 --- a/java/src/com/android/inputmethod/latin/UserHistoryDictionaryBigramList.java +++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryBigramList.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.inputmethod.latin; +package com.android.inputmethod.latin.personalization; import android.util.Log; diff --git a/java/src/com/android/inputmethod/latin/utils/UserHistoryDictIOUtils.java b/java/src/com/android/inputmethod/latin/utils/UserHistoryDictIOUtils.java index 32eb0b2c52f0e1c34b49878910625164c873b8b5..d02f7187e5376965eb6de36e68c9ac5ab996a802 100644 --- a/java/src/com/android/inputmethod/latin/utils/UserHistoryDictIOUtils.java +++ b/java/src/com/android/inputmethod/latin/utils/UserHistoryDictIOUtils.java @@ -19,7 +19,6 @@ package com.android.inputmethod.latin.utils; import android.util.Log; import com.android.inputmethod.annotations.UsedForTesting; -import com.android.inputmethod.latin.UserHistoryDictionaryBigramList; import com.android.inputmethod.latin.makedict.BinaryDictIOUtils; import com.android.inputmethod.latin.makedict.BinaryDictInputOutput; import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.FusionDictionaryBufferInterface; @@ -28,6 +27,7 @@ import com.android.inputmethod.latin.makedict.FusionDictionary; import com.android.inputmethod.latin.makedict.FusionDictionary.Node; import com.android.inputmethod.latin.makedict.PendingAttribute; import com.android.inputmethod.latin.makedict.UnsupportedFormatException; +import com.android.inputmethod.latin.personalization.UserHistoryDictionaryBigramList; import java.io.IOException; import java.io.OutputStream; diff --git a/tests/src/com/android/inputmethod/latin/UserHistoryDictionaryTests.java b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java similarity index 99% rename from tests/src/com/android/inputmethod/latin/UserHistoryDictionaryTests.java rename to tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java index e0a0863ae374aa57f4509197c1ea3136c0fb37e9..48eb08a75002189e73645955c0aba68bdd8c5cda 100644 --- a/tests/src/com/android/inputmethod/latin/UserHistoryDictionaryTests.java +++ b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.inputmethod.latin; +package com.android.inputmethod.latin.personalization; import android.content.SharedPreferences; import android.preference.PreferenceManager; diff --git a/tests/src/com/android/inputmethod/latin/utils/UserHistoryDictIOUtilsTests.java b/tests/src/com/android/inputmethod/latin/utils/UserHistoryDictIOUtilsTests.java index 8c301f446a53215e352ea55ca01489f906a1f90f..b6798392f4251a85d946e9c4149d53d2e1d1738f 100644 --- a/tests/src/com/android/inputmethod/latin/utils/UserHistoryDictIOUtilsTests.java +++ b/tests/src/com/android/inputmethod/latin/utils/UserHistoryDictIOUtilsTests.java @@ -21,10 +21,10 @@ import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.LargeTest; import android.util.Log; -import com.android.inputmethod.latin.UserHistoryDictionaryBigramList; import com.android.inputmethod.latin.makedict.FormatSpec; import com.android.inputmethod.latin.makedict.FusionDictionary; import com.android.inputmethod.latin.makedict.FusionDictionary.CharGroup; +import com.android.inputmethod.latin.personalization.UserHistoryDictionaryBigramList; import com.android.inputmethod.latin.utils.ByteArrayWrapper; import com.android.inputmethod.latin.utils.UserHistoryDictIOUtils.BigramDictionaryInterface; import com.android.inputmethod.latin.utils.UserHistoryDictIOUtils.OnAddWordListener;