From 6f2f542365fe5ee8733fc3c8fc4173abeca66f5c Mon Sep 17 00:00:00 2001 From: Jordan Demeulenaere Date: Thu, 9 Feb 2023 09:36:27 +0000 Subject: [PATCH] Revert "Revert "Revert "Make extra navigation bar count towards non decor frame (3/3)""" This reverts commit 2c9d5a5ea584cb5396c566435f9a120ff4e02ca8. Reason for revert: This broke SystemUI screenshot tests, see b/267764961#comment11 Change-Id: I0372e5bcab10a73658c92ae03243da767def1e86 --- .../com/android/server/wm/DisplayPolicy.java | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index f57de727dbf5f..0bb4022d92899 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -2006,8 +2006,7 @@ public class DisplayPolicy { dc.getDisplayPolicy().simulateLayoutDisplay(df); final InsetsState insetsState = df.mInsetsState; final Rect displayFrame = insetsState.getDisplayFrame(); - final Insets decor = insetsState.calculateInsets(displayFrame, DECOR_TYPES, - true /* ignoreVisibility */); + final Insets decor = calculateDecorInsetsWithInternalTypes(insetsState); final Insets statusBar = insetsState.calculateInsets(displayFrame, Type.statusBars(), true /* ignoreVisibility */); mNonDecorInsets.set(decor.left, decor.top, decor.right, decor.bottom); @@ -2039,8 +2038,17 @@ public class DisplayPolicy { } } - - static final int DECOR_TYPES = Type.displayCutout() | Type.navigationBars(); + // TODO (b/235842600): Use public type once we can treat task bar as navigation bar. + static final int[] INTERNAL_DECOR_TYPES; + static { + final ArraySet decorTypes = InsetsState.toInternalType( + Type.displayCutout() | Type.navigationBars()); + decorTypes.remove(ITYPE_EXTRA_NAVIGATION_BAR); + INTERNAL_DECOR_TYPES = new int[decorTypes.size()]; + for (int i = 0; i < INTERNAL_DECOR_TYPES.length; i++) { + INTERNAL_DECOR_TYPES[i] = decorTypes.valueAt(i); + } + } private final DisplayContent mDisplayContent; private final Info[] mInfoForRotation = new Info[4]; @@ -2067,6 +2075,20 @@ public class DisplayPolicy { info.mNeedUpdate = true; } } + + // TODO (b/235842600): Remove this method once we can treat task bar as navigation bar. + private static Insets calculateDecorInsetsWithInternalTypes(InsetsState state) { + final Rect frame = state.getDisplayFrame(); + Insets insets = Insets.NONE; + for (int i = INTERNAL_DECOR_TYPES.length - 1; i >= 0; i--) { + final InsetsSource source = state.peekSource(INTERNAL_DECOR_TYPES[i]); + if (source != null) { + insets = Insets.max(source.calculateInsets(frame, true /* ignoreVisibility */), + insets); + } + } + return insets; + } } /**