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

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

am ced547f7: am e259b9f5: Merge "Clean up RecapitalizeStatus"

* commit 'ced547f7':
  Clean up RecapitalizeStatus
parents 57ac9afc ced547f7
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -161,7 +161,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
            mPositionalInfoForUserDictPendingAddition = null;
    private final WordComposer mWordComposer = new WordComposer();
    private final RichInputConnection mConnection = new RichInputConnection(this);
    private RecapitalizeStatus mRecapitalizeStatus = null;
    private final RecapitalizeStatus mRecapitalizeStatus = new RecapitalizeStatus();

    // Keep track of the last selection range to decide if we need to show word alternatives
    private static final int NOT_A_CURSOR_POSITION = -1;
@@ -742,6 +742,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
        resetComposingState(true /* alsoResetLastComposedWord */);
        mDeleteCount = 0;
        mSpaceState = SPACE_STATE_NONE;
        mRecapitalizeStatus.deactivate();
        mCurrentlyPressedHardwareKeys.clear();

        if (mSuggestionStripView != null) {
@@ -925,7 +926,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
            // We moved the cursor. If we are touching a word, we need to resume suggestion.
            mHandler.postResumeSuggestions();
            // Reset the last recapitalization.
            mRecapitalizeStatus = null;
            mRecapitalizeStatus.deactivate();
            mKeyboardSwitcher.updateShiftState();
        }
        mExpectingUpdateSelection = false;
