summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2011-06-08 22:38:03 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-06-08 22:38:03 -0700
commit8297f669356ee997c5faa745815e8b9a7009fba7 (patch)
tree45a5d832585de6a7fdf3d6c4a2d737097ea6aa4d
parent9dfd7d0a47549bdf0b429b760a9ede9748f427de (diff)
parent3aabdeaceff8405406d90c329a6691552559556d (diff)
downloadframeworks_base-8297f669356ee997c5faa745815e8b9a7009fba7.zip
frameworks_base-8297f669356ee997c5faa745815e8b9a7009fba7.tar.gz
frameworks_base-8297f669356ee997c5faa745815e8b9a7009fba7.tar.bz2
am 3aabdeac: am 5ba2e872: Merge "Fix for not reporting correct "sw" in compat mode." into honeycomb-mr2
* commit '3aabdeaceff8405406d90c329a6691552559556d': Fix for not reporting correct "sw" in compat mode.
-rw-r--r--core/java/android/view/WindowManagerImpl.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/CompatModeButton.java5
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java36
3 files changed, 46 insertions, 11 deletions
diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java
index a853c15..02ab1dc 100644
--- a/core/java/android/view/WindowManagerImpl.java
+++ b/core/java/android/view/WindowManagerImpl.java
@@ -342,9 +342,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);
@@ -368,9 +370,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 7b09cc6..c40c7fc 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();
@@ -5549,6 +5550,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;
@@ -5613,8 +5644,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
@@ -8091,7 +8121,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);
}