[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
diff --git a/packages/SystemUI/res-keyguard/values/dimens.xml b/packages/SystemUI/res-keyguard/values/dimens.xml
index 9a6f5ed..77f1803 100644
--- a/packages/SystemUI/res-keyguard/values/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values/dimens.xml
@@ -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>
 
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
index 3103219..5cf1c0b 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -555,7 +555,9 @@
         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);
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
index 14c903c..4da2dc3 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
@@ -70,9 +70,8 @@
 @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 @@
         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 @@
                 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 @@
         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 @@
 
         // 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 @@
                 .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 @@
         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.