Loading policy/src/com/android/internal/policy/impl/PhoneWindow.java +62 −6 Original line number Diff line number Diff line Loading @@ -1922,7 +1922,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { private PopupWindow mActionModePopup; private Runnable mShowActionModePopup; // View added at runtime to IME windows to cover the navigation bar // View added at runtime to draw under the status bar area private View mStatusGuard; // View added at runtime to draw under the navigation bar area private View mNavigationGuard; public DecorView(Context context, int featureId) { Loading Loading @@ -2484,7 +2486,64 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { @Override protected boolean fitSystemWindows(Rect insets) { mFrameOffsets.set(insets); updateStatusGuard(insets); updateNavigationGuard(insets); if (getForeground() != null) { drawableChanged(); } return super.fitSystemWindows(insets); } private void updateStatusGuard(Rect insets) { boolean showStatusGuard = false; // Show the status guard when the non-overlay contextual action bar is showing if (mActionModeView != null) { if (mActionModeView.getLayoutParams() instanceof MarginLayoutParams) { MarginLayoutParams mlp = (MarginLayoutParams) mActionModeView.getLayoutParams(); boolean mlpChanged = false; final boolean nonOverlayShown = (getLocalFeatures() & (1 << FEATURE_ACTION_MODE_OVERLAY)) == 0 && mActionModeView.isShown(); if (nonOverlayShown) { // set top margin to top insets, show status guard if (mlp.topMargin != insets.top) { mlpChanged = true; mlp.topMargin = insets.top; if (mStatusGuard == null) { mStatusGuard = new View(mContext); mStatusGuard.setBackgroundColor(mContext.getResources() .getColor(R.color.input_method_navigation_guard)); addView(mStatusGuard, new LayoutParams( LayoutParams.MATCH_PARENT, mlp.topMargin, Gravity.START | Gravity.TOP)); } else { LayoutParams lp = (LayoutParams) mStatusGuard.getLayoutParams(); if (lp.height != mlp.topMargin) { lp.height = mlp.topMargin; mStatusGuard.setLayoutParams(lp); } } } insets.top = 0; // consume top insets showStatusGuard = true; } else { // reset top margin if (mlp.topMargin != 0) { mlpChanged = true; mlp.topMargin = 0; } } if (mlpChanged) { mActionModeView.setLayoutParams(mlp); } } } if (mStatusGuard != null) { mStatusGuard.setVisibility(showStatusGuard ? View.VISIBLE : View.GONE); } } private void updateNavigationGuard(Rect insets) { // IMEs lay out below the nav bar, but the content view must not (for back compat) if (getAttributes().type == WindowManager.LayoutParams.TYPE_INPUT_METHOD) { // prevent the content view from including the nav bar height Loading @@ -2510,11 +2569,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { mNavigationGuard.setLayoutParams(lp); } } if (getForeground() != null) { drawableChanged(); } return super.fitSystemWindows(insets); } private void drawableChanged() { Loading Loading @@ -2693,6 +2747,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } public boolean onPrepareActionMode(ActionMode mode, Menu menu) { requestFitSystemWindows(); return mWrapped.onPrepareActionMode(mode, menu); } Loading @@ -2719,6 +2774,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } } mActionMode = null; requestFitSystemWindows(); } } } Loading Loading
policy/src/com/android/internal/policy/impl/PhoneWindow.java +62 −6 Original line number Diff line number Diff line Loading @@ -1922,7 +1922,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { private PopupWindow mActionModePopup; private Runnable mShowActionModePopup; // View added at runtime to IME windows to cover the navigation bar // View added at runtime to draw under the status bar area private View mStatusGuard; // View added at runtime to draw under the navigation bar area private View mNavigationGuard; public DecorView(Context context, int featureId) { Loading Loading @@ -2484,7 +2486,64 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { @Override protected boolean fitSystemWindows(Rect insets) { mFrameOffsets.set(insets); updateStatusGuard(insets); updateNavigationGuard(insets); if (getForeground() != null) { drawableChanged(); } return super.fitSystemWindows(insets); } private void updateStatusGuard(Rect insets) { boolean showStatusGuard = false; // Show the status guard when the non-overlay contextual action bar is showing if (mActionModeView != null) { if (mActionModeView.getLayoutParams() instanceof MarginLayoutParams) { MarginLayoutParams mlp = (MarginLayoutParams) mActionModeView.getLayoutParams(); boolean mlpChanged = false; final boolean nonOverlayShown = (getLocalFeatures() & (1 << FEATURE_ACTION_MODE_OVERLAY)) == 0 && mActionModeView.isShown(); if (nonOverlayShown) { // set top margin to top insets, show status guard if (mlp.topMargin != insets.top) { mlpChanged = true; mlp.topMargin = insets.top; if (mStatusGuard == null) { mStatusGuard = new View(mContext); mStatusGuard.setBackgroundColor(mContext.getResources() .getColor(R.color.input_method_navigation_guard)); addView(mStatusGuard, new LayoutParams( LayoutParams.MATCH_PARENT, mlp.topMargin, Gravity.START | Gravity.TOP)); } else { LayoutParams lp = (LayoutParams) mStatusGuard.getLayoutParams(); if (lp.height != mlp.topMargin) { lp.height = mlp.topMargin; mStatusGuard.setLayoutParams(lp); } } } insets.top = 0; // consume top insets showStatusGuard = true; } else { // reset top margin if (mlp.topMargin != 0) { mlpChanged = true; mlp.topMargin = 0; } } if (mlpChanged) { mActionModeView.setLayoutParams(mlp); } } } if (mStatusGuard != null) { mStatusGuard.setVisibility(showStatusGuard ? View.VISIBLE : View.GONE); } } private void updateNavigationGuard(Rect insets) { // IMEs lay out below the nav bar, but the content view must not (for back compat) if (getAttributes().type == WindowManager.LayoutParams.TYPE_INPUT_METHOD) { // prevent the content view from including the nav bar height Loading @@ -2510,11 +2569,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { mNavigationGuard.setLayoutParams(lp); } } if (getForeground() != null) { drawableChanged(); } return super.fitSystemWindows(insets); } private void drawableChanged() { Loading Loading @@ -2693,6 +2747,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } public boolean onPrepareActionMode(ActionMode mode, Menu menu) { requestFitSystemWindows(); return mWrapped.onPrepareActionMode(mode, menu); } Loading @@ -2719,6 +2774,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } } mActionMode = null; requestFitSystemWindows(); } } } Loading