[CB12] Reset the combining state when resetting the composer

Bug: 13406701
Change-Id: I490574b7ca4b953f67dd2c0ef97401297fade0a4
main
Jean Chalard 2014-03-20 17:55:30 +09:00
parent 628a64847c
commit cbed462d19
5 changed files with 29 additions and 0 deletions

View File

@ -40,4 +40,9 @@ public interface Combiner {
* @return A CharSequence representing the feedback to show users. It may include styles.
*/
CharSequence getCombiningStateFeedback();
/**
* Reset the state of this combiner, for example when the cursor was moved.
*/
void reset();
}

View File

@ -58,6 +58,14 @@ public class CombinerChain {
mStateFeedback = new SpannableStringBuilder();
}
public void reset() {
mCombinedText.setLength(0);
mStateFeedback.clear();
for (final Combiner c : mCombiners) {
c.reset();
}
}
/**
* Pass a new event through the whole chain.
* @param previousEvents the list of previous events in this composition

View File

@ -62,6 +62,11 @@ public class DeadKeyCombiner implements Combiner {
}
}
@Override
public void reset() {
mDeadSequence.setLength(0);
}
@Override
public CharSequence getCombiningStateFeedback() {
return mDeadSequence;

View File

@ -127,6 +127,7 @@ public final class WordComposer {
* Clear out the keys registered so far.
*/
public void reset() {
mCombinerChain.reset();
mTypedWord.setLength(0);
mEvents.clear();
mAutoCorrection = null;
@ -246,6 +247,8 @@ public final class WordComposer {
* @return true if the cursor is still inside the composing word, false otherwise.
*/
public boolean moveCursorByAndReturnIfInsideComposingWord(final int expectedMoveAmount) {
// TODO: should uncommit the composing feedback
mCombinerChain.reset();
int actualMoveAmountWithinWord = 0;
int cursorPos = mCursorPositionWithinWord;
final int[] codePoints;
@ -485,6 +488,7 @@ public final class WordComposer {
mIsBatchMode = false;
mPreviousWordForSuggestion = committedWord.toString();
mTypedWord.setLength(0);
mCombinerChain.reset();
mEvents.clear();
mCodePointSize = 0;
mTrailingSingleQuotesCount = 0;
@ -512,6 +516,7 @@ public final class WordComposer {
Collections.copy(mEvents, lastComposedWord.mEvents);
mInputPointers.set(lastComposedWord.mInputPointers);
mTypedWord.setLength(0);
mCombinerChain.reset();
mTypedWord.append(lastComposedWord.mTypedWord);
refreshSize();
mCapitalizedMode = lastComposedWord.mCapitalizedMode;

View File

@ -23,10 +23,16 @@ import java.util.ArrayList;
public class CombinerChain {
private StringBuilder mComposingWord = new StringBuilder();
public CombinerChain(final Combiner... combinerList) {}
public void processEvent(final ArrayList<Event> previousEvents, final Event newEvent) {
mComposingWord.append(newEvent.getTextToCommit());
}
public CharSequence getComposingWordWithCombiningFeedback() {
return mComposingWord;
}
public void reset() {
mComposingWord.setLength(0);
}
}