am 31fa5ad3: am 5279d11f: Merge "Drag to select text: add some slop for moving between lines" into mnc-dev
* commit '31fa5ad31e6eb83b373e548647dd5bbe602afb43': Drag to select text: add some slop for moving between lines
This commit is contained in:
@@ -4421,6 +4421,10 @@ public class Editor {
|
||||
// Indicates whether the user is selecting text and using the drag accelerator.
|
||||
private boolean mDragAcceleratorActive;
|
||||
private boolean mHaventMovedEnoughToStartDrag;
|
||||
// The line that a selection happened most recently with the drag accelerator.
|
||||
private int mLineSelectionIsOn = -1;
|
||||
// Whether the drag accelerator has selected past the initial line.
|
||||
private boolean mSwitchedLines = false;
|
||||
|
||||
SelectionModifierCursorController() {
|
||||
resetTouchOffsets();
|
||||
@@ -4473,6 +4477,7 @@ public class Editor {
|
||||
// Start location of selection.
|
||||
mStartOffset = mTextView.getOffsetForPosition(mLastDownPositionX,
|
||||
mLastDownPositionY);
|
||||
mLineSelectionIsOn = mTextView.getLineAtCoordinate(mLastDownPositionY);
|
||||
// Don't show the handles until user has lifted finger.
|
||||
hide();
|
||||
|
||||
@@ -4556,17 +4561,35 @@ public class Editor {
|
||||
break;
|
||||
}
|
||||
|
||||
if (mStartOffset != -1) {
|
||||
if (mStartOffset != -1 && mTextView.getLayout() != null) {
|
||||
if (!mHaventMovedEnoughToStartDrag) {
|
||||
// Offset the finger by the same vertical offset as the handles. This
|
||||
// improves visibility of the content being selected by shifting
|
||||
// the finger below the content.
|
||||
final float fingerOffset = (mStartHandle != null)
|
||||
? mStartHandle.getIdealVerticalOffset()
|
||||
: touchSlop;
|
||||
int offset =
|
||||
mTextView.getOffsetForPosition(eventX, eventY - fingerOffset);
|
||||
|
||||
float y = eventY;
|
||||
if (mSwitchedLines) {
|
||||
// Offset the finger by the same vertical offset as the handles.
|
||||
// This improves visibility of the content being selected by
|
||||
// shifting the finger below the content, this is applied once
|
||||
// the user has switched lines.
|
||||
final float fingerOffset = (mStartHandle != null)
|
||||
? mStartHandle.getIdealVerticalOffset()
|
||||
: touchSlop;
|
||||
y = eventY - fingerOffset;
|
||||
}
|
||||
|
||||
final int currLine = getCurrentLineAdjustedForSlop(
|
||||
mTextView.getLayout(),
|
||||
mLineSelectionIsOn, y);
|
||||
if (!mSwitchedLines && currLine != mLineSelectionIsOn) {
|
||||
// Break early here, we want to offset the finger position from
|
||||
// the selection highlight, once the user moved their finger
|
||||
// to a different line we should apply the offset and *not* switch
|
||||
// lines until recomputing the position with the finger offset.
|
||||
mSwitchedLines = true;
|
||||
break;
|
||||
}
|
||||
|
||||
int startOffset;
|
||||
int offset = mTextView.getOffsetAtCoordinate(currLine, eventX);
|
||||
// Snap to word boundaries.
|
||||
if (mStartOffset < offset) {
|
||||
// Expanding with end handle.
|
||||
@@ -4577,6 +4600,7 @@ public class Editor {
|
||||
offset = getWordStart(offset);
|
||||
startOffset = getWordEnd(mStartOffset);
|
||||
}
|
||||
mLineSelectionIsOn = currLine;
|
||||
Selection.setSelection((Spannable) mTextView.getText(),
|
||||
startOffset, offset);
|
||||
}
|
||||
@@ -4613,6 +4637,7 @@ public class Editor {
|
||||
startSelectionActionMode();
|
||||
mDragAcceleratorActive = false;
|
||||
mStartOffset = -1;
|
||||
mSwitchedLines = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -4642,6 +4667,7 @@ public class Editor {
|
||||
mMinTouchOffset = mMaxTouchOffset = -1;
|
||||
mStartOffset = -1;
|
||||
mDragAcceleratorActive = false;
|
||||
mSwitchedLines = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user