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

Commit a5ed4289 authored by Evan Rosky's avatar Evan Rosky Committed by android-build-merger
Browse files

Merge "Use correct windowingMode when computing override config" into pi-dev

am: fb699bcf

Change-Id: Ide9d748d676b73dd4b91072f7d4c57314ec46618
parents 6ec073b7 fb699bcf
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -495,7 +495,15 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu
     * @hide
     */
    public boolean tasksAreFloating() {
        return mWindowingMode == WINDOWING_MODE_FREEFORM || mWindowingMode == WINDOWING_MODE_PINNED;
        return isFloating(mWindowingMode);
    }

    /**
     * Returns true if the windowingMode represents a floating window.
     * @hide
     */
    public static boolean isFloating(int windowingMode) {
        return windowingMode == WINDOWING_MODE_FREEFORM || windowingMode == WINDOWING_MODE_PINNED;
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -1820,7 +1820,7 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi
            final StackWindowController stackController = mStack.getWindowContainerController();
            stackController.adjustConfigurationForBounds(bounds, insetBounds,
                    mTmpNonDecorBounds, mTmpStableBounds, overrideWidth, overrideHeight, density,
                    config, parentConfig);
                    config, parentConfig, getWindowingMode());
        } else {
            throw new IllegalArgumentException("Expected stack when calculating override config");
        }
+13 −8
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.wm;

import android.app.WindowConfiguration;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Handler;
@@ -244,12 +245,15 @@ public class StackWindowController
    }

    /**
     * Adjusts the screen size in dp's for the {@param config} for the given params.
     * Adjusts the screen size in dp's for the {@param config} for the given params. The provided
     * params represent the desired state of a configuration change. Since this utility is used
     * before mContainer has been updated, any relevant properties (like {@param windowingMode})
     * need to be passed in.
     */
    public void adjustConfigurationForBounds(Rect bounds, Rect insetBounds,
            Rect nonDecorBounds, Rect stableBounds, boolean overrideWidth,
            boolean overrideHeight, float density, Configuration config,
            Configuration parentConfig) {
            Configuration parentConfig, int windowingMode) {
        synchronized (mWindowMap) {
            final TaskStack stack = mContainer;
            final DisplayContent displayContent = stack.getDisplayContent();
@@ -272,10 +276,10 @@ public class StackWindowController
            config.windowConfiguration.setAppBounds(!bounds.isEmpty() ? bounds : null);
            boolean intersectParentBounds = false;

            if (stack.getWindowConfiguration().tasksAreFloating()) {
            if (WindowConfiguration.isFloating(windowingMode)) {
                // Floating tasks should not be resized to the screen's bounds.

                if (stack.inPinnedWindowingMode()
                if (windowingMode == WindowConfiguration.WINDOWING_MODE_PINNED
                        && bounds.width() == mTmpDisplayBounds.width()
                        && bounds.height() == mTmpDisplayBounds.height()) {
                    // If the bounds we are animating is the same as the fullscreen stack
@@ -316,7 +320,7 @@ public class StackWindowController
            config.screenWidthDp = width;
            config.screenHeightDp = height;
            config.smallestScreenWidthDp = getSmallestWidthForTaskBounds(
                    insetBounds != null ? insetBounds : bounds, density);
                    insetBounds != null ? insetBounds : bounds, density, windowingMode);
        }
    }

@@ -338,11 +342,12 @@ public class StackWindowController
    }

    /**
     * Calculates the smallest width for a task given the {@param bounds}.
     * Calculates the smallest width for a task given the target {@param bounds} and
     * {@param windowingMode}. Avoid using values from mContainer since they can be out-of-date.
     *
     * @return the smallest width to be used in the Configuration, in dips
     */
    private int getSmallestWidthForTaskBounds(Rect bounds, float density) {
    private int getSmallestWidthForTaskBounds(Rect bounds, float density, int windowingMode) {
        final DisplayContent displayContent = mContainer.getDisplayContent();
        final DisplayInfo displayInfo = displayContent.getDisplayInfo();

@@ -350,7 +355,7 @@ public class StackWindowController
                bounds.height() == displayInfo.logicalHeight)) {
            // If the bounds are fullscreen, return the value of the fullscreen configuration
            return displayContent.getConfiguration().smallestScreenWidthDp;
        } else if (mContainer.getWindowConfiguration().tasksAreFloating()) {
        } else if (WindowConfiguration.isFloating(windowingMode)) {
            // For floating tasks, calculate the smallest width from the bounds of the task
            return (int) (Math.min(bounds.width(), bounds.height()) / density);
        } else {
+2 −1
Original line number Diff line number Diff line
@@ -208,7 +208,8 @@ public class WindowConfigurationTests extends WindowTestsBase {
        final WindowConfiguration winConfig = config.windowConfiguration;
        stackController.adjustConfigurationForBounds(bounds, null /*insetBounds*/,
                new Rect() /*nonDecorBounds*/, new Rect() /*stableBounds*/, false /*overrideWidth*/,
                false /*overrideHeight*/, mDisplayInfo.logicalDensityDpi, config, parentConfig);
                false /*overrideHeight*/, mDisplayInfo.logicalDensityDpi, config, parentConfig,
                windowingMode);
        // Assert that both expected and actual are null or are equal to each other

        assertEquals(expectedConfigBounds, winConfig.getAppBounds());
+2 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import static com.android.server.wm.WindowContainer.POSITION_TOP;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyBoolean;
import static org.mockito.Mockito.anyFloat;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -72,7 +73,7 @@ public class WindowTestUtils {
            config.windowConfiguration.setBounds(bounds);
            return null;
        }).when(controller).adjustConfigurationForBounds(any(), any(), any(), any(),
                anyBoolean(), anyBoolean(), anyFloat(), any(), any());
                anyBoolean(), anyBoolean(), anyFloat(), any(), any(), anyInt());

        return controller;
    }