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

Commit 217bb3b1 authored by Ameer Armaly's avatar Ameer Armaly
Browse files

[DO NOT MERGE] Fix edge swipe logic.

1) Only start delegating upon first move event, if all three fingers went down on the bottom edge.
2) The previous logic only required one finger to be in the edge boundary. It now requires all fingers to be in the edge boundary.
Bug: 162521649
Test: manual

Change-Id: I829c463c63b384642d129ff3b5ccdb0db816ddcd
parent a7da0f4f
Loading
Loading
Loading
Loading
+27 −23
Original line number Diff line number Diff line
@@ -539,24 +539,6 @@ public class TouchExplorer extends BaseEventStreamTransformation
            // stream consistent.
            sendHoverExitAndTouchExplorationGestureEndIfNeeded(policyFlags);
        }
        if (mGestureDetector.isMultiFingerGesturesEnabled()
                && mGestureDetector.isTwoFingerPassthroughEnabled()) {
            if (event.getPointerCount() == 3) {
                boolean isOnBottomEdge = false;
                // If three fingers go down on the bottom edge of the screen, delegate immediately.
                final long screenHeight = mContext.getResources().getDisplayMetrics().heightPixels;
                for (int i = 0; i < TouchState.MAX_POINTER_COUNT; ++i) {
                    if (mReceivedPointerTracker.getReceivedPointerDownY(i)
                            > (screenHeight - mEdgeSwipeHeightPixels)) {
                        isOnBottomEdge = true;
                    }
                }
                if (isOnBottomEdge) {
                    mState.startDelegating();
                    mDispatcher.sendDownForAllNotInjectedPointers(event, policyFlags);
                }
            }
        }
    }

    /**
@@ -638,12 +620,34 @@ public class TouchExplorer extends BaseEventStreamTransformation
                break;
            default:
                if (mGestureDetector.isMultiFingerGesturesEnabled()) {
                    return;
                    if (mGestureDetector.isTwoFingerPassthroughEnabled()) {
                        if (event.getPointerCount() == 3) {
                            boolean isOnBottomEdge = true;
                            // If three fingers went down on the bottom edge of the screen, delegate
                            // immediately.
                            final long screenHeight =
                                    mContext.getResources().getDisplayMetrics().heightPixels;
                            for (int i = 0; i < TouchState.MAX_POINTER_COUNT; ++i) {
                                if (mReceivedPointerTracker.getReceivedPointerDownY(i)
                                        < (screenHeight - mEdgeSwipeHeightPixels)) {
                                    isOnBottomEdge = false;
                                }
                            }
                            if (isOnBottomEdge) {
                                if (DEBUG) {
                                    Slog.d(LOG_TAG, "Three-finger edge swipe detected.");
                                }
                                mState.startDelegating();
                                mDispatcher.sendDownForAllNotInjectedPointers(event, policyFlags);
                            }
                        }
                    }
                } else {
                    // More than two pointers are delegated to the view hierarchy.
                    mState.startDelegating();
                    event = MotionEvent.obtainNoHistory(event);
                    mDispatcher.sendDownForAllNotInjectedPointers(event, policyFlags);
                }
                break;
        }
    }