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

Commit 3260bc51 authored by Tracy Zhou's avatar Tracy Zhou Committed by Android (Google) Code Review
Browse files

Merge "Handle the animation when restarting apps" into ub-launcher3-master

parents b0588f11 fbfccf9e
Loading
Loading
Loading
Loading
+24 −9
Original line number Diff line number Diff line
@@ -1020,7 +1020,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<?>, Q extends

    protected abstract HomeAnimationFactory createHomeAnimationFactory(long duration);

    private TaskStackChangeListener mActivityRestartListener = new TaskStackChangeListener() {
    private final TaskStackChangeListener mActivityRestartListener = new TaskStackChangeListener() {
        @Override
        public void onActivityRestartAttempt(ActivityManager.RunningTaskInfo task,
                boolean homeTaskVisible, boolean clearedTask, boolean wasVisible) {
@@ -1459,13 +1459,33 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<?>, Q extends

    protected abstract void finishRecentsControllerToHome(Runnable callback);

    private final TaskStackChangeListener mLiveTileRestartListener = new TaskStackChangeListener() {
        @Override
        public void onActivityRestartAttempt(ActivityManager.RunningTaskInfo task,
                boolean homeTaskVisible, boolean clearedTask, boolean wasVisible) {
            if (mRecentsAnimationTargets.hasTask(task.taskId)) {
                launchOtherTaskInLiveTileMode(task.taskId, mRecentsAnimationTargets.apps);
            }
            ActivityManagerWrapper.getInstance().unregisterTaskStackListener(
                    mLiveTileRestartListener);
        }
    };

    private void setupLauncherUiAfterSwipeUpToRecentsAnimation() {
        endLauncherTransitionController();
        mActivityInterface.onSwipeUpToRecentsComplete();
        mRecentsView.onSwipeUpAnimationSuccess();
        if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
            mTaskAnimationManager.setLaunchOtherTaskInLiveTileModeHandler(
                    this::launchOtherTaskInLiveTileMode);
                    appearedTaskTarget -> {
                        RemoteAnimationTargetCompat[] apps = Arrays.copyOf(
                                mRecentsAnimationTargets.apps,
                                mRecentsAnimationTargets.apps.length + 1);
                        apps[apps.length - 1] = appearedTaskTarget;
                        launchOtherTaskInLiveTileMode(appearedTaskTarget.taskId, apps);
                    });
            ActivityManagerWrapper.getInstance().registerTaskStackListener(
                    mLiveTileRestartListener);
        }

        SystemUiProxy.INSTANCE.get(mContext).onOverviewShown(false, TAG);
@@ -1473,17 +1493,12 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<?>, Q extends
        reset();
    }

    private void launchOtherTaskInLiveTileMode(RemoteAnimationTargetCompat appearedTaskTarget) {
        TaskView taskView = mRecentsView.getTaskView(appearedTaskTarget.taskId);
    private void launchOtherTaskInLiveTileMode(int taskId, RemoteAnimationTargetCompat[] apps) {
        TaskView taskView = mRecentsView.getTaskView(taskId);
        if (taskView == null) {
            return;
        }

        RemoteAnimationTargetCompat[] apps = Arrays.copyOf(
                mRecentsAnimationTargets.apps,
                mRecentsAnimationTargets.apps.length + 1);
        apps[apps.length - 1] = appearedTaskTarget;

        AnimatorSet anim = new AnimatorSet();
        TaskViewUtils.composeRecentsLaunchAnimator(
                anim, taskView, apps,
+9 −0
Original line number Diff line number Diff line
@@ -41,4 +41,13 @@ public class RecentsAnimationTargets extends RemoteAnimationTargets {
    public boolean hasTargets() {
        return unfilteredApps.length != 0;
    }

    public boolean hasTask(int taskId) {
        for (RemoteAnimationTargetCompat target : unfilteredApps) {
            if (target.taskId == taskId) {
                return true;
            }
        }
        return false;
    }
}