diff options
author | John Spurlock <jspurlock@google.com> | 2013-10-23 10:24:23 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-10-23 10:24:23 -0700 |
commit | e27564fbae288221ba719bb8bc6e042b87dc4209 (patch) | |
tree | e35f0c52156c265dc4e3f9c6e894111e4a95ab29 /policy | |
parent | 0edc5b50ab8cd5bb7eeb5afb3d8068cac3ef0abb (diff) | |
parent | 759bc4f421e01460cff92522bf70d52c53b79e85 (diff) | |
download | frameworks_base-e27564fbae288221ba719bb8bc6e042b87dc4209.zip frameworks_base-e27564fbae288221ba719bb8bc6e042b87dc4209.tar.gz frameworks_base-e27564fbae288221ba719bb8bc6e042b87dc4209.tar.bz2 |
am 759bc4f4: am 7539a5af: am 2f566900: Merge "Ensure the simple CAB appears below the status bar." into klp-dev
* commit '759bc4f421e01460cff92522bf70d52c53b79e85':
Ensure the simple CAB appears below the status bar.
Add 'no system permission' test app.
Diffstat (limited to 'policy')
-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(); } } } |