[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); callback.onGetSuggestedWords(SuggestedWords.EMPTY);
return; return;
} }
final SettingsValues currentSettings = mSettings.getCurrent(); mInputLogic.getSuggestedWords(mSettings.getCurrent(), keyboard.getProximityInfo(),
final int[] additionalFeaturesOptions = currentSettings.mAdditionalFeaturesSettingValues; mKeyboardSwitcher.getKeyboardShiftMode(), sessionId, sequenceNumber, callback);
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);
} }
@Override @Override

View file

@ -110,7 +110,8 @@ public final class Suggest {
wordComposer, prevWordsInfo, proximityInfo, blockOffensiveWords, wordComposer, prevWordsInfo, proximityInfo, blockOffensiveWords,
additionalFeaturesOptions, SESSION_TYPING, rawSuggestions); 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 // 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 // words is rarely done to switch to another fully-capitalized word, but usually to a
// normal, non-capitalized suggestion. // 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 * Whether this composer is composing or about to compose a word in which only the first letter
* other letter is capitalized * 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 * @return capitalization preference
*/ */
public boolean isOnlyFirstCharCapitalized() { public boolean isOrWillBeOnlyFirstCharCapitalized() {
return mIsOnlyFirstCharCapitalized; return isComposingWord() ? mIsOnlyFirstCharCapitalized
: (CAPS_MODE_OFF != mCapitalizedMode);
} }
/** /**
@ -365,6 +371,20 @@ public final class WordComposer {
mCapitalizedMode = mode; 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. * Returns whether the word was automatically capitalized.
* @return 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.Event;
import com.android.inputmethod.event.InputTransaction; import com.android.inputmethod.event.InputTransaction;
import com.android.inputmethod.keyboard.KeyboardSwitcher; import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.Dictionary; import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.DictionaryFacilitator; import com.android.inputmethod.latin.DictionaryFacilitator;
@ -1917,4 +1918,22 @@ public final class InputLogic {
} }
return true; 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);
}
} }