diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/Task.java | 27 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/TaskDisplayArea.java | 41 | 
2 files changed, 27 insertions, 41 deletions
| diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 557c92e9704e..4da16f5c6f28 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -5264,14 +5264,12 @@ class Task extends WindowContainer<WindowContainer> {              taskDisplayArea.moveHomeStackToFront(reason + " returnToHome");          } -        if (isRootTask()) { -            taskDisplayArea.positionChildAt(POSITION_TOP, this, false /* includingParents */, -                    reason); -        } +        final Task lastFocusedTask = isRootTask() ? taskDisplayArea.getFocusedStack() : null;          if (task == null) {              task = this;          }          task.getParent().positionChildAt(POSITION_TOP, task, true /* includingParents */); +        taskDisplayArea.updateLastFocusedRootTask(lastFocusedTask, reason);      }      /** @@ -5294,8 +5292,9 @@ class Task extends WindowContainer<WindowContainer> {              if (parentTask != null) {                  parentTask.moveToBack(reason, this);              } else { -                displayArea.positionChildAt(POSITION_BOTTOM, this, false /*includingParents*/, -                        reason); +                final Task lastFocusedTask = displayArea.getFocusedStack(); +                displayArea.positionChildAt(POSITION_BOTTOM, this, false /*includingParents*/); +                displayArea.updateLastFocusedRootTask(lastFocusedTask, reason);              }              if (task != null && task != this) {                  positionChildAtBottom(task); @@ -6822,13 +6821,10 @@ class Task extends WindowContainer<WindowContainer> {              // get calculated incorrectly.              mDisplayContent.deferUpdateImeTarget(); -            // Shift all activities with this task up to the top -            // of the stack, keeping them in the same internal order. -            positionChildAtTop(tr); -              // Don't refocus if invisible to current user              final ActivityRecord top = tr.getTopNonFinishingActivity();              if (top == null || !top.okToShowLocked()) { +                positionChildAtTop(tr);                  if (top != null) {                      mStackSupervisor.mRecentTasks.add(top.getTask());                  } @@ -6836,20 +6832,15 @@ class Task extends WindowContainer<WindowContainer> {                  return;              } -            // Set focus to the top running activity of this stack. -            final ActivityRecord r = topRunningActivity(); -            if (r != null) { -                r.moveFocusableActivityToTop(reason); -            } +            // Set focus to the top running activity of this task and move all its parents to top. +            top.moveFocusableActivityToTop(reason);              if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare to front transition: task=" + tr);              if (noAnimation) {                  mDisplayContent.prepareAppTransitionOld(TRANSIT_OLD_NONE,                          false /* alwaysKeepCurrent */);                  mDisplayContent.prepareAppTransition(TRANSIT_NONE); -                if (r != null) { -                    mStackSupervisor.mNoAnimActivities.add(r); -                } +                mStackSupervisor.mNoAnimActivities.add(top);                  ActivityOptions.abort(options);              } else {                  updateTransitLocked(TRANSIT_OLD_TASK_TO_FRONT, TRANSIT_TO_FRONT, diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index 9392666fbf54..36c9c06f88fe 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -334,29 +334,6 @@ final class TaskDisplayArea extends DisplayArea<Task> {          return true;      } -    void positionChildAt(int position, Task child, boolean includingParents, -            String updateLastFocusedTaskReason) { -        final Task prevFocusedTask = updateLastFocusedTaskReason != null ? getFocusedStack() : null; - -        positionChildAt(position, child, includingParents); - -        if (updateLastFocusedTaskReason == null) { -            return; -        } - -        final Task currentFocusedStack = getFocusedStack(); -        if (currentFocusedStack == prevFocusedTask) { -            return; -        } - -        mLastFocusedStack = prevFocusedTask; -        EventLogTags.writeWmFocusedStack(mRootWindowContainer.mCurrentUser, -                mDisplayContent.mDisplayId, -                currentFocusedStack == null ? -1 : currentFocusedStack.getRootTaskId(), -                mLastFocusedStack == null ? -1 : mLastFocusedStack.getRootTaskId(), -                updateLastFocusedTaskReason); -    } -      @Override      void positionChildAt(int position, Task child, boolean includingParents) {          final boolean moveToTop = position >= getChildCount() - 1; @@ -1189,6 +1166,24 @@ final class TaskDisplayArea extends DisplayArea<Task> {          return mLastFocusedStack;      } +    void updateLastFocusedRootTask(Task prevFocusedTask, String updateLastFocusedTaskReason) { +        if (updateLastFocusedTaskReason == null) { +            return; +        } + +        final Task currentFocusedTask = getFocusedStack(); +        if (currentFocusedTask == prevFocusedTask) { +            return; +        } + +        mLastFocusedStack = prevFocusedTask; +        EventLogTags.writeWmFocusedStack(mRootWindowContainer.mCurrentUser, +                mDisplayContent.mDisplayId, +                currentFocusedTask == null ? -1 : currentFocusedTask.getRootTaskId(), +                mLastFocusedStack == null ? -1 : mLastFocusedStack.getRootTaskId(), +                updateLastFocusedTaskReason); +    } +      boolean allResumedActivitiesComplete() {          for (int stackNdx = getStackCount() - 1; stackNdx >= 0; --stackNdx) {              final ActivityRecord r = getStackAt(stackNdx).getResumedActivity(); |