Loading services/core/java/com/android/server/am/ActivityStack.java +9 −3 Original line number Diff line number Diff line Loading @@ -4611,14 +4611,20 @@ final class ActivityStack { voiceInteractor); // add the task to stack first, mTaskPositioner might need the stack association addTask(task, toTop, false); if (mTaskPositioner != null) { mTaskPositioner.updateDefaultBounds(task, mTaskHistory, info.layout); } else if (mBounds != null && task.mResizeable) { if (!layoutTaskInStack(task, info.layout) && mBounds != null && task.mResizeable) { task.updateOverrideConfiguration(mBounds); } return task; } boolean layoutTaskInStack(TaskRecord task, ActivityInfo.Layout layout) { if (mTaskPositioner == null) { return false; } mTaskPositioner.updateDefaultBounds(task, mTaskHistory, layout); return true; } ArrayList<TaskRecord> getAllTasks() { return new ArrayList<>(mTaskHistory); } Loading services/core/java/com/android/server/am/ActivityStackSupervisor.java +6 −3 Original line number Diff line number Diff line Loading @@ -3420,9 +3420,12 @@ public final class ActivityStackSupervisor implements DisplayListener { Slog.w(TAG, "positionTaskInStackLocked: no task for id=" + taskId); return; } ActivityStack stack = getStack(stackId, CREATE_IF_NEEDED, !ON_TOP); mWindowManager.positionTaskInStack(taskId, stackId, position); final ActivityStack stack = getStack(stackId, CREATE_IF_NEEDED, !ON_TOP); task.updateOverrideConfigurationForStack(stack); mWindowManager.positionTaskInStack( taskId, stackId, position, task.mBounds, task.mOverrideConfig); final boolean stackChanged = task.stack != null && task.stack != stack; if (stackChanged) { task.stack.removeTask(task, "moveTaskToStack", MOVING); Loading services/core/java/com/android/server/am/TaskRecord.java +25 −0 Original line number Diff line number Diff line Loading @@ -1282,6 +1282,31 @@ final class TaskRecord { return !mOverrideConfig.equals(oldConfig) ? mOverrideConfig : null; } /** Updates the task's bounds and override configuration to match what is expected for the * input stack. */ void updateOverrideConfigurationForStack(ActivityStack inStack) { if (stack != null && stack == inStack) { return; } if (inStack.mStackId == FREEFORM_WORKSPACE_STACK_ID) { if (!mResizeable) { throw new IllegalArgumentException("Can not position non-resizeable task=" + this + " in stack=" + inStack); } if (mBounds != null) { return; } if (mLastNonFullscreenBounds != null) { updateOverrideConfiguration(mLastNonFullscreenBounds); } else { inStack.layoutTaskInStack(this, null); } } else { updateOverrideConfiguration(inStack.mBounds); } } /** * Returns the correct stack to use based on task type and currently set bounds, * regardless of the focused stack and current stack association of the task. Loading services/core/java/com/android/server/wm/Task.java +2 −1 Original line number Diff line number Diff line Loading @@ -135,7 +135,7 @@ class Task implements DimLayer.DimLayerUser { stack.addTask(this, toTop); } void positionTaskInStack(TaskStack stack, int position) { void positionTaskInStack(TaskStack stack, int position, Rect bounds, Configuration config) { if (mStack != null && stack != mStack) { if (DEBUG_STACK) Slog.i(TAG, "positionTaskInStack: removing taskId=" + mTaskId + " from stack=" + mStack); Loading @@ -143,6 +143,7 @@ class Task implements DimLayer.DimLayerUser { mStack.removeTask(this); } stack.positionTask(this, position, showForAllUsers()); setBounds(bounds, config); } boolean removeAppToken(AppWindowToken wtoken) { Loading services/core/java/com/android/server/wm/WindowManagerService.java +3 −2 Original line number Diff line number Diff line Loading @@ -4807,7 +4807,8 @@ public class WindowManagerService extends IWindowManager.Stub } } public void positionTaskInStack(int taskId, int stackId, int position) { public void positionTaskInStack(int taskId, int stackId, int position, Rect bounds, Configuration config) { synchronized (mWindowMap) { if (DEBUG_STACK) Slog.i(TAG, "positionTaskInStack: positioning taskId=" + taskId + " in stackId=" + stackId + " at " + position); Loading @@ -4823,7 +4824,7 @@ public class WindowManagerService extends IWindowManager.Stub "positionTaskInStack: could not find stackId=" + stackId); return; } task.positionTaskInStack(stack, position); task.positionTaskInStack(stack, position, bounds, config); final DisplayContent displayContent = stack.getDisplayContent(); displayContent.layoutNeeded = true; mWindowPlacerLocked.performSurfacePlacement(); Loading Loading
services/core/java/com/android/server/am/ActivityStack.java +9 −3 Original line number Diff line number Diff line Loading @@ -4611,14 +4611,20 @@ final class ActivityStack { voiceInteractor); // add the task to stack first, mTaskPositioner might need the stack association addTask(task, toTop, false); if (mTaskPositioner != null) { mTaskPositioner.updateDefaultBounds(task, mTaskHistory, info.layout); } else if (mBounds != null && task.mResizeable) { if (!layoutTaskInStack(task, info.layout) && mBounds != null && task.mResizeable) { task.updateOverrideConfiguration(mBounds); } return task; } boolean layoutTaskInStack(TaskRecord task, ActivityInfo.Layout layout) { if (mTaskPositioner == null) { return false; } mTaskPositioner.updateDefaultBounds(task, mTaskHistory, layout); return true; } ArrayList<TaskRecord> getAllTasks() { return new ArrayList<>(mTaskHistory); } Loading
services/core/java/com/android/server/am/ActivityStackSupervisor.java +6 −3 Original line number Diff line number Diff line Loading @@ -3420,9 +3420,12 @@ public final class ActivityStackSupervisor implements DisplayListener { Slog.w(TAG, "positionTaskInStackLocked: no task for id=" + taskId); return; } ActivityStack stack = getStack(stackId, CREATE_IF_NEEDED, !ON_TOP); mWindowManager.positionTaskInStack(taskId, stackId, position); final ActivityStack stack = getStack(stackId, CREATE_IF_NEEDED, !ON_TOP); task.updateOverrideConfigurationForStack(stack); mWindowManager.positionTaskInStack( taskId, stackId, position, task.mBounds, task.mOverrideConfig); final boolean stackChanged = task.stack != null && task.stack != stack; if (stackChanged) { task.stack.removeTask(task, "moveTaskToStack", MOVING); Loading
services/core/java/com/android/server/am/TaskRecord.java +25 −0 Original line number Diff line number Diff line Loading @@ -1282,6 +1282,31 @@ final class TaskRecord { return !mOverrideConfig.equals(oldConfig) ? mOverrideConfig : null; } /** Updates the task's bounds and override configuration to match what is expected for the * input stack. */ void updateOverrideConfigurationForStack(ActivityStack inStack) { if (stack != null && stack == inStack) { return; } if (inStack.mStackId == FREEFORM_WORKSPACE_STACK_ID) { if (!mResizeable) { throw new IllegalArgumentException("Can not position non-resizeable task=" + this + " in stack=" + inStack); } if (mBounds != null) { return; } if (mLastNonFullscreenBounds != null) { updateOverrideConfiguration(mLastNonFullscreenBounds); } else { inStack.layoutTaskInStack(this, null); } } else { updateOverrideConfiguration(inStack.mBounds); } } /** * Returns the correct stack to use based on task type and currently set bounds, * regardless of the focused stack and current stack association of the task. Loading
services/core/java/com/android/server/wm/Task.java +2 −1 Original line number Diff line number Diff line Loading @@ -135,7 +135,7 @@ class Task implements DimLayer.DimLayerUser { stack.addTask(this, toTop); } void positionTaskInStack(TaskStack stack, int position) { void positionTaskInStack(TaskStack stack, int position, Rect bounds, Configuration config) { if (mStack != null && stack != mStack) { if (DEBUG_STACK) Slog.i(TAG, "positionTaskInStack: removing taskId=" + mTaskId + " from stack=" + mStack); Loading @@ -143,6 +143,7 @@ class Task implements DimLayer.DimLayerUser { mStack.removeTask(this); } stack.positionTask(this, position, showForAllUsers()); setBounds(bounds, config); } boolean removeAppToken(AppWindowToken wtoken) { Loading
services/core/java/com/android/server/wm/WindowManagerService.java +3 −2 Original line number Diff line number Diff line Loading @@ -4807,7 +4807,8 @@ public class WindowManagerService extends IWindowManager.Stub } } public void positionTaskInStack(int taskId, int stackId, int position) { public void positionTaskInStack(int taskId, int stackId, int position, Rect bounds, Configuration config) { synchronized (mWindowMap) { if (DEBUG_STACK) Slog.i(TAG, "positionTaskInStack: positioning taskId=" + taskId + " in stackId=" + stackId + " at " + position); Loading @@ -4823,7 +4824,7 @@ public class WindowManagerService extends IWindowManager.Stub "positionTaskInStack: could not find stackId=" + stackId); return; } task.positionTaskInStack(stack, position); task.positionTaskInStack(stack, position, bounds, config); final DisplayContent displayContent = stack.getDisplayContent(); displayContent.layoutNeeded = true; mWindowPlacerLocked.performSurfacePlacement(); Loading