am b8d76477
: Add the input style to SuggestedWords.
* commit 'b8d764772b174cbd37354ffd0009bda56f223dc4': Add the input style to SuggestedWords.
This commit is contained in:
commit
e04c8b10d7
9 changed files with 99 additions and 57 deletions
|
@ -257,6 +257,8 @@ public class Event {
|
||||||
|
|
||||||
public boolean isConsumed() { return 0 != (FLAG_CONSUMED & mFlags); }
|
public boolean isConsumed() { return 0 != (FLAG_CONSUMED & mFlags); }
|
||||||
|
|
||||||
|
public boolean isGesture() { return EVENT_TYPE_GESTURE == mEventType; }
|
||||||
|
|
||||||
// Returns whether this is a fake key press from the suggestion strip. This happens with
|
// Returns whether this is a fake key press from the suggestion strip. This happens with
|
||||||
// punctuation signs selected from the suggestion strip.
|
// punctuation signs selected from the suggestion strip.
|
||||||
public boolean isSuggestionStripPress() {
|
public boolean isSuggestionStripPress() {
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class InputTransaction {
|
||||||
|
|
||||||
// Initial conditions
|
// Initial conditions
|
||||||
public final SettingsValues mSettingsValues;
|
public final SettingsValues mSettingsValues;
|
||||||
private final Event mEvent;
|
public final Event mEvent;
|
||||||
public final long mTimestamp;
|
public final long mTimestamp;
|
||||||
public final int mSpaceState;
|
public final int mSpaceState;
|
||||||
public final int mShiftState;
|
public final int mShiftState;
|
||||||
|
|
|
@ -138,7 +138,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
mHandler.postUpdateSuggestionStrip();
|
mHandler.postUpdateSuggestionStrip(SuggestedWords.INPUT_STYLE_NONE);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
private final InputLogic mInputLogic = new InputLogic(this /* LatinIME */,
|
private final InputLogic mInputLogic = new InputLogic(this /* LatinIME */,
|
||||||
|
@ -220,7 +220,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
case MSG_UPDATE_SUGGESTION_STRIP:
|
case MSG_UPDATE_SUGGESTION_STRIP:
|
||||||
cancelUpdateSuggestionStrip();
|
cancelUpdateSuggestionStrip();
|
||||||
latinIme.mInputLogic.performUpdateSuggestionStripSync(
|
latinIme.mInputLogic.performUpdateSuggestionStripSync(
|
||||||
latinIme.mSettings.getCurrent());
|
latinIme.mSettings.getCurrent(), msg.arg1 /* inputStyle */);
|
||||||
break;
|
break;
|
||||||
case MSG_UPDATE_SHIFT_STATE:
|
case MSG_UPDATE_SHIFT_STATE:
|
||||||
switcher.requestUpdatingShiftState(latinIme.getCurrentAutoCapsState(),
|
switcher.requestUpdatingShiftState(latinIme.getCurrentAutoCapsState(),
|
||||||
|
@ -270,8 +270,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void postUpdateSuggestionStrip() {
|
public void postUpdateSuggestionStrip(final int inputStyle) {
|
||||||
sendMessageDelayed(obtainMessage(MSG_UPDATE_SUGGESTION_STRIP), mDelayUpdateSuggestions);
|
sendMessageDelayed(obtainMessage(MSG_UPDATE_SUGGESTION_STRIP, inputStyle,
|
||||||
|
0 /* ignored */), mDelayUpdateSuggestions);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void postReopenDictionaries() {
|
public void postReopenDictionaries() {
|
||||||
|
@ -1060,7 +1061,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
applicationSpecifiedCompletions);
|
applicationSpecifiedCompletions);
|
||||||
final SuggestedWords suggestedWords = new SuggestedWords(applicationSuggestedWords,
|
final SuggestedWords suggestedWords = new SuggestedWords(applicationSuggestedWords,
|
||||||
null /* rawSuggestions */, false /* typedWordValid */, false /* willAutoCorrect */,
|
null /* rawSuggestions */, false /* typedWordValid */, false /* willAutoCorrect */,
|
||||||
false /* isObsoleteSuggestions */, false /* isPrediction */);
|
false /* isObsoleteSuggestions */, false /* isPrediction */,
|
||||||
|
SuggestedWords.INPUT_STYLE_APPLICATION_SPECIFIED /* inputStyle */);
|
||||||
// When in fullscreen mode, show completions generated by the application forcibly
|
// When in fullscreen mode, show completions generated by the application forcibly
|
||||||
setSuggestedWords(suggestedWords);
|
setSuggestedWords(suggestedWords);
|
||||||
}
|
}
|
||||||
|
@ -1451,7 +1453,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO[IL]: Move this out of LatinIME.
|
// TODO[IL]: Move this out of LatinIME.
|
||||||
public void getSuggestedWords(final int sessionId, final int sequenceNumber,
|
public void getSuggestedWords(final int inputStyle, final int sequenceNumber,
|
||||||
final OnGetSuggestedWordsCallback callback) {
|
final OnGetSuggestedWordsCallback callback) {
|
||||||
final Keyboard keyboard = mKeyboardSwitcher.getKeyboard();
|
final Keyboard keyboard = mKeyboardSwitcher.getKeyboard();
|
||||||
if (keyboard == null) {
|
if (keyboard == null) {
|
||||||
|
@ -1459,7 +1461,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mInputLogic.getSuggestedWords(mSettings.getCurrent(), keyboard.getProximityInfo(),
|
mInputLogic.getSuggestedWords(mSettings.getCurrent(), keyboard.getProximityInfo(),
|
||||||
mKeyboardSwitcher.getKeyboardShiftMode(), sessionId, sequenceNumber, callback);
|
mKeyboardSwitcher.getKeyboardShiftMode(), inputStyle, sequenceNumber, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1543,7 +1545,16 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
default: // SHIFT_NO_UPDATE
|
default: // SHIFT_NO_UPDATE
|
||||||
}
|
}
|
||||||
if (inputTransaction.requiresUpdateSuggestions()) {
|
if (inputTransaction.requiresUpdateSuggestions()) {
|
||||||
mHandler.postUpdateSuggestionStrip();
|
final int inputStyle;
|
||||||
|
if (inputTransaction.mEvent.isSuggestionStripPress()) {
|
||||||
|
// Suggestion strip press: no input.
|
||||||
|
inputStyle = SuggestedWords.INPUT_STYLE_NONE;
|
||||||
|
} else if (inputTransaction.mEvent.isGesture()) {
|
||||||
|
inputStyle = SuggestedWords.INPUT_STYLE_TAIL_BATCH;
|
||||||
|
} else {
|
||||||
|
inputStyle = SuggestedWords.INPUT_STYLE_TYPING;
|
||||||
|
}
|
||||||
|
mHandler.postUpdateSuggestionStrip(inputStyle);
|
||||||
}
|
}
|
||||||
if (inputTransaction.didAffectContents()) {
|
if (inputTransaction.didAffectContents()) {
|
||||||
mSubtypeState.setCurrentSubtypeHasBeenUsed();
|
mSubtypeState.setCurrentSubtypeHasBeenUsed();
|
||||||
|
|
|
@ -35,7 +35,8 @@ public final class PunctuationSuggestions extends SuggestedWords {
|
||||||
false /* typedWordValid */,
|
false /* typedWordValid */,
|
||||||
false /* hasAutoCorrectionCandidate */,
|
false /* hasAutoCorrectionCandidate */,
|
||||||
false /* isObsoleteSuggestions */,
|
false /* isObsoleteSuggestions */,
|
||||||
false /* isPrediction */);
|
false /* isPrediction */,
|
||||||
|
INPUT_STYLE_NONE /* inputStyle */);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -40,13 +40,8 @@ public final class Suggest {
|
||||||
// Session id for
|
// Session id for
|
||||||
// {@link #getSuggestedWords(WordComposer,String,ProximityInfo,boolean,int)}.
|
// {@link #getSuggestedWords(WordComposer,String,ProximityInfo,boolean,int)}.
|
||||||
// We are sharing the same ID between typing and gesture to save RAM footprint.
|
// We are sharing the same ID between typing and gesture to save RAM footprint.
|
||||||
public static final int SESSION_TYPING = 0;
|
public static final int SESSION_ID_TYPING = 0;
|
||||||
public static final int SESSION_GESTURE = 0;
|
public static final int SESSION_ID_GESTURE = 0;
|
||||||
|
|
||||||
// TODO: rename this to CORRECTION_OFF
|
|
||||||
public static final int CORRECTION_NONE = 0;
|
|
||||||
// TODO: rename this to CORRECTION_ON
|
|
||||||
public static final int CORRECTION_FULL = 1;
|
|
||||||
|
|
||||||
// Close to -2**31
|
// Close to -2**31
|
||||||
private static final int SUPPRESS_SUGGEST_THRESHOLD = -2000000000;
|
private static final int SUPPRESS_SUGGEST_THRESHOLD = -2000000000;
|
||||||
|
@ -75,14 +70,15 @@ public final class Suggest {
|
||||||
public void getSuggestedWords(final WordComposer wordComposer,
|
public void getSuggestedWords(final WordComposer wordComposer,
|
||||||
final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
|
final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
|
||||||
final SettingsValuesForSuggestion settingsValuesForSuggestion,
|
final SettingsValuesForSuggestion settingsValuesForSuggestion,
|
||||||
final boolean isCorrectionEnabled, final int sessionId, final int sequenceNumber,
|
final boolean isCorrectionEnabled, final int inputStyle, final int sequenceNumber,
|
||||||
final OnGetSuggestedWordsCallback callback) {
|
final OnGetSuggestedWordsCallback callback) {
|
||||||
if (wordComposer.isBatchMode()) {
|
if (wordComposer.isBatchMode()) {
|
||||||
getSuggestedWordsForBatchInput(wordComposer, prevWordsInfo, proximityInfo,
|
getSuggestedWordsForBatchInput(wordComposer, prevWordsInfo, proximityInfo,
|
||||||
settingsValuesForSuggestion, sessionId, sequenceNumber, callback);
|
settingsValuesForSuggestion, inputStyle, sequenceNumber, callback);
|
||||||
} else {
|
} else {
|
||||||
getSuggestedWordsForTypingInput(wordComposer, prevWordsInfo, proximityInfo,
|
getSuggestedWordsForNonBatchInput(wordComposer, prevWordsInfo, proximityInfo,
|
||||||
settingsValuesForSuggestion, isCorrectionEnabled, sequenceNumber, callback);
|
settingsValuesForSuggestion, inputStyle, isCorrectionEnabled,
|
||||||
|
sequenceNumber, callback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,11 +116,11 @@ public final class Suggest {
|
||||||
return firstSuggestedWordInfo.mWord;
|
return firstSuggestedWordInfo.mWord;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retrieves suggestions for the typing input
|
// 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 getSuggestedWordsForTypingInput(final WordComposer wordComposer,
|
private void getSuggestedWordsForNonBatchInput(final WordComposer wordComposer,
|
||||||
final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
|
final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
|
||||||
final SettingsValuesForSuggestion settingsValuesForSuggestion,
|
final SettingsValuesForSuggestion settingsValuesForSuggestion, final int inputStyle,
|
||||||
final boolean isCorrectionEnabled, final int sequenceNumber,
|
final boolean isCorrectionEnabled, final int sequenceNumber,
|
||||||
final OnGetSuggestedWordsCallback callback) {
|
final OnGetSuggestedWordsCallback callback) {
|
||||||
final String typedWord = wordComposer.getTypedWord();
|
final String typedWord = wordComposer.getTypedWord();
|
||||||
|
@ -135,7 +131,7 @@ public final class Suggest {
|
||||||
|
|
||||||
final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults(
|
final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults(
|
||||||
wordComposer, prevWordsInfo, proximityInfo, settingsValuesForSuggestion,
|
wordComposer, prevWordsInfo, proximityInfo, settingsValuesForSuggestion,
|
||||||
SESSION_TYPING);
|
SESSION_ID_TYPING);
|
||||||
final ArrayList<SuggestedWordInfo> suggestionsContainer =
|
final ArrayList<SuggestedWordInfo> suggestionsContainer =
|
||||||
getTransformedSuggestedWordInfoList(wordComposer, suggestionResults,
|
getTransformedSuggestedWordInfoList(wordComposer, suggestionResults,
|
||||||
trailingSingleQuotesCount);
|
trailingSingleQuotesCount);
|
||||||
|
@ -197,7 +193,8 @@ public final class Suggest {
|
||||||
// rename the attribute or change the value.
|
// rename the attribute or change the value.
|
||||||
!resultsArePredictions && !allowsToBeAutoCorrected /* typedWordValid */,
|
!resultsArePredictions && !allowsToBeAutoCorrected /* typedWordValid */,
|
||||||
hasAutoCorrection /* willAutoCorrect */,
|
hasAutoCorrection /* willAutoCorrect */,
|
||||||
false /* isObsoleteSuggestions */, resultsArePredictions, sequenceNumber));
|
false /* isObsoleteSuggestions */, resultsArePredictions,
|
||||||
|
inputStyle, sequenceNumber));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retrieves suggestions for the batch input
|
// Retrieves suggestions for the batch input
|
||||||
|
@ -205,10 +202,11 @@ public final class Suggest {
|
||||||
private void getSuggestedWordsForBatchInput(final WordComposer wordComposer,
|
private void getSuggestedWordsForBatchInput(final WordComposer wordComposer,
|
||||||
final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
|
final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
|
||||||
final SettingsValuesForSuggestion settingsValuesForSuggestion,
|
final SettingsValuesForSuggestion settingsValuesForSuggestion,
|
||||||
final int sessionId, final int sequenceNumber,
|
final int inputStyle, final int sequenceNumber,
|
||||||
final OnGetSuggestedWordsCallback callback) {
|
final OnGetSuggestedWordsCallback callback) {
|
||||||
final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults(
|
final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults(
|
||||||
wordComposer, prevWordsInfo, proximityInfo, settingsValuesForSuggestion, sessionId);
|
wordComposer, prevWordsInfo, proximityInfo, settingsValuesForSuggestion,
|
||||||
|
SESSION_ID_GESTURE);
|
||||||
final ArrayList<SuggestedWordInfo> suggestionsContainer =
|
final ArrayList<SuggestedWordInfo> suggestionsContainer =
|
||||||
new ArrayList<>(suggestionResults);
|
new ArrayList<>(suggestionResults);
|
||||||
final int suggestionsCount = suggestionsContainer.size();
|
final int suggestionsCount = suggestionsContainer.size();
|
||||||
|
@ -246,7 +244,8 @@ public final class Suggest {
|
||||||
true /* typedWordValid */,
|
true /* typedWordValid */,
|
||||||
false /* willAutoCorrect */,
|
false /* willAutoCorrect */,
|
||||||
false /* isObsoleteSuggestions */,
|
false /* isObsoleteSuggestions */,
|
||||||
false /* isPrediction */, sequenceNumber));
|
false /* isPrediction */,
|
||||||
|
inputStyle, sequenceNumber));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ArrayList<SuggestedWordInfo> getSuggestionsInfoListWithDebugInfo(
|
private static ArrayList<SuggestedWordInfo> getSuggestionsInfoListWithDebugInfo(
|
||||||
|
|
|
@ -31,12 +31,20 @@ public class SuggestedWords {
|
||||||
public static final int INDEX_OF_AUTO_CORRECTION = 1;
|
public static final int INDEX_OF_AUTO_CORRECTION = 1;
|
||||||
public static final int NOT_A_SEQUENCE_NUMBER = -1;
|
public static final int NOT_A_SEQUENCE_NUMBER = -1;
|
||||||
|
|
||||||
|
public static final int INPUT_STYLE_NONE = 0;
|
||||||
|
public static final int INPUT_STYLE_TYPING = 1;
|
||||||
|
public static final int INPUT_STYLE_UPDATE_BATCH = 2;
|
||||||
|
public static final int INPUT_STYLE_TAIL_BATCH = 3;
|
||||||
|
public static final int INPUT_STYLE_APPLICATION_SPECIFIED = 4;
|
||||||
|
public static final int INPUT_STYLE_RECORRECTION = 5;
|
||||||
|
|
||||||
// The maximum number of suggestions available.
|
// The maximum number of suggestions available.
|
||||||
public static final int MAX_SUGGESTIONS = 18;
|
public static final int MAX_SUGGESTIONS = 18;
|
||||||
|
|
||||||
private static final ArrayList<SuggestedWordInfo> EMPTY_WORD_INFO_LIST = new ArrayList<>(0);
|
private static final ArrayList<SuggestedWordInfo> EMPTY_WORD_INFO_LIST = new ArrayList<>(0);
|
||||||
public static final SuggestedWords EMPTY = new SuggestedWords(
|
public static final SuggestedWords EMPTY = new SuggestedWords(
|
||||||
EMPTY_WORD_INFO_LIST, null /* rawSuggestions */, false, false, false, false);
|
EMPTY_WORD_INFO_LIST, null /* rawSuggestions */, false, false, false, false,
|
||||||
|
INPUT_STYLE_NONE);
|
||||||
|
|
||||||
public final String mTypedWord;
|
public final String mTypedWord;
|
||||||
public final boolean mTypedWordValid;
|
public final boolean mTypedWordValid;
|
||||||
|
@ -46,6 +54,9 @@ public class SuggestedWords {
|
||||||
public final boolean mWillAutoCorrect;
|
public final boolean mWillAutoCorrect;
|
||||||
public final boolean mIsObsoleteSuggestions;
|
public final boolean mIsObsoleteSuggestions;
|
||||||
public final boolean mIsPrediction;
|
public final boolean mIsPrediction;
|
||||||
|
// How the input for these suggested words was done by the user. Must be one of the
|
||||||
|
// INPUT_STYLE_* constants above.
|
||||||
|
public final int mInputStyle;
|
||||||
public final int mSequenceNumber; // Sequence number for auto-commit.
|
public final int mSequenceNumber; // Sequence number for auto-commit.
|
||||||
protected final ArrayList<SuggestedWordInfo> mSuggestedWordInfoList;
|
protected final ArrayList<SuggestedWordInfo> mSuggestedWordInfoList;
|
||||||
public final ArrayList<SuggestedWordInfo> mRawSuggestions;
|
public final ArrayList<SuggestedWordInfo> mRawSuggestions;
|
||||||
|
@ -55,9 +66,10 @@ public class SuggestedWords {
|
||||||
final boolean typedWordValid,
|
final boolean typedWordValid,
|
||||||
final boolean willAutoCorrect,
|
final boolean willAutoCorrect,
|
||||||
final boolean isObsoleteSuggestions,
|
final boolean isObsoleteSuggestions,
|
||||||
final boolean isPrediction) {
|
final boolean isPrediction,
|
||||||
|
final int inputStyle) {
|
||||||
this(suggestedWordInfoList, rawSuggestions, typedWordValid, willAutoCorrect,
|
this(suggestedWordInfoList, rawSuggestions, typedWordValid, willAutoCorrect,
|
||||||
isObsoleteSuggestions, isPrediction, NOT_A_SEQUENCE_NUMBER);
|
isObsoleteSuggestions, isPrediction, inputStyle, NOT_A_SEQUENCE_NUMBER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SuggestedWords(final ArrayList<SuggestedWordInfo> suggestedWordInfoList,
|
public SuggestedWords(final ArrayList<SuggestedWordInfo> suggestedWordInfoList,
|
||||||
|
@ -66,11 +78,12 @@ public class SuggestedWords {
|
||||||
final boolean willAutoCorrect,
|
final boolean willAutoCorrect,
|
||||||
final boolean isObsoleteSuggestions,
|
final boolean isObsoleteSuggestions,
|
||||||
final boolean isPrediction,
|
final boolean isPrediction,
|
||||||
|
final int inputStyle,
|
||||||
final int sequenceNumber) {
|
final int sequenceNumber) {
|
||||||
this(suggestedWordInfoList, rawSuggestions,
|
this(suggestedWordInfoList, rawSuggestions,
|
||||||
(suggestedWordInfoList.isEmpty() || isPrediction) ? null
|
(suggestedWordInfoList.isEmpty() || isPrediction) ? null
|
||||||
: suggestedWordInfoList.get(INDEX_OF_TYPED_WORD).mWord,
|
: suggestedWordInfoList.get(INDEX_OF_TYPED_WORD).mWord,
|
||||||
typedWordValid, willAutoCorrect, isObsoleteSuggestions, isPrediction,
|
typedWordValid, willAutoCorrect, isObsoleteSuggestions, isPrediction, inputStyle,
|
||||||
sequenceNumber);
|
sequenceNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,6 +94,7 @@ public class SuggestedWords {
|
||||||
final boolean willAutoCorrect,
|
final boolean willAutoCorrect,
|
||||||
final boolean isObsoleteSuggestions,
|
final boolean isObsoleteSuggestions,
|
||||||
final boolean isPrediction,
|
final boolean isPrediction,
|
||||||
|
final int inputStyle,
|
||||||
final int sequenceNumber) {
|
final int sequenceNumber) {
|
||||||
mSuggestedWordInfoList = suggestedWordInfoList;
|
mSuggestedWordInfoList = suggestedWordInfoList;
|
||||||
mRawSuggestions = rawSuggestions;
|
mRawSuggestions = rawSuggestions;
|
||||||
|
@ -88,6 +102,7 @@ public class SuggestedWords {
|
||||||
mWillAutoCorrect = willAutoCorrect;
|
mWillAutoCorrect = willAutoCorrect;
|
||||||
mIsObsoleteSuggestions = isObsoleteSuggestions;
|
mIsObsoleteSuggestions = isObsoleteSuggestions;
|
||||||
mIsPrediction = isPrediction;
|
mIsPrediction = isPrediction;
|
||||||
|
mInputStyle = inputStyle;
|
||||||
mSequenceNumber = sequenceNumber;
|
mSequenceNumber = sequenceNumber;
|
||||||
mTypedWord = typedWord;
|
mTypedWord = typedWord;
|
||||||
}
|
}
|
||||||
|
@ -367,7 +382,7 @@ public class SuggestedWords {
|
||||||
|
|
||||||
// SuggestedWords is an immutable object, as much as possible. We must not just remove
|
// SuggestedWords is an immutable object, as much as possible. We must not just remove
|
||||||
// words from the member ArrayList as some other parties may expect the object to never change.
|
// words from the member ArrayList as some other parties may expect the object to never change.
|
||||||
public SuggestedWords getSuggestedWordsExcludingTypedWord() {
|
public SuggestedWords getSuggestedWordsExcludingTypedWord(final int inputStyle) {
|
||||||
final ArrayList<SuggestedWordInfo> newSuggestions = new ArrayList<>();
|
final ArrayList<SuggestedWordInfo> newSuggestions = new ArrayList<>();
|
||||||
String typedWord = null;
|
String typedWord = null;
|
||||||
for (int i = 0; i < mSuggestedWordInfoList.size(); ++i) {
|
for (int i = 0; i < mSuggestedWordInfoList.size(); ++i) {
|
||||||
|
@ -383,7 +398,7 @@ public class SuggestedWords {
|
||||||
// no auto-correction should take place hence willAutoCorrect = false.
|
// no auto-correction should take place hence willAutoCorrect = false.
|
||||||
return new SuggestedWords(newSuggestions, null /* rawSuggestions */, typedWord,
|
return new SuggestedWords(newSuggestions, null /* rawSuggestions */, typedWord,
|
||||||
true /* typedWordValid */, false /* willAutoCorrect */, mIsObsoleteSuggestions,
|
true /* typedWordValid */, false /* willAutoCorrect */, mIsObsoleteSuggestions,
|
||||||
mIsPrediction, NOT_A_SEQUENCE_NUMBER);
|
mIsPrediction, inputStyle, NOT_A_SEQUENCE_NUMBER);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates a new SuggestedWordInfo from the currently suggested words that removes all but the
|
// Creates a new SuggestedWordInfo from the currently suggested words that removes all but the
|
||||||
|
@ -402,6 +417,7 @@ public class SuggestedWords {
|
||||||
SuggestedWordInfo.NOT_A_CONFIDENCE));
|
SuggestedWordInfo.NOT_A_CONFIDENCE));
|
||||||
}
|
}
|
||||||
return new SuggestedWords(newSuggestions, null /* rawSuggestions */, mTypedWordValid,
|
return new SuggestedWords(newSuggestions, null /* rawSuggestions */, mTypedWordValid,
|
||||||
mWillAutoCorrect, mIsObsoleteSuggestions, mIsPrediction);
|
mWillAutoCorrect, mIsObsoleteSuggestions, mIsPrediction,
|
||||||
|
INPUT_STYLE_TAIL_BATCH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -216,7 +216,7 @@ public final class InputLogic {
|
||||||
} else {
|
} else {
|
||||||
resetComposingState(true /* alsoResetLastComposedWord */);
|
resetComposingState(true /* alsoResetLastComposedWord */);
|
||||||
}
|
}
|
||||||
handler.postUpdateSuggestionStrip();
|
handler.postUpdateSuggestionStrip(SuggestedWords.INPUT_STYLE_TYPING);
|
||||||
final String text = performSpecificTldProcessingOnTextInput(rawText);
|
final String text = performSpecificTldProcessingOnTextInput(rawText);
|
||||||
if (SpaceState.PHANTOM == mSpaceState) {
|
if (SpaceState.PHANTOM == mSpaceState) {
|
||||||
promotePhantomSpace(settingsValues);
|
promotePhantomSpace(settingsValues);
|
||||||
|
@ -288,9 +288,6 @@ public final class InputLogic {
|
||||||
return inputTransaction;
|
return inputTransaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We need to log before we commit, because the word composer will store away the user
|
|
||||||
// typed word.
|
|
||||||
final String replacedWord = mWordComposer.getTypedWord();
|
|
||||||
commitChosenWord(settingsValues, suggestion,
|
commitChosenWord(settingsValues, suggestion,
|
||||||
LastComposedWord.COMMIT_TYPE_MANUAL_PICK, LastComposedWord.NOT_A_SEPARATOR);
|
LastComposedWord.COMMIT_TYPE_MANUAL_PICK, LastComposedWord.NOT_A_SEPARATOR);
|
||||||
mConnection.endBatchEdit();
|
mConnection.endBatchEdit();
|
||||||
|
@ -311,7 +308,8 @@ public final class InputLogic {
|
||||||
mSuggestionStripViewAccessor.showAddToDictionaryHint(suggestion);
|
mSuggestionStripViewAccessor.showAddToDictionaryHint(suggestion);
|
||||||
} else {
|
} else {
|
||||||
// If we're not showing the "Touch again to save", then update the suggestion strip.
|
// If we're not showing the "Touch again to save", then update the suggestion strip.
|
||||||
handler.postUpdateSuggestionStrip();
|
// That's going to be predictions (or punctuation suggestions), so INPUT_STYLE_NONE.
|
||||||
|
handler.postUpdateSuggestionStrip(SuggestedWords.INPUT_STYLE_NONE);
|
||||||
}
|
}
|
||||||
return inputTransaction;
|
return inputTransaction;
|
||||||
}
|
}
|
||||||
|
@ -1299,7 +1297,8 @@ public final class InputLogic {
|
||||||
prevWordsInfo, timeStampInSeconds, settingsValues.mBlockPotentiallyOffensive);
|
prevWordsInfo, timeStampInSeconds, settingsValues.mBlockPotentiallyOffensive);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void performUpdateSuggestionStripSync(final SettingsValues settingsValues) {
|
public void performUpdateSuggestionStripSync(final SettingsValues settingsValues,
|
||||||
|
final int inputStyle) {
|
||||||
// Check if we have a suggestion engine attached.
|
// Check if we have a suggestion engine attached.
|
||||||
if (!settingsValues.needsToLookupSuggestions()) {
|
if (!settingsValues.needsToLookupSuggestions()) {
|
||||||
if (mWordComposer.isComposingWord()) {
|
if (mWordComposer.isComposingWord()) {
|
||||||
|
@ -1317,8 +1316,8 @@ public final class InputLogic {
|
||||||
}
|
}
|
||||||
|
|
||||||
final AsyncResultHolder<SuggestedWords> holder = new AsyncResultHolder<>();
|
final AsyncResultHolder<SuggestedWords> holder = new AsyncResultHolder<>();
|
||||||
mInputLogicHandler.getSuggestedWords(Suggest.SESSION_TYPING,
|
mInputLogicHandler.getSuggestedWords(inputStyle, SuggestedWords.NOT_A_SEQUENCE_NUMBER,
|
||||||
SuggestedWords.NOT_A_SEQUENCE_NUMBER, new OnGetSuggestedWordsCallback() {
|
new OnGetSuggestedWordsCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onGetSuggestedWords(final SuggestedWords suggestedWords) {
|
public void onGetSuggestedWords(final SuggestedWords suggestedWords) {
|
||||||
final String typedWord = mWordComposer.getTypedWord();
|
final String typedWord = mWordComposer.getTypedWord();
|
||||||
|
@ -1379,7 +1378,7 @@ public final class InputLogic {
|
||||||
if (!mConnection.isCursorTouchingWord(settingsValues.mSpacingAndPunctuations)) {
|
if (!mConnection.isCursorTouchingWord(settingsValues.mSpacingAndPunctuations)) {
|
||||||
// Show predictions.
|
// Show predictions.
|
||||||
mWordComposer.setCapitalizedModeAtStartComposingTime(WordComposer.CAPS_MODE_OFF);
|
mWordComposer.setCapitalizedModeAtStartComposingTime(WordComposer.CAPS_MODE_OFF);
|
||||||
mLatinIME.mHandler.postUpdateSuggestionStrip();
|
mLatinIME.mHandler.postUpdateSuggestionStrip(SuggestedWords.INPUT_STYLE_RECORRECTION);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final TextRange range = mConnection.getWordRangeAtCursor(
|
final TextRange range = mConnection.getWordRangeAtCursor(
|
||||||
|
@ -1444,7 +1443,7 @@ public final class InputLogic {
|
||||||
// If there weren't any suggestion spans on this word, suggestions#size() will be 1
|
// If there weren't any suggestion spans on this word, suggestions#size() will be 1
|
||||||
// if shouldIncludeResumedWordInSuggestions is true, 0 otherwise. In this case, we
|
// if shouldIncludeResumedWordInSuggestions is true, 0 otherwise. In this case, we
|
||||||
// have no useful suggestions, so we will try to compute some for it instead.
|
// have no useful suggestions, so we will try to compute some for it instead.
|
||||||
mInputLogicHandler.getSuggestedWords(Suggest.SESSION_TYPING,
|
mInputLogicHandler.getSuggestedWords(Suggest.SESSION_ID_TYPING,
|
||||||
SuggestedWords.NOT_A_SEQUENCE_NUMBER, new OnGetSuggestedWordsCallback() {
|
SuggestedWords.NOT_A_SEQUENCE_NUMBER, new OnGetSuggestedWordsCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onGetSuggestedWords(
|
public void onGetSuggestedWords(
|
||||||
|
@ -1457,7 +1456,8 @@ public final class InputLogic {
|
||||||
// case. The #getSuggestedWordsExcludingTypedWord() method sets
|
// case. The #getSuggestedWordsExcludingTypedWord() method sets
|
||||||
// willAutoCorrect to false.
|
// willAutoCorrect to false.
|
||||||
suggestedWords = suggestedWordsIncludingTypedWord
|
suggestedWords = suggestedWordsIncludingTypedWord
|
||||||
.getSuggestedWordsExcludingTypedWord();
|
.getSuggestedWordsExcludingTypedWord(SuggestedWords
|
||||||
|
.INPUT_STYLE_RECORRECTION);
|
||||||
} else {
|
} else {
|
||||||
// No saved suggestions, and we were unable to compute any good one
|
// No saved suggestions, and we were unable to compute any good one
|
||||||
// either. Rather than displaying an empty suggestion strip, we'll
|
// either. Rather than displaying an empty suggestion strip, we'll
|
||||||
|
@ -1477,6 +1477,7 @@ public final class InputLogic {
|
||||||
null /* rawSuggestions */, typedWord,
|
null /* rawSuggestions */, typedWord,
|
||||||
false /* typedWordValid */, false /* willAutoCorrect */,
|
false /* typedWordValid */, false /* willAutoCorrect */,
|
||||||
false /* isObsoleteSuggestions */, false /* isPrediction */,
|
false /* isObsoleteSuggestions */, false /* isPrediction */,
|
||||||
|
SuggestedWords.INPUT_STYLE_RECORRECTION,
|
||||||
SuggestedWords.NOT_A_SEQUENCE_NUMBER);
|
SuggestedWords.NOT_A_SEQUENCE_NUMBER);
|
||||||
mIsAutoCorrectionIndicatorOn = false;
|
mIsAutoCorrectionIndicatorOn = false;
|
||||||
mLatinIME.mHandler.showSuggestionStrip(suggestedWords);
|
mLatinIME.mHandler.showSuggestionStrip(suggestedWords);
|
||||||
|
@ -1773,7 +1774,8 @@ public final class InputLogic {
|
||||||
SuggestedWords.getTypedWordAndPreviousSuggestions(typedWord, oldSuggestedWords);
|
SuggestedWords.getTypedWordAndPreviousSuggestions(typedWord, oldSuggestedWords);
|
||||||
return new SuggestedWords(typedWordAndPreviousSuggestions, null /* rawSuggestions */,
|
return new SuggestedWords(typedWordAndPreviousSuggestions, null /* rawSuggestions */,
|
||||||
false /* typedWordValid */, false /* hasAutoCorrectionCandidate */,
|
false /* typedWordValid */, false /* hasAutoCorrectionCandidate */,
|
||||||
true /* isObsoleteSuggestions */, false /* isPrediction */);
|
true /* isObsoleteSuggestions */, false /* isPrediction */,
|
||||||
|
oldSuggestedWords.mInputStyle);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1956,7 +1958,15 @@ public final class InputLogic {
|
||||||
// Complete any pending suggestions query first
|
// Complete any pending suggestions query first
|
||||||
if (handler.hasPendingUpdateSuggestions()) {
|
if (handler.hasPendingUpdateSuggestions()) {
|
||||||
handler.cancelUpdateSuggestionStrip();
|
handler.cancelUpdateSuggestionStrip();
|
||||||
performUpdateSuggestionStripSync(settingsValues);
|
// To know the input style here, we should retrieve the in-flight "update suggestions"
|
||||||
|
// message and read its arg1 member here. However, the Handler class does not let
|
||||||
|
// us retrieve this message, so we can't do that. But in fact, we notice that
|
||||||
|
// we only ever come here when the input style was typing. In the case of batch
|
||||||
|
// input, we update the suggestions synchronously when the tail batch comes. Likewise
|
||||||
|
// for application-specified completions. As for recorrections, we never auto-correct,
|
||||||
|
// so we don't come here either. Hence, the input style is necessarily
|
||||||
|
// INPUT_STYLE_TYPING.
|
||||||
|
performUpdateSuggestionStripSync(settingsValues, SuggestedWords.INPUT_STYLE_TYPING);
|
||||||
}
|
}
|
||||||
final String typedAutoCorrection = mWordComposer.getAutoCorrectionOrNull();
|
final String typedAutoCorrection = mWordComposer.getAutoCorrectionOrNull();
|
||||||
final String typedWord = mWordComposer.getTypedWord();
|
final String typedWord = mWordComposer.getTypedWord();
|
||||||
|
@ -2052,7 +2062,7 @@ public final class InputLogic {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getSuggestedWords(final SettingsValues settingsValues,
|
public void getSuggestedWords(final SettingsValues settingsValues,
|
||||||
final ProximityInfo proximityInfo, final int keyboardShiftMode, final int sessionId,
|
final ProximityInfo proximityInfo, final int keyboardShiftMode, final int inputStyle,
|
||||||
final int sequenceNumber, final OnGetSuggestedWordsCallback callback) {
|
final int sequenceNumber, final OnGetSuggestedWordsCallback callback) {
|
||||||
mWordComposer.adviseCapitalizedModeBeforeFetchingSuggestions(
|
mWordComposer.adviseCapitalizedModeBeforeFetchingSuggestions(
|
||||||
getActualCapsMode(settingsValues, keyboardShiftMode));
|
getActualCapsMode(settingsValues, keyboardShiftMode));
|
||||||
|
@ -2068,6 +2078,6 @@ public final class InputLogic {
|
||||||
settingsValues.mPhraseGestureEnabled,
|
settingsValues.mPhraseGestureEnabled,
|
||||||
settingsValues.mAdditionalFeaturesSettingValues),
|
settingsValues.mAdditionalFeaturesSettingValues),
|
||||||
settingsValues.mAutoCorrectionEnabledPerUserSettings,
|
settingsValues.mAutoCorrectionEnabledPerUserSettings,
|
||||||
sessionId, sequenceNumber, callback);
|
inputStyle, sequenceNumber, callback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,7 @@ class InputLogicHandler implements Handler.Callback {
|
||||||
public boolean handleMessage(final Message msg) {
|
public boolean handleMessage(final Message msg) {
|
||||||
switch (msg.what) {
|
switch (msg.what) {
|
||||||
case MSG_GET_SUGGESTED_WORDS:
|
case MSG_GET_SUGGESTED_WORDS:
|
||||||
mLatinIME.getSuggestedWords(msg.arg1 /* sessionId */,
|
mLatinIME.getSuggestedWords(msg.arg1 /* inputStyle */,
|
||||||
msg.arg2 /* sequenceNumber */, (OnGetSuggestedWordsCallback) msg.obj);
|
msg.arg2 /* sequenceNumber */, (OnGetSuggestedWordsCallback) msg.obj);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,8 @@ class InputLogicHandler implements Handler.Callback {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mInputLogic.mWordComposer.setBatchInputPointers(batchPointers);
|
mInputLogic.mWordComposer.setBatchInputPointers(batchPointers);
|
||||||
getSuggestedWords(Suggest.SESSION_GESTURE, sequenceNumber,
|
getSuggestedWords(isTailBatchInput ? SuggestedWords.INPUT_STYLE_TAIL_BATCH
|
||||||
|
: SuggestedWords.INPUT_STYLE_UPDATE_BATCH, sequenceNumber,
|
||||||
new OnGetSuggestedWordsCallback() {
|
new OnGetSuggestedWordsCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onGetSuggestedWords(SuggestedWords suggestedWords) {
|
public void onGetSuggestedWords(SuggestedWords suggestedWords) {
|
||||||
|
@ -205,9 +206,9 @@ class InputLogicHandler implements Handler.Callback {
|
||||||
updateBatchInput(batchPointers, sequenceNumber, true /* isTailBatchInput */);
|
updateBatchInput(batchPointers, sequenceNumber, true /* isTailBatchInput */);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getSuggestedWords(final int sessionId, final int sequenceNumber,
|
public void getSuggestedWords(final int inputStyle, final int sequenceNumber,
|
||||||
final OnGetSuggestedWordsCallback callback) {
|
final OnGetSuggestedWordsCallback callback) {
|
||||||
mNonUIThreadHandler.obtainMessage(
|
mNonUIThreadHandler.obtainMessage(
|
||||||
MSG_GET_SUGGESTED_WORDS, sessionId, sequenceNumber, callback).sendToTarget();
|
MSG_GET_SUGGESTED_WORDS, inputStyle, sequenceNumber, callback).sendToTarget();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,8 @@ public class SuggestedWordsTests extends AndroidTestCase {
|
||||||
false /* typedWordValid */,
|
false /* typedWordValid */,
|
||||||
false /* willAutoCorrect */,
|
false /* willAutoCorrect */,
|
||||||
false /* isObsoleteSuggestions */,
|
false /* isObsoleteSuggestions */,
|
||||||
false /* isPrediction*/);
|
false /* isPrediction*/,
|
||||||
|
SuggestedWords.INPUT_STYLE_NONE);
|
||||||
assertEquals(NUMBER_OF_ADDED_SUGGESTIONS + 1, words.size());
|
assertEquals(NUMBER_OF_ADDED_SUGGESTIONS + 1, words.size());
|
||||||
assertEquals("typed", words.getWord(0));
|
assertEquals("typed", words.getWord(0));
|
||||||
assertTrue(words.getInfo(0).isKindOf(SuggestedWordInfo.KIND_TYPED));
|
assertTrue(words.getInfo(0).isKindOf(SuggestedWordInfo.KIND_TYPED));
|
||||||
|
@ -57,7 +58,8 @@ public class SuggestedWordsTests extends AndroidTestCase {
|
||||||
assertEquals("4", words.getWord(5));
|
assertEquals("4", words.getWord(5));
|
||||||
assertTrue(words.getInfo(5).isKindOf(SuggestedWordInfo.KIND_CORRECTION));
|
assertTrue(words.getInfo(5).isKindOf(SuggestedWordInfo.KIND_CORRECTION));
|
||||||
|
|
||||||
final SuggestedWords wordsWithoutTyped = words.getSuggestedWordsExcludingTypedWord();
|
final SuggestedWords wordsWithoutTyped = words.getSuggestedWordsExcludingTypedWord(
|
||||||
|
SuggestedWords.INPUT_STYLE_NONE);
|
||||||
assertEquals(words.size() - 1, wordsWithoutTyped.size());
|
assertEquals(words.size() - 1, wordsWithoutTyped.size());
|
||||||
assertEquals("0", wordsWithoutTyped.getWord(0));
|
assertEquals("0", wordsWithoutTyped.getWord(0));
|
||||||
assertTrue(wordsWithoutTyped.getInfo(0).isKindOf(SuggestedWordInfo.KIND_CORRECTION));
|
assertTrue(wordsWithoutTyped.getInfo(0).isKindOf(SuggestedWordInfo.KIND_CORRECTION));
|
||||||
|
|
Loading…
Reference in a new issue