diff options
author | 2015-02-25 15:41:52 +0000 | |
---|---|---|
committer | 2015-02-25 15:41:53 +0000 | |
commit | cdd35e6776f1e699a507e4ebb3a19b5eb75dc0fb (patch) | |
tree | fa181f49e5b382659a179e1e6f5eaef226c034de | |
parent | 2486f38ad8ebeaaebf198fe2f1d99781ce8d29d5 (diff) | |
parent | 3426b72cff7f8eeea4c802f4f0fcae4b995e177a (diff) |
Merge "Revert "Have AMS.setFocusedActivityLocked() move the focus stack to the front""
3 files changed, 42 insertions, 47 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 008d71879398..966dc884543b 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -2398,7 +2398,8 @@ public final class ActivityManagerService extends ActivityManagerNative } else { finishRunningVoiceLocked(); } - if (r != null && mStackSupervisor.setFocusedStack(r, reason + " setFocusedActivity")) { + mStackSupervisor.setFocusedStack(r, reason + " setFocusedActivity"); + if (r != null) { mWindowManager.setFocusedApp(r.appToken, true); } applyUpdateLockStateLocked(r); @@ -2422,7 +2423,6 @@ public final class ActivityManagerService extends ActivityManagerNative ActivityRecord r = stack.topRunningActivityLocked(null); if (r != null) { setFocusedActivityLocked(r, "setFocusedStack"); - mStackSupervisor.resumeTopActivitiesLocked(stack, null, null); } } } diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index c073df6c522b..c3343f5f92c6 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -496,19 +496,11 @@ final class ActivityStack { final void moveToFront(String reason) { if (isAttached()) { - final boolean homeStack = isHomeStack() - || (mActivityContainer.mParentActivity != null - && mActivityContainer.mParentActivity.isHomeActivity()); - - if (!homeStack) { - // Need to move this stack to the front before calling - // {@link ActivityStackSupervisor#moveHomeStack} below. - mStacks.remove(this); - mStacks.add(this); - } if (isOnHomeDisplay()) { - mStackSupervisor.moveHomeStack(homeStack, reason); + mStackSupervisor.moveHomeStack(isHomeStack(), reason); } + mStacks.remove(this); + mStacks.add(this); final TaskRecord task = topTask(); if (task != null) { mWindowManager.moveTaskToTop(task.taskId); @@ -2588,6 +2580,7 @@ final class ActivityStack { if (top == null) { return false; } + stack.moveToFront(myReason); mService.setFocusedActivityLocked(top, myReason); return true; } @@ -3663,7 +3656,8 @@ final class ActivityStack { } } - if (DEBUG_TRANSITION) Slog.v(TAG, "Prepare to back transition: task=" + taskId); + if (DEBUG_TRANSITION) Slog.v(TAG, + "Prepare to back transition: task=" + taskId); boolean prevIsHome = false; if (tr.isOverHomeStack()) { diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index f6ef29530481..907381e04c83 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -1541,27 +1541,25 @@ public final class ActivityStackSupervisor implements DisplayListener { return err; } - ActivityStack computeStackFocus(ActivityRecord r, boolean newTask) { + ActivityStack adjustStackFocus(ActivityRecord r, boolean newTask) { final TaskRecord task = r.task; // On leanback only devices we should keep all activities in the same stack. if (!mLeanbackOnlyDevice && (r.isApplicationActivity() || (task != null && task.isApplicationTask()))) { - - ActivityStack stack; - if (task != null) { - stack = task.stack; - if (stack.isOnHomeDisplay()) { - if (mFocusedStack != stack) { - if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "computeStackFocus: Setting " + + final ActivityStack taskStack = task.stack; + if (taskStack.isOnHomeDisplay()) { + if (mFocusedStack != taskStack) { + if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: Setting " + "focused stack to r=" + r + " task=" + task); + mFocusedStack = taskStack; } else { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, - "computeStackFocus: Focused stack already=" + mFocusedStack); + "adjustStackFocus: Focused stack already=" + mFocusedStack); } } - return stack; + return taskStack; } final ActivityContainer container = r.mInitialActivityContainer; @@ -1574,41 +1572,43 @@ public final class ActivityStackSupervisor implements DisplayListener { if (mFocusedStack != mHomeStack && (!newTask || mFocusedStack.mActivityContainer.isEligibleForNewTasks())) { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, - "computeStackFocus: Have a focused stack=" + mFocusedStack); + "adjustStackFocus: Have a focused stack=" + mFocusedStack); return mFocusedStack; } final ArrayList<ActivityStack> homeDisplayStacks = mHomeStack.mStacks; for (int stackNdx = homeDisplayStacks.size() - 1; stackNdx >= 0; --stackNdx) { - stack = homeDisplayStacks.get(stackNdx); + final ActivityStack stack = homeDisplayStacks.get(stackNdx); if (!stack.isHomeStack()) { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, - "computeStackFocus: Setting focused stack=" + stack); - return stack; + "adjustStackFocus: Setting focused stack=" + stack); + mFocusedStack = stack; + return mFocusedStack; } } // Need to create an app stack for this user. - stack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); - if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "computeStackFocus: New stack r=" + r + - " stackId=" + stack.mStackId); - return stack; + mFocusedStack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); + if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: New stack r=" + r + + " stackId=" + mFocusedStack.mStackId); + return mFocusedStack; } return mHomeStack; } - boolean setFocusedStack(ActivityRecord r, String reason) { - if (r == null) { - // Not sure what you are trying to do, but it is not going to work... - return false; - } - final TaskRecord task = r.task; - if (task == null || task.stack == null) { - Slog.w(TAG, "Can't set focus stack for r=" + r + " task=" + task); - return false; + void setFocusedStack(ActivityRecord r, String reason) { + if (r != null) { + final TaskRecord task = r.task; + boolean isHomeActivity = !r.isApplicationActivity(); + if (!isHomeActivity && task != null) { + isHomeActivity = !task.isApplicationTask(); + } + if (!isHomeActivity && task != null) { + final ActivityRecord parent = task.stack.mActivityContainer.mParentActivity; + isHomeActivity = parent != null && parent.isHomeActivity(); + } + moveHomeStack(isHomeActivity, reason); } - task.stack.moveToFront(reason); - return true; } final int startActivityUncheckedLocked(final ActivityRecord r, ActivityRecord sourceRecord, @@ -2082,9 +2082,10 @@ public final class ActivityStackSupervisor implements DisplayListener { return ActivityManager.START_RETURN_LOCK_TASK_MODE_VIOLATION; } newTask = true; - targetStack = computeStackFocus(r, newTask); - targetStack.moveToFront("startingNewTask"); - + targetStack = adjustStackFocus(r, newTask); + if (!launchTaskBehind) { + targetStack.moveToFront("startingNewTask"); + } if (reuseTask == null) { r.setTask(targetStack.createTaskRecord(getNextTaskId(), newTaskInfo != null ? newTaskInfo : r.info, @@ -2205,7 +2206,7 @@ public final class ActivityStackSupervisor implements DisplayListener { // This not being started from an existing activity, and not part // of a new task... just put it in the top task, though these days // this case should never happen. - targetStack = computeStackFocus(r, newTask); + targetStack = adjustStackFocus(r, newTask); targetStack.moveToFront("addingToTopTask"); ActivityRecord prev = targetStack.topActivity(); r.setTask(prev != null ? prev.task : targetStack.createTaskRecord(getNextTaskId(), |