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

Commit c82f2f5f authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Add RecentTasks class to house recent tasks functionality.

Cleaned-up ActivityManagerService a little by moving recent
tasks functionality to new class RecentTasks.

Bug: 18556524
Change-Id: I4c877c9695b63d7fdb1b6b7addb737fd663e86c7
parent 382d6a9e
Loading
Loading
Loading
Loading
+19 −545

File changed.

Preview size limit exceeded, changes collapsed.

+7 −4
Original line number Diff line number Diff line
@@ -146,6 +146,7 @@ final class ActivityStack {

    final ActivityManagerService mService;
    final WindowManagerService mWindowManager;
    private final RecentTasks mRecentTasks;

    /**
     * The back history of all previous (and possibly still
@@ -337,7 +338,8 @@ final class ActivityStack {
        return count;
    }

    ActivityStack(ActivityStackSupervisor.ActivityContainer activityContainer) {
    ActivityStack(ActivityStackSupervisor.ActivityContainer activityContainer,
            RecentTasks recentTasks) {
        mActivityContainer = activityContainer;
        mStackSupervisor = activityContainer.getOuter();
        mService = mStackSupervisor.mService;
@@ -345,6 +347,7 @@ final class ActivityStack {
        mWindowManager = mService.mWindowManager;
        mStackId = activityContainer.mStackId;
        mCurrentUser = mService.mCurrentUserId;
        mRecentTasks = recentTasks;
    }

    /**
@@ -643,7 +646,7 @@ final class ActivityStack {
        r.stopped = false;
        mResumedActivity = r;
        r.task.touchActiveTime();
        mService.addRecentTaskLocked(r.task);
        mRecentTasks.addLocked(r.task);
        completeResumeLocked(r);
        mStackSupervisor.checkReadyForSleepLocked();
        setLaunchTime(r);
@@ -1760,7 +1763,7 @@ final class ActivityStack {
            next.state = ActivityState.RESUMED;
            mResumedActivity = next;
            next.task.touchActiveTime();
            mService.addRecentTaskLocked(next.task);
            mRecentTasks.addLocked(next.task);
            mService.updateLruProcessLocked(next.app, true, null);
            updateLRUListLocked(next);
            mService.updateOomAdjLocked();
@@ -4075,7 +4078,7 @@ final class ActivityStack {
            if (task.autoRemoveFromRecents() || isVoiceSession) {
                // Task creator asked to remove this when done, or this task was a voice
                // interaction, so it should not remain on the recent tasks list.
                mService.mRecentTasks.remove(task);
                mRecentTasks.remove(task);
                task.removedFromRecents();
            }
        }
+7 −4
Original line number Diff line number Diff line
@@ -166,6 +166,8 @@ public final class ActivityStackSupervisor implements DisplayListener {

    final ActivityManagerService mService;

    private final RecentTasks mRecentTasks;

    final ActivityStackSupervisorHandler mHandler;

    /** Short cut */
@@ -298,8 +300,9 @@ public final class ActivityStackSupervisor implements DisplayListener {
        }
    }

    public ActivityStackSupervisor(ActivityManagerService service) {
    public ActivityStackSupervisor(ActivityManagerService service, RecentTasks recentTasks) {
        mService = service;
        mRecentTasks = recentTasks;
        mHandler = new ActivityStackSupervisorHandler(mService.mHandler.getLooper());
    }

@@ -464,7 +467,7 @@ public final class ActivityStackSupervisor implements DisplayListener {

        // Don't give up! Look in recents.
        if (DEBUG_RECENTS) Slog.v(TAG, "Looking for task id=" + id + " in recents");
        TaskRecord task = mService.recentTaskForIdLocked(id);
        TaskRecord task = mRecentTasks.taskForIdLocked(id);
        if (task == null) {
            if (DEBUG_RECENTS) Slog.d(TAG, "\tDidn't find task id=" + id + " in recents");
            return null;
@@ -2912,7 +2915,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
        r.mLaunchTaskBehind = false;
        final TaskRecord task = r.task;
        task.setLastThumbnail(task.stack.screenshotActivities(r));
        mService.addRecentTaskLocked(task);
        mRecentTasks.addLocked(task);
        mService.notifyTaskStackChangedLocked();
        mWindowManager.setAppVisibility(r.appToken, false);
    }
@@ -3675,7 +3678,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
        ActivityContainer(int stackId) {
            synchronized (mService) {
                mStackId = stackId;
                mStack = new ActivityStack(this);
                mStack = new ActivityStack(this, mRecentTasks);
                mIdString = "ActivtyContainer{" + mStackId + "}";
                if (DEBUG_STACK) Slog.d(TAG, "Creating " + this);
            }
+577 −0

File added.

Preview size limit exceeded, changes collapsed.

+12 −10
Original line number Diff line number Diff line
@@ -99,6 +99,7 @@ public class TaskPersister {

    private final ActivityManagerService mService;
    private final ActivityStackSupervisor mStackSupervisor;
    private final RecentTasks mRecentTasks;

    /** Value determines write delay mode as follows:
     *    < 0 We are Flushing. No delays between writes until the image queue is drained and all
@@ -138,7 +139,8 @@ public class TaskPersister {
    // tasks.
    private long mExpiredTasksCleanupTime = Long.MAX_VALUE;

    TaskPersister(File systemDir, ActivityStackSupervisor stackSupervisor) {
    TaskPersister(File systemDir, ActivityStackSupervisor stackSupervisor,
            RecentTasks recentTasks) {
        sTasksDir = new File(systemDir, TASKS_DIRNAME);
        if (!sTasksDir.exists()) {
            if (DEBUG_PERSISTER) Slog.d(TAG, "Creating tasks directory " + sTasksDir);
@@ -159,13 +161,15 @@ public class TaskPersister {

        mStackSupervisor = stackSupervisor;
        mService = stackSupervisor.mService;

        mRecentTasks = recentTasks;
        mLazyTaskWriterThread = new LazyTaskWriterThread("LazyTaskWriterThread");
    }

    void startPersisting() {
        if (!mLazyTaskWriterThread.isAlive()) {
            mLazyTaskWriterThread.start();
        }
    }

    private void removeThumbnails(TaskRecord task) {
        final String taskString = Integer.toString(task.taskId);
@@ -704,10 +708,9 @@ public class TaskPersister {
                    // {@link TaskRecord.mLastTimeMoved} and drop the oldest recent's vs. just
                    // adding to the back of the list.
                    int spaceLeft =
                            ActivityManager.getMaxRecentTasksStatic()
                            - mService.mRecentTasks.size();
                            ActivityManager.getMaxRecentTasksStatic() - mRecentTasks.size();
                    if (spaceLeft >= tasks.size()) {
                        mService.mRecentTasks.addAll(mService.mRecentTasks.size(), tasks);
                        mRecentTasks.addAll(mRecentTasks.size(), tasks);
                        for (int k = tasks.size() - 1; k >= 0; k--) {
                            // Persist new tasks.
                            wakeup(tasks.get(k), false);
@@ -860,10 +863,9 @@ public class TaskPersister {
                    if (DEBUG_PERSISTER) Slog.d(TAG, "Looking for obsolete files.");
                    persistentTaskIds.clear();
                    synchronized (mService) {
                        final ArrayList<TaskRecord> tasks = mService.mRecentTasks;
                        if (DEBUG_PERSISTER) Slog.d(TAG, "mRecents=" + tasks);
                        for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) {
                            final TaskRecord task = tasks.get(taskNdx);
                        if (DEBUG_PERSISTER) Slog.d(TAG, "mRecents=" + mRecentTasks);
                        for (int taskNdx = mRecentTasks.size() - 1; taskNdx >= 0; --taskNdx) {
                            final TaskRecord task = mRecentTasks.get(taskNdx);
                            if (DEBUG_PERSISTER) Slog.d(TAG, "LazyTaskWriter: task=" + task +
                                    " persistable=" + task.isPersistable);
                            if ((task.isPersistable || task.inRecents)