From 418acc10ae4275cb94dfc118be199547e76c9c21 Mon Sep 17 00:00:00 2001 From: Chris Li Date: Wed, 17 Feb 2021 10:59:52 -0800 Subject: [PATCH] Fix non-zero window inset We support 0-width/height window to get shared edge with inset for b/150696052, but we should limit that to only 0-width/height window. This will fix the issue that in a dual-display device, when the ime is only shown on one display, the app on the other display shouldn't get the inset. Bug: 175779509 Test: atest InsetsSourceTest Change-Id: I3c73278a082b084e36be8241c20fa89fb00e405a --- core/java/android/view/InsetsSource.java | 6 +++++- .../tests/coretests/src/android/view/InsetsSourceTest.java | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/InsetsSource.java b/core/java/android/view/InsetsSource.java index 2f40bdbff05fb..5f2bccc8b8578 100644 --- a/core/java/android/view/InsetsSource.java +++ b/core/java/android/view/InsetsSource.java @@ -140,7 +140,11 @@ public class InsetsSource implements Parcelable { if (getType() == ITYPE_CAPTION_BAR) { return Insets.of(0, frame.height(), 0, 0); } - if (!getIntersection(frame, relativeFrame, mTmpFrame)) { + // Checks for whether there is shared edge with insets for 0-width/height window. + final boolean hasIntersection = relativeFrame.isEmpty() + ? getIntersection(frame, relativeFrame, mTmpFrame) + : mTmpFrame.setIntersect(frame, relativeFrame); + if (!hasIntersection) { return Insets.NONE; } diff --git a/core/tests/coretests/src/android/view/InsetsSourceTest.java b/core/tests/coretests/src/android/view/InsetsSourceTest.java index c61f33e15b183..2106b4bc5be93 100644 --- a/core/tests/coretests/src/android/view/InsetsSourceTest.java +++ b/core/tests/coretests/src/android/view/InsetsSourceTest.java @@ -168,6 +168,13 @@ public class InsetsSourceTest { assertEquals(Insets.NONE, insets); } + @Test + public void testCalculateInsetsForIme_noIntersection_horizontal() { + mImeSource.setFrame(new Rect(0, 0, 100, 500)); + Insets insets = mImeSource.calculateInsets(new Rect(100, 0, 500, 500), false); + assertEquals(Insets.NONE, insets); + } + @Test public void testCalculateInsets_zeroWidthIntersection_horizontal_start() { mSource.setFrame(new Rect(0, 0, 100, 500));