diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/RecentTasks.java | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java index 10405ec7cd88..e027eb63f1d5 100644 --- a/services/core/java/com/android/server/wm/RecentTasks.java +++ b/services/core/java/com/android/server/wm/RecentTasks.java @@ -1135,16 +1135,17 @@ class RecentTasks { if (!mFreezeTaskListReordering) { // Simple case: this is not an affiliated task, so we just move it to the // front unless overridden by the provided activity options + int indexToAdd = findIndexToAdd(task); mTasks.remove(taskIndex); - mTasks.add(0, task); + mTasks.add(indexToAdd, task); if (taskIndex != 0) { // Only notify when position changes mTaskNotificationController.notifyTaskListUpdated(); } if (DEBUG_RECENTS) { - Slog.d(TAG_RECENTS, "addRecent: moving to top " + task - + " from " + taskIndex); + Slog.d(TAG_RECENTS, "addRecent: moving " + task + " to index " + + indexToAdd + " from " + taskIndex); } } notifyTaskPersisterLocked(task, false); @@ -1231,6 +1232,37 @@ class RecentTasks { notifyTaskPersisterLocked(task, false /* flush */); } + // Looks for a new index to move the recent Task. Note that the recent Task should not be + // placed higher than another recent Task that has higher hierarchical z-ordering. + private int findIndexToAdd(Task task) { + int indexToAdd = 0; + for (int i = 0; i < mTasks.size(); i++) { + final Task otherTask = mTasks.get(i); + if (task == otherTask) { + break; + } + + if (!otherTask.isAttached()) { + // Stop searching if not attached. + break; + } + + if (otherTask.inPinnedWindowingMode()) { + // Skip pip task without increasing index since pip is always on screen. + continue; + } + + // Stop searching if the task has higher z-ordering, or increase the index and + // continue the search. + if (task.compareTo(otherTask) > 0) { + break; + } + + indexToAdd = i + 1; + } + return indexToAdd; + } + /** * Add the task to the bottom if possible. */ |