Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a22e55a authored by Helen Cheuk's avatar Helen Cheuk Committed by Android (Google) Code Review
Browse files

Merge "Update the last active time to be in-sync with recency when device restarts" into main

parents d249ca9a 8b3d987b
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -64,6 +64,7 @@ import android.graphics.Bitmap;
import android.os.Environment;
import android.os.Environment;
import android.os.IBinder;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserHandle;
import android.text.TextUtils;
import android.text.TextUtils;
@@ -506,6 +507,16 @@ class RecentTasks {


        Slog.i(TAG, "Loading recents for user " + userId + " into memory.");
        Slog.i(TAG, "Loading recents for user " + userId + " into memory.");
        List<Task> tasks = mTaskPersister.restoreTasksForUserLocked(userId, preaddedTasks);
        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);
        mTasks.addAll(tasks);
        cleanupLocked(userId);
        cleanupLocked(userId);
        mUsersWithRecentsLoaded.put(userId, true);
        mUsersWithRecentsLoaded.put(userId, true);
+33 −0
Original line number Original line Diff line number Diff line
@@ -91,6 +91,7 @@ import java.util.List;
import java.util.Random;
import java.util.Random;
import java.util.Set;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Function;
import java.util.stream.Collectors;


/**
/**
 * Build/Install/Run:
 * Build/Install/Run:
@@ -562,6 +563,38 @@ public class RecentTasksTest extends WindowTestsBase {
                .doesNotContain(TEST_USER_1_ID);
                .doesNotContain(TEST_USER_1_ID);
    }
    }


    @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
    @Test
    public void testOrderedIteration() {
    public void testOrderedIteration() {
        mRecentTasks.setOnlyTestVisibleRange();
        mRecentTasks.setOnlyTestVisibleRange();