Revert "Revert "Make extra navigation bar count towards non decor frame (3/3)""

This reverts commit aa0e31a7d2.

Reason for revert: This is still needed to avoid compatibility issue on taskbar devices.

Test: CtsWidgetTestCases, InputMethodServiceTest
Test: android.platform.test.scenario, ViewTests
Bug: 236927938
Bug: 233945217

Change-Id: I4527a15ddc26ffc43f19267d194b4bf6af2696b8
This commit is contained in:
Yunfan Chen
2023-01-19 05:24:41 +00:00
parent 52f1ceecfa
commit 2c9d5a5ea5

View File

@@ -2006,7 +2006,8 @@ public class DisplayPolicy {
dc.getDisplayPolicy().simulateLayoutDisplay(df);
final InsetsState insetsState = df.mInsetsState;
final Rect displayFrame = insetsState.getDisplayFrame();
final Insets decor = calculateDecorInsetsWithInternalTypes(insetsState);
final Insets decor = insetsState.calculateInsets(displayFrame, DECOR_TYPES,
true /* ignoreVisibility */);
final Insets statusBar = insetsState.calculateInsets(displayFrame,
Type.statusBars(), true /* ignoreVisibility */);
mNonDecorInsets.set(decor.left, decor.top, decor.right, decor.bottom);
@@ -2038,17 +2039,8 @@ public class DisplayPolicy {
}
}
// TODO (b/235842600): Use public type once we can treat task bar as navigation bar.
static final int[] INTERNAL_DECOR_TYPES;
static {
final ArraySet<Integer> 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);
}
}
static final int DECOR_TYPES = Type.displayCutout() | Type.navigationBars();
private final DisplayContent mDisplayContent;
private final Info[] mInfoForRotation = new Info[4];
@@ -2075,20 +2067,6 @@ 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;
}
}
/**