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

Commit 5279d11f authored by Mady Mellor's avatar Mady Mellor Committed by Android (Google) Code Review
Browse files

Merge "Drag to select text: add some slop for moving between lines" into mnc-dev

parents f0522882 f9f8aebd
Loading
Loading
Loading
Loading
+35 −9
Original line number Diff line number Diff line
@@ -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.

                            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;
                            int offset =
                                    mTextView.getOffsetForPosition(eventX, eventY - fingerOffset);
                                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;
        }

        /**