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

Commit 40233407 authored by Jean Chalard's avatar Jean Chalard Committed by Android Git Automerger
Browse files

am c074c335: Merge "Refactor text range to be able to get spans larger than the word"

* commit 'c074c335':
  Refactor text range to be able to get spans larger than the word
parents f8d3d699 c074c335
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -2495,11 +2495,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        if (null == range) return; // Happens if we don't have an input connection at all
        // If for some strange reason (editor bug or so) we measure the text before the cursor as
        // longer than what the entire text is supposed to be, the safe thing to do is bail out.
        if (range.mCharsBefore > mLastSelectionStart) return;
        final int numberOfCharsInWordBeforeCursor = range.getNumberOfCharsInWordBeforeCursor();
        if (numberOfCharsInWordBeforeCursor > mLastSelectionStart) return;
        final ArrayList<SuggestedWordInfo> suggestions = CollectionUtils.newArrayList();
        final String typedWord = range.mWord.toString();
        if (range.mWord instanceof SpannableString) {
            final SpannableString spannableString = (SpannableString)range.mWord;
        final CharSequence word = range.mWord;
        final String typedWord = word.toString();
        if (word instanceof SpannableString) {
            final SpannableString spannableString = (SpannableString)word;
            int i = 0;
            for (Object object : spannableString.getSpans(0, spannableString.length(),
                    SuggestionSpan.class)) {
@@ -2515,9 +2517,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
            }
        }
        mWordComposer.setComposingWord(typedWord, mKeyboardSwitcher.getKeyboard());
        mWordComposer.setCursorPositionWithinWord(range.mCharsBefore);
        mConnection.setComposingRegion(mLastSelectionStart - range.mCharsBefore,
                mLastSelectionEnd + range.mCharsAfter);
        mWordComposer.setCursorPositionWithinWord(numberOfCharsInWordBeforeCursor);
        mConnection.setComposingRegion(
                mLastSelectionStart - numberOfCharsInWordBeforeCursor,
                mLastSelectionEnd + range.getNumberOfCharsInWordAfterCursor());
        final SuggestedWords suggestedWords;
        if (suggestions.isEmpty()) {
            // We come here if there weren't any suggestion spans on this word. We will try to
+24 −19
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.inputmethod.latin;

import android.inputmethodservice.InputMethodService;
import android.text.SpannableString;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
@@ -441,25 +440,33 @@ public final class RichInputConnection {
     * Represents a range of text, relative to the current cursor position.
     */
    public static final class Range {
        /** Characters before selection start */
        public final int mCharsBefore;
        private final CharSequence mTextAtCursor;
        private final int mWordAtCursorStartIndex;
        private final int mWordAtCursorEndIndex;
        private final int mCursorIndex;

        /**
         * Characters after selection start, including one trailing word
         * separator.
         */
        public final int mCharsAfter;

        /** The actual characters that make up a word */
        public final CharSequence mWord;

        public Range(int charsBefore, int charsAfter, CharSequence word) {
            if (charsBefore < 0 || charsAfter < 0) {
        public int getNumberOfCharsInWordBeforeCursor() {
            return mCursorIndex - mWordAtCursorStartIndex;
        }

        public int getNumberOfCharsInWordAfterCursor() {
            return mWordAtCursorEndIndex - mCursorIndex;
        }

        public Range(final CharSequence textAtCursor, final int wordAtCursorStartIndex,
                final int wordAtCursorEndIndex, final int cursorIndex) {
            if (wordAtCursorStartIndex < 0 || cursorIndex < wordAtCursorStartIndex
                    || cursorIndex > wordAtCursorEndIndex
                    || wordAtCursorEndIndex > textAtCursor.length()) {
                throw new IndexOutOfBoundsException();
            }
            this.mCharsBefore = charsBefore;
            this.mCharsAfter = charsAfter;
            this.mWord = word;
            mTextAtCursor = textAtCursor;
            mWordAtCursorStartIndex = wordAtCursorStartIndex;
            mWordAtCursorEndIndex = wordAtCursorEndIndex;
            mCursorIndex = cursorIndex;
            mWord = mTextAtCursor.subSequence(mWordAtCursorStartIndex, mWordAtCursorEndIndex);
        }
    }

@@ -571,10 +578,8 @@ public final class RichInputConnection {
            }
        }

        final SpannableString word = new SpannableString(TextUtils.concat(
                before.subSequence(startIndexInBefore, before.length()),
                after.subSequence(0, endIndexInAfter)));
        return new Range(before.length() - startIndexInBefore, endIndexInAfter, word);
        return new Range(TextUtils.concat(before, after), startIndexInBefore,
                before.length() + endIndexInAfter, before.length());
    }

    public boolean isCursorTouchingWord(final SettingsValues settingsValues) {