summaryrefslogtreecommitdiffstats
path: root/services/core/java/com/android/server/wm
diff options
context:
space:
mode:
Diffstat (limited to 'services/core/java/com/android/server/wm')
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java1
-rw-r--r--services/core/java/com/android/server/wm/TaskStack.java6
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java13
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java4
4 files changed, 19 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index f914369..5d6df26 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -238,6 +238,7 @@ class DisplayContent {
final TaskStack stack = win.getStack();
if (win.isVisibleLw() && stack != null && stack != focusedStack) {
mTmpRect.set(win.mVisibleFrame);
+ // If no intersection, we need mTmpRect to be unmodified.
mTmpRect.intersect(win.mVisibleInsets);
mTouchExcludeRegion.op(mTmpRect, Region.Op.DIFFERENCE);
}
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 7cdf8b2..4545032 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -144,7 +144,11 @@ public class TaskStack {
bounds = mTmpRect;
mFullscreen = true;
} else {
- bounds.intersect(mTmpRect); // ensure bounds are entirely within the display rect
+ // ensure bounds are entirely within the display rect
+ if (!bounds.intersect(mTmpRect)) {
+ // Can't set bounds outside the containing display.. Sorry!
+ return false;
+ }
mFullscreen = mTmpRect.equals(bounds);
}
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 5d8979f..6bc089d 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -6221,7 +6221,10 @@ public class WindowManagerService extends IWindowManager.Stub
int bottom = wf.bottom - cr.bottom;
frame.union(left, top, right, bottom);
ws.getStackBounds(stackBounds);
- frame.intersect(stackBounds);
+ if (!frame.intersect(stackBounds)) {
+ // Set frame empty if there's no intersection.
+ frame.setEmpty();
+ }
}
if (ws.mAppToken != null && ws.mAppToken.token == appToken &&
@@ -6268,12 +6271,16 @@ public class WindowManagerService extends IWindowManager.Stub
if (!includeFullDisplay) {
// Constrain frame to the screen size.
- frame.intersect(0, 0, dw, dh);
+ if (!frame.intersect(0, 0, dw, dh)) {
+ frame.setEmpty();
+ }
} else {
// Caller just wants entire display.
frame.set(0, 0, dw, dh);
}
-
+ if (frame.isEmpty()) {
+ return null;
+ }
if (width < 0) {
width = frame.width();
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 193d812..62a8420 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -534,7 +534,9 @@ final class WindowState implements WindowManagerPolicy.WindowState {
}
// Make sure the containing frame is within the content frame so we don't layout
// resized window under screen decorations.
- mContainingFrame.intersect(cf);
+ if (!mContainingFrame.intersect(cf)) {
+ mContainingFrame.set(cf);
+ }
mDisplayFrame.set(mContainingFrame);
} else {
mContainingFrame.set(pf);