}
}
- boolean haveActivities = mStackSupervisor.switchUserLocked(userId, uss);
- if (!haveActivities) {
+ boolean homeInFront = mStackSupervisor.switchUserLocked(userId, uss);
+ if (homeInFront) {
startHomeActivityLocked(userId);
+ } else {
+ mStackSupervisor.resumeTopActivitiesLocked();
}
EventLogTags.writeAmSwitchUser(userId);
} catch (RemoteException e) {
}
}
+
+ mStackSupervisor.removeUserLocked(userId);
}
@Override
/*
* Move the activities around in the stack to bring a user to the foreground.
- * @return whether there are any activities for the specified user.
*/
- final boolean switchUserLocked(int userId) {
+ final void switchUserLocked(int userId) {
if (VALIDATE_TOKENS) {
validateAppTokensLocked();
}
if (mCurrentUser == userId) {
- return true;
+ return;
}
mCurrentUser = userId;
// Move userId's tasks to the top.
- boolean haveActivities = false;
int index = mTaskHistory.size();
for (int i = 0; i < index; ++i) {
TaskRecord task = mTaskHistory.get(i);
if (task.userId == userId) {
- haveActivities = true;
mTaskHistory.remove(i);
mTaskHistory.add(task);
--index;
}
}
-
- return haveActivities;
}
void minimalResumeActivityLocked(ActivityRecord r) {
import android.util.Slog;
import android.util.SparseArray;
+import android.util.SparseBooleanArray;
import com.android.internal.app.HeavyWeightSwitcherActivity;
import com.android.internal.os.TransferPipe;
import com.android.server.am.ActivityManagerService.PendingActivityLaunch;
*/
final PowerManager.WakeLock mGoingToSleep;
+ /** State of the stacks when user switched, indexed by userId. */
+ SparseBooleanArray mUserHomeInFront = new SparseBooleanArray(2);
+
public ActivityStackSupervisor(ActivityManagerService service, Context context,
Looper looper) {
mService = service;
}
}
+ void removeUserLocked(int userId) {
+ mUserHomeInFront.delete(userId);
+ }
+
/**
* @return true if some activity was finished (or would have finished if doit were true).
*/
}
boolean switchUserLocked(int userId, UserStartedState uss) {
+ mUserHomeInFront.put(mCurrentUser, isFrontStack(mHomeStack));
+ final boolean homeInFront = mUserHomeInFront.get(userId, true);
mCurrentUser = userId;
mStartingUsers.add(uss);
- boolean haveActivities = false;
for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
- haveActivities |= mStacks.get(stackNdx).switchUserLocked(userId);
+ mStacks.get(stackNdx).switchUserLocked(userId);
}
- resumeTopActivitiesLocked();
-
- return haveActivities;
+ moveHomeStack(homeInFront);
+ return homeInFront;
}
final ArrayList<ActivityRecord> processStoppingActivitiesLocked(boolean remove) {
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);
}
ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) {