diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java index 4a218d550..5683e3df1 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java @@ -214,6 +214,7 @@ public class DictionaryFacilitator { mPersonalizationHelper.updateEnabledSubtypes(enabledSubtypes); } + // TODO: remove this, it's confusing with seamless multiple language switching public void setIsMonolingualUser(final boolean isMonolingualUser) { mPersonalizationHelper.setIsMonolingualUser(isMonolingualUser); } @@ -223,16 +224,25 @@ public class DictionaryFacilitator { return mDictionaryGroups[0].mLocale; } + public boolean isActive() { + return null != mDictionaryGroups[0].mLocale; + } + /** - * Returns the primary locale among all currently active locales. BE CAREFUL using this. + * Returns the most probable locale among all currently active locales. BE CAREFUL using this. * * DO NOT USE THIS just because it's convenient. Use it when it's correct, for example when * choosing what dictionary to put a word in, or when changing the capitalization of a typed * string. - * @return the primary active locale + * @return the most probable locale */ - public Locale getPrimaryLocale() { - return mDictionaryGroups[0].mLocale; + public Locale getMostProbableLocale() { + return getDictionaryGroupForMostProbableLanguage().mLocale; + } + + private DictionaryGroup getDictionaryGroupForMostProbableLanguage() { + // TODO: implement this + return mDictionaryGroups[0]; } private static ExpandableBinaryDictionary getSubDict(final String dictType, @@ -274,11 +284,6 @@ public class DictionaryFacilitator { return null; } - private DictionaryGroup getDictionaryGroupForActiveLanguage() { - // TODO: implement this - return mDictionaryGroups[0]; - } - public void resetDictionariesWithDictNamePrefix(final Context context, final Locale newLocaleToUse, final boolean useContactsDict, final boolean usePersonalizedDicts, @@ -542,17 +547,18 @@ public class DictionaryFacilitator { } public void addWordToUserDictionary(final Context context, final String word) { - final Locale locale = getLocale(); + final Locale locale = getMostProbableLocale(); if (locale == null) { return; } + // TODO: add a toast telling what language this is being added to? UserBinaryDictionary.addWordToUserDictionary(context, locale, word); } public void addToUserHistory(final String suggestion, final boolean wasAutoCapitalized, final NgramContext ngramContext, final int timeStampInSeconds, final boolean blockPotentiallyOffensive) { - final DictionaryGroup dictionaryGroup = getDictionaryGroupForActiveLanguage(); + final DictionaryGroup dictionaryGroup = getDictionaryGroupForMostProbableLanguage(); final String[] words = suggestion.split(Constants.WORD_SEPARATOR); NgramContext ngramContextForCurrentWord = ngramContext; for (int i = 0; i < words.length; i++) { @@ -620,7 +626,7 @@ public class DictionaryFacilitator { private void removeWord(final String dictName, final String word) { final ExpandableBinaryDictionary dictionary = - getDictionaryGroupForActiveLanguage().getSubDict(dictName); + getDictionaryGroupForMostProbableLanguage().getSubDict(dictName); if (dictionary != null) { dictionary.removeUnigramEntryDynamically(word); } @@ -747,7 +753,8 @@ public class DictionaryFacilitator { final SpacingAndPunctuations spacingAndPunctuations, final AddMultipleDictionaryEntriesCallback callback) { mPersonalizationHelper.addEntriesToPersonalizationDictionariesToUpdate( - getLocale(), personalizationDataChunk, spacingAndPunctuations, callback); + getMostProbableLocale(), personalizationDataChunk, spacingAndPunctuations, + callback); } @UsedForTesting @@ -756,7 +763,7 @@ public class DictionaryFacilitator { // TODO: we're inserting the phrase into the dictionary for the active language. Rethink // this a bit from a theoretical point of view. final ExpandableBinaryDictionary contextualDict = - getDictionaryGroupForActiveLanguage().getSubDict(Dictionary.TYPE_CONTEXTUAL); + getDictionaryGroupForMostProbableLanguage().getSubDict(Dictionary.TYPE_CONTEXTUAL); if (contextualDict == null) { return; } diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 64e65effe..6a583ae79 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1627,7 +1627,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } final String wordToShow; if (CapsModeUtils.isAutoCapsMode(mInputLogic.mLastComposedWord.mCapitalizedMode)) { - wordToShow = word.toLowerCase(mDictionaryFacilitator.getPrimaryLocale()); + wordToShow = word.toLowerCase(mDictionaryFacilitator.getMostProbableLocale()); } else { wordToShow = word; } @@ -1912,7 +1912,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } public void dumpDictionaryForDebug(final String dictName) { - if (mDictionaryFacilitator.getLocale() == null) { + if (!mDictionaryFacilitator.isActive()) { resetDictionaryFacilitatorIfNecessary(); } mDictionaryFacilitator.dumpDictionaryForDebug(dictName); diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index d2d9b9b1e..e181237a6 100644 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -55,10 +55,6 @@ public final class Suggest { mDictionaryFacilitator = dictionaryFacilitator; } - public Locale getLocale() { - return mDictionaryFacilitator.getLocale(); - } - public void setAutoCorrectionThreshold(final float threshold) { mAutoCorrectionThreshold = threshold; } @@ -136,7 +132,10 @@ public final class Suggest { SESSION_ID_TYPING); final ArrayList suggestionsContainer = getTransformedSuggestedWordInfoList(wordComposer, suggestionResults, - trailingSingleQuotesCount, mDictionaryFacilitator.getLocale()); + trailingSingleQuotesCount, + // For transforming suggestions that don't come for any dictionary, we + // use the currently most probable locale as it's our best bet. + mDictionaryFacilitator.getMostProbableLocale()); final boolean didRemoveTypedWord = SuggestedWordInfo.removeDups(wordComposer.getTypedWord(), suggestionsContainer); @@ -216,7 +215,8 @@ public final class Suggest { final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults( wordComposer, ngramContext, proximityInfo, settingsValuesForSuggestion, SESSION_ID_GESTURE); - final Locale defaultLocale = mDictionaryFacilitator.getLocale(); + // For transforming words that don't come from a dictionary, because it's our best bet + final Locale defaultLocale = mDictionaryFacilitator.getMostProbableLocale(); final ArrayList suggestionsContainer = new ArrayList<>(suggestionResults); final int suggestionsCount = suggestionsContainer.size();