Merge "Suppress flickers of the auto correction indicator" into ics-mr0

This commit is contained in:
satok 2011-10-12 10:08:50 -07:00 committed by Android (Google) Code Review
commit ef0a7b7546

View file

@ -229,6 +229,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
// Keeps track of most recently inserted text (multi-character key) for reverting // Keeps track of most recently inserted text (multi-character key) for reverting
private CharSequence mEnteredText; private CharSequence mEnteredText;
private final ComposingStateManager mComposingStateManager =
new ComposingStateManager();
public final UIHandler mHandler = new UIHandler(this); public final UIHandler mHandler = new UIHandler(this);
public static class UIHandler extends StaticInnerHandlerWrapper<LatinIME> { public static class UIHandler extends StaticInnerHandlerWrapper<LatinIME> {
@ -610,6 +613,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
@Override @Override
public void onConfigurationChanged(Configuration conf) { public void onConfigurationChanged(Configuration conf) {
mSubtypeSwitcher.onConfigurationChanged(conf); mSubtypeSwitcher.onConfigurationChanged(conf);
mComposingStateManager.onFinishComposingText();
// If orientation changed while predicting, commit the change // If orientation changed while predicting, commit the change
if (mDisplayOrientation != conf.orientation) { if (mDisplayOrientation != conf.orientation) {
mDisplayOrientation = conf.orientation; mDisplayOrientation = conf.orientation;
@ -881,6 +885,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (ic != null) { if (ic != null) {
ic.finishComposingText(); ic.finishComposingText();
} }
mComposingStateManager.onFinishComposingText();
mVoiceProxy.setVoiceInputHighlighted(false); mVoiceProxy.setVoiceInputHighlighted(false);
} else if (!mHasUncommittedTypedChars) { } else if (!mHasUncommittedTypedChars) {
TextEntryState.reset(); TextEntryState.reset();
@ -1336,7 +1341,12 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (length > 0) { if (length > 0) {
mComposingStringBuilder.delete(length - 1, length); mComposingStringBuilder.delete(length - 1, length);
mWordComposer.deleteLast(); mWordComposer.deleteLast();
ic.setComposingText(mComposingStringBuilder, 1); final CharSequence textWithUnderline =
mComposingStateManager.isAutoCorrectionIndicatorOn()
? SuggestionSpanUtils.getTextWithAutoCorrectionIndicatorUnderline(
this, mComposingStringBuilder)
: mComposingStringBuilder;
ic.setComposingText(textWithUnderline, 1);
if (mComposingStringBuilder.length() == 0) { if (mComposingStringBuilder.length() == 0) {
mHasUncommittedTypedChars = false; mHasUncommittedTypedChars = false;
} }
@ -1427,6 +1437,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
mComposingStringBuilder.setLength(0); mComposingStringBuilder.setLength(0);
mWordComposer.reset(); mWordComposer.reset();
clearSuggestions(); clearSuggestions();
mComposingStateManager.onFinishComposingText();
} }
} }
final KeyboardSwitcher switcher = mKeyboardSwitcher; final KeyboardSwitcher switcher = mKeyboardSwitcher;
@ -1458,8 +1469,14 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
// If it's the first letter, make note of auto-caps state // If it's the first letter, make note of auto-caps state
if (mWordComposer.size() == 1) { if (mWordComposer.size() == 1) {
mWordComposer.setAutoCapitalized(getCurrentAutoCapsState()); mWordComposer.setAutoCapitalized(getCurrentAutoCapsState());
mComposingStateManager.onStartComposingText();
} }
ic.setComposingText(mComposingStringBuilder, 1); final CharSequence textWithUnderline =
mComposingStateManager.isAutoCorrectionIndicatorOn()
? SuggestionSpanUtils.getTextWithAutoCorrectionIndicatorUnderline(
this, mComposingStringBuilder)
: mComposingStringBuilder;
ic.setComposingText(textWithUnderline, 1);
} }
mHandler.postUpdateSuggestions(); mHandler.postUpdateSuggestions();
} else { } else {
@ -1478,6 +1495,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
private void handleSeparator(int primaryCode, int x, int y) { private void handleSeparator(int primaryCode, int x, int y) {
mVoiceProxy.handleSeparator(); mVoiceProxy.handleSeparator();
mComposingStateManager.onFinishComposingText();
// Should dismiss the "Touch again to save" message when handling separator // Should dismiss the "Touch again to save" message when handling separator
if (mSuggestionsView != null && mSuggestionsView.dismissAddToDictionaryHint()) { if (mSuggestionsView != null && mSuggestionsView.dismissAddToDictionaryHint()) {
@ -1615,12 +1633,19 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
// Put a blue underline to a word in TextView which will be auto-corrected. // Put a blue underline to a word in TextView which will be auto-corrected.
final InputConnection ic = getCurrentInputConnection(); final InputConnection ic = getCurrentInputConnection();
if (ic != null && Utils.willAutoCorrect(words)) { if (ic != null) {
final CharSequence textWithUnderline = final boolean oldAutoCorrectionIndicator =
SuggestionSpanUtils.getTextWithAutoCorrectionIndicatorUnderline( mComposingStateManager.isAutoCorrectionIndicatorOn();
this, mComposingStringBuilder); final boolean newAutoCorrectionIndicator = Utils.willAutoCorrect(words);
if (!TextUtils.isEmpty(textWithUnderline)) { if (oldAutoCorrectionIndicator != newAutoCorrectionIndicator) {
ic.setComposingText(textWithUnderline, 1); final CharSequence textWithUnderline = newAutoCorrectionIndicator
? SuggestionSpanUtils.getTextWithAutoCorrectionIndicatorUnderline(
this, mComposingStringBuilder)
: mComposingStringBuilder;
if (!TextUtils.isEmpty(textWithUnderline)) {
ic.setComposingText(textWithUnderline, 1);
}
mComposingStateManager.setAutoCorrectionIndicatorOn(newAutoCorrectionIndicator);
} }
} }
} }
@ -1732,6 +1757,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
@Override @Override
public void pickSuggestionManually(int index, CharSequence suggestion) { public void pickSuggestionManually(int index, CharSequence suggestion) {
mComposingStateManager.onFinishComposingText();
SuggestedWords suggestions = mSuggestionsView.getSuggestions(); SuggestedWords suggestions = mSuggestionsView.getSuggestions();
mVoiceProxy.flushAndLogAllTextModificationCounters(index, suggestion, mVoiceProxy.flushAndLogAllTextModificationCounters(index, suggestion,
mSettingsValues.mWordSeparators); mSettingsValues.mWordSeparators);
@ -2279,6 +2305,43 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
showOptionDialogInternal(builder.create()); showOptionDialogInternal(builder.create());
} }
private static class ComposingStateManager {
private boolean mAutoCorrectionIndicatorOn;
private boolean mIsComposing;
public ComposingStateManager() {
mAutoCorrectionIndicatorOn = false;
mIsComposing = false;
}
private void onStartComposingText() {
if (!mIsComposing) {
if (LatinImeLogger.sDBG) {
Log.i(TAG, "Start composing text.");
}
mAutoCorrectionIndicatorOn = false;
mIsComposing = true;
}
}
private void onFinishComposingText() {
if (mIsComposing) {
if (LatinImeLogger.sDBG) {
Log.i(TAG, "Finish composing text.");
}
mAutoCorrectionIndicatorOn = false;
mIsComposing = false;
}
}
public boolean isAutoCorrectionIndicatorOn() {
return mAutoCorrectionIndicatorOn;
}
public void setAutoCorrectionIndicatorOn(boolean on) {
mAutoCorrectionIndicatorOn = on;
}
}
@Override @Override
protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) { protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
super.dump(fd, fout, args); super.dump(fd, fout, args);