From e8f7e70ebdfa5fb2308b08a655c03c6e4907933f Mon Sep 17 00:00:00 2001 From: Yunfan Chen Date: Thu, 12 May 2022 19:01:03 +0900 Subject: [PATCH] Do not override insets frame if not set Only set imeFrameProvider if the value is set in the base layout params. This will improve the performance as the null provider can be skipped, in the meanwhile, it will fix an error where the ime frame is accidentally overridden. Test: KeyboardVisibilityControlTest (CTS, on auto builds) Bug: 229346670 Change-Id: Iaf6298e81c92b8dd221cae79e6391799b8023e95 --- .../com/android/server/wm/DisplayPolicy.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index d62bcdfd446b9..1d3a318fdaa88 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -1190,7 +1190,8 @@ public class DisplayPolicy { if (attrs.providesInsetsTypes != null) { for (@InternalInsetsType int insetsType : attrs.providesInsetsTypes) { final TriConsumer imeFrameProvider = - (displayFrames, windowContainer, inOutFrame) -> { + win.getAttrs().providedInternalImeInsets != null + ? (displayFrames, windowContainer, inOutFrame) -> { final Insets[] providedInternalImeInsets = win.getLayoutingAttrs(displayFrames.mRotation) .providedInternalImeInsets; @@ -1199,7 +1200,7 @@ public class DisplayPolicy { && providedInternalImeInsets[insetsType] != null) { inOutFrame.inset(providedInternalImeInsets[insetsType]); } - }; + } : null; switch (insetsType) { case ITYPE_STATUS_BAR: mStatusBarAlt = win; @@ -1218,17 +1219,18 @@ public class DisplayPolicy { mExtraNavBarAltPosition = getAltBarPosition(attrs); break; } - mDisplayContent.setInsetProvider(insetsType, win, (displayFrames, - windowContainer, inOutFrame) -> { - final Insets[] providedInternalInsets = win.getLayoutingAttrs( - displayFrames.mRotation).providedInternalInsets; - if (providedInternalInsets != null - && providedInternalInsets.length > insetsType - && providedInternalInsets[insetsType] != null) { - inOutFrame.inset(providedInternalInsets[insetsType]); - } - inOutFrame.inset(win.mGivenContentInsets); - }, imeFrameProvider); + mDisplayContent.setInsetProvider(insetsType, win, + win.getAttrs().providedInternalInsets != null ? (displayFrames, + windowContainer, inOutFrame) -> { + final Insets[] providedInternalInsets = win.getLayoutingAttrs( + displayFrames.mRotation).providedInternalInsets; + if (providedInternalInsets != null + && providedInternalInsets.length > insetsType + && providedInternalInsets[insetsType] != null) { + inOutFrame.inset(providedInternalInsets[insetsType]); + } + inOutFrame.inset(win.mGivenContentInsets); + } : null, imeFrameProvider); mInsetsSourceWindowsExceptIme.add(win); } }