Loading core/java/android/widget/TextView.java +24 −13 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -6615,6 +6618,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } else { terminateTextSelectionMode(); } if (mSelectionModifierCursorController != null) { ((SelectionModifierCursorController) mSelectionModifierCursorController).resetTouchOffsets(); } } startStopMarquee(focused); Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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() { Loading Loading @@ -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. */ Loading Loading
core/java/android/widget/TextView.java +24 −13 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -6615,6 +6618,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } else { terminateTextSelectionMode(); } if (mSelectionModifierCursorController != null) { ((SelectionModifierCursorController) mSelectionModifierCursorController).resetTouchOffsets(); } } startStopMarquee(focused); Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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() { Loading Loading @@ -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. */ Loading