Fix safety net not to be enabled at aggressive autocompletion mode
Bug: 3374359 Change-Id: I7b1dbeb64a87dda05397c236bb58da292f819471
This commit is contained in:
parent
5c35e4109f
commit
14e427d5bb
3 changed files with 14 additions and 2 deletions
|
@ -1580,7 +1580,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
private void showSuggestions(SuggestedWords suggestedWords, CharSequence typedWord) {
|
||||
setSuggestions(suggestedWords);
|
||||
if (suggestedWords.size() > 0) {
|
||||
if (Utils.shouldBlockedBySafetyNetForAutoCorrection(suggestedWords)) {
|
||||
if (Utils.shouldBlockedBySafetyNetForAutoCorrection(suggestedWords, mSuggest)) {
|
||||
mBestWord = typedWord;
|
||||
} else if (suggestedWords.hasAutoCorrectionWord()) {
|
||||
mBestWord = suggestedWords.getWord(1);
|
||||
|
|
|
@ -163,6 +163,10 @@ public class Suggest implements Dictionary.WordCallback {
|
|||
mAutoCorrectionThreshold = threshold;
|
||||
}
|
||||
|
||||
public boolean isAggressiveAutoCorrectionMode() {
|
||||
return (mAutoCorrectionThreshold == 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Number of suggestions to generate from the input key sequence. This has
|
||||
* to be a number between 1 and 100 (inclusive).
|
||||
|
|
|
@ -38,6 +38,7 @@ import java.util.Date;
|
|||
|
||||
public class Utils {
|
||||
private static final String TAG = Utils.class.getSimpleName();
|
||||
private static final int MINIMUM_SAFETY_NET_CHAR_LENGTH = 4;
|
||||
private static boolean DBG = LatinImeLogger.sDBG;
|
||||
|
||||
/**
|
||||
|
@ -106,11 +107,18 @@ public class Utils {
|
|||
throw new RuntimeException("Can not find input method id for " + packageName);
|
||||
}
|
||||
|
||||
public static boolean shouldBlockedBySafetyNetForAutoCorrection(SuggestedWords suggestions) {
|
||||
public static boolean shouldBlockedBySafetyNetForAutoCorrection(SuggestedWords suggestions,
|
||||
Suggest suggest) {
|
||||
// Safety net for auto correction.
|
||||
// Actually if we hit this safety net, it's actually a bug.
|
||||
if (suggestions.size() <= 1 || suggestions.mTypedWordValid) return false;
|
||||
// If user selected aggressive auto correction mode, there is no need to use the safety
|
||||
// net.
|
||||
if (suggest.isAggressiveAutoCorrectionMode()) return false;
|
||||
CharSequence typedWord = suggestions.getWord(0);
|
||||
// If the length of typed word is less than MINIMUM_SAFETY_NET_CHAR_LENGTH,
|
||||
// we should not use net because relatively edit distance can be big.
|
||||
if (typedWord.length() < MINIMUM_SAFETY_NET_CHAR_LENGTH) return false;
|
||||
CharSequence candidateWord = suggestions.getWord(1);
|
||||
final int typedWordLength = typedWord.length();
|
||||
final int maxEditDistanceOfNativeDictionary = typedWordLength < 5 ? 2 : typedWordLength / 2;
|
||||
|
|
Loading…
Reference in a new issue