Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1ce26e7 authored by Tracy Zhou's avatar Tracy Zhou Committed by Tony Wickham
Browse files

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
parent d12af6bd
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -500,23 +500,25 @@ public final class TaskViewUtils {
            windowAnimEndListener = new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    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));
                }
            };
        }
+8 −25
Original line number Diff line number Diff line
@@ -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();
            }
+5 −3
Original line number Diff line number Diff line
@@ -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;
                }
            });