diff options
| author | 2013-10-15 17:33:23 -0700 | |
|---|---|---|
| committer | 2013-10-15 17:33:23 -0700 | |
| commit | f7a64d2f123897a255adf2e3ea3c60f09b750b2d (patch) | |
| tree | b7c4e0477264de587156df59dfeafb973d714c80 | |
| parent | 09de7975fead1b47ea78f6f812a2f649e5dfb31d (diff) | |
| parent | d68cd8cc40226dfd0b63227b6c186de4a4fd9ba0 (diff) | |
am d68cd8cc: am 41bf03e1: Merge "Restore window manager stack order on user switch." into klp-dev
* commit 'd68cd8cc40226dfd0b63227b6c186de4a4fd9ba0':
Restore window manager stack order on user switch.
| -rw-r--r-- | services/java/com/android/server/am/ActivityStack.java | 9 | ||||
| -rw-r--r-- | services/java/com/android/server/am/ActivityStackSupervisor.java | 21 |
2 files changed, 19 insertions, 11 deletions
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index 77f874fa341c..d50246032353 100644 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -551,9 +551,6 @@ final class ActivityStack { * Move the activities around in the stack to bring a user to the foreground. */ final void switchUserLocked(int userId) { - if (VALIDATE_TOKENS) { - validateAppTokensLocked(); - } if (mCurrentUser == userId) { return; } @@ -564,11 +561,16 @@ final class ActivityStack { for (int i = 0; i < index; ++i) { TaskRecord task = mTaskHistory.get(i); if (task.userId == userId) { + if (DEBUG_TASKS) Slog.d(TAG, "switchUserLocked: stack=" + getStackId() + + " moving " + task + " to top"); mTaskHistory.remove(i); mTaskHistory.add(task); --index; } } + if (VALIDATE_TOKENS) { + validateAppTokensLocked(); + } } void minimalResumeActivityLocked(ActivityRecord r) { @@ -2951,6 +2953,7 @@ final class ActivityStack { for (int taskNdx = top; taskNdx >= 0; --taskNdx) { final TaskRecord task = mTaskHistory.get(taskNdx); if (task.isHomeTask()) { + if (DEBUG_TASKS || DEBUG_STACK) Slog.d(TAG, "moveHomeTaskToTop: moving " + task); mTaskHistory.remove(taskNdx); mTaskHistory.add(top, task); mWindowManager.moveTaskToTop(task.taskId); diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java index 040f0ac5581a..da9c4e8277a1 100644 --- a/services/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/java/com/android/server/am/ActivityStackSupervisor.java @@ -68,9 +68,8 @@ import android.os.SystemClock; import android.os.UserHandle; import android.util.EventLog; import android.util.Slog; -import android.util.SparseArray; +import android.util.SparseIntArray; -import android.util.SparseBooleanArray; import com.android.internal.app.HeavyWeightSwitcherActivity; import com.android.internal.os.TransferPipe; import com.android.server.am.ActivityManagerService.PendingActivityLaunch; @@ -204,8 +203,8 @@ public final class ActivityStackSupervisor { */ final PowerManager.WakeLock mGoingToSleep; - /** State of the stacks when user switched, indexed by userId. */ - SparseBooleanArray mUserHomeInFront = new SparseBooleanArray(2); + /** Stack id of the front stack when user switched, indexed by userId. */ + SparseIntArray mUserStackInFront = new SparseIntArray(2); public ActivityStackSupervisor(ActivityManagerService service, Context context, Looper looper) { @@ -1927,7 +1926,7 @@ public final class ActivityStackSupervisor { } void removeUserLocked(int userId) { - mUserHomeInFront.delete(userId); + mUserStackInFront.delete(userId); } /** @@ -2248,8 +2247,8 @@ public final class ActivityStackSupervisor { } boolean switchUserLocked(int userId, UserStartedState uss) { - mUserHomeInFront.put(mCurrentUser, isFrontStack(mHomeStack)); - final boolean homeInFront = mUserHomeInFront.get(userId, true); + mUserStackInFront.put(mCurrentUser, getFocusedStack().getStackId()); + final int restoreStackId = mUserStackInFront.get(userId, HOME_STACK_ID); mCurrentUser = userId; mStartingUsers.add(uss); @@ -2257,7 +2256,13 @@ public final class ActivityStackSupervisor { mStacks.get(stackNdx).switchUserLocked(userId); } + ActivityStack stack = getStack(restoreStackId); + if (stack == null) { + stack = mHomeStack; + } + final boolean homeInFront = stack.isHomeStack(); moveHomeStack(homeInFront); + mWindowManager.moveTaskToTop(stack.topTask().taskId); return homeInFront; } @@ -2351,7 +2356,7 @@ public final class ActivityStackSupervisor { pw.print(prefix); pw.print("mStackState="); pw.println(stackStateToString(mStackState)); pw.print(prefix); pw.println("mSleepTimeout: " + mSleepTimeout); pw.print(prefix); pw.println("mCurTaskId: " + mCurTaskId); - pw.print(prefix); pw.println("mUserHomeInFront: " + mUserHomeInFront); + pw.print(prefix); pw.println("mUserStackInFront: " + mUserStackInFront); } ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) { |