Loading services/java/com/android/server/am/ActivityManagerService.java +6 −2 Original line number Diff line number Diff line Loading @@ -15820,9 +15820,11 @@ public final class ActivityManagerService extends ActivityManagerNative } } boolean haveActivities = mStackSupervisor.switchUserLocked(userId, uss); if (!haveActivities) { boolean homeInFront = mStackSupervisor.switchUserLocked(userId, uss); if (homeInFront) { startHomeActivityLocked(userId); } else { mStackSupervisor.resumeTopActivitiesLocked(); } EventLogTags.writeAmSwitchUser(userId); Loading Loading @@ -16148,6 +16150,8 @@ public final class ActivityManagerService extends ActivityManagerNative } catch (RemoteException e) { } } mStackSupervisor.removeUserLocked(userId); } @Override services/java/com/android/server/am/ActivityStack.java +2 −7 Original line number Diff line number Diff line Loading @@ -549,31 +549,26 @@ final class ActivityStack { /* * 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) { Loading services/java/com/android/server/am/ActivityStackSupervisor.java +14 −5 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import android.util.EventLog; 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; Loading Loading @@ -203,6 +204,9 @@ public final class ActivityStackSupervisor { */ 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; Loading Loading @@ -1960,6 +1964,10 @@ public final class ActivityStackSupervisor { } } void removeUserLocked(int userId) { mUserHomeInFront.delete(userId); } /** * @return true if some activity was finished (or would have finished if doit were true). */ Loading Loading @@ -2278,17 +2286,17 @@ public final class ActivityStackSupervisor { } 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) { Loading Loading @@ -2381,6 +2389,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); } ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) { Loading Loading
services/java/com/android/server/am/ActivityManagerService.java +6 −2 Original line number Diff line number Diff line Loading @@ -15820,9 +15820,11 @@ public final class ActivityManagerService extends ActivityManagerNative } } boolean haveActivities = mStackSupervisor.switchUserLocked(userId, uss); if (!haveActivities) { boolean homeInFront = mStackSupervisor.switchUserLocked(userId, uss); if (homeInFront) { startHomeActivityLocked(userId); } else { mStackSupervisor.resumeTopActivitiesLocked(); } EventLogTags.writeAmSwitchUser(userId); Loading Loading @@ -16148,6 +16150,8 @@ public final class ActivityManagerService extends ActivityManagerNative } catch (RemoteException e) { } } mStackSupervisor.removeUserLocked(userId); } @Override
services/java/com/android/server/am/ActivityStack.java +2 −7 Original line number Diff line number Diff line Loading @@ -549,31 +549,26 @@ final class ActivityStack { /* * 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) { Loading
services/java/com/android/server/am/ActivityStackSupervisor.java +14 −5 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import android.util.EventLog; 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; Loading Loading @@ -203,6 +204,9 @@ public final class ActivityStackSupervisor { */ 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; Loading Loading @@ -1960,6 +1964,10 @@ public final class ActivityStackSupervisor { } } void removeUserLocked(int userId) { mUserHomeInFront.delete(userId); } /** * @return true if some activity was finished (or would have finished if doit were true). */ Loading Loading @@ -2278,17 +2286,17 @@ public final class ActivityStackSupervisor { } 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) { Loading Loading @@ -2381,6 +2389,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); } ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) { Loading