diff options
Diffstat (limited to 'java')
7 files changed, 36 insertions, 13 deletions
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml index 33a10fa8f..64929adf1 100644 --- a/java/res/xml/method.xml +++ b/java/res/xml/method.xml @@ -626,6 +626,7 @@ /> <!-- TODO: This Sinhala keyboard is a preliminary layout. This isn't based on the final specification. --> + <!-- si_LK is currently disabled due to lack of combination rules. <subtype android:icon="@drawable/ic_ime_switcher_dark" android:label="@string/subtype_generic" android:subtypeId="0x5c6b3bde" @@ -634,6 +635,7 @@ android:imeSubtypeExtraValue="KeyboardLayoutSet=sinhala,EmojiCapable" android:isAsciiCapable="false" /> + --> <subtype android:icon="@drawable/ic_ime_switcher_dark" android:label="@string/subtype_generic" android:subtypeId="0x8e94d413" @@ -693,6 +695,7 @@ android:isAsciiCapable="false" /> <!-- TODO: Enabling/Disabling ta_LK subtype must be aligned with si_LK subtype. --> + <!-- ta_LK disabled alongside si_LK subtype due to lack of combination rules. <subtype android:icon="@drawable/ic_ime_switcher_dark" android:label="@string/subtype_generic" android:subtypeId="0x6ca12d84" @@ -701,6 +704,7 @@ android:imeSubtypeExtraValue="KeyboardLayoutSet=tamil,EmojiCapable" android:isAsciiCapable="false" /> + !--> <subtype android:icon="@drawable/ic_ime_switcher_dark" android:label="@string/subtype_generic" android:subtypeId="0x785abbd9" diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java index daac5b521..7f4631b2d 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java @@ -58,7 +58,8 @@ public final class BinaryDictionary extends Dictionary { // Must be equal to CONFIDENCE_TO_AUTO_COMMIT in native/jni/src/defines.h private static final int CONFIDENCE_TO_AUTO_COMMIT = 1000000; - static final int DICTIONARY_MAX_WORD_LENGTH = 48; + public static final int DICTIONARY_MAX_WORD_LENGTH = 48; + public static final int MAX_PREV_WORD_COUNT_FOR_N_GRAM = 3; @UsedForTesting public static final String UNIGRAM_COUNT_QUERY = "UNIGRAM_COUNT"; diff --git a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java index ba0f9b807..15a14e5af 100644 --- a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java @@ -125,7 +125,8 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary */ private void addNameLocked(final String name) { int len = StringUtils.codePointCount(name); - NgramContext ngramContext = NgramContext.EMPTY_PREV_WORDS_INFO; + NgramContext ngramContext = NgramContext.getEmptyPrevWordsContext( + BinaryDictionary.MAX_PREV_WORD_COUNT_FOR_N_GRAM); // TODO: Better tokenization for non-Latin writing systems for (int i = 0; i < len; i++) { if (Character.isLetter(name.codePointAt(i))) { diff --git a/java/src/com/android/inputmethod/latin/NgramContext.java b/java/src/com/android/inputmethod/latin/NgramContext.java index aeeff6126..9682fb8a4 100644 --- a/java/src/com/android/inputmethod/latin/NgramContext.java +++ b/java/src/com/android/inputmethod/latin/NgramContext.java @@ -43,6 +43,10 @@ public class NgramContext { public static final String CONTEXT_SEPARATOR = " "; + public static NgramContext getEmptyPrevWordsContext(int maxPrevWordCount) { + return new NgramContext(maxPrevWordCount, WordInfo.EMPTY_WORD_INFO); + } + /** * Word information used to represent previous words information. */ @@ -102,10 +106,17 @@ public class NgramContext { private final WordInfo[] mPrevWordsInfo; private final int mPrevWordsCount; + private final int mMaxPrevWordCount; + // Construct from the previous word information. public NgramContext(final WordInfo... prevWordsInfo) { + this(DecoderSpecificConstants.MAX_PREV_WORD_COUNT_FOR_N_GRAM, prevWordsInfo); + } + + public NgramContext(final int maxPrevWordCount, final WordInfo... prevWordsInfo) { mPrevWordsInfo = prevWordsInfo; mPrevWordsCount = prevWordsInfo.length; + mMaxPrevWordCount = maxPrevWordCount; } /** @@ -113,12 +124,11 @@ public class NgramContext { */ @Nonnull public NgramContext getNextNgramContext(final WordInfo wordInfo) { - final int nextPrevWordCount = Math.min( - DecoderSpecificConstants.MAX_PREV_WORD_COUNT_FOR_N_GRAM, mPrevWordsCount + 1); + final int nextPrevWordCount = Math.min(mMaxPrevWordCount, mPrevWordsCount + 1); final WordInfo[] prevWordsInfo = new WordInfo[nextPrevWordCount]; prevWordsInfo[0] = wordInfo; System.arraycopy(mPrevWordsInfo, 0, prevWordsInfo, 1, nextPrevWordCount - 1); - return new NgramContext(prevWordsInfo); + return new NgramContext(mMaxPrevWordCount, prevWordsInfo); } diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java index f02a63e57..00175f024 100644 --- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java +++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java @@ -324,7 +324,8 @@ public final class InputLogic { // That's going to be predictions (or punctuation suggestions), so INPUT_STYLE_NONE. handler.postUpdateSuggestionStrip(SuggestedWords.INPUT_STYLE_NONE); - StatsUtils.onPickSuggestionManually(mSuggestedWords, suggestionInfo); + StatsUtils.onPickSuggestionManually( + mSuggestedWords, suggestionInfo, mDictionaryFacilitator); StatsUtils.onWordCommitSuggestionPickedManually( suggestionInfo.mWord, mWordComposer.isBatchMode()); return inputTransaction; @@ -2053,8 +2054,7 @@ public final class InputLogic { mConnection.getExpectedSelectionEnd() - stringToCommit.length(), typedWord, stringToCommit)); StatsUtils.onAutoCorrection(typedWord, stringToCommit, isBatchMode, - null == autoCorrectionOrNull - ? null : autoCorrectionOrNull.mSourceDict.mDictType); + mDictionaryFacilitator); StatsUtils.onWordCommitAutoCorrect(stringToCommit, isBatchMode); } else { StatsUtils.onWordCommitUserTyped(stringToCommit, isBatchMode); diff --git a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java index 54ee68d65..cbf0829b5 100644 --- a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java +++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java @@ -20,6 +20,7 @@ import android.content.Context; import com.android.inputmethod.annotations.ExternallyReferenced; import com.android.inputmethod.annotations.UsedForTesting; +import com.android.inputmethod.latin.BinaryDictionary; import com.android.inputmethod.latin.Dictionary; import com.android.inputmethod.latin.ExpandableBinaryDictionary; import com.android.inputmethod.latin.NgramContext; @@ -98,7 +99,7 @@ public class UserHistoryDictionary extends ExpandableBinaryDictionary { public static void addToDictionary(final ExpandableBinaryDictionary userHistoryDictionary, @Nonnull final NgramContext ngramContext, final String word, final boolean isValid, final int timestamp) { - if (word.length() > DecoderSpecificConstants.DICTIONARY_MAX_WORD_LENGTH) { + if (word.length() > BinaryDictionary.DICTIONARY_MAX_WORD_LENGTH) { return; } userHistoryDictionary.updateEntriesForWord(ngramContext, word, diff --git a/java/src/com/android/inputmethod/latin/utils/NgramContextUtils.java b/java/src/com/android/inputmethod/latin/utils/NgramContextUtils.java index 727df1a93..c05ffd693 100644 --- a/java/src/com/android/inputmethod/latin/utils/NgramContextUtils.java +++ b/java/src/com/android/inputmethod/latin/utils/NgramContextUtils.java @@ -31,6 +31,7 @@ public final class NgramContextUtils { // Intentional empty constructor for utility class. } + private static final Pattern NEWLINE_REGEX = Pattern.compile("[\\r\\n]+"); private static final Pattern SPACE_REGEX = Pattern.compile("\\s+"); // Get context information from nth word before the cursor. n = 1 retrieves the words // immediately before the cursor, n = 2 retrieves the words before that, and so on. This splits @@ -58,7 +59,11 @@ public final class NgramContextUtils { public static NgramContext getNgramContextFromNthPreviousWord(final CharSequence prev, final SpacingAndPunctuations spacingAndPunctuations, final int n) { if (prev == null) return NgramContext.EMPTY_PREV_WORDS_INFO; - final String[] w = SPACE_REGEX.split(prev); + final String[] lines = NEWLINE_REGEX.split(prev); + if (lines.length == 0) { + return new NgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO); + } + final String[] w = SPACE_REGEX.split(lines[lines.length - 1]); final WordInfo[] prevWordsInfo = new WordInfo[DecoderSpecificConstants.MAX_PREV_WORD_COUNT_FOR_N_GRAM]; Arrays.fill(prevWordsInfo, WordInfo.EMPTY_WORD_INFO); @@ -81,16 +86,17 @@ public final class NgramContextUtils { prevWordsInfo[i] = WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO; break; } + final String focusedWord = w[focusedWordIndex]; - // If the word is, the context is beginning-of-sentence. + // If the word is empty, the context is beginning-of-sentence. final int length = focusedWord.length(); if (length <= 0) { prevWordsInfo[i] = WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO; break; } - // If ends in a sentence separator, the context is beginning-of-sentence. + // If the word ends in a sentence terminator, the context is beginning-of-sentence. final char lastChar = focusedWord.charAt(length - 1); - if (spacingAndPunctuations.isSentenceSeparator(lastChar)) { + if (spacingAndPunctuations.isSentenceTerminator(lastChar)) { prevWordsInfo[i] = WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO; break; } |