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

Commit 42dd7ec9 authored by Gilles Debunne's avatar Gilles Debunne Committed by Android Git Automerger
Browse files

am a827d7bc: Merge "Other improvements to text cursor movement." into gingerbread

Merge commit 'a827d7bc' into gingerbread-plus-aosp

* commit 'a827d7bc':
  Other improvements to text cursor movement.
parents 37c8ad77 a827d7bc
Loading
Loading
Loading
Loading
+24 −13
Original line number Diff line number Diff line
@@ -6556,7 +6556,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            if (!mFrozenWithFocus || (selStart < 0 || selEnd < 0)) {
                // If a tap was used to give focus to that view, move cursor at tap position.
                // Has to be done before onTakeFocus, which can be overloaded.
                moveCursorToLastTapPosition();
                final int lastTapPosition = getLastTapPosition();
                if (lastTapPosition >= 0) {
                    Selection.setSelection((Spannable) mText, lastTapPosition);
                }

                if (mMovement != null) {
                    mMovement.onTakeFocus(this, (Spannable) mText, direction);
@@ -6615,6 +6618,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            } else {
                terminateTextSelectionMode();
            }

            if (mSelectionModifierCursorController != null) {
                ((SelectionModifierCursorController) mSelectionModifierCursorController).resetTouchOffsets();
            }
        }

        startStopMarquee(focused);
@@ -6626,20 +6633,22 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    private void moveCursorToLastTapPosition() {
    private int getLastTapPosition() {
        if (mSelectionModifierCursorController != null) {
            int mTapToFocusPosition = ((SelectionModifierCursorController)
            int lastTapPosition = ((SelectionModifierCursorController)
                    mSelectionModifierCursorController).getMinTouchOffset();
            if (mTapToFocusPosition >= 0) {
            if (lastTapPosition >= 0) {
                // Safety check, should not be possible.
                if (mTapToFocusPosition > mText.length()) {
                    Log.e(LOG_TAG, "Invalid tap focus position (" + mTapToFocusPosition + " vs "
                if (lastTapPosition > mText.length()) {
                    Log.e(LOG_TAG, "Invalid tap focus position (" + lastTapPosition + " vs "
                            + mText.length() + ")");
                    mTapToFocusPosition = mText.length();
                    lastTapPosition = mText.length();
                }
                Selection.setSelection((Spannable) mText, mTapToFocusPosition);
                return lastTapPosition;
            }
        }

        return -1;
    }

    @Override
@@ -7302,10 +7311,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    }
    
    private String getWordForDictionary() {
        if (!mContextMenuTriggeredByKey) {
            moveCursorToLastTapPosition();
        }
        long wordLimits = getWordLimitsAt(getSelectionStart());
        int seedPosition = mContextMenuTriggeredByKey ? getSelectionStart() : getLastTapPosition();
        long wordLimits = getWordLimitsAt(seedPosition);
        if (wordLimits >= 0) {
            int start = extractRangeStartFromLong(wordLimits);
            int end = extractRangeEndFromLong(wordLimits);
@@ -8024,7 +8031,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        SelectionModifierCursorController() {
            mStartHandle = new HandleView(this, HandleView.LEFT);
            mEndHandle = new HandleView(this, HandleView.RIGHT);
            mMinTouchOffset = mMaxTouchOffset = -1;
            resetTouchOffsets();
        }

        public void show() {
@@ -8156,6 +8163,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            return mMaxTouchOffset;
        }

        public void resetTouchOffsets() {
            mMinTouchOffset = mMaxTouchOffset = -1;
        }

        /**
         * @return true iff this controller is currently used to move the selection start.
         */