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

Commit e259b9f5 authored by Jean Chalard's avatar Jean Chalard Committed by Android (Google) Code Review
Browse files

Merge "Clean up RecapitalizeStatus"

parents fd15686a b794e904
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());