Handle the animation when restarting apps

Fixes: 170338921
Test: manual

Change-Id: I5a5722cb62fb53a68d140621ad79ed97f4d98571
This commit is contained in:
Tracy Zhou
2020-10-28 22:33:51 -07:00
parent 90faddeff3
commit fbfccf9e2d
2 changed files with 33 additions and 9 deletions

View File

@@ -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,

View File

@@ -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;
}
}