diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index aba2af2a6e..75992342aa 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -621,7 +621,7 @@ public abstract class AbsSwipeUpHandler, final boolean passed = mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW; if (passed != mPassedOverviewThreshold) { mPassedOverviewThreshold = passed; - if (mDeviceState.isTwoButtonNavMode()) { + if (mDeviceState.isTwoButtonNavMode() && !mGestureState.isHandlingAtomicEvent()) { performHapticFeedback(); } } @@ -854,7 +854,7 @@ public abstract class AbsSwipeUpHandler, private GestureEndTarget calculateEndTarget(PointF velocity, float endVelocity, boolean isFling, boolean isCancel) { - if (mDeviceState.isButtonNavMode()) { + if (mGestureState.isHandlingAtomicEvent()) { // Button mode, this is only used to go to recents return RECENTS; } @@ -979,7 +979,7 @@ public abstract class AbsSwipeUpHandler, mRecentsView.snapToPage(mRecentsView.getNextPage(), (int) MAX_SWIPE_DURATION); isScrolling = true; } - if (!mDeviceState.isButtonNavMode() || isScrolling) { + if (!mGestureState.isHandlingAtomicEvent() || isScrolling) { duration = Math.max(duration, mRecentsView.getScroller().getDuration()); } } diff --git a/quickstep/src/com/android/quickstep/GestureState.java b/quickstep/src/com/android/quickstep/GestureState.java index ebdc1e6454..6ad7f55a3a 100644 --- a/quickstep/src/com/android/quickstep/GestureState.java +++ b/quickstep/src/com/android/quickstep/GestureState.java @@ -146,6 +146,8 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL /** The time when the swipe up gesture is triggered. */ private long mSwipeUpStartTimeMs; + private boolean mHandlingAtomicEvent; + public GestureState(OverviewComponentObserver componentObserver, int gestureId) { mHomeIntent = componentObserver.getHomeIntent(); mOverviewIntent = componentObserver.getOverviewIntent(); @@ -314,6 +316,22 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL } } + /** + * Indicates if the gesture is handling an atomic event like a click and not a + * user controlled gesture. + */ + public void setHandlingAtomicEvent(boolean handlingAtomicEvent) { + mHandlingAtomicEvent = true; + } + + /** + * Returns true if the gesture is handling an atomic event like a click and not a + * user controlled gesture. + */ + public boolean isHandlingAtomicEvent() { + return mHandlingAtomicEvent; + } + /** * @return whether the current gesture is still running a recents animation to a state in the * Launcher or Recents activity. diff --git a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java index 923d4f1e40..dbdd75fc13 100644 --- a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java +++ b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java @@ -179,6 +179,7 @@ public class OverviewCommandHelper { } GestureState gestureState = mService.createGestureState(GestureState.DEFAULT_STATE); + gestureState.setHandlingAtomicEvent(true); AbsSwipeUpHandler interactionHandler = mService.getSwipeUpHandlerFactory() .newHandler(gestureState, cmd.createTime); interactionHandler.setGestureEndCallback(