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

Commit 521c731b authored by Tracy Zhou's avatar Tracy Zhou Committed by Automerger Merge Worker
Browse files

Merge "Support showing transient bars upon 3-finger swipe from trackpad" into...

Merge "Support showing transient bars upon 3-finger swipe from trackpad" into udc-qpr-dev am: e1467ef5

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23578798



Change-Id: I9b58828e34fde1bb13f42323cefef44a47cf0d6b
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 165a8d9c e1467ef5
Loading
Loading
Loading
Loading
+52 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import static android.view.DisplayCutout.BOUNDS_POSITION_BOTTOM;
import static android.view.DisplayCutout.BOUNDS_POSITION_LEFT;
import static android.view.DisplayCutout.BOUNDS_POSITION_RIGHT;
import static android.view.DisplayCutout.BOUNDS_POSITION_TOP;
import static android.view.MotionEvent.AXIS_GESTURE_SWIPE_FINGER_COUNT;
import static android.view.MotionEvent.CLASSIFICATION_MULTI_FINGER_SWIPE;

import android.annotation.NonNull;
import android.content.Context;
@@ -59,6 +61,12 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
    private static final int SWIPE_FROM_RIGHT = 3;
    private static final int SWIPE_FROM_LEFT = 4;

    private static final int TRACKPAD_SWIPE_NONE = 0;
    private static final int TRACKPAD_SWIPE_FROM_TOP = 1;
    private static final int TRACKPAD_SWIPE_FROM_BOTTOM = 2;
    private static final int TRACKPAD_SWIPE_FROM_RIGHT = 3;
    private static final int TRACKPAD_SWIPE_FROM_LEFT = 4;

    private final Context mContext;
    private final Handler mHandler;
    private int mDisplayCutoutTouchableRegionSize;
@@ -207,6 +215,25 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
                break;
            case MotionEvent.ACTION_MOVE:
                if (mSwipeFireable) {
                    int trackpadSwipe = detectTrackpadThreeFingerSwipe(event);
                    mSwipeFireable = trackpadSwipe == TRACKPAD_SWIPE_NONE;
                    if (!mSwipeFireable) {
                        if (trackpadSwipe == TRACKPAD_SWIPE_FROM_TOP) {
                            if (DEBUG) Slog.d(TAG, "Firing onSwipeFromTop from trackpad");
                            mCallbacks.onSwipeFromTop();
                        } else if (trackpadSwipe == TRACKPAD_SWIPE_FROM_BOTTOM) {
                            if (DEBUG) Slog.d(TAG, "Firing onSwipeFromBottom from trackpad");
                            mCallbacks.onSwipeFromBottom();
                        } else if (trackpadSwipe == TRACKPAD_SWIPE_FROM_RIGHT) {
                            if (DEBUG) Slog.d(TAG, "Firing onSwipeFromRight from trackpad");
                            mCallbacks.onSwipeFromRight();
                        } else if (trackpadSwipe == TRACKPAD_SWIPE_FROM_LEFT) {
                            if (DEBUG) Slog.d(TAG, "Firing onSwipeFromLeft from trackpad");
                            mCallbacks.onSwipeFromLeft();
                        }
                        break;
                    }

                    final int swipe = detectSwipe(event);
                    mSwipeFireable = swipe == SWIPE_NONE;
                    if (swipe == SWIPE_FROM_TOP) {
@@ -300,6 +327,31 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
        return mDownPointers - 1;
    }

    private int detectTrackpadThreeFingerSwipe(MotionEvent move) {
        if (!isTrackpadThreeFingerSwipe(move)) {
            return TRACKPAD_SWIPE_NONE;
        }

        float dx = move.getX() - mDownX[0];
        float dy = move.getY() - mDownY[0];
        if (Math.abs(dx) < Math.abs(dy)) {
            if (Math.abs(dy) > mSwipeDistanceThreshold) {
                return dy > 0 ? TRACKPAD_SWIPE_FROM_TOP : TRACKPAD_SWIPE_FROM_BOTTOM;
            }
        } else {
            if (Math.abs(dx) > mSwipeDistanceThreshold) {
                return dx > 0 ? TRACKPAD_SWIPE_FROM_LEFT : TRACKPAD_SWIPE_FROM_RIGHT;
            }
        }

        return TRACKPAD_SWIPE_NONE;
    }

    private static boolean isTrackpadThreeFingerSwipe(MotionEvent event) {
        return event.getClassification() == CLASSIFICATION_MULTI_FINGER_SWIPE
                && event.getAxisValue(AXIS_GESTURE_SWIPE_FINGER_COUNT) == 3;
    }

    private int detectSwipe(MotionEvent move) {
        final int historySize = move.getHistorySize();
        final int pointerCount = move.getPointerCount();