Merge "Temporary decouple snapshot controller from transition." into udc-dev
diff --git a/services/core/java/com/android/server/wm/ActivitySnapshotController.java b/services/core/java/com/android/server/wm/ActivitySnapshotController.java
index 90a4820..105b2bb 100644
--- a/services/core/java/com/android/server/wm/ActivitySnapshotController.java
+++ b/services/core/java/com/android/server/wm/ActivitySnapshotController.java
@@ -191,6 +191,9 @@
      * Prepare to handle on transition start. Clear all temporary fields.
      */
     void preTransitionStart() {
+        if (shouldDisableSnapshots()) {
+            return;
+        }
         resetTmpFields();
     }
 
@@ -283,6 +286,9 @@
      * Called when the visibility of an app changes outside the regular app transition flow.
      */
     void notifyAppVisibilityChanged(ActivityRecord appWindowToken, boolean visible) {
+        if (shouldDisableSnapshots()) {
+            return;
+        }
         if (!visible) {
             resetTmpFields();
             addBelowTopActivityIfExist(appWindowToken.getTask(), mPendingRemoveActivity,
diff --git a/services/core/java/com/android/server/wm/SnapshotController.java b/services/core/java/com/android/server/wm/SnapshotController.java
index cd1263e..badcfa9 100644
--- a/services/core/java/com/android/server/wm/SnapshotController.java
+++ b/services/core/java/com/android/server/wm/SnapshotController.java
@@ -213,8 +213,12 @@
 
     void notifyAppVisibilityChanged(ActivityRecord appWindowToken, boolean visible) {
         if (!visible && hasTransitionStateConsumer(TASK_CLOSE)) {
+            final Task task = appWindowToken.getTask();
+            if (task == null || task.isVisibleRequested()) {
+                return;
+            }
             // close task transition
-            addTransitionRecord(TASK_CLOSE, false /*open*/, appWindowToken.getTask());
+            addTransitionRecord(TASK_CLOSE, false /*open*/, task);
             mActivitySnapshotController.preTransitionStart();
             notifyTransition(TASK_CLOSE);
             mActivitySnapshotController.postTransitionStart();
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 28cbe075..2cfd2af8 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -1227,7 +1227,13 @@
         // transferred. If transition is transient, IME won't be moved during the transition and
         // the tasks are still live, so we take the snapshot at the end of the transition instead.
         if (mTransientLaunches == null) {
-            mController.mSnapshotController.onTransitionReady(mType, mParticipants);
+            for (int i = mParticipants.size() - 1; i >= 0; --i) {
+                final ActivityRecord ar = mParticipants.valueAt(i).asActivityRecord();
+                if (ar == null || ar.getTask() == null
+                        || ar.getTask().isVisibleRequested()) continue;
+                mController.mSnapshotController.mTaskSnapshotController.recordSnapshot(
+                        ar.getTask(), false /* allowSnapshotHome */);
+            }
         }
 
         // This is non-null only if display has changes. It handles the visible windows that don't