diff options
author | John Spurlock <jspurlock@google.com> | 2013-10-23 10:17:13 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-10-23 10:17:13 -0700 |
commit | 7539a5afa73e9d7bc77803295368542ef535f28c (patch) | |
tree | d36c802e4816baf3c96828812ebb0e480aa59e1f /policy/src | |
parent | d34e1155226e8885d51c05209c7c87503528a2db (diff) | |
parent | 2f566900a4fdeab75c972259a97dfb40b96df421 (diff) | |
download | frameworks_base-7539a5afa73e9d7bc77803295368542ef535f28c.zip frameworks_base-7539a5afa73e9d7bc77803295368542ef535f28c.tar.gz frameworks_base-7539a5afa73e9d7bc77803295368542ef535f28c.tar.bz2 |
am 2f566900: Merge "Ensure the simple CAB appears below the status bar." into klp-dev
* commit '2f566900a4fdeab75c972259a97dfb40b96df421':
Ensure the simple CAB appears below the status bar.
Add 'no system permission' test app.
Diffstat (limited to 'policy/src')
-rw-r--r-- | policy/src/com/android/internal/policy/impl/PhoneWindow.java | 68 |
1 files changed, 62 insertions, 6 deletions
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java index 1745bc7..44fc1f8 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java @@ -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) { @@ -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 @@ -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() { @@ -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); } @@ -2719,6 +2774,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } } mActionMode = null; + requestFitSystemWindows(); } } } |