Process insets correctly

Bottom window insets were being processed but keyboard was being
ignored. Paddings should also only be applied on the correct
lifecycle event.

Fixes: 132615062
Test: swipe up to unlock with: pin/pattern/password
Test: swipe up to unlock with: 2 button navbar, gestural navbar
Change-Id: Ib573e20d9955e644f60333ad3d8e0f2d7e73fe54
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_host_view.xml b/packages/SystemUI/res-keyguard/layout/keyguard_host_view.xml
index 29376ce0..796123d 100644
--- a/packages/SystemUI/res-keyguard/layout/keyguard_host_view.xml
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_host_view.xml
@@ -38,6 +38,7 @@
         android:clipChildren="false"
         android:clipToPadding="false"
         android:padding="0dp"
+        android:fitsSystemWindows="true"
         android:layout_gravity="center">
         <com.android.keyguard.KeyguardSecurityViewFlipper
             android:id="@+id/view_flipper"
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
index d051def..fd03491 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -20,6 +20,7 @@
 import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.res.ColorStateList;
+import android.graphics.Rect;
 import android.metrics.LogMaker;
 import android.os.UserHandle;
 import android.util.AttributeSet;
@@ -139,7 +140,6 @@
             getSecurityView(mCurrentSecuritySelection).onResume(reason);
         }
         updateBiometricRetry();
-        updatePaddings();
     }
 
     @Override
@@ -319,17 +319,11 @@
     }
 
     @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        updatePaddings();
-    }
-
-    private void updatePaddings() {
-        int bottomPadding = getRootWindowInsets().getSystemWindowInsets().bottom;
-        if (getPaddingBottom() == bottomPadding) {
-            return;
-        }
-        setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight(), bottomPadding);
+    protected boolean fitSystemWindows(Rect insets) {
+        // Consume bottom insets because we're setting the padding locally (for IME and navbar.)
+        setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight(), insets.bottom);
+        insets.bottom = 0;
+        return false;
     }
 
     private void showDialog(String title, String message) {