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

This commit is contained in:
Evan Rosky
2018-04-27 17:16:36 +00:00
committed by Android (Google) Code Review
5 changed files with 27 additions and 12 deletions

View File

@@ -495,7 +495,15 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu
* @hide * @hide
*/ */
public boolean tasksAreFloating() { 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;
} }
/** /**

View File

@@ -1820,7 +1820,7 @@ class TaskRecord extends ConfigurationContainer implements TaskWindowContainerLi
final StackWindowController stackController = mStack.getWindowContainerController(); final StackWindowController stackController = mStack.getWindowContainerController();
stackController.adjustConfigurationForBounds(bounds, insetBounds, stackController.adjustConfigurationForBounds(bounds, insetBounds,
mTmpNonDecorBounds, mTmpStableBounds, overrideWidth, overrideHeight, density, mTmpNonDecorBounds, mTmpStableBounds, overrideWidth, overrideHeight, density,
config, parentConfig); config, parentConfig, getWindowingMode());
} else { } else {
throw new IllegalArgumentException("Expected stack when calculating override config"); throw new IllegalArgumentException("Expected stack when calculating override config");
} }

View File

@@ -16,6 +16,7 @@
package com.android.server.wm; package com.android.server.wm;
import android.app.WindowConfiguration;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.Handler; 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, public void adjustConfigurationForBounds(Rect bounds, Rect insetBounds,
Rect nonDecorBounds, Rect stableBounds, boolean overrideWidth, Rect nonDecorBounds, Rect stableBounds, boolean overrideWidth,
boolean overrideHeight, float density, Configuration config, boolean overrideHeight, float density, Configuration config,
Configuration parentConfig) { Configuration parentConfig, int windowingMode) {
synchronized (mWindowMap) { synchronized (mWindowMap) {
final TaskStack stack = mContainer; final TaskStack stack = mContainer;
final DisplayContent displayContent = stack.getDisplayContent(); final DisplayContent displayContent = stack.getDisplayContent();
@@ -272,10 +276,10 @@ public class StackWindowController
config.windowConfiguration.setAppBounds(!bounds.isEmpty() ? bounds : null); config.windowConfiguration.setAppBounds(!bounds.isEmpty() ? bounds : null);
boolean intersectParentBounds = false; boolean intersectParentBounds = false;
if (stack.getWindowConfiguration().tasksAreFloating()) { if (WindowConfiguration.isFloating(windowingMode)) {
// Floating tasks should not be resized to the screen's bounds. // 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.width() == mTmpDisplayBounds.width()
&& bounds.height() == mTmpDisplayBounds.height()) { && bounds.height() == mTmpDisplayBounds.height()) {
// If the bounds we are animating is the same as the fullscreen stack // If the bounds we are animating is the same as the fullscreen stack
@@ -316,7 +320,7 @@ public class StackWindowController
config.screenWidthDp = width; config.screenWidthDp = width;
config.screenHeightDp = height; config.screenHeightDp = height;
config.smallestScreenWidthDp = getSmallestWidthForTaskBounds( 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 * @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 DisplayContent displayContent = mContainer.getDisplayContent();
final DisplayInfo displayInfo = displayContent.getDisplayInfo(); final DisplayInfo displayInfo = displayContent.getDisplayInfo();
@@ -350,7 +355,7 @@ public class StackWindowController
bounds.height() == displayInfo.logicalHeight)) { bounds.height() == displayInfo.logicalHeight)) {
// If the bounds are fullscreen, return the value of the fullscreen configuration // If the bounds are fullscreen, return the value of the fullscreen configuration
return displayContent.getConfiguration().smallestScreenWidthDp; 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 // For floating tasks, calculate the smallest width from the bounds of the task
return (int) (Math.min(bounds.width(), bounds.height()) / density); return (int) (Math.min(bounds.width(), bounds.height()) / density);
} else { } else {

View File

@@ -208,7 +208,8 @@ public class WindowConfigurationTests extends WindowTestsBase {
final WindowConfiguration winConfig = config.windowConfiguration; final WindowConfiguration winConfig = config.windowConfiguration;
stackController.adjustConfigurationForBounds(bounds, null /*insetBounds*/, stackController.adjustConfigurationForBounds(bounds, null /*insetBounds*/,
new Rect() /*nonDecorBounds*/, new Rect() /*stableBounds*/, false /*overrideWidth*/, 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 // Assert that both expected and actual are null or are equal to each other
assertEquals(expectedConfigBounds, winConfig.getAppBounds()); assertEquals(expectedConfigBounds, winConfig.getAppBounds());

View File

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