diff --git a/quickstep/src/com/android/quickstep/ActivityControlHelper.java b/quickstep/src/com/android/quickstep/ActivityControlHelper.java index 529a76550e..85106baab7 100644 --- a/quickstep/src/com/android/quickstep/ActivityControlHelper.java +++ b/quickstep/src/com/android/quickstep/ActivityControlHelper.java @@ -182,8 +182,8 @@ public interface ActivityControlHelper { return new AnimationFactory() { @Override public void createActivityController(long transitionLength) { - createActivityControllerInternal(activity, activityVisible, transitionLength, - callback); + createActivityControllerInternal(activity, activityVisible, startState, + transitionLength, callback); } @Override @@ -194,10 +194,12 @@ public interface ActivityControlHelper { } private void createActivityControllerInternal(Launcher activity, boolean wasVisible, - long transitionLength, Consumer callback) { + LauncherState startState, long transitionLength, + Consumer callback) { 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(OVERVIEW, accuracy)); return; diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java index 4e17b4b4c3..9fe1018cc1 100644 --- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -163,10 +163,12 @@ public class WindowTransformSwipeHandler { private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper()); private final Context mContext; - private final int mRunningTaskId; private final ActivityControlHelper mActivityControlHelper; private final ActivityInitListener mActivityInitListener; + private final int mRunningTaskId; + private ThumbnailData mTaskSnapshot; + private MultiStateCallback mStateCallback; private AnimatorPlaybackController mLauncherTransitionController; @@ -705,9 +707,11 @@ public class WindowTransformSwipeHandler { synchronized (mRecentsAnimationWrapper) { if (mRecentsAnimationWrapper.controller != null) { // Update the screenshot of the task - ThumbnailData thumbnail = - mRecentsAnimationWrapper.controller.screenshotTask(mRunningTaskId); - final TaskView taskView = mRecentsView.updateThumbnail(mRunningTaskId, thumbnail); + if (mTaskSnapshot == null) { + mTaskSnapshot = mRecentsAnimationWrapper.controller + .screenshotTask(mRunningTaskId); + } + TaskView taskView = mRecentsView.updateThumbnail(mRunningTaskId, mTaskSnapshot); mRecentsView.setRunningTaskHidden(false); if (taskView != null) { // Defer finishing the animation until the next launcher frame with the @@ -880,10 +884,11 @@ public class WindowTransformSwipeHandler { private void onLongSwipeGestureFinishUi(float velocity, boolean isFling) { if (!mUiLongSwipeMode || mLongSwipeController == null) { + mUiLongSwipeMode = false; handleNormalGestureEnd(velocity, isFling); return; } - + mUiLongSwipeMode = false; finishCurrentTransitionToHome(); mLongSwipeController.end(velocity, isFling, () -> setStateOnUiThread(STATE_HANDLER_INVALIDATED));