Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cbed462d authored by Jean Chalard's avatar Jean Chalard
Browse files

[CB12] Reset the combining state when resetting the composer

Bug: 13406701
Change-Id: I490574b7ca4b953f67dd2c0ef97401297fade0a4
parent 628a6484
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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();
}
+8 −0
Original line number Diff line number Diff line
@@ -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
+5 −0
Original line number Diff line number Diff line
@@ -62,6 +62,11 @@ public class DeadKeyCombiner implements Combiner {
        }
    }

    @Override
    public void reset() {
        mDeadSequence.setLength(0);
    }

    @Override
    public CharSequence getCombiningStateFeedback() {
        return mDeadSequence;
+5 −0
Original line number Diff line number Diff line
@@ -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;
+6 −0
Original line number Diff line number Diff line
@@ -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);
    }
}