[DO NOT MERGE] Force extra nav bar provide side gesture insets

This is a patch to fix the missing gesture insets issue when there's a
task bar and no navigation bar on the display. It will try to add the
gesture navigation insets when a window providing navigation bar insets
is added and there's no window with TYPE_NAVIGATION_BAR.

The logic will only be applied when the insets is not flexible. Due to
the removal of the old hard-coded logic in the later version, this patch
should not be merged into the next version.

Bug: 212643340
Test: android.widget.cts.SeekBarTest#testSetOnSeekBarChangeListener
Change-Id: I080df3547361aef1aa259dd2b3dc9bdb860a0193
This commit is contained in:
Yunfan Chen
2022-04-19 17:13:22 +09:00
parent 5d67417470
commit 1921f8c1dc

View File

@@ -188,6 +188,7 @@ public class DisplayPolicy {
private static final String TAG = TAG_WITH_CLASS_NAME ? "DisplayPolicy" : TAG_WM; private static final String TAG = TAG_WITH_CLASS_NAME ? "DisplayPolicy" : TAG_WM;
private static final boolean ALTERNATE_CAR_MODE_NAV_SIZE = false; private static final boolean ALTERNATE_CAR_MODE_NAV_SIZE = false;
private static final boolean LEGACY_TASKBAR_GESTURE_INSETS = false;
// The panic gesture may become active only after the keyguard is dismissed and the immersive // The panic gesture may become active only after the keyguard is dismissed and the immersive
// app shows again. If that doesn't happen for 30s we drop the gesture. // app shows again. If that doesn't happen for 30s we drop the gesture.
@@ -1275,6 +1276,35 @@ public class DisplayPolicy {
if (!INSETS_LAYOUT_GENERALIZATION) { if (!INSETS_LAYOUT_GENERALIZATION) {
mDisplayContent.setInsetProvider(insetsType, win, null, mDisplayContent.setInsetProvider(insetsType, win, null,
imeFrameProvider); imeFrameProvider);
if (LEGACY_TASKBAR_GESTURE_INSETS) {
if (mNavigationBar == null && (insetsType == ITYPE_NAVIGATION_BAR
|| insetsType == ITYPE_EXTRA_NAVIGATION_BAR)) {
mDisplayContent.setInsetProvider(ITYPE_LEFT_GESTURES, win,
(displayFrames, windowState, inOutFrame) -> {
final int leftSafeInset =
Math.max(displayFrames.mDisplayCutoutSafe
.left,
0);
inOutFrame.left = 0;
inOutFrame.top = 0;
inOutFrame.bottom = displayFrames.mDisplayHeight;
inOutFrame.right =
leftSafeInset + mLeftGestureInset;
});
mDisplayContent.setInsetProvider(ITYPE_RIGHT_GESTURES, win,
(displayFrames, windowState, inOutFrame) -> {
final int rightSafeInset =
Math.min(displayFrames.mDisplayCutoutSafe
.right,
displayFrames.mUnrestricted.right);
inOutFrame.left =
rightSafeInset - mRightGestureInset;
inOutFrame.top = 0;
inOutFrame.bottom = displayFrames.mDisplayHeight;
inOutFrame.right = displayFrames.mDisplayWidth;
});
}
}
} else { } else {
mDisplayContent.setInsetProvider(insetsType, win, (displayFrames, mDisplayContent.setInsetProvider(insetsType, win, (displayFrames,
windowState, inOutFrame) -> inOutFrame.inset( windowState, inOutFrame) -> inOutFrame.inset(