Merge "Support given content insets for non-IME windows"

This commit is contained in:
Yunfan Chen
2022-01-14 07:11:27 +00:00
committed by Android (Google) Code Review
3 changed files with 31 additions and 4 deletions

View File

@@ -3581,7 +3581,8 @@ public interface WindowManager extends ViewManager {
/**
* If specified, the insets provided by this window will be our window frame minus the
* insets specified by providedInternalInsets.
* insets specified by providedInternalInsets. This should not be used together with
* {@link WindowState#mGivenContentInsets}. If both of them are set, both will be applied.
*
* @hide
*/

View File

@@ -1122,6 +1122,7 @@ public class DisplayPolicy {
if (!mNavButtonForcedVisible) {
inOutFrame.inset(windowState.getLayoutingAttrs(
displayFrames.mRotation).providedInternalInsets);
inOutFrame.inset(win.mGivenContentInsets);
}
},
@@ -1190,9 +1191,12 @@ public class DisplayPolicy {
break;
}
mDisplayContent.setInsetProvider(insetsType, win, (displayFrames,
windowState, inOutFrame) -> inOutFrame.inset(
windowState.getLayoutingAttrs(displayFrames.mRotation)
.providedInternalInsets), imeFrameProvider);
windowState, inOutFrame) -> {
inOutFrame.inset(
windowState.getLayoutingAttrs(displayFrames.mRotation)
.providedInternalInsets);
inOutFrame.inset(win.mGivenContentInsets);
}, imeFrameProvider);
mInsetsSourceWindowsExceptIme.add(win);
}
}

View File

@@ -322,4 +322,26 @@ public class DisplayPolicyTests extends WindowTestsBase {
assertFalse(navBarSource.getFrame().isEmpty());
assertTrue(imeSource.getFrame().contains(navBarSource.getFrame()));
}
@UseTestDisplay(addWindows = { W_NAVIGATION_BAR })
@Test
public void testInsetsGivenContentFrame() {
final DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy();
final DisplayInfo displayInfo = new DisplayInfo();
displayInfo.logicalWidth = 1000;
displayInfo.logicalHeight = 2000;
displayInfo.rotation = ROTATION_0;
WindowManager.LayoutParams attrs = mNavBarWindow.mAttrs;
displayPolicy.addWindowLw(mNavBarWindow, attrs);
mNavBarWindow.setRequestedSize(attrs.width, attrs.height);
mNavBarWindow.getControllableInsetProvider().setServerVisible(true);
mNavBarWindow.mGivenContentInsets.set(0, 10, 0, 0);
displayPolicy.layoutWindowLw(mNavBarWindow, null, mDisplayContent.mDisplayFrames);
final InsetsState state = mDisplayContent.getInsetsStateController().getRawInsetsState();
final InsetsSource navBarSource = state.peekSource(ITYPE_NAVIGATION_BAR);
assertEquals(attrs.height - 10, navBarSource.getFrame().height());
}
}