Fix weird task launch animation

Sometimes a weird task launch animation can be observed where the task is animated to fullscreen before animated again from center to the left side of the screen. This is caused by stateManager.moveToRestState() call that internally animates FULLSCREEN_PROGRESS to 0 based on its launcher state (normal). The implementation right now finishes the recents animation after this call, instead of before. We should finish the recents animation first before doing the recents view clean up work.

Fixes: 184878444
Test: manual
Change-Id: Ib24fcf5ecb12e1a1357441427daface2778e1008
This commit is contained in:
Tracy Zhou
2021-04-15 18:16:41 -07:00
committed by Tony Wickham
parent d12af6bda2
commit e1ce26e70c
3 changed files with 21 additions and 34 deletions
@@ -500,23 +500,25 @@ public final class TaskViewUtils {
windowAnimEndListener = new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
recentsView.post(() -> {
stateManager.moveToRestState();
stateManager.reapplyState();
recentsView.finishRecentsAnimation(false /* toRecents */, () -> {
recentsView.post(() -> {
stateManager.moveToRestState();
stateManager.reapplyState();
});
});
}
};
} else {
AnimatorPlaybackController controller =
stateManager.createAnimationToNewWorkspace(NORMAL,
RECENTS_LAUNCH_DURATION);
stateManager.createAnimationToNewWorkspace(NORMAL, RECENTS_LAUNCH_DURATION);
controller.dispatchOnStart();
childStateAnimation = controller.getTarget();
launcherAnim = controller.getAnimationPlayer().setDuration(RECENTS_LAUNCH_DURATION);
windowAnimEndListener = new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
stateManager.goToState(NORMAL, false);
recentsView.finishRecentsAnimation(false /* toRecents */,
() -> stateManager.goToState(NORMAL, false));
}
};
}
@@ -137,7 +137,6 @@ import com.android.quickstep.TaskOverlayFactory;
import com.android.quickstep.TaskThumbnailCache;
import com.android.quickstep.TaskViewUtils;
import com.android.quickstep.ViewUtils;
import com.android.quickstep.util.ActiveGestureLog;
import com.android.quickstep.util.LayoutUtils;
import com.android.quickstep.util.MultiValueUpdateListener;
import com.android.quickstep.util.RecentsOrientedState;
@@ -760,6 +759,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
}
});
anim.play(appAnimator);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
finishRecentsAnimation(true /* toRecents */, null);
}
});
} else {
TaskViewUtils.composeRecentsLaunchAnimator(
anim, taskView, apps,
@@ -768,30 +773,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
mActivity.getStateManager(), this,
getDepthController());
}
anim.addListener(new AnimatorListenerAdapter(){
@Override
public void onAnimationEnd(Animator animator) {
cleanUp(false);
}
@Override
public void onAnimationCancel(Animator animator) {
cleanUp(true);
}
private void cleanUp(boolean canceled) {
if (mRecentsAnimationController != null) {
finishRecentsAnimation(false /* toRecents */, null /* onFinishComplete */);
if (canceled) {
mRecentsAnimationController = null;
} else {
mSizeStrategy.onLaunchTaskSuccess();
}
ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimation", false);
}
}
});
anim.start();
}
@@ -1441,6 +1422,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
mRecentsAnimationController = null;
mLiveTileParams.setTargetSet(null);
mLiveTileTaskViewSimulator.setDrawsBelowRecents(true);
unloadVisibleTaskData(TaskView.FLAG_UPDATE_ALL);
setCurrentPage(0);
@@ -3078,6 +3060,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
}
mRecentsAnimationController.finish(toRecents, () -> {
mRecentsAnimationController = null;
if (onFinishComplete != null) {
onFinishComplete.run();
}
@@ -484,7 +484,6 @@ public class TaskView extends FrameLayout implements Reusable {
mIsClickableAsLiveTile = false;
RecentsView recentsView = getRecentsView();
RemoteAnimationTargets targets = recentsView.getLiveTileParams().getTargetSet();
recentsView.getLiveTileTaskViewSimulator().setDrawsBelowRecents(false);
AnimatorSet anim = new AnimatorSet();
TaskViewUtils.composeRecentsLaunchAnimator(
@@ -493,10 +492,13 @@ public class TaskView extends FrameLayout implements Reusable {
mActivity.getStateManager(), recentsView,
recentsView.getDepthController());
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animator) {
recentsView.getLiveTileTaskViewSimulator().setDrawsBelowRecents(false);
}
@Override
public void onAnimationEnd(Animator animator) {
recentsView.getLiveTileTaskViewSimulator().setDrawsBelowRecents(true);
recentsView.finishRecentsAnimation(false, null);
mIsClickableAsLiveTile = true;
}
});