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

Commit 0b5bf001 authored by Craig Mautner's avatar Craig Mautner Committed by Android (Google) Code Review
Browse files

Merge "Fix incorrect setting of TaskRecord.frontOfTask"

parents c4d41755 1aa9d0d3
Loading
Loading
Loading
Loading
+4 −32
Original line number Diff line number Diff line
@@ -1298,17 +1298,7 @@ final class ActivityStack {
        if (prevTask != null && prevTask.mOnTopOfHome && prev.finishing && prev.frontOfTask) {
            if (DEBUG_STACK)  mStackSupervisor.validateTopActivitiesLocked();
            if (prevTask == nextTask) {
                ArrayList<ActivityRecord> activities = prevTask.mActivities;
                final int numActivities = activities.size();
                for (int activityNdx = 0; activityNdx < numActivities; ++activityNdx) {
                    final ActivityRecord r = activities.get(activityNdx);
                    // r is usually the same as next, but what if two activities were launched
                    // before prev finished?
                    if (!r.finishing) {
                        r.frontOfTask = true;
                        break;
                    }
                }
                prevTask.setFrontOfTask();
            } else if (prevTask != topTask()) {
                // This task is going away but it was supposed to return to the home task.
                // Now the task above it has to return to the home task instead.
@@ -1766,24 +1756,9 @@ final class ActivityStack {
        if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Adding activity " + r + " to stack to task " + task,
                new RuntimeException("here").fillInStackTrace());
        task.addActivityToTop(r);
        task.setFrontOfTask();

        r.putInHistory();
        r.frontOfTask = newTask;
        if (!r.frontOfTask) {
            // It is possible that the current frontOfTask activity is finishing. Check for that.
            ArrayList<ActivityRecord> activities = task.mActivities;
            for (int activityNdx = 0; activityNdx < activities.size(); ++activityNdx) {
                final ActivityRecord activity = activities.get(activityNdx);
                if (activity.finishing) {
                    continue;
                }
                if (activity == r) {
                    // All activities before r are finishing.
                    r.frontOfTask = true;
                }
                break;
            }
        }
        if (!isHomeStack() || numActivities() > 0) {
            // We want to show the starting preview window if we are
            // switching to a new task, or the next activity's process is
@@ -2445,15 +2420,12 @@ final class ActivityStack {
        final ArrayList<ActivityRecord> activities = r.task.mActivities;
        final int index = activities.indexOf(r);
        if (index < (activities.size() - 1)) {
            ActivityRecord next = activities.get(index+1);
            if (r.frontOfTask) {
                // The next activity is now the front of the task.
                next.frontOfTask = true;
            }
            r.task.setFrontOfTask();
            if ((r.intent.getFlags()&Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) != 0) {
                // If the caller asked that this activity (and all above it)
                // be cleared when the task is reset, don't lose that information,
                // but propagate it up to the next activity.
                ActivityRecord next = activities.get(index+1);
                next.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
            }
        }
+19 −4
Original line number Diff line number Diff line
@@ -159,18 +159,33 @@ final class TaskRecord extends ThumbnailHolder {
        return null;
    }

    /** Call after activity movement or finish to make sure that frontOfTask is set correctly */
    final void setFrontOfTask() {
        boolean foundFront = false;
        final int numActivities = mActivities.size();
        for (int activityNdx = 0; numActivities < activityNdx; ++activityNdx) {
            final ActivityRecord r = mActivities.get(activityNdx);
            if (foundFront || r.finishing) {
                r.frontOfTask = false;
            } else {
                r.frontOfTask = true;
                // Set frontOfTask false for every following activity.
                foundFront = true;
            }
        }
    }

    /**
     * Reorder the history stack so that the activity at the given index is
     * brought to the front.
     * Reorder the history stack so that the passed activity is brought to the front.
     */
    final void moveActivityToFrontLocked(ActivityRecord newTop) {
        if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Removing and adding activity " + newTop
            + " to stack at top", new RuntimeException("here").fillInStackTrace());

        getTopActivity().frontOfTask = false;
        mActivities.remove(newTop);
        mActivities.add(newTop);
        newTop.frontOfTask = true;

        setFrontOfTask();
    }

    void addActivityAtBottom(ActivityRecord r) {