Fix stack transfer bug.
Set the focused stack to the task with the started activity. Do not refocus
when activities report resume.
Add more conditional debug.
Fixes bug 9481679.
Change-Id: Ib7134e88f9a2c8ad1703af0d43442c8bbe4e65dc
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java
index 8224c88a..a4fd7ad 100644
--- a/services/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/java/com/android/server/am/ActivityStackSupervisor.java
@@ -1186,7 +1186,8 @@
}
ActivityStack getCorrectStack(ActivityRecord r) {
- if (r.isApplicationActivity() || (r.task != null && r.task.isApplicationTask())) {
+ final TaskRecord task = r.task;
+ if (r.isApplicationActivity() || (task != null && task.isApplicationTask())) {
int stackNdx;
for (stackNdx = mStacks.size() - 1; stackNdx > 0; --stackNdx) {
if (mStacks.get(stackNdx).mCurrentUser == mCurrentUser) {
@@ -1199,6 +1200,9 @@
StackBox.TASK_STACK_GOES_OVER, 1.0f);
mFocusedStack = getStack(stackId);
}
+ if (task != null) {
+ mFocusedStack = task.stack;
+ }
return mFocusedStack;
}
return mHomeStack;
@@ -1649,6 +1653,7 @@
ActivityStack.logStartActivity(EventLogTags.AM_CREATE_ACTIVITY, r, r.task);
setLaunchHomeTaskNextFlag(sourceRecord, r, targetStack);
targetStack.startActivityLocked(r, newTask, doResume, keepCurTransition, options);
+ mService.setFocusedActivityLocked(r);
return ActivityManager.START_SUCCESS;
}
@@ -1867,6 +1872,8 @@
void findTaskToMoveToFrontLocked(int taskId, int flags, Bundle options) {
for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
if (mStacks.get(stackNdx).findTaskToMoveToFrontLocked(taskId, flags, options)) {
+ if (DEBUG_STACK) Slog.d(TAG, "findTaskToMoveToFront: moved to front of stack=" +
+ mStacks.get(stackNdx));
return;
}
}
@@ -2053,7 +2060,6 @@
final ActivityStack stack = r.task.stack;
if (isFrontStack(stack)) {
mService.updateUsageStats(r, true);
- mService.setFocusedActivityLocked(r);
}
if (allResumedActivitiesComplete()) {
ensureActivitiesVisibleLocked(null, 0);