diff options
7 files changed, 22 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/ActivitySnapshotController.java b/services/core/java/com/android/server/wm/ActivitySnapshotController.java index 01b8bf794dae..52ab9b855c7c 100644 --- a/services/core/java/com/android/server/wm/ActivitySnapshotController.java +++ b/services/core/java/com/android/server/wm/ActivitySnapshotController.java @@ -539,7 +539,7 @@ class ActivitySnapshotController extends AbsAppSnapshotController<ActivityRecord if (usf != null) { mUserSavedFiles.get(userId).remove(code); mSavedFilesInOrder.remove(usf); - mPersister.removeSnap(code, userId); + mPersister.removeSnapshot(code, userId); } } diff --git a/services/core/java/com/android/server/wm/BaseAppSnapshotPersister.java b/services/core/java/com/android/server/wm/BaseAppSnapshotPersister.java index d604402e3e1e..5db02dff8351 100644 --- a/services/core/java/com/android/server/wm/BaseAppSnapshotPersister.java +++ b/services/core/java/com/android/server/wm/BaseAppSnapshotPersister.java @@ -58,7 +58,7 @@ class BaseAppSnapshotPersister { * @param id The id of task that has been removed. * @param userId The id of the user the task belonged to. */ - void removeSnap(int id, int userId) { + void removeSnapshot(int id, int userId) { synchronized (mLock) { mSnapshotPersistQueue.sendToQueueLocked(mSnapshotPersistQueue .createDeleteWriteQueueItem(id, userId, mPersistInfoProvider)); diff --git a/services/core/java/com/android/server/wm/SnapshotController.java b/services/core/java/com/android/server/wm/SnapshotController.java index 2e7ff7a6b9b8..951815035e73 100644 --- a/services/core/java/com/android/server/wm/SnapshotController.java +++ b/services/core/java/com/android/server/wm/SnapshotController.java @@ -26,6 +26,7 @@ import static android.view.WindowManager.TRANSIT_TO_FRONT; import android.os.Trace; import android.view.WindowManager; +import android.window.TaskSnapshot; import java.io.PrintWriter; import java.util.ArrayList; @@ -126,6 +127,18 @@ class SnapshotController { } mActivitySnapshotController.handleTransitionFinish(windows); mActivitySnapshotController.endSnapshotProcess(); + // Remove task snapshot if it is visible at the end of transition. + for (int i = changeInfos.size() - 1; i >= 0; --i) { + final WindowContainer wc = changeInfos.get(i).mContainer; + final Task task = wc.asTask(); + if (task != null && wc.isVisibleRequested()) { + final TaskSnapshot snapshot = mTaskSnapshotController.getSnapshot(task.mTaskId, + task.mUserId, false /* restoreFromDisk */, false /* isLowResolution */); + if (snapshot != null) { + mTaskSnapshotController.removeAndDeleteSnapshot(task.mTaskId, task.mUserId); + } + } + } Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 4922e9028ed9..71dbd29a0410 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -1333,7 +1333,7 @@ class Task extends TaskFragment { clearRootProcess(); - mAtmService.mWindowManager.mTaskSnapshotController.notifyTaskRemovedFromRecents( + mAtmService.mWindowManager.mTaskSnapshotController.removeAndDeleteSnapshot( mTaskId, mUserId); } diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java index 2b12e7497233..d8e18e47fa89 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotController.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java @@ -284,9 +284,9 @@ class TaskSnapshotController extends AbsAppSnapshotController<Task, TaskSnapshot } } - void notifyTaskRemovedFromRecents(int taskId, int userId) { + void removeAndDeleteSnapshot(int taskId, int userId) { mCache.onIdRemoved(taskId); - mPersister.onTaskRemovedFromRecents(taskId, userId); + mPersister.removeSnapshot(taskId, userId); } void removeSnapshotCache(int taskId) { diff --git a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java index 3e8c0177b3b3..233daadfc496 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java @@ -67,10 +67,11 @@ class TaskSnapshotPersister extends BaseAppSnapshotPersister { * @param taskId The id of task that has been removed. * @param userId The id of the user the task belonged to. */ - void onTaskRemovedFromRecents(int taskId, int userId) { + @Override + void removeSnapshot(int taskId, int userId) { synchronized (mLock) { mPersistedTaskIdsSinceLastRemoveObsolete.remove(taskId); - super.removeSnap(taskId, userId); + super.removeSnapshot(taskId, userId); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java index 13a4c1142574..8fecbb9d4dec 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java @@ -96,7 +96,7 @@ public class TaskSnapshotPersisterLoaderTest extends TaskSnapshotPersisterTestBa @Test public void testTaskRemovedFromRecents() { mPersister.persistSnapshot(1, mTestUserId, createSnapshot()); - mPersister.onTaskRemovedFromRecents(1, mTestUserId); + mPersister.removeSnapshot(1, mTestUserId); mSnapshotPersistQueue.waitForQueueEmpty(); assertFalse(new File(FILES_DIR.getPath() + "/snapshots/1.proto").exists()); assertFalse(new File(FILES_DIR.getPath() + "/snapshots/1.jpg").exists()); |