Merge "Properly size tasks based on stack size."
This commit is contained in:
committed by
Android (Google) Code Review
commit
58a32f3155
@@ -4564,6 +4564,8 @@ final class ActivityStack {
|
||||
addTask(task, toTop, false);
|
||||
if (mTaskPositioner != null) {
|
||||
mTaskPositioner.updateDefaultBounds(task, mTaskHistory, info.initialLayout);
|
||||
} else if (mBounds != null && task.mResizeable) {
|
||||
task.updateOverrideConfiguration(mBounds);
|
||||
}
|
||||
return task;
|
||||
}
|
||||
|
||||
@@ -2971,31 +2971,29 @@ public final class ActivityStackSupervisor implements DisplayListener {
|
||||
}
|
||||
|
||||
ActivityRecord r = stack.topRunningActivityLocked(null);
|
||||
final boolean resizeTasks = r != null && r.task.mResizeable;
|
||||
|
||||
mTmpBounds.clear();
|
||||
mTmpConfigs.clear();
|
||||
if (resizeTasks) {
|
||||
ArrayList<TaskRecord> tasks = stack.getAllTasks();
|
||||
for (int i = tasks.size() - 1; i >= 0; i--) {
|
||||
TaskRecord task = tasks.get(i);
|
||||
ArrayList<TaskRecord> tasks = stack.getAllTasks();
|
||||
for (int i = tasks.size() - 1; i >= 0; i--) {
|
||||
TaskRecord task = tasks.get(i);
|
||||
if (task.mResizeable) {
|
||||
if (stack.mStackId == FREEFORM_WORKSPACE_STACK_ID) {
|
||||
// For freeform stack we don't adjust the size of the tasks to match that of
|
||||
// the stack, but we do try to make sure the tasks are still contained with the
|
||||
// bounds of the stack.
|
||||
// For freeform stack we don't adjust the size of the tasks to match that
|
||||
// of the stack, but we do try to make sure the tasks are still contained
|
||||
// with the bounds of the stack.
|
||||
tempRect2.set(task.mBounds);
|
||||
fitWithinBounds(tempRect2, bounds);
|
||||
task.updateOverrideConfiguration(tempRect2);
|
||||
} else {
|
||||
task.updateOverrideConfiguration(bounds);
|
||||
}
|
||||
|
||||
mTmpConfigs.put(task.taskId, task.mOverrideConfig);
|
||||
mTmpBounds.put(task.taskId, task.mBounds);
|
||||
}
|
||||
|
||||
mTmpConfigs.put(task.taskId, task.mOverrideConfig);
|
||||
mTmpBounds.put(task.taskId, task.mBounds);
|
||||
}
|
||||
stack.mFullscreen = mWindowManager.resizeStack(stackId, bounds, resizeTasks, mTmpConfigs,
|
||||
mTmpBounds);
|
||||
stack.mFullscreen = mWindowManager.resizeStack(stackId, bounds, mTmpConfigs, mTmpBounds);
|
||||
if (stack.mStackId == DOCKED_STACK_ID) {
|
||||
// Dock stack funness...Yay!
|
||||
if (stack.mFullscreen) {
|
||||
@@ -3008,7 +3006,6 @@ public final class ActivityStackSupervisor implements DisplayListener {
|
||||
}
|
||||
}
|
||||
|
||||
final ArrayList<TaskRecord> tasks = stack.getAllTasks();
|
||||
final int count = tasks.size();
|
||||
for (int i = 0; i < count; i++) {
|
||||
moveTaskToStackLocked(tasks.get(i).taskId,
|
||||
|
||||
@@ -1235,7 +1235,7 @@ final class TaskRecord {
|
||||
if (stack == null
|
||||
|| stack.mStackId == HOME_STACK_ID
|
||||
|| stack.mStackId == FULLSCREEN_WORKSPACE_STACK_ID) {
|
||||
return null;
|
||||
return (mResizeable && stack != null) ? stack.mBounds : null;
|
||||
} else if (stack.mStackId == DOCKED_STACK_ID) {
|
||||
return stack.mBounds;
|
||||
}
|
||||
|
||||
@@ -118,30 +118,22 @@ public class TaskStack implements DimLayer.DimLayerUser {
|
||||
/**
|
||||
* Set the bounds of the stack and its containing tasks.
|
||||
* @param stackBounds New stack bounds. Passing in null sets the bounds to fullscreen.
|
||||
* @param resizeTasks If true, the tasks within the stack will also be resized.
|
||||
* @param configs Configuration for individual tasks, keyed by task id.
|
||||
* @param taskBounds Bounds for individual tasks, keyed by task id.
|
||||
* @return True if the stack bounds was changed.
|
||||
* */
|
||||
boolean setBounds(Rect stackBounds, boolean resizeTasks, SparseArray<Configuration> configs,
|
||||
SparseArray<Rect> taskBounds) {
|
||||
boolean setBounds(
|
||||
Rect stackBounds, SparseArray<Configuration> configs, SparseArray<Rect> taskBounds) {
|
||||
if (!setBounds(stackBounds)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!resizeTasks) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Update bounds of containing tasks.
|
||||
for (int taskNdx = mTasks.size() - 1; taskNdx >= 0; --taskNdx) {
|
||||
final Task task = mTasks.get(taskNdx);
|
||||
Configuration config = configs.get(task.mTaskId);
|
||||
if (config != null) {
|
||||
Rect bounds = taskBounds.get(task.mTaskId);
|
||||
if (bounds == null) {
|
||||
bounds = stackBounds;
|
||||
}
|
||||
task.setBounds(bounds, config);
|
||||
} else {
|
||||
Slog.wtf(TAG, "No config for task: " + task + ", is there a mismatch with AM?");
|
||||
|
||||
@@ -4632,12 +4632,11 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
* Re-sizes a stack and its containing tasks.
|
||||
* @param stackId Id of stack to resize.
|
||||
* @param bounds New stack bounds. Passing in null sets the bounds to fullscreen.
|
||||
* @param resizeTasks If true, the tasks within the stack will also be resized.
|
||||
* @param configs Configurations for tasks in the resized stack, keyed by task id.
|
||||
* @param taskBounds Bounds for tasks in the resized stack, keyed by task id.
|
||||
* @return True if the stack is now fullscreen.
|
||||
* */
|
||||
public boolean resizeStack(int stackId, Rect bounds, boolean resizeTasks,
|
||||
public boolean resizeStack(int stackId, Rect bounds,
|
||||
SparseArray<Configuration> configs, SparseArray<Rect> taskBounds) {
|
||||
synchronized (mWindowMap) {
|
||||
final TaskStack stack = mStackIdToStack.get(stackId);
|
||||
@@ -4645,7 +4644,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
throw new IllegalArgumentException("resizeStack: stackId " + stackId
|
||||
+ " not found.");
|
||||
}
|
||||
if (stack.setBounds(bounds, resizeTasks, configs, taskBounds)) {
|
||||
if (stack.setBounds(bounds, configs, taskBounds)) {
|
||||
stack.resizeWindows();
|
||||
stack.getDisplayContent().layoutNeeded = true;
|
||||
mWindowPlacerLocked.performSurfacePlacement();
|
||||
|
||||
Reference in New Issue
Block a user