diff options
| author | 2018-08-31 13:07:33 -0700 | |
|---|---|---|
| committer | 2018-08-31 20:29:55 +0000 | |
| commit | 49c27ffb35012f66a8c3b4484a804c9dfccd374f (patch) | |
| tree | dc7d3a2e6629411a3597238d9eda37e2fc1ce265 /services | |
| parent | c72888de5dec8327da3d1a8d328f2c92a629d91e (diff) | |
WM: Fix DisplayCutout computation in WindowState.computeFrameLw
Fixes an issue where we took the wrong WindowFrame.mFrame when
computing the DisplayCutout for the window state.
Fixes: 113272819
Test: atest WindowStateTests DisplayCutoutTests
Change-Id: Ida409591608e35fe993d0228da2fcb4f7eb25d5a
Diffstat (limited to 'services')
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowState.java | 3 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java | 20 |
2 files changed, 21 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 97313f2891c3..d5203185064e 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1113,9 +1113,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mWindowFrames.mFrame.bottom - mWindowFrames.mStableFrame.bottom, 0)); } - mWindowFrames.setDisplayCutout( - windowFrames.mDisplayCutout.calculateRelativeTo(windowFrames.mFrame)); + windowFrames.mDisplayCutout.calculateRelativeTo(mWindowFrames.mFrame)); // Offset the actual frame by the amount layout frame is off. mWindowFrames.mFrame.offset(-layoutXDiff, -layoutYDiff); diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java index 5a42a848ef92..b43d9a671751 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java @@ -50,13 +50,19 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import android.graphics.Matrix; +import android.graphics.Rect; import android.platform.test.annotations.Presubmit; +import android.util.Size; +import android.view.DisplayCutout; import android.view.SurfaceControl; import android.view.WindowManager; +import com.android.server.wm.utils.WmDisplayCutout; + import org.junit.Test; import org.junit.runner.RunWith; +import java.util.Arrays; import java.util.LinkedList; import androidx.test.filters.FlakyTest; @@ -382,6 +388,20 @@ public class WindowStateTests extends WindowTestsBase { } } + @Test + public void testDisplayCutoutIsCalculatedRelativeToFrame() { + final WindowState app = createWindow(null, TYPE_APPLICATION, "app"); + WindowFrames wf = new WindowFrames(); + wf.mParentFrame.set(7, 10, 185, 380); + wf.mDisplayFrame.set(wf.mParentFrame); + final DisplayCutout cutout = new DisplayCutout(new Rect(0, 15, 0, 22), + Arrays.asList(new Rect(95, 0, 105, 15), new Rect(95, 378, 105, 400))); + wf.setDisplayCutout(new WmDisplayCutout(cutout, new Size(200, 400))); + + app.computeFrameLw(wf); + assertThat(app.getWmDisplayCutout().getDisplayCutout(), is(cutout.inset(7, 10, 5, 20))); + } + private void testPrepareWindowToDisplayDuringRelayout(boolean wasVisible) { reset(mPowerManagerWrapper); final WindowState root = createWindow(null, TYPE_APPLICATION, "root"); |