[CM1] Let predictions be aware of capitalize mode.

Bug: 15554503
Change-Id: If5e8c0d94ed26d929400ccbb0d45ac23dd98d180
This commit is contained in:
Jean Chalard 2014-06-13 16:50:05 +09:00
parent 83c7fc94f6
commit deccc23564
4 changed files with 47 additions and 17 deletions

View file

@ -1376,18 +1376,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
callback.onGetSuggestedWords(SuggestedWords.EMPTY);
return;
}
final SettingsValues currentSettings = mSettings.getCurrent();
final int[] additionalFeaturesOptions = currentSettings.mAdditionalFeaturesSettingValues;
mInputLogic.mSuggest.getSuggestedWords(mInputLogic.mWordComposer,
mInputLogic.getPrevWordsInfoFromNthPreviousWordForSuggestion(
currentSettings.mSpacingAndPunctuations,
// Get the word on which we should search the bigrams. If we are composing
// a word, it's whatever is *before* the half-committed word in the buffer,
// hence 2; if we aren't, we should just skip whitespace if any, so 1.
mInputLogic.mWordComposer.isComposingWord() ? 2 : 1),
keyboard.getProximityInfo(), currentSettings.mBlockPotentiallyOffensive,
currentSettings.mAutoCorrectionEnabled, additionalFeaturesOptions, sessionId,
sequenceNumber, callback);
mInputLogic.getSuggestedWords(mSettings.getCurrent(), keyboard.getProximityInfo(),
mKeyboardSwitcher.getKeyboardShiftMode(), sessionId, sequenceNumber, callback);
}
@Override

View file

@ -110,7 +110,8 @@ public final class Suggest {
wordComposer, prevWordsInfo, proximityInfo, blockOffensiveWords,
additionalFeaturesOptions, SESSION_TYPING, rawSuggestions);
final boolean isOnlyFirstCharCapitalized = wordComposer.isOnlyFirstCharCapitalized();
final boolean isOnlyFirstCharCapitalized =
wordComposer.isOrWillBeOnlyFirstCharCapitalized();
// If resumed, then we don't want to upcase everything: resuming on a fully-capitalized
// words is rarely done to switch to another fully-capitalized word, but usually to a
// normal, non-capitalized suggestion.

View file

@ -310,12 +310,18 @@ public final class WordComposer {
}
/**
* Whether or not the user typed a capital letter as the first letter in the word, and no
* other letter is capitalized
* Whether this composer is composing or about to compose a word in which only the first letter
* is a capital.
*
* If we do have a composing word, we just return whether the word has indeed only its first
* character capitalized. If we don't, then we return a value based on the capitalized mode,
* which tell us what is likely to happen for the next composing word.
*
* @return capitalization preference
*/
public boolean isOnlyFirstCharCapitalized() {
return mIsOnlyFirstCharCapitalized;
public boolean isOrWillBeOnlyFirstCharCapitalized() {
return isComposingWord() ? mIsOnlyFirstCharCapitalized
: (CAPS_MODE_OFF != mCapitalizedMode);
}
/**
@ -365,6 +371,20 @@ public final class WordComposer {
mCapitalizedMode = mode;
}
/**
* Before fetching suggestions, we don't necessarily know about the capitalized mode yet.
*
* If we don't have a composing word yet, we take a note of this mode so that we can then
* supply this information to the suggestion process. If we have a composing word, then
* the previous mode has priority over this.
* @param mode the mode just before fetching suggestions
*/
public void adviseCapitalizedModeBeforeFetchingSuggestions(final int mode) {
if (!isComposingWord()) {
mCapitalizedMode = mode;
}
}
/**
* Returns whether the word was automatically capitalized.
* @return whether the word was automatically capitalized

View file

@ -30,6 +30,7 @@ import com.android.inputmethod.compat.SuggestionSpanUtils;
import com.android.inputmethod.event.Event;
import com.android.inputmethod.event.InputTransaction;
import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.DictionaryFacilitator;
@ -1917,4 +1918,22 @@ public final class InputLogic {
}
return true;
}
public void getSuggestedWords(final SettingsValues settingsValues,
final ProximityInfo proximityInfo, final int keyboardShiftMode, final int sessionId,
final int sequenceNumber, final OnGetSuggestedWordsCallback callback) {
mWordComposer.adviseCapitalizedModeBeforeFetchingSuggestions(
getActualCapsMode(settingsValues, keyboardShiftMode));
mSuggest.getSuggestedWords(mWordComposer,
getPrevWordsInfoFromNthPreviousWordForSuggestion(
settingsValues.mSpacingAndPunctuations,
// Get the word on which we should search the bigrams. If we are composing
// a word, it's whatever is *before* the half-committed word in the buffer,
// hence 2; if we aren't, we should just skip whitespace if any, so 1.
mWordComposer.isComposingWord() ? 2 : 1),
proximityInfo, settingsValues.mBlockPotentiallyOffensive,
settingsValues.mAutoCorrectionEnabled,
settingsValues.mAdditionalFeaturesSettingValues,
sessionId, sequenceNumber, callback);
}
}