Enable choosing a bigram prediction several times in a row.

This change fixes a bug that prevented to choose a prediction
several times in a row because the predictions would be replaced
right away by punctuations.
Please note several things about this change:
- Recorrection is pretty much in the middle of being refactored.
  This change has no effect on recorrection itself, but may make
  existing strange behavior more obvious when moving the cursor
  for example.
- The part of this change in Recorrection.java is not used in
  master at the moment because ongoing changes on recorrection
  result in the control never landing there, but would have been
  needed in the past and may be needed in the future.
- This change may have adverse effects on performance which need
  to be evaluated. A comment in the code has also been written
  to this effect.
- This does not fix bug 4466199, only addresses a pinpoint case
  of it to help evaluating the bigram predictions feature.

Bug: 4466199
Change-Id: I7219e5aeb74dff9251d12b2a72f94448dbb3e63f
main
Jean Chalard 2011-05-26 12:31:52 +09:00
parent 9e5be6caad
commit 41ec3ec2f3
2 changed files with 13 additions and 11 deletions

View File

@ -218,10 +218,10 @@ public class Recorrection implements SharedPreferences.OnSharedPreferenceChangeL
mService.showSuggestions(builder.build(), entries.getOriginalWord());
}
public void setRecorrectionSuggestions(VoiceProxy voiceProxy, CandidateView candidateView,
Suggest suggest, KeyboardSwitcher keyboardSwitcher, WordComposer word,
boolean hasUncommittedTypedChars, int lastSelectionStart, int lastSelectionEnd,
String wordSeparators) {
public void fetchAndDisplayRecorrectionSuggestions(VoiceProxy voiceProxy,
CandidateView candidateView, Suggest suggest, KeyboardSwitcher keyboardSwitcher,
WordComposer word, boolean hasUncommittedTypedChars, int lastSelectionStart,
int lastSelectionEnd, String wordSeparators) {
if (!InputConnectionCompatUtils.RECORRECTION_SUPPORTED) return;
if (SuggestionSpanUtils.SUGGESTION_SPAN_IS_SUPPORTED || !mRecorrectionEnabled) return;
voiceProxy.setShowingVoiceSuggestions(false);
@ -249,7 +249,7 @@ public class Recorrection implements SharedPreferences.OnSharedPreferenceChangeL
ic.endBatchEdit();
} else {
abortRecorrection(true);
mService.setPunctuationSuggestions(); // Show the punctuation suggestions list
mService.updateBigramPredictions();
}
} else {
abortRecorrection(true);

View File

@ -222,9 +222,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
updateSuggestions();
break;
case MSG_UPDATE_OLD_SUGGESTIONS:
mRecorrection.setRecorrectionSuggestions(mVoiceProxy, mCandidateView, mSuggest,
mKeyboardSwitcher, mWord, mHasUncommittedTypedChars, mLastSelectionStart,
mLastSelectionEnd, mSettingsValues.mWordSeparators);
mRecorrection.fetchAndDisplayRecorrectionSuggestions(mVoiceProxy, mCandidateView,
mSuggest, mKeyboardSwitcher, mWord, mHasUncommittedTypedChars,
mLastSelectionStart, mLastSelectionEnd, mSettingsValues.mWordSeparators);
break;
case MSG_UPDATE_SHIFT_STATE:
switcher.updateShiftState();
@ -1621,8 +1621,10 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (!showingAddToDictionaryHint) {
// If we're not showing the "Touch again to save", then show corrections again.
// In case the cursor position doesn't change, make sure we show the suggestions again.
clearSuggestions();
mHandler.postUpdateOldSuggestions();
updateBigramPredictions();
// Updating the predictions right away may be slow and feel unresponsive on slower
// terminals. On the other hand if we just postUpdateBigramPredictions() it will
// take a noticeable delay to update them which may feel uneasy.
}
if (showingAddToDictionaryHint) {
mCandidateView.showAddToDictionaryHint(suggestion);
@ -1655,7 +1657,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
private static final WordComposer sEmptyWordComposer = new WordComposer();
private void updateBigramPredictions() {
public void updateBigramPredictions() {
if (mSuggest == null || !isSuggestionsRequested())
return;