Preventing state change duing the swipe up animation when the previous app
transition is not complete
> This state change causes the RecentsView to get reset making the first
task visible
Bug: 111404703
Change-Id: I8ff2577bf965fb4cdf736fb18683ded63ade1872
diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
index d3d38af..6491aec 100644
--- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
+++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
@@ -256,6 +256,11 @@
}
};
+ // Re-setup the recents UI when gesture starts, as the state could have been changed during
+ // that time by a previous window transition.
+ mStateCallback.addCallback(STATE_LAUNCHER_STARTED | STATE_GESTURE_STARTED_QUICKSTEP,
+ this::setupRecentsViewUi);
+
mStateCallback.addCallback(STATE_LAUNCHER_DRAWN | STATE_GESTURE_STARTED_QUICKSCRUB,
this::initializeLauncherAnimationController);
mStateCallback.addCallback(STATE_LAUNCHER_DRAWN | STATE_GESTURE_STARTED_QUICKSTEP,
@@ -429,11 +434,15 @@
});
}
+ setupRecentsViewUi();
+ mLayoutListener.open();
+ mStateCallback.setState(STATE_LAUNCHER_STARTED);
+ }
+
+ private void setupRecentsViewUi() {
mRecentsView.showTask(mRunningTaskId);
mRecentsView.setRunningTaskHidden(true);
mRecentsView.setRunningTaskIconScaledDown(true);
- mLayoutListener.open();
- mStateCallback.setState(STATE_LAUNCHER_STARTED);
}
public void setLauncherOnDrawCallback(Runnable callback) {
diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java
index 3c7c1aa..5bbfc1d 100644
--- a/src/com/android/launcher3/LauncherStateManager.java
+++ b/src/com/android/launcher3/LauncherStateManager.java
@@ -306,7 +306,13 @@
*/
public AnimatorPlaybackController createAnimationToNewWorkspace(
LauncherState fromState, LauncherState state, long duration) {
+ // Since we are creating a state animation to a different state, temporarily prevent state
+ // change as part of config reset.
+ LauncherState originalRestState = mRestState;
+ mRestState = state;
mConfig.reset();
+ mRestState = originalRestState;
+
for (StateHandler handler : getStateHandlers()) {
handler.setState(fromState);
}