[Bouncer] Add min margin bottom for window inset.

In device, we sometimes get 0 padding bottom. We want to make sure that
we have a minimum set margin bottom.

Bug: 228961690
Test: Manual on device
Change-Id: Iaaea1d65cd1f8df209081055c289310f2b8d9f07
This commit is contained in:
Aaron Liu
2022-04-12 17:58:06 +00:00
parent cab274dcef
commit a32705f39c
3 changed files with 32 additions and 20 deletions

View File

@@ -38,6 +38,9 @@
<!-- Margin around the various security views -->
<dimen name="keyguard_security_view_top_margin">8dp</dimen>
<!-- Minimum bottom margin under the security view -->
<dimen name="keyguard_security_view_bottom_margin">60dp</dimen>
<dimen name="keyguard_eca_top_margin">18dp</dimen>
<dimen name="keyguard_eca_bottom_margin">12dp</dimen>

View File

@@ -555,7 +555,9 @@ public class KeyguardSecurityContainer extends FrameLayout {
int bottomInset = insets.getInsetsIgnoringVisibility(systemBars()).bottom;
int imeInset = insets.getInsets(ime()).bottom;
int inset = max(bottomInset, imeInset);
setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight(), inset);
int paddingBottom = max(inset, getContext().getResources()
.getDimensionPixelSize(R.dimen.keyguard_security_view_bottom_margin));
setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight(), paddingBottom);
return insets.inset(0, 0, 0, inset);
}

View File

@@ -70,9 +70,8 @@ import java.util.ArrayList;
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper()
public class KeyguardSecurityContainerTest extends SysuiTestCase {
private static final int SCREEN_WIDTH = 1600;
private static final int FAKE_MEASURE_SPEC =
View.MeasureSpec.makeMeasureSpec(SCREEN_WIDTH, View.MeasureSpec.EXACTLY);
private int mScreenWidth;
private int mFakeMeasureSpec;
@Rule
public MockitoRule mRule = MockitoJUnit.rule();
@@ -114,6 +113,10 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
when(mUserSwitcherController.getKeyguardStateController())
.thenReturn(mKeyguardStateController);
when(mKeyguardStateController.isShowing()).thenReturn(true);
mScreenWidth = getUiDevice().getDisplayWidth();
mFakeMeasureSpec = View
.MeasureSpec.makeMeasureSpec(mScreenWidth, View.MeasureSpec.EXACTLY);
}
@Test
@@ -122,10 +125,10 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
mUserSwitcherController);
int halfWidthMeasureSpec =
View.MeasureSpec.makeMeasureSpec(SCREEN_WIDTH / 2, View.MeasureSpec.EXACTLY);
mKeyguardSecurityContainer.onMeasure(FAKE_MEASURE_SPEC, FAKE_MEASURE_SPEC);
View.MeasureSpec.makeMeasureSpec(mScreenWidth / 2, View.MeasureSpec.EXACTLY);
mKeyguardSecurityContainer.onMeasure(mFakeMeasureSpec, mFakeMeasureSpec);
verify(mSecurityViewFlipper).measure(halfWidthMeasureSpec, FAKE_MEASURE_SPEC);
verify(mSecurityViewFlipper).measure(halfWidthMeasureSpec, mFakeMeasureSpec);
}
@Test
@@ -133,14 +136,16 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
mKeyguardSecurityContainer.initMode(MODE_DEFAULT, mGlobalSettings, mFalsingManager,
mUserSwitcherController);
mKeyguardSecurityContainer.measure(FAKE_MEASURE_SPEC, FAKE_MEASURE_SPEC);
verify(mSecurityViewFlipper).measure(FAKE_MEASURE_SPEC, FAKE_MEASURE_SPEC);
mKeyguardSecurityContainer.measure(mFakeMeasureSpec, mFakeMeasureSpec);
verify(mSecurityViewFlipper).measure(mFakeMeasureSpec, mFakeMeasureSpec);
}
@Test
public void onMeasure_respectsViewInsets() {
int imeInsetAmount = 100;
int systemBarInsetAmount = 10;
int paddingBottom = getContext().getResources()
.getDimensionPixelSize(R.dimen.keyguard_security_view_bottom_margin);
int imeInsetAmount = paddingBottom + 1;
int systemBarInsetAmount = 0;
mKeyguardSecurityContainer.initMode(MODE_DEFAULT, mGlobalSettings, mFalsingManager,
mUserSwitcherController);
@@ -155,17 +160,19 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
// It's reduced by the max of the systembar and IME, so just subtract IME inset.
int expectedHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(
SCREEN_WIDTH - imeInsetAmount, View.MeasureSpec.EXACTLY);
mScreenWidth - imeInsetAmount, View.MeasureSpec.EXACTLY);
mKeyguardSecurityContainer.onApplyWindowInsets(insets);
mKeyguardSecurityContainer.measure(FAKE_MEASURE_SPEC, FAKE_MEASURE_SPEC);
verify(mSecurityViewFlipper).measure(FAKE_MEASURE_SPEC, expectedHeightMeasureSpec);
mKeyguardSecurityContainer.measure(mFakeMeasureSpec, mFakeMeasureSpec);
verify(mSecurityViewFlipper).measure(mFakeMeasureSpec, expectedHeightMeasureSpec);
}
@Test
public void onMeasure_respectsViewInsets_largerSystembar() {
int imeInsetAmount = 0;
int systemBarInsetAmount = 10;
int paddingBottom = getContext().getResources()
.getDimensionPixelSize(R.dimen.keyguard_security_view_bottom_margin);
int systemBarInsetAmount = paddingBottom + 1;
mKeyguardSecurityContainer.initMode(MODE_DEFAULT, mGlobalSettings, mFalsingManager,
mUserSwitcherController);
@@ -179,11 +186,11 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
.build();
int expectedHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(
SCREEN_WIDTH - systemBarInsetAmount, View.MeasureSpec.EXACTLY);
mScreenWidth - systemBarInsetAmount, View.MeasureSpec.EXACTLY);
mKeyguardSecurityContainer.onApplyWindowInsets(insets);
mKeyguardSecurityContainer.measure(FAKE_MEASURE_SPEC, FAKE_MEASURE_SPEC);
verify(mSecurityViewFlipper).measure(FAKE_MEASURE_SPEC, expectedHeightMeasureSpec);
mKeyguardSecurityContainer.measure(mFakeMeasureSpec, mFakeMeasureSpec);
verify(mSecurityViewFlipper).measure(mFakeMeasureSpec, expectedHeightMeasureSpec);
}
private void setupForUpdateKeyguardPosition(boolean oneHandedMode) {
@@ -191,8 +198,8 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
mKeyguardSecurityContainer.initMode(mode, mGlobalSettings, mFalsingManager,
mUserSwitcherController);
mKeyguardSecurityContainer.measure(FAKE_MEASURE_SPEC, FAKE_MEASURE_SPEC);
mKeyguardSecurityContainer.layout(0, 0, SCREEN_WIDTH, SCREEN_WIDTH);
mKeyguardSecurityContainer.measure(mFakeMeasureSpec, mFakeMeasureSpec);
mKeyguardSecurityContainer.layout(0, 0, mScreenWidth, mScreenWidth);
// Clear any interactions with the mock so we know the interactions definitely come from the
// below testing.