Loading services/java/com/android/server/am/ActivityStack.java +4 −32 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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 Loading Loading @@ -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); } } Loading services/java/com/android/server/am/TaskRecord.java +19 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading
services/java/com/android/server/am/ActivityStack.java +4 −32 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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 Loading Loading @@ -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); } } Loading
services/java/com/android/server/am/TaskRecord.java +19 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading