From d936f6a5e92859e2ab7ab798889b1abbaa556a22 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 1 Jun 2018 12:18:19 -0700 Subject: [PATCH] Do not change state in the middle of quickstep gesture Changing states causing quickscrub to get cancelled and recentsView to get reset to page 0, causing an abrupt jump. Bug: 80537625 Bug: 80497058 Change-Id: I19cfe4380bbff15734b9d90dc31596904da27483 --- .../quickstep/ActivityControlHelper.java | 3 +-- .../launcher3/LauncherStateManager.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/quickstep/src/com/android/quickstep/ActivityControlHelper.java b/quickstep/src/com/android/quickstep/ActivityControlHelper.java index 52a6dd5fe5..202d8fc371 100644 --- a/quickstep/src/com/android/quickstep/ActivityControlHelper.java +++ b/quickstep/src/com/android/quickstep/ActivityControlHelper.java @@ -243,9 +243,8 @@ public interface ActivityControlHelper { if (wasVisible) { DeviceProfile dp = activity.getDeviceProfile(); long accuracy = 2 * Math.max(dp.widthPx, dp.heightPx); - activity.getStateManager().goToState(startState, false); callback.accept(activity.getStateManager() - .createAnimationToNewWorkspace(endState, accuracy)); + .createAnimationToNewWorkspace(startState, endState, accuracy)); return; } diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index 05c515bf42..7b32913347 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -296,6 +296,24 @@ public class LauncherStateManager { } } + /** + * Creates a {@link AnimatorPlaybackController} that can be used for a controlled + * state transition. The UI is force-set to fromState before creating the controller. + * @param fromState the initial state for the transition. + * @param state the final state for the transition. + * @param duration intended duration for normal playback. Use higher duration for better + * accuracy. + */ + public AnimatorPlaybackController createAnimationToNewWorkspace( + LauncherState fromState, LauncherState state, long duration) { + mConfig.reset(); + for (StateHandler handler : getStateHandlers()) { + handler.setState(fromState); + } + + return createAnimationToNewWorkspace(state, duration); + } + /** * Creates a {@link AnimatorPlaybackController} that can be used for a controlled * state transition.