* commit 'e596fe2702d3b4db50bc9bc4bed3568b90558017': Suppress flickers of the auto correction indicator
This commit is contained in:
commit
a9782ace22
1 changed files with 71 additions and 8 deletions
|
@ -228,6 +228,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> {
|
||||||
|
@ -609,6 +612,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;
|
||||||
|
@ -880,6 +884,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();
|
||||||
|
@ -1335,7 +1340,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;
|
||||||
}
|
}
|
||||||
|
@ -1426,6 +1436,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;
|
||||||
|
@ -1457,8 +1468,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 {
|
||||||
|
@ -1477,6 +1494,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()) {
|
||||||
|
@ -1614,13 +1632,20 @@ 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 (oldAutoCorrectionIndicator != newAutoCorrectionIndicator) {
|
||||||
|
final CharSequence textWithUnderline = newAutoCorrectionIndicator
|
||||||
|
? SuggestionSpanUtils.getTextWithAutoCorrectionIndicatorUnderline(
|
||||||
|
this, mComposingStringBuilder)
|
||||||
|
: mComposingStringBuilder;
|
||||||
if (!TextUtils.isEmpty(textWithUnderline)) {
|
if (!TextUtils.isEmpty(textWithUnderline)) {
|
||||||
ic.setComposingText(textWithUnderline, 1);
|
ic.setComposingText(textWithUnderline, 1);
|
||||||
}
|
}
|
||||||
|
mComposingStateManager.setAutoCorrectionIndicatorOn(newAutoCorrectionIndicator);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1731,6 +1756,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);
|
||||||
|
@ -2271,6 +2297,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);
|
||||||
|
|
Loading…
Reference in a new issue