diff options
author | Dianne Hackborn <hackbod@google.com> | 2011-05-16 13:01:38 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-05-16 13:01:38 -0700 |
commit | f97ed771979162c4a2a75959c57fb793438a3a8b (patch) | |
tree | 7cfd542b6ab2730e26f3e4fee51548cf441af311 /services | |
parent | b107f4dec334b4c54584d4af21a7ceefc14947f2 (diff) | |
parent | d90a2c4d4463085155444efb07eba2d6579b444a (diff) | |
download | frameworks_base-f97ed771979162c4a2a75959c57fb793438a3a8b.zip frameworks_base-f97ed771979162c4a2a75959c57fb793438a3a8b.tar.gz frameworks_base-f97ed771979162c4a2a75959c57fb793438a3a8b.tar.bz2 |
am d90a2c4d: am 1e662c32: Merge "DO NOT MERGE. Integrate from master: Rework display size access." into honeycomb-mr2
* commit 'd90a2c4d4463085155444efb07eba2d6579b444a':
DO NOT MERGE. Integrate from master: Rework display size access.
Diffstat (limited to 'services')
4 files changed, 57 insertions, 23 deletions
diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java index b1a6a9a..c129b97 100644 --- a/services/java/com/android/server/WallpaperManagerService.java +++ b/services/java/com/android/server/WallpaperManagerService.java @@ -49,6 +49,7 @@ import android.service.wallpaper.IWallpaperService; import android.service.wallpaper.WallpaperService; import android.util.Slog; import android.util.Xml; +import android.view.Display; import android.view.IWindowManager; import android.view.WindowManager; @@ -726,6 +727,17 @@ class WallpaperManagerService extends IWallpaperManager.Stub { mHeight = -1; mName = ""; } + + // We always want to have some reasonable width hint. + WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE); + Display d = wm.getDefaultDisplay(); + int baseSize = d.getMaximumSizeDimension(); + if (mWidth < baseSize) { + mWidth = baseSize; + } + if (mHeight < baseSize) { + mHeight = baseSize; + } } // Called by SystemBackupAgent after files are restored to disk. diff --git a/services/java/com/android/server/wm/InputMonitor.java b/services/java/com/android/server/wm/InputMonitor.java index 57f0799..a3e8be0 100644 --- a/services/java/com/android/server/wm/InputMonitor.java +++ b/services/java/com/android/server/wm/InputMonitor.java @@ -132,8 +132,8 @@ final class InputMonitor { // The drag window covers the entire display inputWindow.frameLeft = 0; inputWindow.frameTop = 0; - inputWindow.frameRight = mService.mDisplay.getWidth(); - inputWindow.frameBottom = mService.mDisplay.getHeight(); + inputWindow.frameRight = mService.mDisplay.getRealWidth(); + inputWindow.frameBottom = mService.mDisplay.getRealHeight(); // The drag window cannot receive new touches. inputWindow.touchableRegion.setEmpty(); diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 5fb0d81..980696d 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -63,6 +63,7 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.PixelFormat; +import android.graphics.Point; import android.graphics.Rect; import android.graphics.Region; import android.os.BatteryStats; @@ -391,6 +392,8 @@ public class WindowManagerService extends IWindowManager.Stub boolean mSystemBooted = false; int mInitialDisplayWidth = 0; int mInitialDisplayHeight = 0; + int mCurDisplayWidth = 0; + int mCurDisplayHeight = 0; int mRotation = 0; int mRequestedRotation = 0; int mForcedAppOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; @@ -1419,8 +1422,8 @@ public class WindowManagerService extends IWindowManager.Stub int adjustWallpaperWindowsLocked() { int changed = 0; - final int dw = mDisplay.getWidth(); - final int dh = mDisplay.getHeight(); + final int dw = mCurDisplayWidth; + final int dh = mCurDisplayHeight; // First find top-most window that has asked to be on top of the // wallpaper; all wallpapers go behind it. @@ -1838,8 +1841,8 @@ public class WindowManagerService extends IWindowManager.Stub } boolean updateWallpaperOffsetLocked(WindowState changingTarget, boolean sync) { - final int dw = mDisplay.getWidth(); - final int dh = mDisplay.getHeight(); + final int dw = mCurDisplayWidth; + final int dh = mCurDisplayHeight; boolean changed = false; @@ -1879,8 +1882,8 @@ public class WindowManagerService extends IWindowManager.Stub void updateWallpaperVisibilityLocked() { final boolean visible = isWallpaperVisible(mWallpaperTarget); - final int dw = mDisplay.getWidth(); - final int dh = mDisplay.getHeight(); + final int dw = mCurDisplayWidth; + final int dh = mCurDisplayHeight; int curTokenIndex = mWallpaperTokens.size(); while (curTokenIndex > 0) { @@ -2682,8 +2685,7 @@ public class WindowManagerService extends IWindowManager.Stub configChanged = updateOrientationFromAppTokensLocked(false); performLayoutAndPlaceSurfacesLocked(); if (displayed && win.mIsWallpaper) { - updateWallpaperOffsetLocked(win, mDisplay.getWidth(), - mDisplay.getHeight(), false); + updateWallpaperOffsetLocked(win, mCurDisplayWidth, mCurDisplayHeight, false); } if (win.mAppToken != null) { win.mAppToken.updateReportedVisibilityLocked(); @@ -4755,8 +4757,8 @@ public class WindowManagerService extends IWindowManager.Stub synchronized(mWindowMap) { long ident = Binder.clearCallingIdentity(); - dw = mPolicy.getNonDecorDisplayWidth(mDisplay.getWidth()); - dh = mPolicy.getNonDecorDisplayHeight(mDisplay.getHeight()); + dw = mCurDisplayWidth; + dh = mCurDisplayHeight; int aboveAppLayer = mPolicy.windowTypeToLayerLw( WindowManager.LayoutParams.TYPE_APPLICATION) * TYPE_LAYER_MULTIPLIER @@ -5849,9 +5851,9 @@ public class WindowManagerService extends IWindowManager.Stub } WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE); mDisplay = wm.getDefaultDisplay(); - mInitialDisplayWidth = mDisplay.getWidth(); - mInitialDisplayHeight = mDisplay.getHeight(); - mInputManager.setDisplaySize(0, mDisplay.getRealWidth(), mDisplay.getRealHeight()); + mInitialDisplayWidth = mCurDisplayWidth = mDisplay.getRealWidth(); + mInitialDisplayHeight = mCurDisplayHeight = mDisplay.getRealHeight(); + mInputManager.setDisplaySize(0, mDisplay.getRawWidth(), mDisplay.getRawHeight()); } try { @@ -6345,6 +6347,21 @@ public class WindowManagerService extends IWindowManager.Stub return false; } + public void getDisplaySize(Point size) { + synchronized(mWindowMap) { + size.x = mCurDisplayWidth; + size.y = mCurDisplayHeight; + } + } + + public int getMaximumSizeDimension() { + synchronized(mWindowMap) { + // Do this based on the raw screen size, until we are smarter. + return mInitialDisplayWidth > mInitialDisplayHeight + ? mInitialDisplayWidth : mInitialDisplayHeight; + } + } + // ------------------------------------------------------------- // Internals // ------------------------------------------------------------- @@ -6587,8 +6604,8 @@ public class WindowManagerService extends IWindowManager.Stub mLayoutNeeded = false; - final int dw = mDisplay.getWidth(); - final int dh = mDisplay.getHeight(); + final int dw = mCurDisplayWidth; + final int dh = mCurDisplayHeight; final int innerDw = mPolicy.getNonDecorDisplayWidth(dw); final int innerDh = mPolicy.getNonDecorDisplayHeight(dh); @@ -6712,8 +6729,8 @@ public class WindowManagerService extends IWindowManager.Stub } final long currentTime = SystemClock.uptimeMillis(); - final int dw = mDisplay.getWidth(); - final int dh = mDisplay.getHeight(); + final int dw = mCurDisplayWidth = mDisplay.getRealWidth(); + final int dh = mCurDisplayHeight = mDisplay.getRealHeight(); final int innerDw = mPolicy.getNonDecorDisplayWidth(dw); final int innerDh = mPolicy.getNonDecorDisplayHeight(dh); @@ -8745,8 +8762,13 @@ public class WindowManagerService extends IWindowManager.Stub pw.print(" mToBottomApps="); pw.println(mToBottomApps); } if (mDisplay != null) { - pw.print(" DisplayWidth="); pw.print(mDisplay.getWidth()); - pw.print(" DisplayHeight="); pw.println(mDisplay.getHeight()); + pw.print(" Display: init="); pw.print(mInitialDisplayWidth); pw.print("x"); + pw.print(mInitialDisplayHeight); pw.print(" cur="); + pw.print(mCurDisplayWidth); pw.print("x"); pw.print(mCurDisplayHeight); + pw.print(" real="); pw.print(mDisplay.getRealWidth()); + pw.print("x"); pw.print(mDisplay.getRealHeight()); + pw.print(" raw="); pw.print(mDisplay.getRawWidth()); + pw.print("x"); pw.println(mDisplay.getRawHeight()); } else { pw.println(" NO DISPLAY"); } diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java index 72049ec..2014e9d 100644 --- a/services/java/com/android/server/wm/WindowState.java +++ b/services/java/com/android/server/wm/WindowState.java @@ -483,8 +483,8 @@ final class WindowState implements WindowManagerPolicy.WindowState { } if (mIsWallpaper && (fw != frame.width() || fh != frame.height())) { - mService.updateWallpaperOffsetLocked(this, mService.mDisplay.getWidth(), - mService.mDisplay.getHeight(), false); + mService.updateWallpaperOffsetLocked(this, mService.mDisplay.getRealWidth(), + mService.mDisplay.getRealHeight(), false); } if (WindowManagerService.localLOGV) { |