Loading core/java/android/widget/Editor.java +34 −34 Original line number Diff line number Diff line Loading @@ -3913,10 +3913,20 @@ public class Editor { @Override public void updatePosition(float x, float y) { final int trueOffset = mTextView.getOffsetForPosition(x, y); final int currLine = mTextView.getLineAtCoordinate(y); final int selectionEnd = mTextView.getSelectionEnd(); final Layout layout = mTextView.getLayout(); int initialOffset = mTextView.getOffsetForPosition(x, y); int currLine = mTextView.getLineAtCoordinate(y); boolean positionCursor = false; int offset = trueOffset; if (initialOffset >= selectionEnd) { // Handles have crossed, bound it to the last selected line and // adjust by word / char as normal. currLine = layout != null ? layout.getLineForOffset(selectionEnd) : mPrevLine; initialOffset = mTextView.getOffsetAtCoordinate(currLine, x); } int offset = initialOffset; int end = getWordEnd(offset); int start = getWordStart(offset); Loading @@ -3932,8 +3942,7 @@ public class Editor { offset = mPreviousOffset; } } final Layout layout = mTextView.getLayout(); if (layout != null && offset < trueOffset) { if (layout != null && offset < initialOffset) { final float adjustedX = layout.getPrimaryHorizontal(offset); mTouchWordDelta = mTextView.convertToLocalHorizontalCoordinate(x) - adjustedX; Loading @@ -3949,8 +3958,7 @@ public class Editor { if (currLine > mPrevLine) { // We're on a different line, so we'll snap to word boundaries. offset = start; final Layout layout = mTextView.getLayout(); if (layout != null && offset < trueOffset) { if (layout != null && offset < initialOffset) { final float adjustedX = layout.getPrimaryHorizontal(offset); mTouchWordDelta = mTextView.convertToLocalHorizontalCoordinate(x) - adjustedX; Loading @@ -3964,18 +3972,10 @@ public class Editor { } } // Handles can not cross and selection is at least one character. if (positionCursor) { final int selectionEnd = mTextView.getSelectionEnd(); // Handles can not cross and selection is at least one character. if (offset >= selectionEnd) { // We can't cross the handles so let's just constrain the Y value. int alteredOffset = mTextView.getOffsetAtCoordinate(mPrevLine, x); if (alteredOffset >= selectionEnd) { // Can't pass the other drag handle. offset = getNextCursorOffset(selectionEnd, false); } else { offset = alteredOffset; } mTouchWordDelta = 0.0f; } mInWord = !getWordIteratorWithText().isBoundary(offset); Loading Loading @@ -4031,10 +4031,20 @@ public class Editor { @Override public void updatePosition(float x, float y) { final int trueOffset = mTextView.getOffsetForPosition(x, y); final int currLine = mTextView.getLineAtCoordinate(y); int offset = trueOffset; final int selectionStart = mTextView.getSelectionStart(); final Layout layout = mTextView.getLayout(); int initialOffset = mTextView.getOffsetForPosition(x, y); int currLine = mTextView.getLineAtCoordinate(y); boolean positionCursor = false; if (initialOffset <= selectionStart) { // Handles have crossed, bound it to the first selected line and // adjust by word / char as normal. currLine = layout != null ? layout.getLineForOffset(selectionStart) : mPrevLine; initialOffset = mTextView.getOffsetAtCoordinate(currLine, x); } int offset = initialOffset; int end = getWordEnd(offset); int start = getWordStart(offset); Loading @@ -4050,8 +4060,7 @@ public class Editor { offset = mPreviousOffset; } } final Layout layout = mTextView.getLayout(); if (layout != null && offset > trueOffset) { if (layout != null && offset > initialOffset) { final float adjustedX = layout.getPrimaryHorizontal(offset); mTouchWordDelta = adjustedX - mTextView.convertToLocalHorizontalCoordinate(x); Loading @@ -4067,8 +4076,7 @@ public class Editor { if (currLine < mPrevLine) { // We're on a different line, so we'll snap to word boundaries. offset = end; final Layout layout = mTextView.getLayout(); if (layout != null && offset > trueOffset) { if (layout != null && offset > initialOffset) { final float adjustedX = layout.getPrimaryHorizontal(offset); mTouchWordDelta = adjustedX - mTextView.convertToLocalHorizontalCoordinate(x); Loading @@ -4083,17 +4091,9 @@ public class Editor { } if (positionCursor) { final int selectionStart = mTextView.getSelectionStart(); // Handles can not cross and selection is at least one character. if (offset <= selectionStart) { // We can't cross the handles so let's just constrain the Y value. int alteredOffset = mTextView.getOffsetAtCoordinate(mPrevLine, x); int length = mTextView.getText().length(); if (alteredOffset <= selectionStart) { // Can't pass the other drag handle. offset = getNextCursorOffset(selectionStart, true); } else { offset = Math.min(alteredOffset, length); } mTouchWordDelta = 0.0f; } mInWord = !getWordIteratorWithText().isBoundary(offset); Loading Loading
core/java/android/widget/Editor.java +34 −34 Original line number Diff line number Diff line Loading @@ -3913,10 +3913,20 @@ public class Editor { @Override public void updatePosition(float x, float y) { final int trueOffset = mTextView.getOffsetForPosition(x, y); final int currLine = mTextView.getLineAtCoordinate(y); final int selectionEnd = mTextView.getSelectionEnd(); final Layout layout = mTextView.getLayout(); int initialOffset = mTextView.getOffsetForPosition(x, y); int currLine = mTextView.getLineAtCoordinate(y); boolean positionCursor = false; int offset = trueOffset; if (initialOffset >= selectionEnd) { // Handles have crossed, bound it to the last selected line and // adjust by word / char as normal. currLine = layout != null ? layout.getLineForOffset(selectionEnd) : mPrevLine; initialOffset = mTextView.getOffsetAtCoordinate(currLine, x); } int offset = initialOffset; int end = getWordEnd(offset); int start = getWordStart(offset); Loading @@ -3932,8 +3942,7 @@ public class Editor { offset = mPreviousOffset; } } final Layout layout = mTextView.getLayout(); if (layout != null && offset < trueOffset) { if (layout != null && offset < initialOffset) { final float adjustedX = layout.getPrimaryHorizontal(offset); mTouchWordDelta = mTextView.convertToLocalHorizontalCoordinate(x) - adjustedX; Loading @@ -3949,8 +3958,7 @@ public class Editor { if (currLine > mPrevLine) { // We're on a different line, so we'll snap to word boundaries. offset = start; final Layout layout = mTextView.getLayout(); if (layout != null && offset < trueOffset) { if (layout != null && offset < initialOffset) { final float adjustedX = layout.getPrimaryHorizontal(offset); mTouchWordDelta = mTextView.convertToLocalHorizontalCoordinate(x) - adjustedX; Loading @@ -3964,18 +3972,10 @@ public class Editor { } } // Handles can not cross and selection is at least one character. if (positionCursor) { final int selectionEnd = mTextView.getSelectionEnd(); // Handles can not cross and selection is at least one character. if (offset >= selectionEnd) { // We can't cross the handles so let's just constrain the Y value. int alteredOffset = mTextView.getOffsetAtCoordinate(mPrevLine, x); if (alteredOffset >= selectionEnd) { // Can't pass the other drag handle. offset = getNextCursorOffset(selectionEnd, false); } else { offset = alteredOffset; } mTouchWordDelta = 0.0f; } mInWord = !getWordIteratorWithText().isBoundary(offset); Loading Loading @@ -4031,10 +4031,20 @@ public class Editor { @Override public void updatePosition(float x, float y) { final int trueOffset = mTextView.getOffsetForPosition(x, y); final int currLine = mTextView.getLineAtCoordinate(y); int offset = trueOffset; final int selectionStart = mTextView.getSelectionStart(); final Layout layout = mTextView.getLayout(); int initialOffset = mTextView.getOffsetForPosition(x, y); int currLine = mTextView.getLineAtCoordinate(y); boolean positionCursor = false; if (initialOffset <= selectionStart) { // Handles have crossed, bound it to the first selected line and // adjust by word / char as normal. currLine = layout != null ? layout.getLineForOffset(selectionStart) : mPrevLine; initialOffset = mTextView.getOffsetAtCoordinate(currLine, x); } int offset = initialOffset; int end = getWordEnd(offset); int start = getWordStart(offset); Loading @@ -4050,8 +4060,7 @@ public class Editor { offset = mPreviousOffset; } } final Layout layout = mTextView.getLayout(); if (layout != null && offset > trueOffset) { if (layout != null && offset > initialOffset) { final float adjustedX = layout.getPrimaryHorizontal(offset); mTouchWordDelta = adjustedX - mTextView.convertToLocalHorizontalCoordinate(x); Loading @@ -4067,8 +4076,7 @@ public class Editor { if (currLine < mPrevLine) { // We're on a different line, so we'll snap to word boundaries. offset = end; final Layout layout = mTextView.getLayout(); if (layout != null && offset > trueOffset) { if (layout != null && offset > initialOffset) { final float adjustedX = layout.getPrimaryHorizontal(offset); mTouchWordDelta = adjustedX - mTextView.convertToLocalHorizontalCoordinate(x); Loading @@ -4083,17 +4091,9 @@ public class Editor { } if (positionCursor) { final int selectionStart = mTextView.getSelectionStart(); // Handles can not cross and selection is at least one character. if (offset <= selectionStart) { // We can't cross the handles so let's just constrain the Y value. int alteredOffset = mTextView.getOffsetAtCoordinate(mPrevLine, x); int length = mTextView.getText().length(); if (alteredOffset <= selectionStart) { // Can't pass the other drag handle. offset = getNextCursorOffset(selectionStart, true); } else { offset = Math.min(alteredOffset, length); } mTouchWordDelta = 0.0f; } mInWord = !getWordIteratorWithText().isBoundary(offset); Loading