Loading services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java +52 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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(); Loading Loading
services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java +52 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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(); Loading