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

Commit e04c1496 authored by Gilles Debunne's avatar Gilles Debunne
Browse files

resolved conflicts for merge of c0728cc0 to gingerbread-plus-aosp

Change-Id: I1b941e0610e498365d441c7bd23af276d1b5f986
parents a62bf8bb c0728cc0
Loading
Loading
Loading
Loading
+40 −17
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
@@ -6841,14 +6842,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final int action = event.getActionMasked();
        if (action == MotionEvent.ACTION_DOWN) {
            if (hasInsertionController()) {
                getInsertionController().onTouchEvent(event);

        if (mInsertionPointCursorController != null) {
            mInsertionPointCursorController.onTouchEvent(event);
        }
            if (hasSelectionController()) {
                getSelectionController().onTouchEvent(event);
        if (mSelectionModifierCursorController != null) {
            mSelectionModifierCursorController.onTouchEvent(event);
        }

        if (action == MotionEvent.ACTION_DOWN) {
        // Reset this state; it will be re-set if super.onTouchEvent
        // causes focus to move to the view.
            mTouchFocusSelected = false;
@@ -6869,13 +6871,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener

        if ((mMovement != null || onCheckIsTextEditor()) && isEnabled() &&
                mText instanceof Spannable && mLayout != null) {
            if (hasInsertionController()) {
                getInsertionController().onTouchEvent(event);
            }
            if (hasSelectionController()) {
                getSelectionController().onTouchEvent(event);
            }

            boolean handled = false;

            // Save previous selection, in case this event is used to show the IME.
@@ -7804,7 +7799,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                }
                mDrawable = mSelectHandleLeft;
                handleWidth = mDrawable.getIntrinsicWidth();
                mHotspotX = handleWidth / 4 * 3;
                mHotspotX = (handleWidth * 3) / 4;
                break;
            }

@@ -7971,6 +7966,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                mIsDragging = true;
                break;
            }

            case MotionEvent.ACTION_MOVE: {
                final float rawX = ev.getRawX();
                final float rawY = ev.getRawY();
@@ -7981,6 +7977,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener

                break;
            }

            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                mIsDragging = false;
@@ -8095,6 +8092,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        private int mMinTouchOffset, mMaxTouchOffset;
        // Whether selection anchors are active
        private boolean mIsShowing;
        // Double tap detection
        private long mPreviousTapUpTime = 0;
        private int mPreviousTapPositionX;
        private int mPreviousTapPositionY;

        SelectionModifierCursorController() {
            mStartHandle = new HandleView(this, HandleView.LEFT);
@@ -8189,6 +8190,24 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                        // Remember finger down position, to be able to start selection from there
                        mMinTouchOffset = mMaxTouchOffset = getOffset(x, y);

                        // Double tap detection
                        long duration = SystemClock.uptimeMillis() - mPreviousTapUpTime;
                        if (duration <= ViewConfiguration.getDoubleTapTimeout()) {
                            final int deltaX = x - mPreviousTapPositionX;
                            final int deltaY = y - mPreviousTapPositionY;
                            final int distanceSquared = deltaX * deltaX + deltaY * deltaY;
                            final int doubleTapSlop = ViewConfiguration.get(getContext()).getScaledDoubleTapSlop();
                            final int slopSquared = doubleTapSlop * doubleTapSlop;
                            if (distanceSquared < slopSquared) {
                                startTextSelectionMode();
                                // Hacky: onTapUpEvent will open a context menu with cut/copy
                                // Prevent this by hiding handles which will be revived instead.
                                hide();
                            }
                        }
                        mPreviousTapPositionX = x;
                        mPreviousTapPositionY = y;

                        break;

                    case MotionEvent.ACTION_POINTER_DOWN:
@@ -8200,6 +8219,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                            updateMinAndMaxOffsets(event);
                        }
                        break;

                    case MotionEvent.ACTION_UP:
                        mPreviousTapUpTime = SystemClock.uptimeMillis();
                        break;
                }
            }
            return false;