diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java index 4ce1e36bde3ae..3cd5d89ea1425 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java @@ -49,6 +49,8 @@ public interface NotificationSwipeActionHelper { public boolean isDismissGesture(MotionEvent ev); + public boolean isFalseGesture(MotionEvent ev); + public boolean swipedFarEnough(float translation, float viewSize); public boolean swipedFastEnough(float translation, float velocity); diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java index ee95254ed26a2..93d661da9afd9 100644 --- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java @@ -659,15 +659,19 @@ public class SwipeHelper implements Gefingerpoken { } public boolean isDismissGesture(MotionEvent ev) { + return ev.getActionMasked() == MotionEvent.ACTION_UP + && !isFalseGesture(ev) && (swipedFastEnough() || swipedFarEnough()) + && mCallback.canChildBeDismissed(mCurrView); + } + + public boolean isFalseGesture(MotionEvent ev) { boolean falsingDetected = mCallback.isAntiFalsingNeeded(); if (mFalsingManager.isClassiferEnabled()) { falsingDetected = falsingDetected && mFalsingManager.isFalseTouch(); } else { falsingDetected = falsingDetected && !mTouchAboveFalsingThreshold; } - return !falsingDetected && (swipedFastEnough() || swipedFarEnough()) - && ev.getActionMasked() == MotionEvent.ACTION_UP - && mCallback.canChildBeDismissed(mCurrView); + return falsingDetected; } protected boolean swipedFastEnough() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java index 393d552a00edb..570de1815fc40 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMenuRow.java @@ -337,7 +337,8 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl } else { snapBack(animView, velocity); } - } else if ((swipedEnoughToShowMenu() && (!gestureFastEnough || showMenuForSlowOnGoing)) + } else if (!mSwipeHelper.isFalseGesture(ev) + && (swipedEnoughToShowMenu() && (!gestureFastEnough || showMenuForSlowOnGoing)) || (gestureTowardsMenu && !mSwipeHelper.isDismissGesture(ev))) { // Menu has not been snapped to previously and this is menu revealing gesture showMenu(animView, menuSnapTarget, velocity); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 2c847b146437c..b05e93f759ea5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -4361,6 +4361,10 @@ public class NotificationStackScrollLayout extends ViewGroup mStatusBar.setNotificationSnoozed(sbn, snoozeOption); } + public boolean isFalseGesture(MotionEvent ev) { + return super.isFalseGesture(ev); + } + private void handleMenuCoveredOrDismissed() { if (mMenuExposedView != null && mMenuExposedView == mTranslatingParentView) { mMenuExposedView = null;