Merge "Disable FLAG_LAYOUT_NO_LIMITS window flag in multi-window mode" into nyc-dev
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index b011414..34e81fc 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -405,6 +405,12 @@
* not attached to any stack.
*/
int getStackId();
+
+ /**
+ * Returns true if the window is current in multi-windowing mode. i.e. it shares the
+ * screen with other application windows.
+ */
+ public boolean inMultiWindowMode();
}
/**
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 9af1304..0115a08 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -4635,7 +4635,9 @@
}
// TYPE_SYSTEM_ERROR is above the NavigationBar so it can't be allowed to extend over it.
- if ((fl & FLAG_LAYOUT_NO_LIMITS) != 0 && attrs.type != TYPE_SYSTEM_ERROR) {
+ // Also, we don't allow windows in multi-window mode to extend out of the screen.
+ if ((fl & FLAG_LAYOUT_NO_LIMITS) != 0 && attrs.type != TYPE_SYSTEM_ERROR
+ && !win.inMultiWindowMode()) {
df.left = df.top = -10000;
df.right = df.bottom = 10000;
if (attrs.type != TYPE_WALLPAPER) {
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 910788e..aff668b 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -642,7 +642,7 @@
mHaveFrame = true;
final Task task = getTask();
- final boolean fullscreenTask = task == null || task.isFullscreen();
+ final boolean fullscreenTask = !inMultiWindowMode();
final boolean windowsAreFloating = task != null && task.isFloating();
if (fullscreenTask || (isChildWindow()
@@ -2215,6 +2215,12 @@
return task != null && task.inFreeformWorkspace();
}
+ @Override
+ public boolean inMultiWindowMode() {
+ final Task task = getTask();
+ return task != null && !task.isFullscreen();
+ }
+
boolean isDragResizeChanged() {
return mDragResizing != computeDragResizing();
}
@@ -2506,9 +2512,8 @@
final int pw = mContainingFrame.width();
final int ph = mContainingFrame.height();
final Task task = getTask();
- final boolean nonFullscreenTask = task != null && !task.isFullscreen();
- final boolean fitToDisplay = task != null &&
- !task.isFloating();
+ final boolean nonFullscreenTask = inMultiWindowMode();
+ final boolean fitToDisplay = task != null && !task.isFloating();
float x, y;
int w,h;