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

Commit b6001195 authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android Git Automerger
Browse files

am 6acca244: Merge "Cannot double tap and hold outside of the input focused window." into jb-dev

* commit '6acca244':
  Cannot double tap and hold outside of the input focused window.
parents 3522225d 6acca244
Loading
Loading
Loading
Loading
+33 −13
Original line number Diff line number Diff line
@@ -1247,25 +1247,45 @@ public class TouchExplorer {

        @Override
        public void run() {
            final int pointerIndex = mEvent.getActionIndex();
            final int eventX = (int) mEvent.getX(pointerIndex);
            final int eventY = (int) mEvent.getY(pointerIndex);
            // If the last touched explored location is not within the focused
            // window we will long press at that exact spot, otherwise we find the
            // accessibility focus and if the tap is within its bounds we long press
            // there, otherwise we pick the middle of the focus rectangle.
            MotionEvent lastEvent = mInjectedPointerTracker.getLastInjectedHoverEvent();
            if (lastEvent == null) {
                return;
            }

            final int exploreLocationX = (int) lastEvent.getX(lastEvent.getActionIndex());
            final int exploreLocationY = (int) lastEvent.getY(lastEvent.getActionIndex());

            Rect bounds = mTempRect;
            if (mAms.getAccessibilityFocusBounds(eventX, eventY, bounds)
                    && !bounds.contains(eventX, eventY)) {
            boolean useFocusedBounds = false;

            final int pointerId = mEvent.getPointerId(mEvent.getActionIndex());
            final int pointerIndex = mEvent.findPointerIndex(pointerId);
            if (mAms.getAccessibilityFocusBounds(exploreLocationX, exploreLocationY, bounds)) {
                // If the user's last touch explored location is not
                // within the accessibility focus bounds we use the center
                // of the accessibility focused rectangle.
                if (!bounds.contains((int) mEvent.getX(pointerIndex),
                        (int) mEvent.getY(pointerIndex))) {
                    useFocusedBounds = true;
                }
            }

            mLongPressingPointerId = mEvent.getPointerId(pointerIndex);

            final int eventX = (int) mEvent.getX(pointerIndex);
            final int eventY = (int) mEvent.getY(pointerIndex);
            if (useFocusedBounds) {
                mLongPressingPointerDeltaX = eventX - bounds.centerX();
                mLongPressingPointerDeltaY = eventY - bounds.centerY();
            } else {
                mLongPressingPointerId = -1;
                mLongPressingPointerDeltaX = 0;
                mLongPressingPointerDeltaY = 0;
                mLongPressingPointerDeltaX = eventX - exploreLocationX;
                mLongPressingPointerDeltaY = eventY - exploreLocationY;
            }
            // We are sending events so send exit and gesture
            // end since we transition to another state.
            final int pointerId = mReceivedPointerTracker.getPrimaryActivePointerId();
            final int pointerIdBits = (1 << pointerId);
            mAms.touchExplorationGestureEnded();

            sendExitEventsIfNeeded(mPolicyFlags);

            mCurrentState = STATE_DELEGATING;