From 65bff3e4e9ac48f79a9da111f6e1d263af6d3a2e Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Mon, 8 Feb 2016 19:17:07 -0800 Subject: [PATCH] Fix Keyboard overlap with navigation bar FLAG_FULLSCREEN is really the wrong flag for determining whether to subtract the window insets in the decore view and layout it with a reduced size - FLAG_LAYOUT_IN_SCREEN suits these needs much better. Bug: 26014496 Bug: 26984057 Change-Id: I5c7a0fb7468d3981b91b23aa4c8b1e4841202131 --- core/java/com/android/internal/policy/DecorView.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index b2ae835be358e..88af920df2d4b 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -86,6 +86,7 @@ import static android.view.Window.DECOR_CAPTION_SHADE_DARK; import static android.view.Window.DECOR_CAPTION_SHADE_LIGHT; import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN; +import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION; import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; @@ -615,7 +616,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind if (h > 0) { heightMeasureSpec = MeasureSpec.makeMeasureSpec( Math.min(h, heightSize), EXACTLY); - } else if ((mWindow.getAttributes().flags & FLAG_FULLSCREEN) == 0) { + } else if ((mWindow.getAttributes().flags & FLAG_LAYOUT_IN_SCREEN) == 0) { heightMeasureSpec = MeasureSpec.makeMeasureSpec( heightSize - mFloatingInsets.top - mFloatingInsets.bottom, AT_MOST); mApplyFloatingVerticalInsets = true; @@ -890,10 +891,11 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind public WindowInsets onApplyWindowInsets(WindowInsets insets) { final WindowManager.LayoutParams attrs = mWindow.getAttributes(); mFloatingInsets.setEmpty(); - if ((attrs.flags & FLAG_FULLSCREEN) == 0) { + if ((attrs.flags & FLAG_LAYOUT_IN_SCREEN) == 0) { // For dialog windows we want to make sure they don't go over the status bar or nav bar. // We consume the system insets and we will reuse them later during the measure phase. - // We allow the app to ignore this and handle insets itself by using FLAG_FULLSCREEN. + // We allow the app to ignore this and handle insets itself by using + // FLAG_LAYOUT_IN_SCREEN. if (attrs.height == WindowManager.LayoutParams.WRAP_CONTENT) { mFloatingInsets.top = insets.getSystemWindowInsetTop(); mFloatingInsets.bottom = insets.getSystemWindowInsetBottom();