Redundant code matches multiple languages.

InputLogic should not have code that tweaks suggestion ranking based on the
language of the source dictionary.

Bug 19744396.

Change-Id: I8c0849555e74cec1302e78da04148dedd1cddabe
main
Dan Zivkovic 2015-03-16 11:19:35 -07:00
parent 2321c41b5b
commit 4e1f0f1bb0
2 changed files with 12 additions and 72 deletions

View File

@ -147,18 +147,6 @@ public final class Suggest {
return firstSuggestedWordInfo; return firstSuggestedWordInfo;
} }
// Quality constants for dictionary match
// In increasing order of quality
// This source dictionary does not match the typed word.
private static final int QUALITY_NO_MATCH = 0;
// This source dictionary has a null locale, and the preferred locale is also null.
private static final int QUALITY_MATCH_NULL = 1;
// This source dictionary has a non-null locale different from the preferred locale. The
// preferred locale may be null : this is still better than MATCH_NULL.
private static final int QUALITY_MATCH_OTHER_LOCALE = 2;
// This source dictionary matches the preferred locale.
private static final int QUALITY_MATCH_PREFERRED_LOCALE = 3;
// Retrieves suggestions for non-batch input (typing, recorrection, predictions...) // Retrieves suggestions for non-batch input (typing, recorrection, predictions...)
// and calls the callback function with the suggestions. // and calls the callback function with the suggestions.
private void getSuggestedWordsForNonBatchInput(final WordComposer wordComposer, private void getSuggestedWordsForNonBatchInput(final WordComposer wordComposer,
@ -179,34 +167,18 @@ public final class Suggest {
final Locale locale = mDictionaryFacilitator.getLocale(); final Locale locale = mDictionaryFacilitator.getLocale();
final ArrayList<SuggestedWordInfo> suggestionsContainer = final ArrayList<SuggestedWordInfo> suggestionsContainer =
getTransformedSuggestedWordInfoList(wordComposer, suggestionResults, getTransformedSuggestedWordInfoList(wordComposer, suggestionResults,
trailingSingleQuotesCount, trailingSingleQuotesCount, locale);
// For transforming suggestions that don't come for any dictionary, we
// use the currently most probable locale as it's our best bet.
locale);
boolean typedWordExistsInAnotherLanguage = false; boolean foundInDictionary = false;
int qualityOfFoundSourceDictionary = QUALITY_NO_MATCH; Dictionary sourceDictionaryOfRemovedWord = null;
@Nullable Dictionary sourceDictionaryOfRemovedWord = null;
for (final SuggestedWordInfo info : suggestionsContainer) { for (final SuggestedWordInfo info : suggestionsContainer) {
// Search for the best dictionary, defined as the first one with the highest match // Search for the best dictionary, defined as the first one with the highest match
// quality we can find. // quality we can find.
if (typedWordString.equals(info.mWord)) { if (!foundInDictionary && typedWordString.equals(info.mWord)) {
if (locale.equals(info.mSourceDict.mLocale)) { // Use this source if the old match had lower quality than this match
if (qualityOfFoundSourceDictionary < QUALITY_MATCH_PREFERRED_LOCALE) { sourceDictionaryOfRemovedWord = info.mSourceDict;
// Use this source if the old match had lower quality than this match foundInDictionary = true;
sourceDictionaryOfRemovedWord = info.mSourceDict; break;
qualityOfFoundSourceDictionary = QUALITY_MATCH_PREFERRED_LOCALE;
}
} else {
final int matchQuality = (null == info.mSourceDict.mLocale)
? QUALITY_MATCH_NULL : QUALITY_MATCH_OTHER_LOCALE;
if (qualityOfFoundSourceDictionary < matchQuality) {
// Use this source if the old match had lower quality than this match
sourceDictionaryOfRemovedWord = info.mSourceDict;
qualityOfFoundSourceDictionary = matchQuality;
}
typedWordExistsInAnotherLanguage = true;
}
} }
} }
@ -215,22 +187,8 @@ public final class Suggest {
final SuggestedWordInfo whitelistedWordInfo = final SuggestedWordInfo whitelistedWordInfo =
getWhitelistedWordInfoOrNull(suggestionsContainer); getWhitelistedWordInfoOrNull(suggestionsContainer);
final String whitelistedWord; final String whitelistedWord = whitelistedWordInfo == null
if (null != whitelistedWordInfo && ? null : whitelistedWordInfo.mWord;
(mDictionaryFacilitator.isForLocale(whitelistedWordInfo.mSourceDict.mLocale)
|| (!typedWordExistsInAnotherLanguage
&& !hasPlausibleCandidateInAnyOtherLanguage(suggestionsContainer,
consideredWord, whitelistedWordInfo)))) {
// We'll use the whitelist candidate if we are confident the user is typing in the
// language of the dictionary it's coming from, or if there is no plausible candidate
// coming from another language.
whitelistedWord = whitelistedWordInfo.mWord;
} else {
// If on the contrary we are not confident in the current language and we have
// at least a plausible candidate in any other language, then we don't use this
// whitelist candidate.
whitelistedWord = null;
}
final boolean resultsArePredictions = !wordComposer.isComposingWord(); final boolean resultsArePredictions = !wordComposer.isComposingWord();
// We allow auto-correction if whitelisting is not required or the word is whitelisted, // We allow auto-correction if whitelisting is not required or the word is whitelisted,
@ -325,20 +283,6 @@ public final class Suggest {
false /* isObsoleteSuggestions */, inputStyle, sequenceNumber)); false /* isObsoleteSuggestions */, inputStyle, sequenceNumber));
} }
private boolean hasPlausibleCandidateInAnyOtherLanguage(
final ArrayList<SuggestedWordInfo> suggestionsContainer, final String consideredWord,
final SuggestedWordInfo whitelistedWordInfo) {
for (final SuggestedWordInfo info : suggestionsContainer) {
if (whitelistedWordInfo.mSourceDict.mLocale.equals(info.mSourceDict.mLocale)) {
continue;
}
return AutoCorrectionUtils.suggestionExceedsThreshold(info, consideredWord,
mPlausibilityThreshold);
}
// No candidate in another language
return false;
}
// Retrieves suggestions for the batch input // Retrieves suggestions for the batch input
// and calls the callback function with the suggestions. // and calls the callback function with the suggestions.
private void getSuggestedWordsForBatchInput(final WordComposer wordComposer, private void getSuggestedWordsForBatchInput(final WordComposer wordComposer,

View File

@ -1607,15 +1607,11 @@ public final class InputLogic {
// First, add the committed word to the list of suggestions. // First, add the committed word to the list of suggestions.
suggestions.add(committedWordString); suggestions.add(committedWordString);
for (final Object span : spans) { for (final Object span : spans) {
// If this is a suggestion span, we check that the locale is the right one, and // If this is a suggestion span, we check that the word is not the committed word.
// that the word is not the committed word. That should mostly be the case. // That should mostly be the case.
// Given this, we add it to the list of suggestions, otherwise we discard it. // Given this, we add it to the list of suggestions, otherwise we discard it.
if (span instanceof SuggestionSpan) { if (span instanceof SuggestionSpan) {
final SuggestionSpan suggestionSpan = (SuggestionSpan)span; final SuggestionSpan suggestionSpan = (SuggestionSpan)span;
if (!suggestionSpan.getLocale().equals(
inputTransaction.mSettingsValues.mLocale.toString())) {
continue;
}
for (final String suggestion : suggestionSpan.getSuggestions()) { for (final String suggestion : suggestionSpan.getSuggestions()) {
if (!suggestion.equals(committedWordString)) { if (!suggestion.equals(committedWordString)) {
suggestions.add(suggestion); suggestions.add(suggestion);