@@ -1953,10 +1954,9 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
    private void handleRecapitalize() {
        if (mLastSelectionStart == mLastSelectionEnd) return; // No selection
        // If we have a recapitalize in progress, use it; otherwise, create a new one.
        if (null == mRecapitalizeStatus
        if (!mRecapitalizeStatus.isActive()
                || !mRecapitalizeStatus.isSetAt(mLastSelectionStart, mLastSelectionEnd)) {
            mRecapitalizeStatus =
                    new RecapitalizeStatus(mLastSelectionStart, mLastSelectionEnd,
            mRecapitalizeStatus.initialize(mLastSelectionStart, mLastSelectionEnd,
                    mConnection.getSelectedText(0 /* flags, 0 for no styles */).toString(),
                    mSettings.getCurrentLocale(), mSettings.getWordSeparators());
            // We trim leading and trailing whitespace.
+39 −24
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ public class RecapitalizeStatus {
        CAPS_MODE_FIRST_WORD_UPPER,
        CAPS_MODE_ALL_UPPER
    };

    private static final int getStringMode(final String string, final String separators) {
        if (StringUtils.isIdenticalAfterUpcase(string)) {
            return CAPS_MODE_ALL_UPPER;
@@ -50,24 +51,29 @@ public class RecapitalizeStatus {
    }

    /**
     * We store the location of the cursor and the string that was there before the undoable
     * We store the location of the cursor and the string that was there before the recapitalize
     * action was done, and the location of the cursor and the string that was there after.
     */
    private int mCursorStartBefore;
    private int mCursorEndBefore;
    private String mStringBefore;
    private int mCursorStartAfter;
    private int mCursorEndAfter;
    private int mRotationStyleCurrentIndex;
    private final boolean mSkipOriginalMixedCaseMode;
    private final Locale mLocale;
    private final String mSeparators;
    private boolean mSkipOriginalMixedCaseMode;
    private Locale mLocale;
    private String mSeparators;
    private String mStringAfter;
    private boolean mIsActive;

    public RecapitalizeStatus() {
        // By default, initialize with dummy values that won't match any real recapitalize.
        initialize(-1, -1, "", Locale.getDefault(), "");
        deactivate();
    }

    public RecapitalizeStatus(final int cursorStart, final int cursorEnd, final String string,
    public void initialize(final int cursorStart, final int cursorEnd, final String string,
            final Locale locale, final String separators) {
        mCursorStartBefore = cursorStart;
        mCursorEndBefore = cursorEnd;
        mStringBefore = string;
        mCursorStartAfter = cursorStart;
        mCursorEndAfter = cursorEnd;
@@ -89,6 +95,15 @@ public class RecapitalizeStatus {
            mRotationStyleCurrentIndex = currentMode;
            mSkipOriginalMixedCaseMode = true;
        }
        mIsActive = true;
    }

    public void deactivate() {
        mIsActive = false;
    }

    public boolean isActive() {
        return mIsActive;
    }

    public boolean isSetAt(final int cursorStart, final int cursorEnd) {
@@ -126,7 +141,7 @@ public class RecapitalizeStatus {
            default:
                mStringAfter = mStringBefore;
            }
        } while (mStringAfter.equals(oldResult) && count < 5);
        } while (mStringAfter.equals(oldResult) && count < ROTATION_STYLE.length + 1);
        mCursorEndAfter = mCursorStartAfter + mStringAfter.length();
    }

@@ -148,7 +163,7 @@ public class RecapitalizeStatus {
            if (!Character.isWhitespace(codePoint)) break;
        }
        if (0 != nonWhitespaceStart || len != nonWhitespaceEnd) {
            mCursorEndBefore = mCursorEndAfter = mCursorStartBefore + nonWhitespaceEnd;
            mCursorEndAfter = mCursorStartBefore + nonWhitespaceEnd;
            mCursorStartBefore = mCursorStartAfter = mCursorStartBefore + nonWhitespaceStart;
            mStringAfter = mStringBefore =
                    mStringBefore.substring(nonWhitespaceStart, nonWhitespaceEnd);
+15 −27
Original line number Diff line number Diff line
@@ -24,29 +24,26 @@ import java.util.Locale;
@SmallTest
public class RecapitalizeStatusTests extends AndroidTestCase {
    public void testTrim() {
        RecapitalizeStatus status = new RecapitalizeStatus(30, 40, "abcdefghij",
                Locale.ENGLISH, " ");
        final RecapitalizeStatus status = new RecapitalizeStatus();
        status.initialize(30, 40, "abcdefghij", Locale.ENGLISH, " ");
        status.trim();
        assertEquals("abcdefghij", status.getRecapitalizedString());
        assertEquals(30, status.getNewCursorStart());
        assertEquals(40, status.getNewCursorEnd());

        status = new RecapitalizeStatus(30, 44, "    abcdefghij",
                Locale.ENGLISH, " ");
        status.initialize(30, 44, "    abcdefghij", Locale.ENGLISH, " ");
        status.trim();
        assertEquals("abcdefghij", status.getRecapitalizedString());
        assertEquals(34, status.getNewCursorStart());
        assertEquals(44, status.getNewCursorEnd());

        status = new RecapitalizeStatus(30, 40, "abcdefgh  ",
                Locale.ENGLISH, " ");
        status.initialize(30, 40, "abcdefgh  ", Locale.ENGLISH, " ");
        status.trim();
        assertEquals("abcdefgh", status.getRecapitalizedString());
        assertEquals(30, status.getNewCursorStart());
        assertEquals(38, status.getNewCursorEnd());

        status = new RecapitalizeStatus(30, 45, "   abcdefghij  ",
                Locale.ENGLISH, " ");
        status.initialize(30, 45, "   abcdefghij  ", Locale.ENGLISH, " ");
        status.trim();
        assertEquals("abcdefghij", status.getRecapitalizedString());
        assertEquals(33, status.getNewCursorStart());
@@ -54,8 +51,8 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
    }

    public void testRotate() {
        RecapitalizeStatus status = new RecapitalizeStatus(29, 40, "abcd efghij",
                Locale.ENGLISH, " ");
        final RecapitalizeStatus status = new RecapitalizeStatus();
        status.initialize(29, 40, "abcd efghij", Locale.ENGLISH, " ");
        status.rotate();
        assertEquals("Abcd Efghij", status.getRecapitalizedString());
        assertEquals(29, status.getNewCursorStart());
@@ -67,8 +64,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
        status.rotate();
        assertEquals("Abcd Efghij", status.getRecapitalizedString());

        status = new RecapitalizeStatus(29, 40, "Abcd Efghij",
                Locale.ENGLISH, " ");
        status.initialize(29, 40, "Abcd Efghij", Locale.ENGLISH, " ");
        status.rotate();
        assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
        assertEquals(29, status.getNewCursorStart());
@@ -80,8 +76,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
        status.rotate();
        assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());

        status = new RecapitalizeStatus(29, 40, "ABCD EFGHIJ",
                Locale.ENGLISH, " ");
        status.initialize(29, 40, "ABCD EFGHIJ", Locale.ENGLISH, " ");
        status.rotate();
        assertEquals("abcd efghij", status.getRecapitalizedString());
        assertEquals(29, status.getNewCursorStart());
@@ -93,8 +88,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
        status.rotate();
        assertEquals("abcd efghij", status.getRecapitalizedString());

        status = new RecapitalizeStatus(29, 39, "AbCDefghij",
                Locale.ENGLISH, " ");
        status.initialize(29, 39, "AbCDefghij", Locale.ENGLISH, " ");
        status.rotate();
        assertEquals("abcdefghij", status.getRecapitalizedString());
        assertEquals(29, status.getNewCursorStart());
@@ -108,8 +102,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
        status.rotate();
        assertEquals("abcdefghij", status.getRecapitalizedString());

        status = new RecapitalizeStatus(29, 40, "Abcd efghij",
                Locale.ENGLISH, " ");
        status.initialize(29, 40, "Abcd efghij", Locale.ENGLISH, " ");
        status.rotate();
        assertEquals("abcd efghij", status.getRecapitalizedString());
        assertEquals(29, status.getNewCursorStart());
@@ -123,8 +116,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
        status.rotate();
        assertEquals("abcd efghij", status.getRecapitalizedString());

        status = new RecapitalizeStatus(30, 34, "grüß", Locale.GERMAN, " ");
        status.rotate();
        status.initialize(30, 34, "grüß", Locale.GERMAN, " "); status.rotate();
        assertEquals("Grüß", status.getRecapitalizedString());
        assertEquals(30, status.getNewCursorStart());
        assertEquals(34, status.getNewCursorEnd());
@@ -141,9 +133,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
        assertEquals(30, status.getNewCursorStart());
        assertEquals(34, status.getNewCursorEnd());


        status = new RecapitalizeStatus(30, 33, "œuf", Locale.FRENCH, " ");
        status.rotate();
        status.initialize(30, 33, "œuf", Locale.FRENCH, " "); status.rotate();
        assertEquals("Œuf", status.getRecapitalizedString());
        assertEquals(30, status.getNewCursorStart());
        assertEquals(33, status.getNewCursorEnd());
@@ -160,8 +150,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
        assertEquals(30, status.getNewCursorStart());
        assertEquals(33, status.getNewCursorEnd());

        status = new RecapitalizeStatus(30, 33, "œUf", Locale.FRENCH, " ");
        status.rotate();
        status.initialize(30, 33, "œUf", Locale.FRENCH, " "); status.rotate();
        assertEquals("œuf", status.getRecapitalizedString());
        assertEquals(30, status.getNewCursorStart());
        assertEquals(33, status.getNewCursorEnd());
@@ -182,8 +171,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
        assertEquals(30, status.getNewCursorStart());
        assertEquals(33, status.getNewCursorEnd());

        status = new RecapitalizeStatus(30, 35, "école", Locale.FRENCH, " ");
        status.rotate();
        status.initialize(30, 35, "école", Locale.FRENCH, " "); status.rotate();
        assertEquals("École", status.getRecapitalizedString());
        assertEquals(30, status.getNewCursorStart());
        assertEquals(35, status.getNewCursorEnd());