Loading common/src/com/android/inputmethod/latin/common/ComposedData.java 0 → 100644 +61 −0 Original line number Diff line number Diff line /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.inputmethod.latin.common; /** * An immutable class that encapsulates a snapshot of word composition data. */ public class ComposedData { public final InputPointers mInputPointers; public final boolean mIsBatchMode; public final String mTypedWord; public ComposedData(final InputPointers inputPointers, final boolean isBatchMode, final String typedWord) { mInputPointers = inputPointers; mIsBatchMode = isBatchMode; mTypedWord = typedWord; } /** * Copy the code points in the typed word to a destination array of ints. * * If the array is too small to hold the code points in the typed word, nothing is copied and * -1 is returned. * * @param destination the array of ints. * @return the number of copied code points. */ public int copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount( final int[] destination) { // lastIndex is exclusive final int lastIndex = mTypedWord.length() - StringUtils.getTrailingSingleQuotesCount(mTypedWord); if (lastIndex <= 0) { // The string is empty or contains only single quotes. return 0; } // The following function counts the number of code points in the text range which begins // at index 0 and extends to the character at lastIndex. final int codePointSize = Character.codePointCount(mTypedWord, 0, lastIndex); if (codePointSize > destination.length) { return -1; } return StringUtils.copyCodePointsAndReturnCodePointCount(destination, mTypedWord, 0, lastIndex, true /* downCase */); } } java/src/com/android/inputmethod/latin/BinaryDictionary.java +9 −8 Original line number Diff line number Diff line Loading @@ -21,8 +21,8 @@ import android.util.Log; import android.util.SparseArray; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.common.ComposedData; import com.android.inputmethod.latin.common.Constants; import com.android.inputmethod.latin.common.InputPointers; import com.android.inputmethod.latin.common.StringUtils; Loading Loading @@ -262,8 +262,8 @@ public final class BinaryDictionary extends Dictionary { } @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final NgramContext ngramContext, final ProximityInfo proximityInfo, public ArrayList<SuggestedWordInfo> getSuggestions(final ComposedData composedData, final NgramContext ngramContext, final long proximityInfoHandle, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading @@ -274,11 +274,12 @@ public final class BinaryDictionary extends Dictionary { Arrays.fill(session.mInputCodePoints, Constants.NOT_A_CODE); ngramContext.outputToArray(session.mPrevWordCodePointArrays, session.mIsBeginningOfSentenceArray); final InputPointers inputPointers = composer.getInputPointers(); final boolean isGesture = composer.isBatchMode(); final InputPointers inputPointers = composedData.mInputPointers; final boolean isGesture = composedData.mIsBatchMode; final int inputSize; if (!isGesture) { inputSize = composer.copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount( inputSize = composedData.copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount( session.mInputCodePoints); if (inputSize < 0) { return null; Loading @@ -303,7 +304,7 @@ public final class BinaryDictionary extends Dictionary { Dictionary.NOT_A_WEIGHT_OF_LANG_MODEL_VS_SPATIAL_MODEL; } // TOOD: Pass multiple previous words information for n-gram. getSuggestionsNative(mNativeDict, proximityInfo.getNativeProximityInfo(), getSuggestionsNative(mNativeDict, proximityInfoHandle, getTraverseSession(sessionId).getSession(), inputPointers.getXCoordinates(), inputPointers.getYCoordinates(), inputPointers.getTimes(), inputPointers.getPointerIds(), session.mInputCodePoints, inputSize, Loading java/src/com/android/inputmethod/latin/Dictionary.java +7 −7 Original line number Diff line number Diff line Loading @@ -17,8 +17,8 @@ package com.android.inputmethod.latin; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.common.ComposedData; import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion; import java.util.ArrayList; Loading Loading @@ -87,9 +87,9 @@ public abstract class Dictionary { /** * Searches for suggestions for a given context. * @param composer the key sequence to match with coordinate info, as a WordComposer * @param composedData the key sequence to match with coordinate info * @param ngramContext the context for n-gram. * @param proximityInfo the object for key proximity. May be ignored by some implementations. * @param proximityInfoHandle the handle for key proximity. Is ignored by some implementations. * @param settingsValuesForSuggestion the settings values used for the suggestion. * @param sessionId the session id. * @param weightForLocale the weight given to this locale, to multiply the output scores for Loading @@ -99,8 +99,8 @@ public abstract class Dictionary { * a float array that has only one element. This can be updated when a different value is used. * @return the list of suggestions (possibly null if none) */ abstract public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final NgramContext ngramContext, final ProximityInfo proximityInfo, abstract public ArrayList<SuggestedWordInfo> getSuggestions(final ComposedData composedData, final NgramContext ngramContext, final long proximityInfoHandle, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel); Loading Loading @@ -203,8 +203,8 @@ public abstract class Dictionary { } @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final NgramContext ngramContext, final ProximityInfo proximityInfo, public ArrayList<SuggestedWordInfo> getSuggestions(final ComposedData composedData, final NgramContext ngramContext, final long proximityInfoHandle, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading java/src/com/android/inputmethod/latin/DictionaryCollection.java +8 −8 Original line number Diff line number Diff line Loading @@ -18,8 +18,8 @@ package com.android.inputmethod.latin; import android.util.Log; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.common.ComposedData; import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion; import java.util.ArrayList; Loading Loading @@ -59,8 +59,8 @@ public final class DictionaryCollection extends Dictionary { } @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final NgramContext ngramContext, final ProximityInfo proximityInfo, public ArrayList<SuggestedWordInfo> getSuggestions(final ComposedData composedData, final NgramContext ngramContext, final long proximityInfoHandle, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading @@ -68,15 +68,15 @@ public final class DictionaryCollection extends Dictionary { if (dictionaries.isEmpty()) return null; // 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, ngramContext, proximityInfo, settingsValuesForSuggestion, sessionId, ArrayList<SuggestedWordInfo> suggestions = dictionaries.get(0).getSuggestions(composedData, ngramContext, proximityInfoHandle, 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, ngramContext, proximityInfo, settingsValuesForSuggestion, sessionId, weightForLocale, inOutWeightOfLangModelVsSpatialModel); final ArrayList<SuggestedWordInfo> sugg = dictionaries.get(i).getSuggestions( composedData, ngramContext, proximityInfoHandle, settingsValuesForSuggestion, sessionId, weightForLocale, inOutWeightOfLangModelVsSpatialModel); if (null != sugg) suggestions.addAll(sugg); } return suggestions; Loading java/src/com/android/inputmethod/latin/DictionaryFacilitator.java +3 −4 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.util.Pair; import android.view.inputmethod.InputMethodSubtype; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.ExpandableBinaryDictionary.UpdateEntriesForInputEventsCallback; import com.android.inputmethod.latin.NgramContext.WordInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; Loading Loading @@ -683,7 +682,7 @@ public class DictionaryFacilitator { // TODO: Revise the way to fusion suggestion results. public SuggestionResults getSuggestionResults(final WordComposer composer, final NgramContext ngramContext, final ProximityInfo proximityInfo, final NgramContext ngramContext, final long proximityInfoHandle, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId) { final DictionaryGroup[] dictionaryGroups = mDictionaryGroups; final SuggestionResults suggestionResults = new SuggestionResults( Loading @@ -698,8 +697,8 @@ public class DictionaryFacilitator { ? dictionaryGroup.mWeightForGesturingInLocale : dictionaryGroup.mWeightForTypingInLocale; final ArrayList<SuggestedWordInfo> dictionarySuggestions = dictionary.getSuggestions(composer, ngramContext, proximityInfo, settingsValuesForSuggestion, sessionId, dictionary.getSuggestions(composer.getComposedDataSnapshot(), ngramContext, proximityInfoHandle, settingsValuesForSuggestion, sessionId, weightForLocale, weightOfLangModelVsSpatialModel); if (null == dictionarySuggestions) continue; suggestionResults.addAll(dictionarySuggestions); Loading Loading
common/src/com/android/inputmethod/latin/common/ComposedData.java 0 → 100644 +61 −0 Original line number Diff line number Diff line /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.inputmethod.latin.common; /** * An immutable class that encapsulates a snapshot of word composition data. */ public class ComposedData { public final InputPointers mInputPointers; public final boolean mIsBatchMode; public final String mTypedWord; public ComposedData(final InputPointers inputPointers, final boolean isBatchMode, final String typedWord) { mInputPointers = inputPointers; mIsBatchMode = isBatchMode; mTypedWord = typedWord; } /** * Copy the code points in the typed word to a destination array of ints. * * If the array is too small to hold the code points in the typed word, nothing is copied and * -1 is returned. * * @param destination the array of ints. * @return the number of copied code points. */ public int copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount( final int[] destination) { // lastIndex is exclusive final int lastIndex = mTypedWord.length() - StringUtils.getTrailingSingleQuotesCount(mTypedWord); if (lastIndex <= 0) { // The string is empty or contains only single quotes. return 0; } // The following function counts the number of code points in the text range which begins // at index 0 and extends to the character at lastIndex. final int codePointSize = Character.codePointCount(mTypedWord, 0, lastIndex); if (codePointSize > destination.length) { return -1; } return StringUtils.copyCodePointsAndReturnCodePointCount(destination, mTypedWord, 0, lastIndex, true /* downCase */); } }
java/src/com/android/inputmethod/latin/BinaryDictionary.java +9 −8 Original line number Diff line number Diff line Loading @@ -21,8 +21,8 @@ import android.util.Log; import android.util.SparseArray; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.common.ComposedData; import com.android.inputmethod.latin.common.Constants; import com.android.inputmethod.latin.common.InputPointers; import com.android.inputmethod.latin.common.StringUtils; Loading Loading @@ -262,8 +262,8 @@ public final class BinaryDictionary extends Dictionary { } @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final NgramContext ngramContext, final ProximityInfo proximityInfo, public ArrayList<SuggestedWordInfo> getSuggestions(final ComposedData composedData, final NgramContext ngramContext, final long proximityInfoHandle, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading @@ -274,11 +274,12 @@ public final class BinaryDictionary extends Dictionary { Arrays.fill(session.mInputCodePoints, Constants.NOT_A_CODE); ngramContext.outputToArray(session.mPrevWordCodePointArrays, session.mIsBeginningOfSentenceArray); final InputPointers inputPointers = composer.getInputPointers(); final boolean isGesture = composer.isBatchMode(); final InputPointers inputPointers = composedData.mInputPointers; final boolean isGesture = composedData.mIsBatchMode; final int inputSize; if (!isGesture) { inputSize = composer.copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount( inputSize = composedData.copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount( session.mInputCodePoints); if (inputSize < 0) { return null; Loading @@ -303,7 +304,7 @@ public final class BinaryDictionary extends Dictionary { Dictionary.NOT_A_WEIGHT_OF_LANG_MODEL_VS_SPATIAL_MODEL; } // TOOD: Pass multiple previous words information for n-gram. getSuggestionsNative(mNativeDict, proximityInfo.getNativeProximityInfo(), getSuggestionsNative(mNativeDict, proximityInfoHandle, getTraverseSession(sessionId).getSession(), inputPointers.getXCoordinates(), inputPointers.getYCoordinates(), inputPointers.getTimes(), inputPointers.getPointerIds(), session.mInputCodePoints, inputSize, Loading
java/src/com/android/inputmethod/latin/Dictionary.java +7 −7 Original line number Diff line number Diff line Loading @@ -17,8 +17,8 @@ package com.android.inputmethod.latin; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.common.ComposedData; import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion; import java.util.ArrayList; Loading Loading @@ -87,9 +87,9 @@ public abstract class Dictionary { /** * Searches for suggestions for a given context. * @param composer the key sequence to match with coordinate info, as a WordComposer * @param composedData the key sequence to match with coordinate info * @param ngramContext the context for n-gram. * @param proximityInfo the object for key proximity. May be ignored by some implementations. * @param proximityInfoHandle the handle for key proximity. Is ignored by some implementations. * @param settingsValuesForSuggestion the settings values used for the suggestion. * @param sessionId the session id. * @param weightForLocale the weight given to this locale, to multiply the output scores for Loading @@ -99,8 +99,8 @@ public abstract class Dictionary { * a float array that has only one element. This can be updated when a different value is used. * @return the list of suggestions (possibly null if none) */ abstract public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final NgramContext ngramContext, final ProximityInfo proximityInfo, abstract public ArrayList<SuggestedWordInfo> getSuggestions(final ComposedData composedData, final NgramContext ngramContext, final long proximityInfoHandle, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel); Loading Loading @@ -203,8 +203,8 @@ public abstract class Dictionary { } @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final NgramContext ngramContext, final ProximityInfo proximityInfo, public ArrayList<SuggestedWordInfo> getSuggestions(final ComposedData composedData, final NgramContext ngramContext, final long proximityInfoHandle, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading
java/src/com/android/inputmethod/latin/DictionaryCollection.java +8 −8 Original line number Diff line number Diff line Loading @@ -18,8 +18,8 @@ package com.android.inputmethod.latin; import android.util.Log; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.common.ComposedData; import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion; import java.util.ArrayList; Loading Loading @@ -59,8 +59,8 @@ public final class DictionaryCollection extends Dictionary { } @Override public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, final NgramContext ngramContext, final ProximityInfo proximityInfo, public ArrayList<SuggestedWordInfo> getSuggestions(final ComposedData composedData, final NgramContext ngramContext, final long proximityInfoHandle, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, final float weightForLocale, final float[] inOutWeightOfLangModelVsSpatialModel) { Loading @@ -68,15 +68,15 @@ public final class DictionaryCollection extends Dictionary { if (dictionaries.isEmpty()) return null; // 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, ngramContext, proximityInfo, settingsValuesForSuggestion, sessionId, ArrayList<SuggestedWordInfo> suggestions = dictionaries.get(0).getSuggestions(composedData, ngramContext, proximityInfoHandle, 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, ngramContext, proximityInfo, settingsValuesForSuggestion, sessionId, weightForLocale, inOutWeightOfLangModelVsSpatialModel); final ArrayList<SuggestedWordInfo> sugg = dictionaries.get(i).getSuggestions( composedData, ngramContext, proximityInfoHandle, settingsValuesForSuggestion, sessionId, weightForLocale, inOutWeightOfLangModelVsSpatialModel); if (null != sugg) suggestions.addAll(sugg); } return suggestions; Loading
java/src/com/android/inputmethod/latin/DictionaryFacilitator.java +3 −4 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.util.Pair; import android.view.inputmethod.InputMethodSubtype; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.ExpandableBinaryDictionary.UpdateEntriesForInputEventsCallback; import com.android.inputmethod.latin.NgramContext.WordInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; Loading Loading @@ -683,7 +682,7 @@ public class DictionaryFacilitator { // TODO: Revise the way to fusion suggestion results. public SuggestionResults getSuggestionResults(final WordComposer composer, final NgramContext ngramContext, final ProximityInfo proximityInfo, final NgramContext ngramContext, final long proximityInfoHandle, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId) { final DictionaryGroup[] dictionaryGroups = mDictionaryGroups; final SuggestionResults suggestionResults = new SuggestionResults( Loading @@ -698,8 +697,8 @@ public class DictionaryFacilitator { ? dictionaryGroup.mWeightForGesturingInLocale : dictionaryGroup.mWeightForTypingInLocale; final ArrayList<SuggestedWordInfo> dictionarySuggestions = dictionary.getSuggestions(composer, ngramContext, proximityInfo, settingsValuesForSuggestion, sessionId, dictionary.getSuggestions(composer.getComposedDataSnapshot(), ngramContext, proximityInfoHandle, settingsValuesForSuggestion, sessionId, weightForLocale, weightOfLangModelVsSpatialModel); if (null == dictionarySuggestions) continue; suggestionResults.addAll(dictionarySuggestions); Loading