summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wale Ogunwale <ogunwale@google.com> 2015-02-25 15:41:52 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2015-02-25 15:41:53 +0000
commitcdd35e6776f1e699a507e4ebb3a19b5eb75dc0fb (patch)
treefa181f49e5b382659a179e1e6f5eaef226c034de
parent2486f38ad8ebeaaebf198fe2f1d99781ce8d29d5 (diff)
parent3426b72cff7f8eeea4c802f4f0fcae4b995e177a (diff)
Merge "Revert "Have AMS.setFocusedActivityLocked() move the focus stack to the front""
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java4
-rw-r--r--services/core/java/com/android/server/am/ActivityStack.java18
-rw-r--r--services/core/java/com/android/server/am/ActivityStackSupervisor.java67
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(),