Loading services/core/java/com/android/server/am/ActivityManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -2398,8 +2398,7 @@ public final class ActivityManagerService extends ActivityManagerNative } else { finishRunningVoiceLocked(); } mStackSupervisor.setFocusedStack(r, reason + " setFocusedActivity"); if (r != null) { if (r != null && mStackSupervisor.setFocusedStack(r, reason + " setFocusedActivity")) { mWindowManager.setFocusedApp(r.appToken, true); } applyUpdateLockStateLocked(r); Loading @@ -2423,6 +2422,7 @@ public final class ActivityManagerService extends ActivityManagerNative ActivityRecord r = stack.topRunningActivityLocked(null); if (r != null) { setFocusedActivityLocked(r, "setFocusedStack"); mStackSupervisor.resumeTopActivitiesLocked(stack, null, null); } } } Loading services/core/java/com/android/server/am/ActivityStack.java +12 −6 Original line number Diff line number Diff line Loading @@ -496,11 +496,19 @@ final class ActivityStack { final void moveToFront(String reason) { if (isAttached()) { if (isOnHomeDisplay()) { mStackSupervisor.moveHomeStack(isHomeStack(), reason); } 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); } final TaskRecord task = topTask(); if (task != null) { mWindowManager.moveTaskToTop(task.taskId); Loading Loading @@ -2580,7 +2588,6 @@ final class ActivityStack { if (top == null) { return false; } stack.moveToFront(myReason); mService.setFocusedActivityLocked(top, myReason); return true; } Loading Loading @@ -3656,8 +3663,7 @@ 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()) { Loading services/core/java/com/android/server/am/ActivityStackSupervisor.java +33 −34 Original line number Diff line number Diff line Loading @@ -1541,25 +1541,27 @@ public final class ActivityStackSupervisor implements DisplayListener { return err; } ActivityStack adjustStackFocus(ActivityRecord r, boolean newTask) { ActivityStack computeStackFocus(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) { final ActivityStack taskStack = task.stack; if (taskStack.isOnHomeDisplay()) { if (mFocusedStack != taskStack) { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: Setting " + stack = task.stack; if (stack.isOnHomeDisplay()) { if (mFocusedStack != stack) { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "computeStackFocus: Setting " + "focused stack to r=" + r + " task=" + task); mFocusedStack = taskStack; } else { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: Focused stack already=" + mFocusedStack); "computeStackFocus: Focused stack already=" + mFocusedStack); } } return taskStack; return stack; } final ActivityContainer container = r.mInitialActivityContainer; Loading @@ -1572,43 +1574,41 @@ public final class ActivityStackSupervisor implements DisplayListener { if (mFocusedStack != mHomeStack && (!newTask || mFocusedStack.mActivityContainer.isEligibleForNewTasks())) { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: Have a focused stack=" + mFocusedStack); "computeStackFocus: Have a focused stack=" + mFocusedStack); return mFocusedStack; } final ArrayList<ActivityStack> homeDisplayStacks = mHomeStack.mStacks; for (int stackNdx = homeDisplayStacks.size() - 1; stackNdx >= 0; --stackNdx) { final ActivityStack stack = homeDisplayStacks.get(stackNdx); stack = homeDisplayStacks.get(stackNdx); if (!stack.isHomeStack()) { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: Setting focused stack=" + stack); mFocusedStack = stack; return mFocusedStack; "computeStackFocus: Setting focused stack=" + stack); return stack; } } // Need to create an app stack for this user. mFocusedStack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: New stack r=" + r + " stackId=" + mFocusedStack.mStackId); return mFocusedStack; stack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "computeStackFocus: New stack r=" + r + " stackId=" + stack.mStackId); return stack; } return mHomeStack; } 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(); 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; } moveHomeStack(isHomeActivity, reason); 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; } task.stack.moveToFront(reason); return true; } final int startActivityUncheckedLocked(final ActivityRecord r, ActivityRecord sourceRecord, Loading Loading @@ -2082,10 +2082,9 @@ public final class ActivityStackSupervisor implements DisplayListener { return ActivityManager.START_RETURN_LOCK_TASK_MODE_VIOLATION; } newTask = true; targetStack = adjustStackFocus(r, newTask); if (!launchTaskBehind) { targetStack = computeStackFocus(r, newTask); targetStack.moveToFront("startingNewTask"); } if (reuseTask == null) { r.setTask(targetStack.createTaskRecord(getNextTaskId(), newTaskInfo != null ? newTaskInfo : r.info, Loading Loading @@ -2206,7 +2205,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 = adjustStackFocus(r, newTask); targetStack = computeStackFocus(r, newTask); targetStack.moveToFront("addingToTopTask"); ActivityRecord prev = targetStack.topActivity(); r.setTask(prev != null ? prev.task : targetStack.createTaskRecord(getNextTaskId(), Loading Loading
services/core/java/com/android/server/am/ActivityManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -2398,8 +2398,7 @@ public final class ActivityManagerService extends ActivityManagerNative } else { finishRunningVoiceLocked(); } mStackSupervisor.setFocusedStack(r, reason + " setFocusedActivity"); if (r != null) { if (r != null && mStackSupervisor.setFocusedStack(r, reason + " setFocusedActivity")) { mWindowManager.setFocusedApp(r.appToken, true); } applyUpdateLockStateLocked(r); Loading @@ -2423,6 +2422,7 @@ public final class ActivityManagerService extends ActivityManagerNative ActivityRecord r = stack.topRunningActivityLocked(null); if (r != null) { setFocusedActivityLocked(r, "setFocusedStack"); mStackSupervisor.resumeTopActivitiesLocked(stack, null, null); } } } Loading
services/core/java/com/android/server/am/ActivityStack.java +12 −6 Original line number Diff line number Diff line Loading @@ -496,11 +496,19 @@ final class ActivityStack { final void moveToFront(String reason) { if (isAttached()) { if (isOnHomeDisplay()) { mStackSupervisor.moveHomeStack(isHomeStack(), reason); } 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); } final TaskRecord task = topTask(); if (task != null) { mWindowManager.moveTaskToTop(task.taskId); Loading Loading @@ -2580,7 +2588,6 @@ final class ActivityStack { if (top == null) { return false; } stack.moveToFront(myReason); mService.setFocusedActivityLocked(top, myReason); return true; } Loading Loading @@ -3656,8 +3663,7 @@ 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()) { Loading
services/core/java/com/android/server/am/ActivityStackSupervisor.java +33 −34 Original line number Diff line number Diff line Loading @@ -1541,25 +1541,27 @@ public final class ActivityStackSupervisor implements DisplayListener { return err; } ActivityStack adjustStackFocus(ActivityRecord r, boolean newTask) { ActivityStack computeStackFocus(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) { final ActivityStack taskStack = task.stack; if (taskStack.isOnHomeDisplay()) { if (mFocusedStack != taskStack) { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: Setting " + stack = task.stack; if (stack.isOnHomeDisplay()) { if (mFocusedStack != stack) { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "computeStackFocus: Setting " + "focused stack to r=" + r + " task=" + task); mFocusedStack = taskStack; } else { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: Focused stack already=" + mFocusedStack); "computeStackFocus: Focused stack already=" + mFocusedStack); } } return taskStack; return stack; } final ActivityContainer container = r.mInitialActivityContainer; Loading @@ -1572,43 +1574,41 @@ public final class ActivityStackSupervisor implements DisplayListener { if (mFocusedStack != mHomeStack && (!newTask || mFocusedStack.mActivityContainer.isEligibleForNewTasks())) { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: Have a focused stack=" + mFocusedStack); "computeStackFocus: Have a focused stack=" + mFocusedStack); return mFocusedStack; } final ArrayList<ActivityStack> homeDisplayStacks = mHomeStack.mStacks; for (int stackNdx = homeDisplayStacks.size() - 1; stackNdx >= 0; --stackNdx) { final ActivityStack stack = homeDisplayStacks.get(stackNdx); stack = homeDisplayStacks.get(stackNdx); if (!stack.isHomeStack()) { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: Setting focused stack=" + stack); mFocusedStack = stack; return mFocusedStack; "computeStackFocus: Setting focused stack=" + stack); return stack; } } // Need to create an app stack for this user. mFocusedStack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: New stack r=" + r + " stackId=" + mFocusedStack.mStackId); return mFocusedStack; stack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "computeStackFocus: New stack r=" + r + " stackId=" + stack.mStackId); return stack; } return mHomeStack; } 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(); 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; } moveHomeStack(isHomeActivity, reason); 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; } task.stack.moveToFront(reason); return true; } final int startActivityUncheckedLocked(final ActivityRecord r, ActivityRecord sourceRecord, Loading Loading @@ -2082,10 +2082,9 @@ public final class ActivityStackSupervisor implements DisplayListener { return ActivityManager.START_RETURN_LOCK_TASK_MODE_VIOLATION; } newTask = true; targetStack = adjustStackFocus(r, newTask); if (!launchTaskBehind) { targetStack = computeStackFocus(r, newTask); targetStack.moveToFront("startingNewTask"); } if (reuseTask == null) { r.setTask(targetStack.createTaskRecord(getNextTaskId(), newTaskInfo != null ? newTaskInfo : r.info, Loading Loading @@ -2206,7 +2205,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 = adjustStackFocus(r, newTask); targetStack = computeStackFocus(r, newTask); targetStack.moveToFront("addingToTopTask"); ActivityRecord prev = targetStack.topActivity(); r.setTask(prev != null ? prev.task : targetStack.createTaskRecord(getNextTaskId(), Loading