diff options
| author | 2023-09-27 20:29:01 +0000 | |
|---|---|---|
| committer | 2023-09-27 20:29:01 +0000 | |
| commit | 4a22e55a702fe768d89c8db8d6258ab645207ef1 (patch) | |
| tree | e08062b2fbb4dd93a8f352e8de9bed4794505209 | |
| parent | d249ca9ad703e84a72b48ff7e92027a1fa38582a (diff) | |
| parent | 8b3d987b59d6811b301d97101f57ecfcd4e18a43 (diff) | |
Merge "Update the last active time to be in-sync with recency when device restarts" into main
| -rw-r--r-- | services/core/java/com/android/server/wm/RecentTasks.java | 11 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java | 33 |
2 files changed, 44 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java index 184de58c8446..442269ab4015 100644 --- a/services/core/java/com/android/server/wm/RecentTasks.java +++ b/services/core/java/com/android/server/wm/RecentTasks.java @@ -64,6 +64,7 @@ import android.graphics.Bitmap; import android.os.Environment; import android.os.IBinder; import android.os.RemoteException; +import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; import android.text.TextUtils; @@ -506,6 +507,16 @@ class RecentTasks { Slog.i(TAG, "Loading recents for user " + userId + " into memory."); List<Task> tasks = mTaskPersister.restoreTasksForUserLocked(userId, preaddedTasks); + + // Tasks are ordered from most recent to least recent. Update the last active time to be + // in sync with task recency when device reboots, so the most recent task has the + // highest last active time + long currentElapsedTime = SystemClock.elapsedRealtime(); + for (int i = 0; i < tasks.size(); i++) { + Task task = tasks.get(i); + task.lastActiveTime = currentElapsedTime - i; + } + mTasks.addAll(tasks); cleanupLocked(userId); mUsersWithRecentsLoaded.put(userId, true); diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java index 25619b9ec5e8..4c25a4bf1455 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java @@ -91,6 +91,7 @@ import java.util.List; import java.util.Random; import java.util.Set; import java.util.function.Function; +import java.util.stream.Collectors; /** * Build/Install/Run: @@ -563,6 +564,38 @@ public class RecentTasksTest extends WindowTestsBase { } @Test + public void testTasksWithCorrectOrderOfLastActiveTime() { + mRecentTasks.setOnlyTestVisibleRange(); + mRecentTasks.unloadUserDataFromMemoryLocked(TEST_USER_0_ID); + + // Setup some tasks for the user + mTaskPersister.mUserTaskIdsOverride = new SparseBooleanArray(); + mTaskPersister.mUserTaskIdsOverride.put(1, true); + mTaskPersister.mUserTaskIdsOverride.put(2, true); + mTaskPersister.mUserTaskIdsOverride.put(3, true); + mTaskPersister.mUserTasksOverride = new ArrayList<>(); + mTaskPersister.mUserTasksOverride.add(createTaskBuilder(".UserTask1").build()); + mTaskPersister.mUserTasksOverride.add(createTaskBuilder(".UserTask2").build()); + mTaskPersister.mUserTasksOverride.add(createTaskBuilder(".UserTask3").build()); + + // Assert no user tasks are initially loaded + assertThat(mRecentTasks.usersWithRecentsLoadedLocked()).hasLength(0); + + // Load tasks + mRecentTasks.loadUserRecentsLocked(TEST_USER_0_ID); + assertThat(mRecentTasks.usersWithRecentsLoadedLocked()).asList().contains(TEST_USER_0_ID); + + // Sort the time descendingly so the order should be in-sync with task recency (most + // recent to least recent) + List<Task> tasksSortedByTime = mRecentTasks.getRawTasks().stream() + .sorted((o1, o2) -> Long.compare(o2.lastActiveTime, o1.lastActiveTime)) + .collect(Collectors.toList()); + + assertTrue("Task order is not in sync with its recency", + mRecentTasks.getRawTasks().equals(tasksSortedByTime)); + } + + @Test public void testOrderedIteration() { mRecentTasks.setOnlyTestVisibleRange(); Task task1 = createTaskBuilder(".Task1").build(); |