OSDN Git Service

Fix Keyboard overlap with navigation bar
authorJorim Jaggi <jjaggi@google.com>
Tue, 9 Feb 2016 03:17:07 +0000 (19:17 -0800)
committerJorim Jaggi <jjaggi@google.com>
Wed, 10 Feb 2016 00:42:18 +0000 (00:42 +0000)
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

index b2ae835..88af920 100644 (file)
@@ -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();