summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java24
1 files changed, 16 insertions, 8 deletions
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java
index 4894c498ec58..ec4befbcb50d 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java
@@ -41,6 +41,7 @@ import android.os.Parcelable;
import android.os.RemoteException;
import android.util.ArrayMap;
import android.util.Log;
+import android.util.SparseArray;
import android.view.IRecentsAnimationController;
import android.view.SurfaceControl;
import android.window.IRemoteTransition;
@@ -243,22 +244,28 @@ public class RemoteTransitionCompat implements Parcelable {
@SuppressLint("NewApi")
boolean merge(TransitionInfo info, SurfaceControl.Transaction t,
RecentsAnimationListener recents) {
- ArrayList<TransitionInfo.Change> openingTasks = null;
+ SparseArray<TransitionInfo.Change> openingTasks = null;
boolean cancelRecents = false;
boolean homeGoingAway = false;
boolean hasChangingApp = false;
for (int i = info.getChanges().size() - 1; i >= 0; --i) {
final TransitionInfo.Change change = info.getChanges().get(i);
if (change.getMode() == TRANSIT_OPEN || change.getMode() == TRANSIT_TO_FRONT) {
- if (change.getTaskInfo() != null) {
- if (change.getTaskInfo().topActivityType == ACTIVITY_TYPE_HOME) {
+ final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
+ if (taskInfo != null) {
+ if (taskInfo.topActivityType == ACTIVITY_TYPE_HOME) {
// canceling recents animation
cancelRecents = true;
}
if (openingTasks == null) {
- openingTasks = new ArrayList<>();
+ openingTasks = new SparseArray<>();
+ }
+ if (taskInfo.hasParentTask()) {
+ // Collects opening leaf tasks only since Launcher monitors leaf task
+ // ids to perform recents animation.
+ openingTasks.remove(taskInfo.parentTaskId);
}
- openingTasks.add(change);
+ openingTasks.put(taskInfo.taskId, change);
}
} else if (change.getMode() == TRANSIT_CLOSE
|| change.getMode() == TRANSIT_TO_BACK) {
@@ -286,7 +293,7 @@ public class RemoteTransitionCompat implements Parcelable {
int pauseMatches = 0;
if (!cancelRecents) {
for (int i = 0; i < openingTasks.size(); ++i) {
- if (mPausingTasks.contains(openingTasks.get(i).getContainer())) {
+ if (mPausingTasks.contains(openingTasks.valueAt(i).getContainer())) {
++pauseMatches;
}
}
@@ -307,10 +314,11 @@ public class RemoteTransitionCompat implements Parcelable {
final RemoteAnimationTargetCompat[] targets =
new RemoteAnimationTargetCompat[openingTasks.size()];
for (int i = 0; i < openingTasks.size(); ++i) {
- mOpeningLeashes.add(openingTasks.get(i).getLeash());
+ final TransitionInfo.Change change = openingTasks.valueAt(i);
+ mOpeningLeashes.add(change.getLeash());
// We are receiving new opening tasks, so convert to onTasksAppeared.
final RemoteAnimationTargetCompat target = new RemoteAnimationTargetCompat(
- openingTasks.get(i), layer, info, t);
+ change, layer, info, t);
mLeashMap.put(mOpeningLeashes.get(i), target.leash);
t.reparent(target.leash, mInfo.getRootLeash());
t.setLayer(target.leash, layer);