Loading services/core/java/com/android/server/wm/TaskStack.java +3 −2 Original line number Diff line number Diff line Loading @@ -751,8 +751,9 @@ public class TaskStack extends WindowContainer<Task> implements * Used to make room for shadows in the pinned windowing mode. */ int getStackOutset() { if (inPinnedWindowingMode()) { final DisplayMetrics displayMetrics = getDisplayContent().getDisplayMetrics(); DisplayContent displayContent = getDisplayContent(); if (inPinnedWindowingMode() && displayContent != null) { final DisplayMetrics displayMetrics = displayContent.getDisplayMetrics(); // We multiply by two to match the client logic for converting view elevation // to insets, as in {@link WindowManager.LayoutParams#setSurfaceInsets} Loading services/core/java/com/android/server/wm/WindowContainer.java +1 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< // build a surface. mSurfaceControl = makeSurface().build(); getPendingTransaction().show(mSurfaceControl); updateSurfacePosition(); } else { // If we have a surface but a new parent, we just need to perform a reparent. Go through // surface animator such that hierarchy is preserved when animating, i.e. Loading services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java +44 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.server.wm; import android.support.test.filters.FlakyTest; import android.view.SurfaceControl; import android.view.SurfaceSession; import org.junit.Test; import org.junit.runner.RunWith; Loading @@ -43,6 +45,9 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyFloat; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; Loading Loading @@ -107,6 +112,21 @@ public class WindowContainerTests extends WindowTestsBase { assertTrue(layer0.mOnParentSetCalled); } @Test public void testAddChildSetsSurfacePosition() throws Exception { MockSurfaceBuildingContainer top = new MockSurfaceBuildingContainer(); final SurfaceControl.Transaction transaction = mock(SurfaceControl.Transaction.class); sWm.mTransactionFactory = () -> transaction; WindowContainer child = new WindowContainer(sWm); child.setBounds(1, 1, 10, 10); verify(transaction, never()).setPosition(any(), anyFloat(), anyFloat()); top.addChild(child, 0); verify(transaction, times(1)).setPosition(any(), eq(1.f), eq(1.f)); } @Test public void testAdd_AlreadyHasParent() throws Exception { final TestWindowContainerBuilder builder = new TestWindowContainerBuilder(); Loading Loading @@ -825,4 +845,28 @@ public class WindowContainerTests extends WindowTestsBase { return new TestWindowContainer(mLayer, mIsAnimating, mIsVisible, mOrientation); } } private class MockSurfaceBuildingContainer extends WindowContainer<WindowContainer> { final SurfaceSession mSession = new SurfaceSession(); MockSurfaceBuildingContainer() { super(sWm); } class MockSurfaceBuilder extends SurfaceControl.Builder { MockSurfaceBuilder(SurfaceSession ss) { super(ss); } @Override public SurfaceControl build() { return mock(SurfaceControl.class); } } @Override SurfaceControl.Builder makeChildSurface(WindowContainer child) { return new MockSurfaceBuilder(mSession); } } } Loading
services/core/java/com/android/server/wm/TaskStack.java +3 −2 Original line number Diff line number Diff line Loading @@ -751,8 +751,9 @@ public class TaskStack extends WindowContainer<Task> implements * Used to make room for shadows in the pinned windowing mode. */ int getStackOutset() { if (inPinnedWindowingMode()) { final DisplayMetrics displayMetrics = getDisplayContent().getDisplayMetrics(); DisplayContent displayContent = getDisplayContent(); if (inPinnedWindowingMode() && displayContent != null) { final DisplayMetrics displayMetrics = displayContent.getDisplayMetrics(); // We multiply by two to match the client logic for converting view elevation // to insets, as in {@link WindowManager.LayoutParams#setSurfaceInsets} Loading
services/core/java/com/android/server/wm/WindowContainer.java +1 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< // build a surface. mSurfaceControl = makeSurface().build(); getPendingTransaction().show(mSurfaceControl); updateSurfacePosition(); } else { // If we have a surface but a new parent, we just need to perform a reparent. Go through // surface animator such that hierarchy is preserved when animating, i.e. Loading
services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java +44 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.server.wm; import android.support.test.filters.FlakyTest; import android.view.SurfaceControl; import android.view.SurfaceSession; import org.junit.Test; import org.junit.runner.RunWith; Loading @@ -43,6 +45,9 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyFloat; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; Loading Loading @@ -107,6 +112,21 @@ public class WindowContainerTests extends WindowTestsBase { assertTrue(layer0.mOnParentSetCalled); } @Test public void testAddChildSetsSurfacePosition() throws Exception { MockSurfaceBuildingContainer top = new MockSurfaceBuildingContainer(); final SurfaceControl.Transaction transaction = mock(SurfaceControl.Transaction.class); sWm.mTransactionFactory = () -> transaction; WindowContainer child = new WindowContainer(sWm); child.setBounds(1, 1, 10, 10); verify(transaction, never()).setPosition(any(), anyFloat(), anyFloat()); top.addChild(child, 0); verify(transaction, times(1)).setPosition(any(), eq(1.f), eq(1.f)); } @Test public void testAdd_AlreadyHasParent() throws Exception { final TestWindowContainerBuilder builder = new TestWindowContainerBuilder(); Loading Loading @@ -825,4 +845,28 @@ public class WindowContainerTests extends WindowTestsBase { return new TestWindowContainer(mLayer, mIsAnimating, mIsVisible, mOrientation); } } private class MockSurfaceBuildingContainer extends WindowContainer<WindowContainer> { final SurfaceSession mSession = new SurfaceSession(); MockSurfaceBuildingContainer() { super(sWm); } class MockSurfaceBuilder extends SurfaceControl.Builder { MockSurfaceBuilder(SurfaceSession ss) { super(ss); } @Override public SurfaceControl build() { return mock(SurfaceControl.class); } } @Override SurfaceControl.Builder makeChildSurface(WindowContainer child) { return new MockSurfaceBuilder(mSession); } } }