Fix a bug that the typed word with the blue underline indicator will be duplicated

Bug: 5466373

Change-Id: I0300c34cb6076b12ecb89cb29bea95288559108f
main
satok 2011-10-17 11:27:31 +09:00
parent 908a2f6394
commit fe2d90798e
2 changed files with 73 additions and 38 deletions

View File

@ -0,0 +1,68 @@
/**
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.android.inputmethod.latin;
import android.util.Log;
public class ComposingStateManager {
private static final String TAG = ComposingStateManager.class.getSimpleName();
private static final ComposingStateManager sInstance = new ComposingStateManager();
private boolean mAutoCorrectionIndicatorOn;
private boolean mIsComposing;
public static ComposingStateManager getInstance() {
return sInstance;
}
private ComposingStateManager() {
mAutoCorrectionIndicatorOn = false;
mIsComposing = false;
}
public synchronized void onStartComposingText() {
if (!mIsComposing) {
if (LatinImeLogger.sDBG) {
Log.i(TAG, "Start composing text.");
}
mAutoCorrectionIndicatorOn = false;
mIsComposing = true;
}
}
public synchronized void onFinishComposingText() {
if (mIsComposing) {
if (LatinImeLogger.sDBG) {
Log.i(TAG, "Finish composing text.");
}
mAutoCorrectionIndicatorOn = false;
mIsComposing = false;
}
}
public synchronized boolean isAutoCorrectionIndicatorOn() {
return mAutoCorrectionIndicatorOn;
}
public synchronized void setAutoCorrectionIndicatorOn(boolean on) {
// Auto-correction indicator should be specified only when the current state is "composing".
if (!mIsComposing) return;
if (LatinImeLogger.sDBG) {
Log.i(TAG, "Set auto correction Indicator: " + on);
}
mAutoCorrectionIndicatorOn = on;
}
}

View File

@ -231,7 +231,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
private CharSequence mEnteredText;
private final ComposingStateManager mComposingStateManager =
new ComposingStateManager();
ComposingStateManager.getInstance();
public final UIHandler mHandler = new UIHandler(this);
@ -1636,6 +1636,10 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
mComposingStateManager.isAutoCorrectionIndicatorOn();
final boolean newAutoCorrectionIndicator = Utils.willAutoCorrect(words);
if (oldAutoCorrectionIndicator != newAutoCorrectionIndicator) {
if (LatinImeLogger.sDBG) {
Log.d(TAG, "Flip the indicator. " + oldAutoCorrectionIndicator
+ " -> " + newAutoCorrectionIndicator);
}
final CharSequence textWithUnderline = newAutoCorrectionIndicator
? SuggestionSpanUtils.getTextWithAutoCorrectionIndicatorUnderline(
this, mComposingStringBuilder)
@ -2308,43 +2312,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
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
protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
super.dump(fd, fout, args);