summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jim Miller <jaggies@google.com> 2011-03-08 21:38:39 -0800
committer Jim Miller <jaggies@google.com> 2011-03-08 21:47:13 -0800
commite70d506ab329f1f96b0ee132317aa36edea1b94e (patch)
tree4fe69054ee991723dcd309d906614e77d7cbb690
parent8496ddc536eb917c813b7928f174c828d2275ada (diff)
Fix 4027057: Improve resolution of RecentApps thumbnail images.
This fix ensures captured thumbnails in portrait mode have the same resolution as those in landscape by fixing the horizontal resolution and vertical resolution of the target image. The returned image is now always the same size and matches the landscape screen exactly. In portrait mode, it grabs the upper portion of the screen based on the vertical dimension of the target image. Change-Id: I203c39843f2f21ca28f6ef0dffec308ce5cb39fb
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java4
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java28
2 files changed, 15 insertions, 17 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
index 737a52beab1f..c5a7df205382 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
@@ -513,9 +513,7 @@ public class RecentAppsPanel extends RelativeLayout implements StatusBarPanel, O
paint.setFilterBitmap(true);
paint.setAlpha(255);
final int srcWidth = thumbnail.getWidth();
- final int height = thumbnail.getHeight();
- final int srcHeight = srcWidth > height ? height
- : (height - height * srcWidth / height);
+ final int srcHeight = thumbnail.getHeight();
canvas.drawBitmap(thumbnail,
new Rect(0, 0, srcWidth-1, srcHeight-1),
new RectF(GLOW_PADDING,
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index eed41a0c0e9a..ee5c1f0349f4 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -4727,7 +4727,15 @@ public class WindowManagerService extends IWindowManager.Stub
SystemProperties.set(StrictMode.VISUAL_PROPERTY, value);
}
- public Bitmap screenshotApplications(IBinder appToken, int maxWidth, int maxHeight) {
+ /**
+ * Takes a snapshot of the screen. In landscape mode this grabs the whole screen.
+ * In portrait mode, it grabs the upper region of the screen based on the vertical dimension
+ * of the target image.
+ *
+ * @param width the width of the target bitmap
+ * @param height the height of the target bitmap
+ */
+ public Bitmap screenshotApplications(IBinder appToken, int width, int height) {
if (!checkCallingPermission(android.Manifest.permission.READ_FRAME_BUFFER,
"screenshotApplications()")) {
throw new SecurityException("Requires READ_FRAME_BUFFER permission");
@@ -4739,7 +4747,7 @@ public class WindowManagerService extends IWindowManager.Stub
final Rect frame = new Rect();
float scale;
- int sw, sh, dw, dh;
+ int dw, dh;
int rot;
synchronized(mWindowMap) {
@@ -4803,7 +4811,7 @@ public class WindowManagerService extends IWindowManager.Stub
// Constrain frame to the screen size.
frame.intersect(0, 0, dw, dh);
-
+
if (frame.isEmpty() || maxLayer == 0) {
return null;
}
@@ -4814,15 +4822,7 @@ public class WindowManagerService extends IWindowManager.Stub
int fh = frame.height();
// First try reducing to fit in x dimension.
- scale = maxWidth/(float)fw;
- sw = maxWidth;
- sh = (int)(fh*scale);
- if (sh > maxHeight) {
- // y dimension became too long; constrain by that.
- scale = maxHeight/(float)fh;
- sw = (int)(fw*scale);
- sh = maxHeight;
- }
+ scale = width/(float)fw;
// The screen shot will contain the entire screen.
dw = (int)(dw*scale);
@@ -4841,8 +4841,8 @@ public class WindowManagerService extends IWindowManager.Stub
+ ") to layer " + maxLayer);
return null;
}
-
- Bitmap bm = Bitmap.createBitmap(sw, sh, rawss.getConfig());
+
+ Bitmap bm = Bitmap.createBitmap(width, height, rawss.getConfig());
Matrix matrix = new Matrix();
ScreenRotationAnimation.createRotationMatrix(rot, dw, dh, matrix);
matrix.postTranslate(-(int)(frame.left*scale), -(int)(frame.top*scale));