diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 6cf3c7ade9..43c088b585 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -1020,7 +1020,7 @@ public abstract class AbsSwipeUpHandler, 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, 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, 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, diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationTargets.java b/quickstep/src/com/android/quickstep/RecentsAnimationTargets.java index 718c5baa2c..da0a66431e 100644 --- a/quickstep/src/com/android/quickstep/RecentsAnimationTargets.java +++ b/quickstep/src/com/android/quickstep/RecentsAnimationTargets.java @@ -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; + } }