summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java41
1 files changed, 39 insertions, 2 deletions
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java
index 19b418662cb3..fd1c91a85d36 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java
@@ -66,6 +66,8 @@ public class WindowFrameTests {
class TaskWithBounds extends Task {
final Rect mBounds;
+ final Rect mInsetBounds = new Rect();
+ boolean mFullscreenForTest = true;
TaskWithBounds(Rect bounds) {
super(0, mStubStack, 0, sWm, null, null, false);
mBounds = bounds;
@@ -76,11 +78,11 @@ public class WindowFrameTests {
}
@Override
void getTempInsetBounds(Rect outBounds) {
- outBounds.setEmpty();
+ outBounds.set(mInsetBounds);
}
@Override
boolean isFullscreen() {
- return true;
+ return mFullscreenForTest;
}
}
@@ -237,6 +239,41 @@ public class WindowFrameTests {
assertRect(w.mFrame, 600, 600, 900, 900);
}
+ @Test
+ public void testLayoutNonfullscreenTask() {
+ final Rect taskBounds = new Rect(300, 300, 700, 700);
+ TaskWithBounds task = new TaskWithBounds(taskBounds);
+ task.mFullscreenForTest = false;
+ WindowState w = createWindow(task, FILL_PARENT, FILL_PARENT);
+ w.mAttrs.gravity = Gravity.LEFT | Gravity.TOP;
+
+ final Rect pf = new Rect(0, 0, 1000, 1000);
+ w.computeFrameLw(pf, pf, pf, pf, pf, pf, pf, null);
+ // For non fullscreen tasks the containing frame is based off the
+ // task bounds not the parent frame.
+ assertRect(w.mFrame, 300, 300, 700, 700);
+ assertRect(w.getContentFrameLw(), 300, 300, 700, 700);
+ assertRect(w.mContentInsets, 0, 0, 0, 0);
+
+ pf.set(0, 0, 1000, 1000);
+ // We still produce insets against the containing frame the same way.
+ final Rect cf = new Rect(0, 0, 500, 500);
+ w.computeFrameLw(pf, pf, pf, cf, cf, pf, cf, null);
+ assertRect(w.mFrame, 300, 300, 700, 700);
+ assertRect(w.getContentFrameLw(), 300, 300, 500, 500);
+ assertRect(w.mContentInsets, 0, 0, 200, 200);
+
+ pf.set(0, 0, 1000, 1000);
+ // However if we set temp inset bounds, the insets will be computed
+ // as if our window was laid out there, but it will be laid out according to
+ // the task bounds.
+ task.mInsetBounds.set(200, 200, 600, 600);
+ w.computeFrameLw(pf, pf, pf, cf, cf, pf, cf, null);
+ assertRect(w.mFrame, 300, 300, 700, 700);
+ assertRect(w.getContentFrameLw(), 300, 300, 600, 600);
+ assertRect(w.mContentInsets, 0, 0, 100, 100);
+ }
+
private WindowState createWindow(Task task, int width, int height) {
final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(TYPE_APPLICATION);
attrs.width = width;