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: I8c0849555e74cec1302e78da04148dedd1cddabemain
parent
2321c41b5b
commit
4e1f0f1bb0
|
@ -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)) {
|
|
||||||
if (qualityOfFoundSourceDictionary < QUALITY_MATCH_PREFERRED_LOCALE) {
|
|
||||||
// Use this source if the old match had lower quality than this match
|
// Use this source if the old match had lower quality than this match
|
||||||
sourceDictionaryOfRemovedWord = info.mSourceDict;
|
sourceDictionaryOfRemovedWord = info.mSourceDict;
|
||||||
qualityOfFoundSourceDictionary = QUALITY_MATCH_PREFERRED_LOCALE;
|
foundInDictionary = true;
|
||||||
}
|
break;
|
||||||
} 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,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue