Loading java/proguard.flags +1 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,6 @@ # to preserve changing those methods' signature. -keep class com.android.inputmethod.latin.AssetFileAddress -keep class com.android.inputmethod.latin.Dictionary -keep class com.android.inputmethod.latin.PrevWordsInfo -keep class com.android.inputmethod.latin.NgramContext -keep class com.android.inputmethod.latin.makedict.ProbabilityInfo -keep class com.android.inputmethod.latin.utils.LanguageModelParam java/src/com/android/inputmethod/latin/BinaryDictionary.java +20 −20 Original line number Diff line number Diff line Loading @@ -255,7 +255,7 @@ public final class BinaryDictionary extends Dictionary { @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo, final NgramContext ngramContext, final ProximityInfo proximityInfo, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading @@ -264,7 +264,7 @@ public final class BinaryDictionary extends Dictionary { } final DicTraverseSession session = getTraverseSession(sessionId); Arrays.fill(session.mInputCodePoints, Constants.NOT_A_CODE); prevWordsInfo.outputToArray(session.mPrevWordCodePointArrays, ngramContext.outputToArray(session.mPrevWordCodePointArrays, session.mIsBeginningOfSentenceArray); final InputPointers inputPointers = composer.getInputPointers(); final boolean isGesture = composer.isBatchMode(); Loading Loading @@ -299,7 +299,7 @@ public final class BinaryDictionary extends Dictionary { inputPointers.getYCoordinates(), inputPointers.getTimes(), inputPointers.getPointerIds(), session.mInputCodePoints, inputSize, session.mNativeSuggestOptions.getOptions(), session.mPrevWordCodePointArrays, session.mIsBeginningOfSentenceArray, prevWordsInfo.getPrevWordCount(), session.mIsBeginningOfSentenceArray, ngramContext.getPrevWordCount(), session.mOutputSuggestionCount, session.mOutputCodePoints, session.mOutputScores, session.mSpaceIndices, session.mOutputTypes, session.mOutputAutoCommitFirstWordConfidence, Loading Loading @@ -357,17 +357,17 @@ 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 isValidNgram(final NgramContext ngramContext, final String word) { return getNgramProbability(ngramContext, word) != NOT_A_PROBABILITY; } public int getNgramProbability(final PrevWordsInfo prevWordsInfo, final String word) { if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) { public int getNgramProbability(final NgramContext ngramContext, final String word) { if (!ngramContext.isValid() || TextUtils.isEmpty(word)) { return NOT_A_PROBABILITY; } final int[][] prevWordCodePointArrays = new int[prevWordsInfo.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[prevWordsInfo.getPrevWordCount()]; prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[][] prevWordCodePointArrays = new int[ngramContext.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[ngramContext.getPrevWordCount()]; ngramContext.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[] wordCodePoints = StringUtils.toCodePointArray(word); return getNgramProbabilityNative(mNativeDict, prevWordCodePointArrays, isBeginningOfSentenceArray, wordCodePoints); Loading Loading @@ -456,14 +456,14 @@ public final class BinaryDictionary extends Dictionary { } // Add an n-gram entry to the binary dictionary with timestamp in native code. public boolean addNgramEntry(final PrevWordsInfo prevWordsInfo, final String word, public boolean addNgramEntry(final NgramContext ngramContext, final String word, final int probability, final int timestamp) { if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) { if (!ngramContext.isValid() || TextUtils.isEmpty(word)) { return false; } final int[][] prevWordCodePointArrays = new int[prevWordsInfo.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[prevWordsInfo.getPrevWordCount()]; prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[][] prevWordCodePointArrays = new int[ngramContext.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[ngramContext.getPrevWordCount()]; ngramContext.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[] wordCodePoints = StringUtils.toCodePointArray(word); if (!addNgramEntryNative(mNativeDict, prevWordCodePointArrays, isBeginningOfSentenceArray, wordCodePoints, probability, timestamp)) { Loading @@ -474,13 +474,13 @@ public final class BinaryDictionary extends Dictionary { } // Remove an n-gram entry from the binary dictionary in native code. public boolean removeNgramEntry(final PrevWordsInfo prevWordsInfo, final String word) { if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) { public boolean removeNgramEntry(final NgramContext ngramContext, final String word) { if (!ngramContext.isValid() || TextUtils.isEmpty(word)) { return false; } final int[][] prevWordCodePointArrays = new int[prevWordsInfo.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[prevWordsInfo.getPrevWordCount()]; prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[][] prevWordCodePointArrays = new int[ngramContext.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[ngramContext.getPrevWordCount()]; ngramContext.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[] wordCodePoints = StringUtils.toCodePointArray(word); if (!removeNgramEntryNative(mNativeDict, prevWordCodePointArrays, isBeginningOfSentenceArray, wordCodePoints)) { Loading java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java +6 −6 Original line number Diff line number Diff line Loading @@ -218,7 +218,7 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary { */ private void addNameLocked(final String name) { int len = StringUtils.codePointCount(name); PrevWordsInfo prevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO; NgramContext ngramContext = NgramContext.EMPTY_PREV_WORDS_INFO; // TODO: Better tokenization for non-Latin writing systems for (int i = 0; i < len; i++) { if (Character.isLetter(name.codePointAt(i))) { Loading @@ -233,19 +233,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); Log.d(TAG, "addName " + name + ", " + word + ", " + ngramContext); } runGCIfRequiredLocked(true /* mindsBlockByGC */); addUnigramLocked(word, FREQUENCY_FOR_CONTACTS, null /* shortcut */, 0 /* shortcutFreq */, false /* isNotAWord */, false /* isBlacklisted */, BinaryDictionary.NOT_A_VALID_TIMESTAMP); if (!prevWordsInfo.isValid() && mUseFirstLastBigrams) { if (!ngramContext.isValid() && mUseFirstLastBigrams) { runGCIfRequiredLocked(true /* mindsBlockByGC */); addNgramEntryLocked(prevWordsInfo, word, FREQUENCY_FOR_CONTACTS_BIGRAM, addNgramEntryLocked(ngramContext, word, FREQUENCY_FOR_CONTACTS_BIGRAM, BinaryDictionary.NOT_A_VALID_TIMESTAMP); } prevWordsInfo = prevWordsInfo.getNextPrevWordsInfo( new PrevWordsInfo.WordInfo(word)); ngramContext = ngramContext.getNextNgramContext( new NgramContext.WordInfo(word)); } } } Loading java/src/com/android/inputmethod/latin/Dictionary.java +4 −5 Original line number Diff line number Diff line Loading @@ -81,10 +81,9 @@ public abstract class Dictionary { } /** * Searches for suggestions for a given context. For the moment the context is only the * previous word. * Searches for suggestions for a given context. * @param composer the key sequence to match with coordinate info, as a WordComposer * @param prevWordsInfo the information of previous words. * @param ngramContext the context for n-gram. * @param proximityInfo the object for key proximity. May be ignored by some implementations. * @param settingsValuesForSuggestion the settings values used for the suggestion. * @param sessionId the session id. Loading @@ -96,7 +95,7 @@ public abstract class Dictionary { * @return the list of suggestions (possibly null if none) */ abstract public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo, final NgramContext ngramContext, final ProximityInfo proximityInfo, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel); Loading Loading @@ -191,7 +190,7 @@ public abstract class Dictionary { @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo, final NgramContext ngramContext, final ProximityInfo proximityInfo, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading java/src/com/android/inputmethod/latin/DictionaryCollection.java +3 −3 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ public final class DictionaryCollection extends Dictionary { @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo, final NgramContext ngramContext, final ProximityInfo proximityInfo, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading @@ -69,13 +69,13 @@ public final class DictionaryCollection extends Dictionary { // To avoid creating unnecessary objects, we get the list out of the first // dictionary and add the rest to it if not null, hence the get(0) ArrayList<SuggestedWordInfo> suggestions = dictionaries.get(0).getSuggestions(composer, prevWordsInfo, proximityInfo, settingsValuesForSuggestion, sessionId, ngramContext, proximityInfo, settingsValuesForSuggestion, sessionId, weightForLocale, inOutWeightOfLangModelVsSpatialModel); if (null == suggestions) suggestions = new ArrayList<>(); final int length = dictionaries.size(); for (int i = 1; i < length; ++ i) { final ArrayList<SuggestedWordInfo> sugg = dictionaries.get(i).getSuggestions(composer, prevWordsInfo, proximityInfo, settingsValuesForSuggestion, sessionId, ngramContext, proximityInfo, settingsValuesForSuggestion, sessionId, weightForLocale, inOutWeightOfLangModelVsSpatialModel); if (null != sugg) suggestions.addAll(sugg); } Loading Loading
java/proguard.flags +1 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,6 @@ # to preserve changing those methods' signature. -keep class com.android.inputmethod.latin.AssetFileAddress -keep class com.android.inputmethod.latin.Dictionary -keep class com.android.inputmethod.latin.PrevWordsInfo -keep class com.android.inputmethod.latin.NgramContext -keep class com.android.inputmethod.latin.makedict.ProbabilityInfo -keep class com.android.inputmethod.latin.utils.LanguageModelParam
java/src/com/android/inputmethod/latin/BinaryDictionary.java +20 −20 Original line number Diff line number Diff line Loading @@ -255,7 +255,7 @@ public final class BinaryDictionary extends Dictionary { @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo, final NgramContext ngramContext, final ProximityInfo proximityInfo, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading @@ -264,7 +264,7 @@ public final class BinaryDictionary extends Dictionary { } final DicTraverseSession session = getTraverseSession(sessionId); Arrays.fill(session.mInputCodePoints, Constants.NOT_A_CODE); prevWordsInfo.outputToArray(session.mPrevWordCodePointArrays, ngramContext.outputToArray(session.mPrevWordCodePointArrays, session.mIsBeginningOfSentenceArray); final InputPointers inputPointers = composer.getInputPointers(); final boolean isGesture = composer.isBatchMode(); Loading Loading @@ -299,7 +299,7 @@ public final class BinaryDictionary extends Dictionary { inputPointers.getYCoordinates(), inputPointers.getTimes(), inputPointers.getPointerIds(), session.mInputCodePoints, inputSize, session.mNativeSuggestOptions.getOptions(), session.mPrevWordCodePointArrays, session.mIsBeginningOfSentenceArray, prevWordsInfo.getPrevWordCount(), session.mIsBeginningOfSentenceArray, ngramContext.getPrevWordCount(), session.mOutputSuggestionCount, session.mOutputCodePoints, session.mOutputScores, session.mSpaceIndices, session.mOutputTypes, session.mOutputAutoCommitFirstWordConfidence, Loading Loading @@ -357,17 +357,17 @@ 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 isValidNgram(final NgramContext ngramContext, final String word) { return getNgramProbability(ngramContext, word) != NOT_A_PROBABILITY; } public int getNgramProbability(final PrevWordsInfo prevWordsInfo, final String word) { if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) { public int getNgramProbability(final NgramContext ngramContext, final String word) { if (!ngramContext.isValid() || TextUtils.isEmpty(word)) { return NOT_A_PROBABILITY; } final int[][] prevWordCodePointArrays = new int[prevWordsInfo.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[prevWordsInfo.getPrevWordCount()]; prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[][] prevWordCodePointArrays = new int[ngramContext.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[ngramContext.getPrevWordCount()]; ngramContext.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[] wordCodePoints = StringUtils.toCodePointArray(word); return getNgramProbabilityNative(mNativeDict, prevWordCodePointArrays, isBeginningOfSentenceArray, wordCodePoints); Loading Loading @@ -456,14 +456,14 @@ public final class BinaryDictionary extends Dictionary { } // Add an n-gram entry to the binary dictionary with timestamp in native code. public boolean addNgramEntry(final PrevWordsInfo prevWordsInfo, final String word, public boolean addNgramEntry(final NgramContext ngramContext, final String word, final int probability, final int timestamp) { if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) { if (!ngramContext.isValid() || TextUtils.isEmpty(word)) { return false; } final int[][] prevWordCodePointArrays = new int[prevWordsInfo.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[prevWordsInfo.getPrevWordCount()]; prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[][] prevWordCodePointArrays = new int[ngramContext.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[ngramContext.getPrevWordCount()]; ngramContext.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[] wordCodePoints = StringUtils.toCodePointArray(word); if (!addNgramEntryNative(mNativeDict, prevWordCodePointArrays, isBeginningOfSentenceArray, wordCodePoints, probability, timestamp)) { Loading @@ -474,13 +474,13 @@ public final class BinaryDictionary extends Dictionary { } // Remove an n-gram entry from the binary dictionary in native code. public boolean removeNgramEntry(final PrevWordsInfo prevWordsInfo, final String word) { if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) { public boolean removeNgramEntry(final NgramContext ngramContext, final String word) { if (!ngramContext.isValid() || TextUtils.isEmpty(word)) { return false; } final int[][] prevWordCodePointArrays = new int[prevWordsInfo.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[prevWordsInfo.getPrevWordCount()]; prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[][] prevWordCodePointArrays = new int[ngramContext.getPrevWordCount()][]; final boolean[] isBeginningOfSentenceArray = new boolean[ngramContext.getPrevWordCount()]; ngramContext.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); final int[] wordCodePoints = StringUtils.toCodePointArray(word); if (!removeNgramEntryNative(mNativeDict, prevWordCodePointArrays, isBeginningOfSentenceArray, wordCodePoints)) { Loading
java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java +6 −6 Original line number Diff line number Diff line Loading @@ -218,7 +218,7 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary { */ private void addNameLocked(final String name) { int len = StringUtils.codePointCount(name); PrevWordsInfo prevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO; NgramContext ngramContext = NgramContext.EMPTY_PREV_WORDS_INFO; // TODO: Better tokenization for non-Latin writing systems for (int i = 0; i < len; i++) { if (Character.isLetter(name.codePointAt(i))) { Loading @@ -233,19 +233,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); Log.d(TAG, "addName " + name + ", " + word + ", " + ngramContext); } runGCIfRequiredLocked(true /* mindsBlockByGC */); addUnigramLocked(word, FREQUENCY_FOR_CONTACTS, null /* shortcut */, 0 /* shortcutFreq */, false /* isNotAWord */, false /* isBlacklisted */, BinaryDictionary.NOT_A_VALID_TIMESTAMP); if (!prevWordsInfo.isValid() && mUseFirstLastBigrams) { if (!ngramContext.isValid() && mUseFirstLastBigrams) { runGCIfRequiredLocked(true /* mindsBlockByGC */); addNgramEntryLocked(prevWordsInfo, word, FREQUENCY_FOR_CONTACTS_BIGRAM, addNgramEntryLocked(ngramContext, word, FREQUENCY_FOR_CONTACTS_BIGRAM, BinaryDictionary.NOT_A_VALID_TIMESTAMP); } prevWordsInfo = prevWordsInfo.getNextPrevWordsInfo( new PrevWordsInfo.WordInfo(word)); ngramContext = ngramContext.getNextNgramContext( new NgramContext.WordInfo(word)); } } } Loading
java/src/com/android/inputmethod/latin/Dictionary.java +4 −5 Original line number Diff line number Diff line Loading @@ -81,10 +81,9 @@ public abstract class Dictionary { } /** * Searches for suggestions for a given context. For the moment the context is only the * previous word. * Searches for suggestions for a given context. * @param composer the key sequence to match with coordinate info, as a WordComposer * @param prevWordsInfo the information of previous words. * @param ngramContext the context for n-gram. * @param proximityInfo the object for key proximity. May be ignored by some implementations. * @param settingsValuesForSuggestion the settings values used for the suggestion. * @param sessionId the session id. Loading @@ -96,7 +95,7 @@ public abstract class Dictionary { * @return the list of suggestions (possibly null if none) */ abstract public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo, final NgramContext ngramContext, final ProximityInfo proximityInfo, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel); Loading Loading @@ -191,7 +190,7 @@ public abstract class Dictionary { @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo, final NgramContext ngramContext, final ProximityInfo proximityInfo, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading
java/src/com/android/inputmethod/latin/DictionaryCollection.java +3 −3 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ public final class DictionaryCollection extends Dictionary { @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo, final NgramContext ngramContext, final ProximityInfo proximityInfo, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading @@ -69,13 +69,13 @@ public final class DictionaryCollection extends Dictionary { // To avoid creating unnecessary objects, we get the list out of the first // dictionary and add the rest to it if not null, hence the get(0) ArrayList<SuggestedWordInfo> suggestions = dictionaries.get(0).getSuggestions(composer, prevWordsInfo, proximityInfo, settingsValuesForSuggestion, sessionId, ngramContext, proximityInfo, settingsValuesForSuggestion, sessionId, weightForLocale, inOutWeightOfLangModelVsSpatialModel); if (null == suggestions) suggestions = new ArrayList<>(); final int length = dictionaries.size(); for (int i = 1; i < length; ++ i) { final ArrayList<SuggestedWordInfo> sugg = dictionaries.get(i).getSuggestions(composer, prevWordsInfo, proximityInfo, settingsValuesForSuggestion, sessionId, ngramContext, proximityInfo, settingsValuesForSuggestion, sessionId, weightForLocale, inOutWeightOfLangModelVsSpatialModel); if (null != sugg) suggestions.addAll(sugg); } Loading