diff options
author | Dianne Hackborn <hackbod@google.com> | 2011-06-09 18:42:55 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-06-09 18:42:55 -0700 |
commit | 7bbf6f7d11877496502c20e8998a6984ab05cd39 (patch) | |
tree | 05bb937ccdb4304842f7953a81c064331e522ace | |
parent | e6b03d0979e0bd6dfeda7b45850182c3092bb3e7 (diff) | |
parent | 8297f669356ee997c5faa745815e8b9a7009fba7 (diff) | |
download | frameworks_base-7bbf6f7d11877496502c20e8998a6984ab05cd39.zip frameworks_base-7bbf6f7d11877496502c20e8998a6984ab05cd39.tar.gz frameworks_base-7bbf6f7d11877496502c20e8998a6984ab05cd39.tar.bz2 |
am 8297f669: am 3aabdeac: am 5ba2e872: Merge "Fix for not reporting correct "sw" in compat mode." into honeycomb-mr2
* commit '8297f669356ee997c5faa745815e8b9a7009fba7':
Fix for not reporting correct "sw" in compat mode.
3 files changed, 46 insertions, 11 deletions
diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index 6b3fc5f..54e7c04 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -337,9 +337,11 @@ public class WindowManagerImpl implements WindowManager { return view; } - InputMethodManager imm = InputMethodManager.getInstance(view.getContext()); - if (imm != null) { - imm.windowDismissed(mViews[index].getWindowToken()); + if (view != null) { + InputMethodManager imm = InputMethodManager.getInstance(view.getContext()); + if (imm != null) { + imm.windowDismissed(mViews[index].getWindowToken()); + } } root.die(false); finishRemoveViewLocked(view, index); @@ -363,9 +365,11 @@ public class WindowManagerImpl implements WindowManager { removeItem(tmpParams, mParams, index); mParams = tmpParams; - view.assignParent(null); - // func doesn't allow null... does it matter if we clear them? - //view.setLayoutParams(null); + if (view != null) { + view.assignParent(null); + // func doesn't allow null... does it matter if we clear them? + //view.setLayoutParams(null); + } } public void closeAll(IBinder token, String who, String what) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CompatModeButton.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CompatModeButton.java index 9b44f78..c3052e8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CompatModeButton.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CompatModeButton.java @@ -54,8 +54,9 @@ public class CompatModeButton extends ImageView implements View.OnClickListener } public void refresh() { - setVisibility( - (mAM.getFrontActivityScreenCompatMode() == ActivityManager.COMPAT_MODE_NEVER) + int mode = mAM.getFrontActivityScreenCompatMode(); + setVisibility((mode == ActivityManager.COMPAT_MODE_NEVER + || mode == ActivityManager.COMPAT_MODE_ALWAYS) ? View.GONE : View.VISIBLE ); diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index fc640f3..86c899e 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -466,6 +466,7 @@ public class WindowManagerService extends IWindowManager.Stub Display mDisplay; final DisplayMetrics mDisplayMetrics = new DisplayMetrics(); + final DisplayMetrics mTmpDisplayMetrics = new DisplayMetrics(); final DisplayMetrics mCompatDisplayMetrics = new DisplayMetrics(); H mH = new H(); @@ -5553,6 +5554,36 @@ public class WindowManagerService extends IWindowManager.Stub return sw; } + private int reduceCompatConfigWidthSize(int curSize, int rotation, DisplayMetrics dm, + int dw, int dh) { + dm.unscaledWidthPixels = mPolicy.getNonDecorDisplayWidth(rotation, dw); + dm.unscaledHeightPixels = mPolicy.getNonDecorDisplayHeight(rotation, dh); + float scale = CompatibilityInfo.computeCompatibleScaling(dm, null); + int size = (int)(((dm.unscaledWidthPixels / scale) / dm.density) + .5f); + if (curSize == 0 || size < curSize) { + curSize = size; + } + return curSize; + } + + private int computeCompatSmallestWidth(boolean rotated, DisplayMetrics dm, int dw, int dh) { + mTmpDisplayMetrics.setTo(dm); + dm = mTmpDisplayMetrics; + int unrotDw, unrotDh; + if (rotated) { + unrotDw = dh; + unrotDh = dw; + } else { + unrotDw = dw; + unrotDh = dh; + } + int sw = reduceCompatConfigWidthSize(0, Surface.ROTATION_0, dm, unrotDw, unrotDh); + sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_90, dm, unrotDh, unrotDw); + sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_180, dm, unrotDw, unrotDh); + sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_270, dm, unrotDh, unrotDw); + return sw; + } + boolean computeNewConfigurationLocked(Configuration config) { if (mDisplay == null) { return false; @@ -5617,8 +5648,7 @@ public class WindowManagerService extends IWindowManager.Stub config.compatScreenWidthDp = (int)(config.screenWidthDp / mCompatibleScreenScale); config.compatScreenHeightDp = (int)(config.screenHeightDp / mCompatibleScreenScale); - config.compatSmallestScreenWidthDp = (int)(config.smallestScreenWidthDp - / mCompatibleScreenScale); + config.compatSmallestScreenWidthDp = computeCompatSmallestWidth(rotated, dm, dw, dh); // We need to determine the smallest width that will occur under normal // operation. To this, start with the base screen size and compute the @@ -8095,7 +8125,7 @@ public class WindowManagerService extends IWindowManager.Stub if (mDimAnimator == null) { mDimAnimator = new DimAnimator(mFxSession); } - mDimAnimator.show(dw, dh); + mDimAnimator.show(innerDw, innerDh); mDimAnimator.updateParameters(mContext.getResources(), w, currentTime); } |