Fixing recents command not working properly in gesture mode

Bug: 185445289
Test: Manual
Change-Id: I233ee493ea0d42bbfca14b17e921d907cc65da53
This commit is contained in:
Sunny Goyal
2021-04-16 11:58:52 -07:00
parent c874ccc163
commit dfc22b8ff1
3 changed files with 22 additions and 3 deletions

View File

@@ -621,7 +621,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
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<T extends StatefulActivity<S>,
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;
}
@@ -976,7 +976,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
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());
}
}

View File

@@ -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.

View File

@@ -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(