Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 58a32f31 authored by Wale Ogunwale's avatar Wale Ogunwale Committed by Android (Google) Code Review
Browse files

Merge "Properly size tasks based on stack size."

parents 3be3aedb a6e902ec
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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;
    }
+11 −14
Original line number Diff line number Diff line
@@ -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);
            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);
        }
        }
        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,
+1 −1
Original line number Diff line number Diff line
@@ -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;
        }
+2 −10
Original line number Diff line number Diff line
@@ -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?");
+2 −3
Original line number Diff line number Diff line
@@ -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();